配置Suricata作為入侵防禦系統(IPS)

隨著網絡犯罪的日益普及,企業迫切需要更好的保護措施來防範黑客攻擊。其中一種最佳防禦方式是使用 入侵防護系統(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 命令來更新系統中可用的套件。

sudo apt update -y
Updating the list of available packages

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

sudo add-apt-repository ppa:oisf/suricata-stable
Adding the PPA repository for Suricata

3. 重新運行 sudo apt update 命令來加載新添加的 Suricata 存儲庫到您系統的套件索引中。

sudo apt update -y

4. 現在,執行以下命令來確認您已正確添加了 Suricata PPA。在安裝 Suricata 之前,確保您在列表中看到了像下面顯示的 Suricata PPA。

sudo apt policy
Running the sudo apt policy

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

sudo apt install suricata -y
Installing Suricata on your system

6. 安裝完成後,執行下面的 systemctl status 命令來檢查 suricata 服務的 狀態

sudo systemctl status suricata

如下所示,您可以看到Suricata服務是活動的(正在運行)。

Checking the Suricata service status

配置Suricata

Suricata套件附帶一個名為suricata.yaml的配置文件,位於/etc/suricata目錄中。此配置文件有許多不同的設置,適用於許多其他用例。但請注意,在使用Suricata之前,您需要調整預設配置文件中的一些設置。

Suricata的默認模式是入侵檢測(IDS)模式,該模式會記錄但不會丟棄任何流量。當配置並熟悉Suricata時,會使用此模式。一旦您對Suricata更加熟悉,並更好地了解Suricata將警告您的流量類型,您可以選擇打開IPS模式。

Suricata在其JSON格式中添加了一個字段(社區流ID)。社區流ID是一個8字節的字段,允許您將由其他工具生成的記錄進行關聯。當與其他工具(如BroElasticsearch)一起使用Suricata時,此功能非常方便。

1. 在您喜歡的文本編輯器中打開/etc/suricata/suricata.yaml文件。

2. 尋找一行,其中包含 community-id: false,將其更改為 community-id: true。保存更改並退出文本編輯器。

每次檢查事件時,您都會在其 JSON 輸出中看到社區流 ID。

Enabling Community ID

接下來,運行以下命令來查找您系統上具有默認路由的設備(route show default)。-p 標誌告訴 ip 命令以人類可讀的方式打印設備,而 -j 標誌則打印 JSON 輸出。

預設情況下,Suricata 被配置為從任何可用的網絡接口嗅探封包。但是,您可以更改此行為並在 Suricata 啟動時指定一個接口供其監聽。

 ip -p -j route show default

如您所見,dev 參數指定了 Suricata 將用於嗅探封包的接口。在此演示中,接口為 eth0,但您的接口可能不同,如 tun0、wlan0 等。

Previewing the Network Interface

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

保存更改,但暫時保持您的文本編輯器打開。

Editing the /etc/suricata/suricata.yaml configuration file

設置實時規則重載功能

你現在已經配置了 Suricata,但這只是保護您的網絡的開始。通常,您會希望即時添加規則並自動重新加載規則。如何做到?Suricata 的即時規則重新加載功能允許您動態更新規則。因此,您無需手動重新啟動 Suricata,新規則就會生效。

打開 /etc/suricata/suricata.yaml 檔案,將以下指令複製/貼上到檔案內容的底部,然後保存更改。這些指令讓您啟用即時規則重新加載功能。

有了這個設置,當您編輯/更新您的規則集時,更改將立即生效,而無需重新啟動您的 Suricata 服務。

detect-engine:
  - rule-reload: true
Setting up the Live Rule Reloading

現在執行下面的 kill 命令來通知您的 Suricata 進程 ($(pidof suricata)) 更新規則而不重新啟動。

該命令向指定的進程 ID 發送用戶定義的信號 (-usr2),然後 Suricata 將自動執行以下操作:

  • 加載新配置以更新規則變量和值。
  • 加載新規則
  • 構建新的檢測引擎
  • 交換舊檢測引擎和新檢測引擎
  • 確保所有線程都已更新
  • 釋放舊的檢測引擎
sudo kill -usr2 $(pidof suricata)

更新 Suricata 規則集

即時規則重新加載功能已經準備就緒,但除非您更新規則集,否則它將無法發揮作用。默認情況下,Suricata 套件具有一個有限的規則集,僅檢測位於 /etc/suricata/rules 目錄中的最常見的互聯網協議。

在此时,每当您尝试启动和使用Suricata服务时,您将收到一个未找到与模式匹配的规则文件错误消息,如下所示。此错误消息表示Suricata没有要使用的规则集。

Previewing Error Message when No Rulesets Exist

要解决此错误,请为Suricata实例提供规则集文件。幸运的是,Suricata有一个名为suricata-update的工具,可以帮助您从第三方提供商那里获取更多规则集。

1. 运行以下命令以更新Suricata实例。

sudo suricata-update

正如下面所示,输出指示suricata-update命令通过连接到https://rules.emergingthreats.net/open/获取规则,然后将新规则保存到/var/lib/suricata/rules/目录

输出还打印出以下内容:

  • 规则集的总数(31737
  • 启用的规则数(24355
  • 添加的数量(31737)/移除的数量(0
Updating Your Suricata Rulesets

接下来,运行以下命令以列出所有规则集提供者(list-sources)。

suricata-update命令从许多提供者那里获取规则集,包括免费和商业提供商。

sudo suricata-update list-sources

在下面,您可以看到列表的一小部分。注意您希望Suricata从中获取规则集的规则集名称。特别是在本教程中,我们获取et/open规则集以进行演示(第三步)。

Listing all ruleset providers

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

sudo suricata-update enable-source et/open
Fetching the et/open rulesets

最後,重新運行suricata-update命令以加載新選擇的規則集。

sudo suricata-update

驗證Suricata配置

你已經配置了Suricata,甚至添加了規則集,現在是時候驗證你的更改並確保一切按預期工作了。Suricata軟件包自帶了一個內置的驗證服務,可以讓你查看當前配置的任何偏差。

運行以下suricata命令來驗證Suricata配置文件中的更改(-c /etc/suricata/suricata.yaml)。該命令還會顯示所有驗證信息(-v)。

-T參數告訴Suricata以“測試模式”和“自上而下”模式運行。這兩種模式對匹配封包有更嚴格的規則,並且更不容易產生誤報。

sudo suricata -T -c /etc/suricata/suricata.yaml -v

由於Suricata是一個高度可配置的防火牆,測試可能需要幾分鐘的時間才能完成。如果沒有錯誤,你將看到類似下面的輸出,顯示了一條完成的消息。

Validating Your Suricata Configuration: complete

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

Validating Your Suricata Configuration: errors

測試Suricata規則

現在您的Suricata配置文件已經通過驗證,您可以運行Suricata以確保它們正常工作。您將使用Suricata來測試ET Open(2100498)與curl命令一起檢測可疑活動/流量。

您的Suricata實例目前具有超過30,000條規則,這些規則是Suricata從各種規則集中獲取的。因此,所有規則及其解釋的完整測試將不適合本教程。

1.執行以下curl命令以從TestMyNIDS網站生成一些流量/HTTP請求/活動。TestMyNIDS是一個致力於支持NIDS測試、驗證和比較的電子學習項目。該網站提供了一個獨特的平台,用於NIDS及相關工具的比較分析。

您可以使用此網站來測試任何可疑活動/流量,以查看您配置的規則集是否按預期工作。

curl http://testmynids.org/uid/index.html

響應數據旨在觸發假警報,假裝是Linux/Unix root用戶。這個root用戶可能存在受到威脅的系統上。

Testing Your Suricata Rules

接下來,執行以下grep命令來檢查fast.log文件中的匹配警報消息2100498。此命令檢查用戶警報的日誌文件。

除了 fast.log 檔案外,另一個要注意的日誌檔案是相同目錄中的 eve.log。

grep 2100498 /var/log/suricata/fast.log

您將看到類似以下的輸出,顯示系統的公共 IPv4 地址。

Examining the fast.log file

3. 現在,執行以下 jq 命令以檢查 eve.log 檔案。 eve.log 檔案也用於記錄事件,但以 JSON 格式 (/var/log/suricata/eve.json)。您將參考 eve.jsonfast.log 檔案來查找可疑的流量和被阻止的嘗試。一旦找到,採取必要的行動。

jq 'select(.alert .signature_id==2100498)' /var/log/suricata/eve.json

在下面,您可以在輸出中看到 “signature_id”: 2100498,這是您在命令中指定的警報簽名 ID。

您還可以在輸出中看到 “community_id”: “1:ETRbv54GHTVCayHTUR5OIovK4gh2=”,這是您在 /etc/suricata/suricata.yaml 檔案中設置的社區流 ID。

這個 community_id 在您將 Suricata 與 Elasticsearch 等其他工具配合使用時非常方便,可以以相對低的成本獲得完整的“安全監控堆棧”。

Examining the eve.log file

結論

通過本教程,您已經學會了如何安裝和配置 Suricata 以及規則集,以保護您的網絡。您還通過在您的網絡上生成流量來測試規則集是否正常工作。

在這一點上,Suricata 使用您的自定義規則集完美運行,以檢測您網絡上的可疑活動/流量。

現在,為什麼不建立在這個新獲得的知識基礎上呢?也許可以從安裝和配置Suricata、Zeek、Elasticsearch堆棧開始建立一個完整的“安全監控堆棧”?

Source:
https://adamtheautomator.com/suricata/