当前位置: > Linux服务器 > iptables >

通过nagios实现MD5实时监控iptables状态

时间:2014-12-12 01:56来源:51cto.com 作者:IT
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)
------分隔线----------------------------