在CentOS 8上安裝和設置Suricata

在本教程中,您將學習如何在CentOS 8上安裝和設置Suricata。 蘇里卡塔 是一個免費的開源網絡威脅檢測引擎。它可以用作入侵檢測(IDS)引擎,串聯入侵防禦系統(IPS),網絡安全監控(NSM)以及離線pcap處理工具。它使用規則和簽名檢查網絡流量,並通過Lua腳本支持來檢測複雜威脅。

Suricata具有以YAML和JSON格式編寫日誌的功能,可以與SIEM,Splunk,Logstash / Elasticsearch,Kibana等其他工具集成,以進行進一步的日誌處理和可視化。

Suricata提供了許多功能。繼續閱讀 所有Suricata功能頁面

在CentOS 8上安裝和設置Suricata

系統要求

好吧,Suricata是多線程的,因此,如果您有足夠的內核,則可以利用儘可能多的資源。另外,分配足夠的RAM。

在此演示中,我們為Suricata服務器分配了2個vCPU和4GB RAM。

在CentOS 8上安裝Suricata

您可以通過多種方式在SentOS 8上安裝Suricata。

  • 從源代碼在SentOS 8上安裝Suricata
  • 從EPEL Repos在CentOS 8上安裝Suricata

從源代碼在SentOS 8上安裝Suricata
運行系統更新

通過運行以下命令來更新系統軟件包

dnf update

安裝所需的構建工具和依賴項

要從源代碼成功在CentOS 8上成功構建和安裝Suricata,需要使用許多軟件包相關性和構建工具。

dnf config-manager --set-enabled PowerTools
dnf install diffutils file-devel gcc jansson-devel make nss-devel libyaml-devel libcap-ng-devel libpcap-devel pcre-devel python3 python3-pyyaml rust-toolset zlib-devel curl wget tar lua lua-devel lz4-devel

下載Suricata源代碼

從以下位置下載最新的穩定發行版Suricata源代碼 Suricata下載頁面。在撰寫本文時,Suricata 5.0.3是最新的穩定發行版。

wget https://www.openinfosecfoundation.org/download/suricata-5.0.3.tar.gz -P /tmp

提取Suricata源代碼

下載完成後,提取源代碼;

cd /tmp
tar xzf suricata-5.0.3.tar.gz

在CentOS 8上構建和安裝Suricata

導航到源目錄,然後在CentOS 8上構建並安裝Suricata。

cd suricata-5.0.3

運行configure腳本以使Suricata適應系統並驗證所有必需的依賴項是否都到位。

./configure --sysconfdir=/etc --localstatedir=/var --prefix=/usr/ --enable-lua --enable-geopip 

該命令將Suricata安裝到 /usr/bin/suricata,將配置放在 /etc/suricata 和使用 /var/log/suricata 作為日誌目錄。

有關更多構建選項,請參閱 ./configure --help

編譯並安裝Suricata規則和配置。

make
make install-full
...
22/7/2020 -- 21:14:44 -  -- Backing up current rules.
22/7/2020 -- 21:14:44 -  -- Writing rules to /var/lib/suricata/rules/suricata.rules: total: 27530; enabled: 20677; added: 27530; removed 0; modified: 0
22/7/2020 -- 21:14:44 -  -- Skipping test, disabled by configuration.
22/7/2020 -- 21:14:44 -  -- Done.

You can now start suricata by running as root something like:
  /usr/bin/suricata -c /etc/suricata/suricata.yaml -i eth0

If a library like libhtp.so is not found, you can run suricata with:
  LD_LIBRARY_PATH=/usr/lib /usr/bin/suricata -c /etc/suricata/suricata.yaml -i eth0

The Emerging Threats Open rules are now installed. Rules can be
updated and managed with the suricata-update tool.

For more information please see:
  https://suricata.readthedocs.io/en/latest/rule-management/index.html

make[1]: Leaving directory '/tmp/suricata-5.0.3'

現在可以從CentOS 8上的源代碼安裝Suricata。

從EPEL Repos在CentOS 8上安裝Suricata

要在CentOS 8上無縫安裝Suricata,使用EPEL倉庫進行安裝是不二之選。

在CentOS 8上安裝EPEL Repos

dnf install epel-release

從EPEL Repos CentOS 8安裝Suricata

dnf info suricata
Available Packages
Name         : suricata
Version      : 5.0.3
Release      : 1.el8
Architecture : x86_64
Size         : 2.3 M
Source       : suricata-5.0.3-1.el8.src.rpm
Repository   : epel
Summary      : Intrusion Detection System
URL          : https://suricata-ids.org/
License      : GPLv2
...

如您所見,EPEL倉庫提供了Suricata的最新穩定發行版。

然後可以通過執行命令來安裝它;

dnf install suricata

海島貓鼬規則

Suricata利用各種規則集/簽名來檢測和警告相匹配的威脅。規則也稱為簽名。 新興威脅新興威脅專業版 和火源 錄像機 是最常用的規則。

在大多數情況下,您可以在以下位置找到規則文件 /etc/suricata/rules/。這是從存儲庫安裝Suricata時的情況。

ls /etc/suricata/rules/
app-layer-events.rules  dhcp-events.rules  dns-events.rules  http-events.rules   kerberos-events.rules  nfs-events.rules  smb-events.rules   stream-events.rules
decoder-events.rules    dnp3-events.rules  files.rules       ipsec-events.rules  modbus-events.rules    ntp-events.rules  smtp-events.rules  tls-events.rules

緊急威脅規則通常存儲為 /var/lib/suricata/rules/suricata.rules。的 suricata.rules 文件通常包含位於“ /etc/suricata/rules/

要安裝和更新緊急威脅規則,請使用 suricata-update 命令。

suricata-update

此下載並安裝 suricata.rules

規則/簽名包括以下部分:

  • 行動,它確定簽名匹配時會發生什麼。
  • 標頭,定義協議,IP地址,端口和規則方向。
  • 規則選項,定義規則的細節。
alert ip any any -> any any (msg:"SURICATA Applayer Mismatch protocol both directions"; flow:established; app-layer-event:applayer_mismatch_protocol_both_directions; flowint:applayer.anomaly.count,+,1; classtype:protocol-command-decode; sid:2260000; rev:1;)

閱讀更多 Suricata規則介紹

Suricata基本設置

/etc/suricata/suricata.yaml 是默認的Suricata配置文件。

配置文件包含許多可配置選項。但是,對於我們的基本設置,我們將僅關注Suricata正在偵聽的網絡接口以及連接到該接口的IP地址。

要找到接口和IP地址,請運行以下命令;

ip --brief add
lo               UNKNOWN        127.0.0.1/8 ::1/128 
enp0s3           UP             10.0.2.15/24 
enp0s8           UP             192.168.56.133/24 fe80::12c8:9a8a:6d1:deaf/64

在我們的例子中,我們的界面是 enp0s8 IP地址是 192.168.56.133

打開並編輯Suricata配置文件。

vim /etc/suricata/suricata.yaml

在下面 瓦斯 部分,您需要配置Suricata,以區分要保護的內部網絡和外部網絡。這可以通過定義正確的值來完成 HOME_NETEXTERNAL_NET 地址組下的變量。

HOME_NET 變量應包括Suricata正在偵聽的接口的IP地址以及所有要保護的本地網絡。

EXTERNAL_NET 變量應定義非本地的任何IP或網絡。

...
vars:
  # more specific is better for alert accuracy and performance
  address-groups:
    #HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"
    HOME_NET: "[192.168.56.133]"
    #HOME_NET: "[192.168.0.0/16]"
    #HOME_NET: "[10.0.0.0/8]"
    #HOME_NET: "[172.16.0.0/12]"
    #HOME_NET: "any"

    EXTERNAL_NET: "!$HOME_NET"
...

在下面 af-packet 部分,將接口的值設置為您的接口名稱。

...
# Linux high speed capture support
af-packet:
  - interface: enp0s8
...

保存並退出配置文件。

指定Suricata規則

定義要使用的Suricata規則文件。在此演示中,我們使用默認的ET規則。

...
default-rule-path: /var/lib/suricata/rules

rule-files:
  - suricata.rules
...

禁用數據包卸載

通過禁用接口大接收卸載(LRO)/通用接收卸載(GRO)來禁用Suricata數據包卸載;

ethtool -K  gro off lro off

更換 與您的界面。

首先檢查是否啟用了這些功能;

ethtool -k enp0s8 | grep -iE "generic|large"
	tx-checksum-ip-generic: on
generic-segmentation-offload: on
generic-receive-offload: off
large-receive-offload: off [fixed]

如果啟用,請通過運行以下命令禁用該功能;

ethtool -K enp0s8 gro off lro off

運行蘇里卡塔

Suricata可以通過系統服務進行管理。

在運行它之前,您需要指定正在監聽的接口 /etc/sysconfig/suricata 配置文件。

vim /etc/sysconfig/suricata
...

# Add options to be passed to the daemon
#OPTIONS="-i eth0 --user suricata "
OPTIONS="-i enp0s8 --user suricata "

保存並退出文件,

啟動並使Suricata在CentOS 8上啟動時運行。

systemctl enable --now suricata

您可以檢查狀態;

systemctl status suricata
● suricata.service - Suricata Intrusion Detection Service
   Loaded: loaded (/usr/lib/systemd/system/suricata.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2020-07-23 16:50:34 EAT; 29s ago
     Docs: man:suricata(1)
  Process: 19153 ExecStartPre=/bin/rm -f /var/run/suricata.pid (code=exited, status=0/SUCCESS)
 Main PID: 19154 (Suricata-Main)
    Tasks: 7 (limit: 5027)
   Memory: 387.6M
   CGroup: /system.slice/suricata.service
           └─19154 /sbin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid -i enp0s8 --user suricata

Jul 23 16:50:34 ceph-admin.kifarunix-demo.com systemd[1]: Starting Suricata Intrusion Detection Service...
Jul 23 16:50:34 ceph-admin.kifarunix-demo.com systemd[1]: Started Suricata Intrusion Detection Service.
Jul 23 16:50:34 ceph-admin.kifarunix-demo.com suricata[19154]: 23/7/2020 -- 16:50:34 -  - This is Suricata version 5.0.3 RELEASE running in SYSTEM mode
Jul 23 16:50:42 ceph-admin.kifarunix-demo.com suricata[19154]: 23/7/2020 -- 16:50:42 -  - all 1 packet processing threads, 4 management threads initialized, 

Suricata伐木;

要檢查Suricata是否正在運行,請檢查Suricata日誌:

tail /var/log/suricata/suricata.log

您應該看到這樣的一行;

...
23/7/2020 -- 16:50:42 - - all 1 packet processing threads, 4 management threads initialized, engine started.

檢查Suricata統計信息;

tail -f /var/log/suricata/stats.log

查看Suricata警報日誌;

tail -f /var/log/suricata/fast.log

Suricata還可以在EVE Json輸出中寫入日誌。默認日誌文件為;

tail -f /var/log/suricata/eve.json

測試Suricata規則

在此演示中,我們使用默認的ET Suricata規則。如果創建了自己的自定義規則,請確保測試Suricata規則的語法錯誤;

suricata -c /etc/suricata/suricata.yaml -T -v
23/7/2020 -- 17:44:10 - - Running suricata under test mode
23/7/2020 -- 17:44:10 - - This is Suricata version 5.0.3 RELEASE running in SYSTEM mode
23/7/2020 -- 17:44:10 - - CPUs/cores online: 1
23/7/2020 -- 17:44:10 - - fast output device (regular) initialized: fast.log
23/7/2020 -- 17:44:10 - - eve-log output device (regular) initialized: eve.json
23/7/2020 -- 17:44:10 - - stats output device (regular) initialized: stats.log
23/7/2020 -- 17:44:12 - - 1 rule files processed. 20676 rules successfully loaded, 0 rules failed
23/7/2020 -- 17:44:12 - - Threshold config parsed: 0 rule(s) found
23/7/2020 -- 17:44:12 - - 20679 signatures processed. 1138 are IP-only rules, 3987 are inspecting packet payload, 15324 inspect application layer, 103 are decoder event only
23/7/2020 -- 17:44:25 - - Configuration provided was successfully loaded. Exiting.
23/7/2020 -- 17:44:25 - - cleaning up signature grouping structure… complete

然後重新啟動Suricata;

systemctl restart suricata

執行SSH DDoS測試攻擊

在另一個系統上,安裝hping3工具並執行SSH DDoS測試攻擊。

dnf install hping3

然後在運行Suricata的服務器上攻擊SSH。

hping3 -S -p 22 --flood --rand-source 192.168.56.133

參考 man hping3

在運行hping時,將警報日誌拖到Suricata服務器上。

tail -f /var/log/suricata/fast.log

您應該看到這樣的日誌行;

...
07/24/2020-21:43:02.613445 [] [1:2400000:2768] ET DROP Spamhaus DROP Listed Traffic Inbound group 1 [] [Classification: Misc Attack] [Priority: 2] {TCP} 42.163.214.132:4391 -> 192.168.56.133:22
07/24/2020-21:43:02.751133 [] [1:2400007:2768] ET DROP Spamhaus DROP Listed Traffic Inbound group 8 [] [Classification: Misc Attack] [Priority: 2] {TCP} 122.8.52.209:11845 -> 192.168.56.133:22
07/24/2020-21:43:02.800769 [] [1:2400012:2768] ET DROP Spamhaus DROP Listed Traffic Inbound group 13 [] [Classification: Misc Attack] [Priority: 2] {TCP} 160.184.221.156:15315 -> 192.168.56.133:22
07/24/2020-21:43:02.801827 [] [1:2400009:2768] ET DROP Spamhaus DROP Listed Traffic Inbound group 10 [] [Classification: Misc Attack] [Priority: 2] {TCP} 139.81.59.221:15607 -> 192.168.56.133:22
07/24/2020-21:43:02.802528 [] [1:2400013:2768] ET DROP Spamhaus DROP Listed Traffic Inbound group 14 [] [Classification: Misc Attack] [Priority: 2] {TCP} 163.198.206.175:15818 -> 192.168.56.133:22
07/24/2020-21:43:02.803033 [] [1:2400021:2768] ET DROP Spamhaus DROP Listed Traffic Inbound group 22 [] [Classification: Misc Attack] [Priority: 2] {TCP} 196.194.135.87:15970 -> 192.168.56.133:22
07/24/2020-21:43:02.803268 [] [1:2400006:2768] ET DROP Spamhaus DROP Listed Traffic Inbound group 7 [] [Classification: Misc Attack] [Priority: 2] {TCP} 110.41.189.155:16042 -> 192.168.56.133:22
07/24/2020-21:43:02.803548 [] [1:2400009:2768] ET DROP Spamhaus DROP Listed Traffic Inbound group 10 [] [Classification: Misc Attack] [Priority: 2] {TCP} 143.135.26.50:16131 -> 192.168.56.133:22
07/24/2020-21:43:02.870288 [] [1:2400021:2768] ET DROP Spamhaus DROP Listed Traffic Inbound group 22 [] [Classification: Misc Attack] [Priority: 2] {TCP} 196.194.107.110:19140 -> 192.168.56.133:22
07/24/2020-21:43:02.871212 [] [1:2400003:2768] ET DROP Spamhaus DROP Listed Traffic Inbound group 4 [] [Classification: Misc Attack] [Priority: 2] {TCP} 101.194.46.143:19453 -> 192.168.56.133:22
07/24/2020-21:43:02.871608 [] [1:2400021:2768] ET DROP Spamhaus DROP Listed Traffic Inbound group 22 [] [Classification: Misc Attack] [Priority: 2] {TCP} 196.16.182.33:19588 -> 192.168.56.133:22
...

通過該簡單測試,我們可以看到使用默認的“緊急威脅”規則,Suricata的設置和運行良好。

這標誌着我們有關如何在CentOS 8上安裝和設置Suricata的指南的結尾。

參考

閱讀更多 Suricata用戶指南

Sidebar