
如何使用 FortiGate 和 Progress Flowmon ADS 阻擋外部攻擊
這是我們常常聽到的問題 – 我們該如何使用 Progress Flowmon 解決方案來阻擋攻擊?Flowmon 並不是一個以行內設備的方式介入入站流量的產品,因此我們會與提供防火牆或統一安全閘道等設備的第三方廠商合作。
在這篇文章中,我們將教你如何透過 Flowmon ADS 指揮 Fortinet 的防火牆 FortiGate 阻擋流量,以回應檢測到的異常或攻擊。這項整合旨在自動阻擋流量,並在邊界處停止它。
所需材料
整合腳本可以從我們的 GitHub 專案 下載。您需要一個名為 fgt-mitigation.zip 的壓縮檔。完整的文件也已經發布了。
目前,這個整合僅支援 IPv4 位址範圍,因為實作 IPv6 需要額外的 API 呼叫來建立位址物件。不過,這取決於你的網路連線。如果你在 WAN 介面上只提供 IPv4,則不需要進行 IPv6 阻擋。
背景
阻擋針對啟用 IPSec VPN 服務的 FortiGate 裝置的攻擊方法之一是透過配置 Local-In 政策。預設情況下,Local-In 政策允許所有地址的存取,但你可以建立地址群組來封鎖特定的 IP。這樣的群組最多可以包含 600 個 IP,雖然每個平台的限制會有所不同。此外,系統會設置計時器,定期自動從名單中移除 IP,以更新和縮短名單。
現在,為了讓 Flowmon ADS 提供需要封鎖的IP地址,你需要在流量到達FortiGate之前,能夠監控到網路流量。
換句話說,你需要從路由器或位於防火牆之前的NetFlow/IPFIX 數據,或是Flowmon Probe。我不建議使用 FortiGate 本身,因為它的流量匯出並不包括 TCP 標誌,這意味著許多檢測方法將無法提供可靠的結果。這在我們上次測試 FortiOS 6.4 時也得到了證實。
一旦你擁有了流量來源,並且你的 Flowmon ADS 已經設定為檢測異常,你就可以使用上述提到的自訂腳本套件。它利用 REST API 調用,從 Flowmon ADS 事件在 FortiGate 中創建地址物件,並保持一個之前被阻擋的 IP 資料庫,以便日後使用。
這是一個應該能在 Flowmon 12 上運作的 Python 腳本。
安裝
首先,下載套件 ( fgt-mitigation.zip ),並使用你喜歡的 SCP 程式將其複製到 Flowmon 設備上。然後,你可以在 /home/flowmon 資料夾中解壓縮它。預期的配置路徑為 /home/flowmon/fgt-mitigation/etc,而日誌檔應該位於 /home/flowmon/fgt-mitigation/log。你可以透過修改腳本來變更這些路徑。
這個套件包含一個設定檔和兩個腳本;ag-mitigation.py 負責封鎖,並需要上傳到 Flowmon ADS(詳情請見下文),而另一個 ag-timeout.py 則是用來透過超時機制移除被封鎖的地址。
在解壓縮之後,您可能想要設定一個 cron 任務來執行 ag-timeout.py(範例可以在 README 檔案或整合指引中找到)。它使用 SQLite3 資料庫來儲存被封鎖的 IP 以及它們在這些記錄中的有效時間。您可以設定它們應該保留多久,並透過修改 cron 排程器來設定腳本的執行頻率。
接下來,您需要在您的 FortiGate 上啟用 Local-In 策略,並將預設動作設為阻擋 Flowmon ADS 群組中的任何流量,並保持該設定始終啟用。
已配置 Local-In 策略的 FortiGate 控制台:

一開始,這個群組只有一筆紀錄,基本上代表著「沒有 IP 地址」。這是因為 FortiGate 群組不能是空的,而這一筆紀錄不會阻擋任何東西。
FortiGate 設定的網頁介面,已為腳本配置好地址群組:

接著,設置一個監控介面,將 Flowmon 應用程式連接到作為 FortiGate 的 WAN 埠的管理交換器(我在實驗室中這樣做,作為真實部署的替代)。這樣可以收集通過觀察點的所有流量,並查看對 FortiGate WAN IP 位址發動的任何攻擊。
透過 Flowmon ADS 配置,請上傳此腳本而不需任何參數,並將其新增為自訂腳本觸發器,以便在安全問題視角中,每當偵測到中度或以上嚴重性的事件時執行。
Flowmon ADS 自訂腳本設定:

Blocking(阻擋)
在任何攻擊被阻擋之前,您可以輕鬆地對 FortiGate 的 WAN IP 地址進行 ping 測試。這表示一個和平的情境——進來的流量被允許通過。
成功的 ping 命令與 FortiGate 的 IP 位址:

當這段腳本被觸發時,FortiGate 內的資訊會透過 REST API 更新,包括 IP 範圍或子網的定義,以及將其納入 Flowmon ADS 地址群組。
已從 Flowmon ADS 新增 IP 位址,事件 ID 為:

這個事件也會出現在地址群組中:

現在清單已更新,擁有IP位址192.168.47.79的機器無法再ping通FortiGate,或是在其任何端口上進行連線。這表示防火牆根據Flowmon ADS的指示正在封鎖它。

沒有回應的 ping 指令:
這個timeout script用來清除被封鎖的IP列表。經過多次執行timeout script後,所有內容會恢復到原始狀態。
多次執行超時腳本:

上面的畫面顯示另一個 IP 位址已經被添加到群組中。它將以整數型別儲存在資料庫中,以便於操作。
特寫
這是你可以利用 Flowmon 搭配第三方的 inline 裝置來自動化攻擊緩解的一種方式。或者,你也可以使用標準的防火牆政策,在迴圈介面上使用額外的 IP 地址來阻擋不必要的流量。這一切都是關於如何將產品調整到符合你的需求和情況。
文章來源: How to Block an External Attack with FortiGate and Progress Flowmon ADS


