一、背景
? ? ? ? 很多人想通過Snort開源軟件架構(gòu)一套IPS系統(tǒng)舅桩,由于Snort自身無法阻斷Gong JI 流量必須通過其他工具颗搂,例如包過濾防火Qiang來實現(xiàn)靶草,它們之間的溝通橋梁就是Guardian蹄胰,下面簡單說明這三者間的關(guān)系:
Snort:一款優(yōu)秀的開源基于主機的入侵檢測系統(tǒng);
Guardian: 一款用Perl編寫的開源工具奕翔,它通過讀取Snort報警日志將其中IP加入到Iptables規(guī)則中實現(xiàn)阻斷裕寨;
Iptables是開源防火Qiang軟件(包過濾系統(tǒng)),可用來阻斷GongJI源派继。
? ? ? 實驗原理不難理解宾袜,但很多人在進行這種實驗時有很多細節(jié)值得注意,Snort+Guardian+iptables工作彼此先關(guān)驾窟,環(huán)環(huán)相扣庆猫,所以很多新人在做這種實驗時,要么Snort無法報警绅络,要么檢測到GongJI流量無法阻斷月培,各種問題都有可能出現(xiàn)嘁字。
二、必備技能
? ? ? IDS開源工具的實驗步驟尤其是Snort相關(guān)的資料杉畜,在網(wǎng)上同質(zhì)化嚴重纪蜒,很多寫手都沒有真正的做過實驗,用東拼西湊的資料來賺取流量此叠,在搜尋資料過程中纯续,讓新手浪費很多寶貴時間,如果說浪費時間不算什么的話拌蜘,一連串的失敗杆烁,真的會打擊初學者的內(nèi)心,最后他們可能就放棄實驗了简卧。如何改變這一現(xiàn)狀:找個靠譜的教學資源,以節(jié)省你去試錯的時間成本烤芦。
完成實驗必備技能:
1.?Centos7系統(tǒng)中Snort+Iptables+Guardian聯(lián)動實戰(zhàn)
3.?iptables日志分析
三举娩、重要腳本分析
? ? ? ?很多新手常常在配置guardian中遇到無法讀取iptables報警的問題,主要原因是沒有弄明白guardian的運行機理构罗,下面就這個軟件的主要配置及程序文件進行說明铜涉。
1.guardian.sh 腳本分析
#!/bin/bash
cd /usr/local/bin
#start函數(shù)負責啟動guardian程序。它首先更新環(huán)境變量PATH以包含本地二進制路徑遂唧,然后使用指定的配置文件啟動guardian程序芙代。
start()
{
# 將/usr/local/bin添加到PATH環(huán)境變量中
? export PATH=$PATH:/usr/local/bin
# 使用/etc/guardian.conf啟動guardian.pl腳本
? /usr/local/bin/guardian.pl -c /etc/guardian.conf
}
# stop函數(shù)負責停止guardian程序。它首先檢查guardian是否正在運行盖彭,如果是纹烹,就殺掉進程,否則就輸出"guardian is not running ...."召边。
stop()
{
# 查詢名為'guardian.pl *-c'的進程
? ps aux |grep 'guardian.pl *-c' 2>&1 > /dev/null
#判斷語句铺呵,如果進程存在,則停止該進程
? if [ $? -eq 0 ];
? then
? kill `ps aux |grep 'guardian.pl *-c' `
#如果進程不存在隧熙,則輸出"guardian is not running ...."
? else
? echo "guardian is not running ...."
? fi
}
# status函數(shù)用于檢查guardian進程是否正在運行片挂,如果是,輸出"guardian is running ...."贞盯,否則輸出"guardian is not running ...."音念。
status()
{
? ps aux |grep 'guardian.pl *-c' 2>&1 > /dev/null
? if [ $? -eq 0 ];
? then
? echo "guardian is running ...."
? else
? echo "guardian is not running ...."
? fi
}
# 根據(jù)傳入的參數(shù)($1)執(zhí)行不同的函數(shù)
case "$1" in
# 如果傳入的參數(shù)是start,則調(diào)用start函數(shù)
start)
start
;;
# 如果傳入的參數(shù)是stop躏敢,則調(diào)用stop函數(shù)
stop)
stop
;;
# 如果傳入的參數(shù)是restart闷愤,則先調(diào)用stop函數(shù),再調(diào)用start函數(shù)
restart)
stop
start
;;
# 如果傳入的參數(shù)是status父丰,則調(diào)用status函數(shù)
status)
status;;
*)
# 如果傳入的參數(shù)不是上述的任何一種肝谭,那么輸出使用方法
echo $"Usage: $0 {start|stop|restart|status}"
esac
2.guardian_block.sh
#!/bin/bash
#這個SHELL腳本需要和iptables一起工作掘宪,主要功能是實現(xiàn)IP的阻斷。guardian會安裝下面方式來調(diào)用命令攘烛。
#guardian_block.sh <源 IP 地址> <網(wǎng)卡接口>
# 然后該腳本將發(fā)出一個命令魏滚,阻塞來自源 IP 地址的所有流量,判斷是否可以安全地阻塞該地址的邏輯是在 guardian 自身內(nèi)部完成坟漱。
## 從命令行參數(shù)獲取源 IP 地址和網(wǎng)卡接口
source=$1
interface=$2
# 通過 iptables 命令向 INPUT 鏈添加規(guī)則鼠次,阻塞來自源 IP 地址的所有流量
# 實驗之前,可以運行 'service iptables status' 檢查其狀態(tài)芋齿。
/sbin/iptables -I INPUT -s $source -i $interface -j DROP
# 向 INPUT 鏈添加另一個規(guī)則腥寇,阻塞來自源 IP 地址的 TCP 流量。
/sbin/iptables -I INPUT -p tcp -s $source -i $interface -j REJECT --reject-with tcp-reset
3.guardian.conf
這是主配置文件觅捆,我們需要修改的也就是根據(jù)自己系統(tǒng)網(wǎng)絡(luò)設(shè)備名稱來修改赦役。
Interface ? ? ? eth0? ?#改成自己系統(tǒng)的網(wǎng)卡設(shè)備名