1. 程式人生 > >zabbix監控iptables防火牆狀態之是否有丟棄的包(攻-擊)

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"
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防火牆狀態之是否有丟棄的包(攻-擊)

以上是基於生產中對防火牆安全方面的規則訂製和監控;以最快確認問題,分析問題~如有不當之處歡迎留言,另外如果你覺得對你有用,記得點個贊哈~