《構建基於Snort+Guardian+Iptables的IPS》
2020年的第三天,依舊如往常寫文章,分享最近做的項目繼《中小型企業級防火牆部署》之后的另一部分《構建基於Snort+Guardian+Iptables的IPS》,后面會將整個完整項目開源分享出來,歡迎大家一起交流分享
IPS
IPS簡介
IPS是英文“Intrusion Prevention System”的縮寫,中文意思是“入侵防御系統”,是一種網絡安全設備或應用軟件,除了具有IDS的監控檢測功能之外,還具有深度感知檢測數據流量,對惡意報文進行丟棄,實現實時告警和阻斷的入侵防御系統。
IPS功能組成
數據采集:采集和捕獲流量數據
入侵檢測:分析流量和日志數據,發現安全異常行為並發出警報,常見的有Snort、Suricata、Bro
結果展示:用於分析IDS警報並進行友好展示,常見的IDS警報分析工具有Snorby、Sguil、Base
安全防御:主動響應安全事件,阻斷攻擊者入侵行為,常用iptables
IDS
IDS是英文“Intrusion Detection Systems”的縮寫,中文意思是“入侵檢測系統”,是一種網絡安全設備或應用軟件,可以依照一定的安全策略,對網絡、系統的運行狀況進行監視,盡可能發現各種攻擊企圖、攻擊行為或者攻擊結果,並發出安全警報。
IDS通用系統模型
(1)數據收集器(又稱探測器):主要負責收集數據。探測器的輸入數據流包括任何可能包含入侵行為線索的系統數據,如各種網絡協議數據包、系統日志文件和系統調用記錄等。探測器將這些數據收集起來,然后再發送到檢測器進行處理。
(2)檢測器(又稱分析器或檢測引擎):負責分析和檢測入侵的任務,並向控制器發出警報信號。
(3)知識庫:為檢測器和控制器提供必需的數據信息支持。這些信息包括:用戶歷史活動檔案或檢測規則集合等。
(4)控制器:根據從檢測器發來的警報信號,人工或自動地對入侵行為做出響應。
IDS分類
IDS根據兩種方法進行分類:按照數據來源、按照入侵檢測策略。
按照數據來源分類
基於網絡的入侵檢測系統(NIDS)
基於主機的入侵監測系統(HIDS)
分布式入侵檢測系統(DIDS)
按照入侵檢測策略分類
濫用檢測
異常檢測
完整性分析
環境搭建
企業拓撲
## 環境准備 ``` DMZ區:CentOS7 --- IP:192.168.9.100 Gateway:192.168.9.254 防火牆:kali --- ip1:211.67.93.254;ip2:192.168.9.254;ip3:192.168.33.254; 外網主機:win2003 --- IP:211.67.93.100 Gateway:211.67.93.254 內網主機:win2003 --- IP:192.168.33.100 Gateway:192.168.33.254 ``` # IDS Snort ## Snort簡介 在1998年,Martin Roesch用C語言開發了開放源代碼(Open Source)的入侵檢測系統Snort。直至今天,Snort已發展成為一個具有多平台(Multi-Platform)、實時(Real-Time)流量分析、網絡IP數據包(Pocket)記錄等特性的強大的網絡入侵檢測/防御系統(Network Intrusion Detection/Prevention System),即NIDS/NIPS。Snort符合通用公共許可(GPL——GNU General Pubic License),在網上可以通過免費下載獲得Snort,並且只需要幾分鍾就可以安裝並開始使用。 Snort有三種工作模式:嗅探器、數據包記錄器、網絡入侵檢測系統。嗅探器模式僅僅是從網絡上讀取數據包並作為連續不斷的流顯示在終端上。數據包記錄器模式把數據包記錄到硬盤上。網絡入侵檢測模式是最復雜的,而且是可配置的。我們可以讓snort分析網絡數據流以匹配用戶定義的一些規則,並根據檢測結果采取一定的動作。 ## Snort安裝 安裝系統Kali Snort安裝方式一般分為源碼編譯安裝與包管理器安裝兩種方式。使用源碼下載會比較復雜,但是文檔齊全,debug方便一些;而包管理器安裝非常方便,一條命令解決所有問題 ``` apt-get install snort ``` ## Snort配置 ### 設置規則路徑 修改配置文件 ``` /etc/snort/snort.conf ```
查看規則
PS:Linux默認安裝之后Snort日志路徑等都會默認配置好,無需麻煩配置 ## Snort啟動 ``` snort -i eth1 -c /etc/snort/snort.conf -A fast -l /var/log/snort ```
## Snort測試 查看默認Snort ICMP規則
測試外網ping DMZ區域Web服務器
查看IDS日志記錄
分析日志可知,Snort允許ICMP通過,並且記錄了ICMP的相關數據。 # Guardian Guardian實現Snort+Iptables聯動效應 ## Guardian下載 Guardian需要去官網下載 ``` http://www.chaotic.org/guardian/ ``` ## Guardian安裝 ### 下載之后解壓 ``` tar -zxvf guardian-1.7.tar.gz ```
### 移動guardian到snort下 && 創建名單 && 日志 ``` → Qftm ← :~/桌面# mv guardian-1.7 /etc/snort/ → Qftm ← :~/桌面# touch /etc/snort/guardian-1.7/guardian.ignore 創建白名單 → Qftm ← :~/桌面# touch /etc/snort/guardian-1.7/guardian.target 創建黑名單 → Qftm ← :~/桌面# touch /var/log/snort/guardian.log guardian的日志 ```
### 復制block腳本 ``` → Qftm ← :/etc/snort/guardian-1.7# cp scripts/iptables_block.sh /usr/local/bin/guardian_block.sh → Qftm ← :/etc/snort/guardian-1.7# cp scripts/iptables_unblock.sh /usr/local/bin/guardian_unblock.sh ```
此操作是為了滿足在guardian.pl中設置的$blockpath和$unblockpath路徑
PS: ``` (1)Guardian的執行文件 guardian.pl (2)Guardian封鎖IP所要調用的外部程序 scripts/iptalbes_block.sh (3)Guardian解除對某一IP封鎖時,所需要調用的外部程序scripts/iptalbes_unblock.sh ``` ## Guardian配置 ### 配置guardian.conf ``` Interface eth1 HostGatewayByte 1 LogFile /var/log/snort/guardian.log AlertFile /var/log/snort/alert IgnoreFile /etc/snort/guardian-1.7/guardian.ignore TargetFile /etc/snort/guardian-1.7/guardian.target TimeLimit 86400 ```
PS: ``` TimeLimit:在多少秒后解除對IP的封鎖,86400秒也就是24小時之后解除對IP的封鎖。 AlertFile:警報信息,前提是snort以alert_fast輸出報警信息 ``` ### 配置guardian_block.sh和guardian_unblock.sh規則 編寫策略文件,配置對外來入侵者進行攔截和解除的策略
## Guardian啟動 ``` → Qftm ← :/etc/snort/guardian-1.7# perl guardian.pl -c guardian.conf ```
## Guardian啟動失敗解決 ### 缺少getopts.pl 參考筆者文章 [《Solve Perl Can't locate getopts.pl](https://www.cnblogs.com/qftm/p/12123586.html》) ### 找不到IP 配置guardian.conf,添加HostIpAddr字段 HostIpAddr 211.67.93.254 #接口IP # IPS測試 ## 外網攻擊者對Web服務器進行攻擊
## IPS檢測&攔截 ### IPS檢測
### IPS攔截
由上可知,外部攻擊者被IPS記錄攔截限制訪問