概述

之前有介绍通过saltstack统一管理线上防火墙规则,并且是在默认规则为DROP策略下,即意味着,如果没有明确允许开放或允许出去访问,则防火墙会拒绝请求;特别是在线上防火墙改造时,可能由于历史原因不知道开放了那些服务,也不知道机器上的服务是否有出去请求的情况下,此时需要记录防火墙访问日志,并查看是否有合法的请求被阻止了,这样会影响业务的,你懂滴,另外如果我们的机器被扫描,被攻~击时,也会有大量的拒绝,因此不管出于什么目的,我们需要对防火墙是否有被阻止的请求做监控;做到有的放矢;有问题报警;做到心中有数;不是吗?

方法:
由于iptables防火墙会记录被drop的数量,同时可以记录防火墙的日志;所以我们可以通过获取被阻止包的数量统计来粗略的知道是否有被拒绝的请求,并查看日志,来确定是否是误伤或是被攻~击了,加强处理;

示例:
先在防火墙头的INPUT OUPUT中添加记录日志:

/etc/sysconfig/iptables文件中添加如下两条(放在对应规则最下方):
-A INPUT -j LOG --log-prefix "iptables-IN-DROP:"
-A OUTPUT -j LOG --log-prefix "iptables-OUT-DROP:"

这样防火墙就会记录被阻止的日志(/var/log/message);

查看防火墙状态,是否有被阻止的请求:
$ sudo iptables -vnL |grep "Chain"|grep "DROP"
zabbix监控iptables防火墙状态之是否有丢弃的包(攻-击)
如图所示,INPUT OUTPUT规则中有被DROP

查看被阻止的日志
为了查清楚,我先清除防火墙日志

$ sudo iptables -Z
$ telnet 115.182.6.91 60122

由于我没有允许出去访问115.182.6.91 这台机器的60122端口;
因此查看防火墙日志如下:

Oct 21 10:15:48 app-backend-29 kernel: iptables-out-DROP:IN= OUT=eth0 SRC=10.8.51.29 DST=115.182.6.91 LEN=52 TOS=0x10 PREC=0x00 TTL=64 ID=13822 DF PROTO=TCP SPT=4020 DPT=60122 WINDOW=14600 RES=0x00 SYN URGP=0 
Oct 21 10:15:49 app-backend-29 kernel: iptables-out-DROP:IN= OUT=eth0 SRC=10.8.51.29 DST=115.182.6.91 LEN=52 TOS=0x10 PREC=0x00 TTL=64 ID=13823 DF PROTO=TCP SPT=4020 DPT=60122 WINDOW=14600 RES=0x00 SYN URGP=0 
Oct 21 10:15:49 app-backend-29 san: [euid=san]:san pts/1 2018-10-21 10:09 (172.188.103.253):[/usr/local/zabbix-3.4.4/scripts]2018-10-21 10:15:48 san telnet 115.182.6.91 60122

基于以上基础我们来添加zabbix监控;

zabbix监控防火墙状态之DROP

实现的方法上面已经描述过了,思路就是脚本监控防火墙状态上有没有被阻止的包,有就输出,没有就是0;
触发器报警条件就是大于0时并且一分钟内多于100时触发报警(这个阀值可按业务自行调);一般重点关注OUTPUT
上;因为业务可能会调用外面的接口,当然也有可能有不明程序出去请求;而INPUPT上多时,可能是有开放的服务被防火墙阻止或有非法请求(被攻~击)?;总之得分析处理啦!

1、zabbix脚本

[app-backend-29 scripts]$ cat iptables_droped_status.sh 
#!/bin/bash
check(){
  sudo iptables -vnL |grep "Chain $1"|grep "DROP"|awk '{print $2,":",$5}'|awk -F":" '{if($2>0) {print $2} else {print "0"}}'
}

case $1 in 
     INPUT)
     check $1
     ;;
     OUTPUT)
     check $1
     ;;
     FORWARD)
     check $1
     ;;
     *)
     check
     ;;
esac

脚本执行效果如下:
zabbix监控iptables防火墙状态之是否有丢弃的包(攻-击)

2、zabbix监控项
有了脚本获取数据,同时要有监控项;

cat /usr/local/zabbix-3.4.4/zabbix_agentd.conf.d/iptables.conf
# iptables Drop status
UserParameter=iptables.droped[*],/bin/bash /usr/local/zabbix-3.4.4/scripts/iptables_droped_status.sh $1

这里的监控项是iptables.droped,web上添加监控项,触发器时需要;先记住;

3、zabbix web配置
由于之前的文章已经反复有记录添加监控项和触发器的示例,这里只简单的描述下
配置-->模板--> 找到之前的某一个基础监控的模板,如下:
zabbix监控iptables防火墙状态之是否有丢弃的包(攻-击)
其他的添加类似;
效果如图:
zabbix监控iptables防火墙状态之是否有丢弃的包(攻-击)

添加触发器:

({Ickey Basic Status:iptables.droped[INPUT].last()}>0) and  ({Ickey Basic Status:iptables.droped[INPUT].count(60)}>100)

最后值大于0(即有被阻止的请求)同时满足一分钟内阻止大于100说明有业务一直被阻止,再大点可能就是被攻~击之类非法访问!,因此需要查看日志分析分析啦!
zabbix监控iptables防火墙状态之是否有丢弃的包(攻-击)

到这里添加完成!

效果如下:
查看主机的最新数据:
zabbix监控iptables防火墙状态之是否有丢弃的包(攻-击)
报警信息如下:
zabbix监控iptables防火墙状态之是否有丢弃的包(攻-击)

以上是基于生产中对防火墙安全方面的规则订制和监控;以最快确认问题,分析问题~如有不当之处欢迎留言,另外如果你觉得对你有用,记得点个赞哈~