背景:由于外包人员或者自己有时候关闭iptables,就忘记启用,会造成系统的安全问题,如果被***攻入一台主机,它就能登陆你的其它主机,一般除了跳板机,iptables是不让内网机直接互相登陆;iptables里面的内容,默认一般只开用到的端口。因此监控iptables的启停就很重要。
原理:我用的监控方法是根据网络上借鉴的简单的方法,通过iptables -nL命令来判断命令的行数,iptables关闭时候行数为8,来设置zabbix的触发器报警,zabbix项目和触发器怎么设置在这就不多说了。当然我认为还是有很多别的方法的。
我想说的问题,是在我用脚本执行iptables -nL命令的时候,在客户端取值都没有问题,但服务端取值总是不正确,在这个问题困扰了我许久之后,终于查找网络资料,学习到了,在这记录下来,主要是问题是zabbix用户没有权限执行iptables这个命令,导致我最后一步总是出错。用visudo命令,为zabbix用户执行iptables命令提权,在这不要给太大权限,只给需要的。
visudo
zabbix ALL=NOPASSWD: /sbin/iptables -L -n
然而手工 su 到 zabbix 的用户,执行 sudo iptables -L -n 是能够正常获得结果的,但在监控那边还是只能得到0。之后查找资料发现了两个方法,其实是一个意思,因为默认sudo远程不让执行
visudo后注释掉这个
#Defaults requiretty #这行注释就可以了
或者加上这一行
Defaults:zabbix !requiretty
感谢前人的资料
首先,在 zabbix 中新建一个 item,比如命名为 iptables.lines,类型选择 zabbix agent,其他保持默认就好了
然后,在被监控的主机上,填写自定义配置,vi zabbix_agentd.conf,在最后添加一行:
UserParameter=iptables.lines, sudo /sbin/iptables -L -n | wc -l
最后重启zabbix_agentd
原文地址:http://blog.51cto.com/12107094/2314267