http://xikder.blog.51cto.com/1423200/1404219
【功能】: 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 http://xikder.blog.51cto.com/1423200/1404219 (责任编辑:IT) |