Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Snort 輕量級入侵偵測系統安裝與規則撰寫實戰指南

編輯:Linux 教學

Snort 是跨平台、開源的網路入侵偵測系統 (NIDS),具備即時流量分析、封包記錄、協議解析、內容匹配與多種警報輸出能力。本文以原始碼編譯方式,完整記錄 Snort 2.2.0 在 Linux 上的依賴套件安裝、MySQL/ACID 整合、規則配置、啟動參數與規則撰寫入門。

架構概覽:三大運作模式

  • 封包嗅探器:顯示封包頭資訊 (-v)
  • 封包記錄器:將封包寫入磁碟 (-d -l /var/log/snort)
  • 入侵偵測系統 (IDS):依規則匹配觸發警報 (-c /etc/snort/snort.conf)

依賴套件與安裝順序

  1. libpcap:封包捕獲庫 (需核心支援 CONFIG_PACKET)
  2. OpenSSL:加密支援 (選項 --with-openssl)
  3. PCRE:Perl 相容正則表達式 (--with-pcre)
  4. libnet:封包構造庫 (選項 --with-libnet,支援 flexresp 主動回應)
  5. MySQL:資料庫後端 (建立 snort 資料庫、使用者、表結構)
  6. Apache + PHP + GD + ADODB + PHPlot:ACID Web 分析介面依賴
  7. Snort 本體:./configure --enable-flexresp --with-mysql --with-openssl --with-pcre --with-libnet
  8. Snort Rules:官方規則集解壓至 /etc/snort/rules

關鍵配置:snort.conf 修改重點

MySQL 資料庫整合

# 建立資料庫與使用者
mysql -u root -p -e "CREATE DATABASE snort;"
mysql -u root -p -e "GRANT INSERT,SELECT ON snort.* TO snort@localhost IDENTIFIED BY 'password';"

# 匯入表結構 (源碼 contrib/create_mysql)
mysql -u root -p snort < create_mysql

# snort.conf 啟用資料庫輸出 (約 454 行)
output database: log, mysql, user=snort password=password dbname=snort host=localhost

# redalert 規則類型同時輸出 syslog 與資料庫 (約 493 行)
ruletype redalert {
    type alert
    output alert_syslog: LOG_AUTH LOG_ALERT
    output database: log, mysql, user=snort dbname=snort host=localhost
}

啟動 Snort (chroot 環境)

# 建立專用使用者與日誌目錄
groupadd snort
useradd -g snort -d /home/snort -s /sbin/nologin -c "Snort User" snort
mkdir /var/log/snort
chown snort:snort /var/log/snort

# 背景執行
snort -b -d -i eth0 -u snort -g snort -c /home/snort/rules/snort.conf -l /var/log/snort &

參數說明:-b 二進位記錄、-d 印出應用層資料、-i 介面、-u/-g 降權、-c 設定檔、-l 日誌目錄、& 背景執行。

Snort 規則撰寫入門

規則結構:規則頭 + 選項部份

alert tcp $EXTERNAL_NET any -> $HOME_NET 80 (msg:"WEB-MISC phpMyAdmin access"; flow:to_server,established; content:"/phpmyadmin/"; nocase; sid:1000001; rev:1;)
變數設定範例說明
HOME_NET192.168.1.0/24 或 [192.168.1.1,192.168.1.2]保護網段,預設 any 過於寬鬆
SMTP_SERVERS$HOME_NET 或指定 IP郵件伺服器位置
HTTP_SERVERS$HOME_NET 或指定 IPWeb 伺服器位置
DNS_SERVERS$HOME_NET + 取消註解 preprocessor portscan-ignorehosts: $DNS_SERVERS避免 DNS 查詢誤觸掃描警報
元素說明
動作alert、log、pass、activate、dynamic、drop (IPS)、reject (IPS)、sdrop (IPS)
協議tcp、udp、icmp、ip
來源/目的 IP任何 (any)、網段 (192.168.1.0/24)、變數 ($HOME_NET)、否定 (!$HOME_NET)
來源/目的埠任何 (any)、單一埠、範圍 (1:1024)、列表 ([80,443,8080])
方向-> 單向、<> 雙向
選項 (關鍵字)msg 訊息、content 內容匹配、nocase 忽略大小寫、flow 流向、sid 規則 ID、rev 版本、classtype 分類、priority 優先級

選項間為 AND 關係,全符合才觸發。進階選項含 pcre (PCRE 正則)、byte_test、byte_jump、detection_filter (頻率控制) 等。

效能調校建議

  • 僅啟用必要規則集,移除不適用服務規則 (如無 DNS 伺服器可關閉 DNS 規則)
  • 使用 threshold/detection_filter 抑制高頻誤報
  • 高流量環境啟用 --enable-perfprofiling 分析規則效能
  • 考慮 Barnyard2 非同步處理輸出,降低 Snort 主進程負載
Copyright © Windows教程網 All Rights Reserved