FortiGate automation webhook return curl perform error for Github API

FortiOS 從 6.0 開始提供一個名叫 Automation stitches 的功能,可以讓我們在 FortiGate 平台上做一些自動化的機制,而裡面包含了一個本篇要說明的 Webhook 功能。

我打算利用 Webhook 來跟 Github issue 進行 REST API 串接,依照 Github 上的說明在 FortiGate 上設置三個 header

webhook setting

結果怎麼測試都失敗

利用下面指令啟動 debug

1
2
diagnose debug enable
diagnose debug application autod -1

只有看到下面的訊息

1
2
3
auto_curl_perform()-107: Curl perform error:22 - HTTP response code said error.
__action_webhook_status()-150: Failed to perform curl for url:https://api.github.com/repos/xxxxxx/repo-name/issues.
__run_action()-304: Error when running service for stitch:SSL VPN action failure action:add remote ip to github issue.

重點訊息是

auto_curl_perform()-107: Curl perform error:22 - HTTP response code said error.
__action_webhook_status()-150: Failed to perform curl

只看到 HTTP response code said error,而找遍了 Guide 及官方論壇上都沒有更詳細的資訊或指令可以看到 response message

最奇妙的是我直接使用 Github 官方的 curl 範例執行,卻是成功

後來直接 sniffer FortiGate 跟 curl 的 packets 進行比對才發現一個重要的資訊

curl 會自己幫你帶 User-Agent 這個 http header 出去,而 FortiGate 不會

最後在 FortiGate 也加上 User-Agent 就正常了

後來查了一下 Github API 文件裡有提到,API request 必須都要加上 User-Agent,不然會被 rejected

Github API