【功能】:
nagios 實現通過MD5實時監控 iptables 狀態,實時監控Iptables,防止人爲關閉後,忘了開啓,或者監控規則是否有增刪。
【說明】:
實現方式是:通過獲取iptables狀態的MD5值,校驗比對判斷iptables是否被修改。
實現流程是:首先獲取被監控服務器的iptables狀態MD5值,保存到nagios服務端配置文件中,服務端通過遠程獲取被監控端iptables狀態MD5值進行比對,如果不一致則發出報警。
很久以前發表過通過監控iptables規則條數《nagios 實時監控 iptables 狀態》,來達到監控目的,本文也是幾年前做的了,此法比前一種更嚴謹,當時說要公開,今天沒事把幾年前的東西發出來,也算是兌現承諾,方法算不上好,但是提供一種思路。
【實現】
首先在nrpe被監控端
#編輯nrpe.cfg文件,定義檢測命令。
command[check_iptables]=echo $(/usr/bin/sudo iptables -L -n | md5sum | awk '{print $1}')
#獲取被監控服務器的iptables狀態 md5值備用,這個命令是實時的,如果不修改iptables規則,則不會變。
echo $(/usr/bin/sudo iptables -L -n | md5sum | awk '{print $1}')
-----------------------------------------------------------------------------------
在nagios監控端
#定義檢測命令check_iptables
define command{ command_name check_iptables command_line $USER1$/check_iptables.sh $HOSTADDRESS$ $ARG1$ }
#定義服務,這裏的check_command 裏面的那串字符就是前面獲取的MD5值,這裏寫死到nagios服務器端,這種方法有優點也有缺點,缺點就是不適合批量和大量服務器,每次發現iptables變化都要重新獲取值新的MD5值並修改這個值,否則就一直報警,但是安全,這只是一種思路,之前是對遊戲服務器充值服務器做監控數量較少,當然也可以把MD5值放到被監控服務器上,比對2次值是否一致,不一致就報警,但是這樣只能報一次。
define service { use web-service host_name xx-xx-xx service_description iptables_status check_command check_iptables!a7b1e263a467008dade82c873dcc0db8 #對應主 機iptablesMD5 }
#腳本check_iptables.sh (這個腳本放到nagios服務器的插件目錄並給執行權限,默認是/usr/local/nagios/libexec)
#!/bin/bash prefix=/usr/local/nagios/libexec; check_iptab_md5=$($prefix/check_nrpe -H $1 -p port -c check_iptables); iptab_md5="$2" if [ $check_iptab_md5 == $iptab_md5 ];then echo "OK - Iptables are OK" exit 0 else echo " CRITICAL - Iptables are CRITICAL" exit 2 fi