隨著網絡犯罪的日益普及,企業迫切需要更好的保護措施來防範黑客攻擊。其中一種最佳防禦方式是使用 入侵防護系統(IPS)。但在上網搜尋IPS之前,不妨試試Suricata。
在本教程中,您將學習如何在Linux服務器上配置一個功能完整的Suricata IPS,以保護您的網絡免受在線威脅。
準備好了嗎?繼續閱讀並開始保護您的網絡吧!
先決條件
本教程將進行實際演示。如果您想跟著操作,請確保您擁有以下設備:
- A Linux server – This demo uses Ubuntu 20.04 LTS, but any Linux distribution will work.
- A non-root user with sudo privileges.
- 根據您的網絡配置和使用Suricata的方式,您的服務器可能需要更多或更少的CPU和RAM。一般來說,您計劃檢查的流量越多,您將為Suricata分配的資源就越多。在開發者環境中,建議至少使用2個CPU和8GB的RAM開始,以便Suricata能夠完成其任務,同時不損壞所有用戶的服務質量。
安裝Suricata並添加PPA存儲庫
Suricata 在 Ubuntu 上預設情況下並不會被安裝,但安裝 Suricata 的方式與在系統上安裝其他套件類似。
1. 執行 apt update
命令來更新系統中可用的套件。

2. 接下來,執行 add-apt-repository
命令來添加由 Open Information Security Foundation (OISF) 維護的 PPA 存儲庫。通過添加 PPA 存儲庫,您將獲得最新和穩定版本的 Suricata(ppa:oisf/suricata-stable
)。

3. 重新運行 sudo apt update
命令來加載新添加的 Suricata 存儲庫到您系統的套件索引中。
4. 現在,執行以下命令來確認您已正確添加了 Suricata PPA。在安裝 Suricata 之前,確保您在列表中看到了像下面顯示的 Suricata PPA。

5. 在您的系統上運行以下命令來安裝suricata
。

6. 安裝完成後,執行下面的 systemctl status
命令來檢查 suricata
服務的 狀態
。
如下所示,您可以看到Suricata服務是活動的(正在運行)。

配置Suricata
Suricata套件附帶一個名為suricata.yaml的配置文件,位於/etc/suricata目錄中。此配置文件有許多不同的設置,適用於許多其他用例。但請注意,在使用Suricata之前,您需要調整預設配置文件中的一些設置。
Suricata的默認模式是入侵檢測(IDS)模式,該模式會記錄但不會丟棄任何流量。當配置並熟悉Suricata時,會使用此模式。一旦您對Suricata更加熟悉,並更好地了解Suricata將警告您的流量類型,您可以選擇打開IPS模式。
Suricata在其JSON格式中添加了一個字段(社區流ID)。社區流ID是一個8字節的字段,允許您將由其他工具生成的記錄進行關聯。當與其他工具(如Bro或Elasticsearch)一起使用Suricata時,此功能非常方便。
1. 在您喜歡的文本編輯器中打開/etc/suricata/suricata.yaml文件。
2. 尋找一行,其中包含 community-id: false,將其更改為 community-id: true。保存更改並退出文本編輯器。
每次檢查事件時,您都會在其 JSON 輸出中看到社區流 ID。

接下來,運行以下命令來查找您系統上具有默認路由的設備(route show default
)。-p
標誌告訴 ip
命令以人類可讀的方式打印設備,而 -j
標誌則打印 JSON 輸出。
預設情況下,Suricata 被配置為從任何可用的網絡接口嗅探封包。但是,您可以更改此行為並在 Suricata 啟動時指定一個接口供其監聽。
如您所見,dev 參數指定了 Suricata 將用於嗅探封包的接口。在此演示中,接口為 eth0,但您的接口可能不同,如 tun0、wlan0 等。

4. 最後,打開 /etc/suricata/suricata.yaml 配置文件,找到 af-packet 部分下的 interface 參數並相應地修改它。在此演示中,eth0 被用作嗅探封包的接口。
保存更改,但暫時保持您的文本編輯器打開。

設置實時規則重載功能
你現在已經配置了 Suricata,但這只是保護您的網絡的開始。通常,您會希望即時添加規則並自動重新加載規則。如何做到?Suricata 的即時規則重新加載功能允許您動態更新規則。因此,您無需手動重新啟動 Suricata,新規則就會生效。
打開 /etc/suricata/suricata.yaml 檔案,將以下指令複製/貼上到檔案內容的底部,然後保存更改。這些指令讓您啟用即時規則重新加載功能。
有了這個設置,當您編輯/更新您的規則集時,更改將立即生效,而無需重新啟動您的 Suricata 服務。

現在執行下面的 kill
命令來通知您的 Suricata 進程 ($(pidof suricata)
) 更新規則而不重新啟動。
該命令向指定的進程 ID 發送用戶定義的信號 (-usr2
),然後 Suricata 將自動執行以下操作:
- 加載新配置以更新規則變量和值。
- 加載新規則
- 構建新的檢測引擎
- 交換舊檢測引擎和新檢測引擎
- 確保所有線程都已更新
- 釋放舊的檢測引擎
更新 Suricata 規則集
即時規則重新加載功能已經準備就緒,但除非您更新規則集,否則它將無法發揮作用。默認情況下,Suricata 套件具有一個有限的規則集,僅檢測位於 /etc/suricata/rules 目錄中的最常見的互聯網協議。
在此时,每当您尝试启动和使用Suricata服务时,您将收到一个未找到与模式匹配的规则文件错误消息,如下所示。此错误消息表示Suricata没有要使用的规则集。

要解决此错误,请为Suricata实例提供规则集文件。幸运的是,Suricata有一个名为suricata-update
的工具,可以帮助您从第三方提供商那里获取更多规则集。
1. 运行以下命令以更新Suricata实例。
正如下面所示,输出指示suricata-update
命令通过连接到https://rules.emergingthreats.net/open/获取规则,然后将新规则保存到/var/lib/suricata/rules/目录
输出还打印出以下内容:
- 规则集的总数(31737)
- 启用的规则数(24355)
- 添加的数量(31737)/移除的数量(0)

接下来,运行以下命令以列出所有规则集提供者(list-sources
)。
suricata-update
命令从许多提供者那里获取规则集,包括免费和商业提供商。
在下面,您可以看到列表的一小部分。注意您希望Suricata从中获取规则集的规则集名称。特别是在本教程中,我们获取et/open规则集以进行演示(第三步)。

3. 執行以下命令來獲取並包含(enable-source
)et/open
規則集到你的Suricata規則中。

最後,重新運行suricata-update
命令以加載新選擇的規則集。
驗證Suricata配置
你已經配置了Suricata,甚至添加了規則集,現在是時候驗證你的更改並確保一切按預期工作了。Suricata軟件包自帶了一個內置的驗證服務,可以讓你查看當前配置的任何偏差。
運行以下suricata
命令來驗證Suricata配置文件中的更改(-c /etc/suricata/suricata.yaml
)。該命令還會顯示所有驗證信息(-v
)。
-T
參數告訴Suricata以“測試模式”和“自上而下”模式運行。這兩種模式對匹配封包有更嚴格的規則,並且更不容易產生誤報。
由於Suricata是一個高度可配置的防火牆,測試可能需要幾分鐘的時間才能完成。如果沒有錯誤,你將看到類似下面的輸出,顯示了一條完成的消息。

如果你的配置文件出現以下類似的錯誤,Suricata將打印出每個錯誤,指出引起問題的具體行。如果你遇到這些錯誤,請逐一解決每個配置問題,直到驗證成功為止。

測試Suricata規則
現在您的Suricata配置文件已經通過驗證,您可以運行Suricata以確保它們正常工作。您將使用Suricata來測試ET Open(2100498)與curl
命令一起檢測可疑活動/流量。
您的Suricata實例目前具有超過30,000條規則,這些規則是Suricata從各種規則集中獲取的。因此,所有規則及其解釋的完整測試將不適合本教程。
1.執行以下curl
命令以從TestMyNIDS網站生成一些流量/HTTP請求/活動。TestMyNIDS是一個致力於支持NIDS測試、驗證和比較的電子學習項目。該網站提供了一個獨特的平台,用於NIDS及相關工具的比較分析。
您可以使用此網站來測試任何可疑活動/流量,以查看您配置的規則集是否按預期工作。
響應數據旨在觸發假警報,假裝是Linux/Unix root用戶。這個root用戶可能存在受到威脅的系統上。

接下來,執行以下grep
命令來檢查fast.log
文件中的匹配警報消息2100498
。此命令檢查用戶警報的日誌文件。
除了 fast.log 檔案外,另一個要注意的日誌檔案是相同目錄中的 eve.log。
您將看到類似以下的輸出,顯示系統的公共 IPv4 地址。

3. 現在,執行以下 jq
命令以檢查 eve.log 檔案。 eve.log 檔案也用於記錄事件,但以 JSON 格式 (/var/log/suricata/eve.json
)。您將參考 eve.json 和 fast.log 檔案來查找可疑的流量和被阻止的嘗試。一旦找到,採取必要的行動。
在下面,您可以在輸出中看到 “signature_id”: 2100498,這是您在命令中指定的警報簽名 ID。
您還可以在輸出中看到 “community_id”: “1:ETRbv54GHTVCayHTUR5OIovK4gh2=”,這是您在 /etc/suricata/suricata.yaml 檔案中設置的社區流 ID。
這個 community_id 在您將 Suricata 與 Elasticsearch 等其他工具配合使用時非常方便,可以以相對低的成本獲得完整的“安全監控堆棧”。

結論
通過本教程,您已經學會了如何安裝和配置 Suricata 以及規則集,以保護您的網絡。您還通過在您的網絡上生成流量來測試規則集是否正常工作。
在這一點上,Suricata 使用您的自定義規則集完美運行,以檢測您網絡上的可疑活動/流量。
現在,為什麼不建立在這個新獲得的知識基礎上呢?也許可以從安裝和配置Suricata、Zeek、Elasticsearch堆棧開始建立一個完整的“安全監控堆棧”?