在Nagios的官方网站上有提供一个用于监控iptables的状态的脚本,但是官方提供的脚本直接是不能使用的需要修改才能使用,在这里就大致说一下,因为Nagios的中命令机制是使用Nagios用户运行的,所以在官网上提供的脚本没有做出调整前是无法正常使用的,官网提供的iptables监控脚本很简单,是使用iptables的指令统计出INPUT上实时的条数的有多少,如果条数-1等于0就告警。但是在普通用户是无法正常使用iptables的命令,如果没有做出调整在Nagios中会出现NRPE:Unable to read output的错误,所以就需要在系统中调整一下,需要给Nagios添加一条使用iptables命令的sudo免密的sudo权限:

[root@localhost ~]# visudo
…略…
nagios          ALL=(ALL)       NOPASSWD:/sbin/iptables
…略…

在这里要注意一下,在之前部署安装Nagios的时候一定要注意创建Nagios的用户为不可登录的useradd -s的参数,这样添加完sudo权限就不会有安全风险,最后在修改下官方的脚本就可以了:

#!/bin/bash
#You must add Nagios permission to iptables in / etc / sudoers
STATE_OK=0
STATE_WARNING=1
STATE_CRITICALLL=2
STATE_UNKNOWN=3

CHAINS=$(sudo iptables -nvL | grep 'Chain' | awk '{ print $2 }')

for CHAIN in $CHAINS ; do
    if [ "$CHAIN" != 'FORWARD' ] && [ "$CHAIN" != 'OUTPUT' ] && [ $(expr substr $CHAIN 1 4) != "LOG_" ] ; then
        CNT=$(expr $(sudo iptables -S $CHAIN | wc -l) '-' 1)
        if [ $CNT -eq 0 ] ; then
            echo "ERROR $CHAIN $CNT rules!"
            exit $STATE_CRITICALL
        else
             echo "OK $CHAIN $CNT rules"
            exit $STATE_OK
        fi
    fi
done