zabbix监控iptables防火墙状态之是否有丢弃的包(攻-击)

概述

之前有介绍通过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 $1"|grep "DROP"

如图所示,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

脚本执行效果如下:

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配置
由于之前的文章已经反复有记录添加监控项和触发器的示例,这里只简单的描述下
配置-->模板--> 找到之前的某一个基础监控的模板,如下:

其他的添加类似;
效果如图:

添加触发器:

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

最后值大于0(即有被阻止的请求)同时满足一分钟内阻止大于100说明有业务一直被阻止,再大点可能就是***类,因此需要查看日志分析分析啦!

到这里添加完成!

效果如下:
查看主机的最新数据:

报警信息如下:

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

原文地址:http://blog.51cto.com/dyc2005/2306969

时间: 2024-08-05 18:49:05

zabbix监控iptables防火墙状态之是否有丢弃的包(攻-击)的相关文章

zabbix监控nginx连接状态

zabbix学习笔记:zabbix监控nginx连接状态 zabbix监控nginx zabbix可以监控nginx的状态,关于一个服务的状态可以查看服务本身的状态(版本号.是否开启),还应该关注服务能力(例如以nginx的负载效果:连接数.请求数和句柄数).下面我们使用zabbix监控nginx. nginx的安装 如果想要查看nginx的服务状态,在对nginx进行源码安装的时候要选中–with-http_stub_status_module模块. 1.解压安装包: [[email prot

使用zabbix监控mysql主从状态

公司mysql架构为一主多从.在日常使用过程中我们经常会遇到主从不同步的情况,为了及时处理此问题现使用zabbix监控mysql主从状态并设置触发器,如有异常则发送邮件报警. 我们都知道使用命令"show slave status \G"可以查看mysql从的状态,下面用脚本方式检查其状态. 在mysql-slave中进入zabbix-agent目录创建脚本文件. cat mysql_slave_status.sh #!/bin/bash /usr/local/mysql/bin/my

zabbix监控nginx性能状态

nginx在生产环境中的应用越来越广泛,所以需要对nginx的性能状态做一些监控,来发现出来出现的问题.nginx处理流程图具体如下: 注释:Accepts(接受).Handled(已处理).Requests(请求数)是一直在增加的计数器.Active(活跃).Waiting(等待).Reading(读).Writing(写)随着请求量而增减 名称 描述 指标类型 Accepts(接受) NGINX 所接受的客户端连接数 资源: 功能 Handled(已处理) 成功的客户端连接数 资源: 功能

zabbix监控之nginx状态监控(一)

[本文档所介绍的内容适用于公司测试/生产环境等常见的zabbix监控应用部署] 一:相关环境准备: 1.1相关软件以及系统 系统要求:Centos 6及以上(64位) 环境要求:zabbix监控系统(服务端,客户端) 相关中间件:nginx (版本1.6.0及以上) 二:配置zabbix监控nginx 2.1修改nginx配置文件,在server区块添加nginxs状态监控配置,如下所示 location ^~ /ngx_status {                 stub_status

zabbix监控nginx连接状态(转)

zabbix监控nginx zabbix可以监控nginx的状态,关于一个服务的状态可以查看服务本身的状态(版本号.是否开启),还应该关注服务能力(例如以nginx的负载效果:连接数.请求数和句柄数).下面我们使用zabbix监控nginx. nginx的安装 如果想要查看nginx的服务状态,在对nginx进行源码安装的时候要选中–with-http_stub_status_module模块. 1.解压安装包: [[email protected] mnt]# tar xvf nginx-1.

zabbix监控supervisorctl status状态程序运行状态无法获取值的解决方法

前几天做zabbix监控supervisorctl status的程序运行状态,获取RUNNING的状态,如果配置是RUNNING,就返回结果为1,如果非RUNNING,就返回为0 测试过程中,不管怎么执行,本地执行都很正常,就是zabbix获取的时候,就是一个非正常值,排查了很久,认为zabbix获取的有问题,经排查,发现是zabbix执行supervisorctl status时没有权限,所以返回的值就不正常了,报错如下:error: <class 'socket.error'>, [Er

zabbix监控iptables时遇到的问题

背景:由于外包人员或者自己有时候关闭iptables,就忘记启用,会造成系统的安全问题,如果被***攻入一台主机,它就能登陆你的其它主机,一般除了跳板机,iptables是不让内网机直接互相登陆;iptables里面的内容,默认一般只开用到的端口.因此监控iptables的启停就很重要. 原理:我用的监控方法是根据网络上借鉴的简单的方法,通过iptables -nL命令来判断命令的行数,iptables关闭时候行数为8,来设置zabbix的触发器报警,zabbix项目和触发器怎么设置在这就不多说

ZABBIX监控TCP连接状态

一.获取监控数据 # /bin/netstat -an|awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}' LISTEN 6 ESTABLISHED 1 TIME_WAIT 1 TCP各监控状态描述 ESTABLISHED socket已经建立连接 CLOSED socket没有被使用,无连接 CLOSING 服务器端和客户端都同时关闭连接 CLOSE_WAIT 等待关闭连接 TIME_WAIT 表示收到了对方的FIN报文,并发送出了ACK报文

zabbix监控mysql主从状态

首先上监控的脚本: #!/bin/bash status=`mysql -u root -p123 -e "show slave status\G" | egrep "Slave_IO_Running|Slave_SQL_Running" | awk -F: '{print $2}' | tr "\n" " "` arr_status=(`echo $status`) [[ ${arr_status[0]} =~ "