今天我們將學習 Snort 規則,並了解如何編輯和運用這些規則來檢測網路封包的威脅
Snort 規則是其核心功能之一,負責定義如何識別各種網路攻擊或異常行為
Snort 規則的基本結構由規則標頭(Rule Header) 和 選項(Options) 兩部分組成
每個規則的「規則標頭」決定了如何處理封包,而「選項」部分則定義了檢測條件
Snort 規則由以下幾部分組成:
動作(Action):
協定:
Tcp、Udp、Icmp
來源和 Port:
來源 IP 和 Port,例如 192.168.1.0/24 和 80
目的和 Port:
指定目的 IP 和 Port,例如 10.0.0.0/24 和 80
選項部分包含各種條件:
msg:警報訊息,產生警報會顯示
sid:規則ID
rev:規則版本
content:檢查內容
nocase:忽略大小寫
classtype:事件類型進行分類
depth:檢測深度,如果設定 depth 為 10,Snort 將僅在封包的前 10 個位元中搜尋
offset:偏移量,如果設定 offset 為 5,Snort 將開始在封包中搜尋第 5 個位元組
範例規則
以下範例 Snort 規則格式:<動作> <協定> <來源IP> <來源/Port> -> <目標IP> <來源/Port>
Snort 規則通常儲存在 local.rules 文件中,可以根據需求自訂和編輯這些規則
1. 編輯 local.rules 文件
sudo vi /etc/snort/rules/local.rules
2. 新增規則
在 local.rules 文件中新增規則,例如:SQL 攻擊或 DoS 攻擊
以下是規則範例,需要依照各位的實際情況進行調整
SQL Injection 攻擊檢測
alert tcp any any -> any 80 (msg:"SQL Injection Attempt"; content:"select"; nocase; sid:1000001; rev:1;)
DoS 攻擊檢測
alert tcp any any -> any 80 (msg:"DoS Attack Detected"; flags:S; threshold:type threshold, track by_src, count 20, seconds 10; sid:1000003; rev:1;)
3. 確認 snort.conf 中是否包含 local.rules
sudo vi /etc/snort/snort.conf
重新啟動 Snort 服務
sudo systemctl restart snort
接著,確認服務狀態:
sudo systemctl status snort.service
4. 測試規則
sudo snort -T -c /etc/snort/snort.conf
如果測試成功,Snort 將顯示正常
若有錯誤,請檢查 local.rules 和 snort.conf 文件中的語法是否有錯誤
local.rules
和Snort log
文件以及語法是否有錯誤cat /var/log/snort/snort.log
取得詳細的錯誤信息