mod_security/iptables/Postfixのブロック数をメール通知する。

日々mod_securityやiptablesのブロック数なんかを調べる時に都度ログから集計して見ていたりしたので、この際メールで集計結果を受け取るような仕組みを作ってみます。

ログの対象は、iptablesのfilteredログ、httpdのmod_securityでブロックしたログ、PostfixでReject,Disconnectした数を集計してみます。
iptablesのログは、「DENY_COUNTRY / FILTERED」など、特定の国や特定ポートでフィルタした際のログを出すようにしておきます。

また、集計にあたっては国コードを出すためにcc.wariate.jpさんを使用させていただきました。


#!/bin/bash

setday=`LANG=en date "+%h %_d" -d "-1 days"`
setday2=`LANG=en date "+%h %d" -d "-1 days"`

echo "============================================="
echo "Yesterday $setday Status."
echo "---------------------------------------------"
echo "mod_security count."
echo "https: "
grep "$setday2" /var/log/httpd/ssl_error_log|grep client|awk '{print $8}'|sed -e "s/\]//g"|xargs -I% dig %.cc.wariate.jp txt +short|sed -e's/"//g'|sort|uniq -c|sort -r
echo "http: "
grep "$setday2" /var/log/httpd/error_log|grep client|awk '{print $8}'|sed -e "s/\]//g"|xargs -I% dig %.cc.wariate.jp txt +short|sed -e's/"//g'|sort|uniq -c|sort -r
echo "---------------------------------------------"
echo "Postfix reject count."
echo "reject: "
grep reject /var/log/maillog|grep "$setday"|awk '{print $10}'|sed 's/.*\[[^0-9]*\([0-9.]*\)[^0-9]*.*/\1/'|xargs -I% dig %.cc.wariate.jp txt +short|sed -e's/"//g'|sort|uniq -c|sort -r
echo "disconnect: "
grep disconnect /var/log/maillog|grep "$setday"|awk '{print $8}'|sed 's/.*\[[^0-9]*\([0-9.]*\)[^0-9]*.*/\1/'|xargs -I% dig %.cc.wariate.jp txt +short|sed -e's/"//g'|sort|uniq -c|sort -r
echo "---------------------------------------------"
echo "iptable Deny Country count."
grep "DENY_COUNTRY" /var/log/iptables.log | grep "$setday" |awk '{print $7}'|sed -e "s/\]//g"|sort|uniq -c|sort -r
echo "---------------------------------------------"
echo "iptable filtered count."
grep "FILTERED" /var/log/iptables.log | grep "$setday" |awk '{print $12}'|sed -e "s/SRC=//g"|sort|xargs -I% dig %.cc.wariate.jp txt +short|sed -e's/"//g'|sort|uniq -c|sort -r
echo "---------------------------------------------"

実行結果は下記のような感じに。


=============================================
Yesterday Jan 26 mod_security count.
https:
2 JP
2 DE
1 US
1 IT
http:
126 US
6 JP
4 AU
2 RU
2 KR
2 CN
2 CH
1 FR
---------------------------------------------
=============================================
Yesterday Jan 26 Postfix reject count.
reject:
1 US
disconnect:
14 US
10 CN
10 BR
---------------------------------------------
=============================================
Yesterday Jan 26 iptable Deny Country count.
1118 MX
951 RU
626 CN
258 NL
87 BR
32 KR
28 LT
11 IN
5 UA
---------------------------------------------
=============================================
Yesterday Jan 26 iptable filtered count.
648 US
168 BR
129 CN
81 JP
56 CH
54 GB
47 TW
33 IT
29 KR
23 FR
23 DE
23 CA
20 EG
16 NL
16 IN
12 ES
9 VN
9 AT
8 RU
7 GR
7 BE
6 SG
6 PL
6 NZ
6 IL
6 IE
6 ID
5 SE
5 SA
4 UA
4 NG
4 MX
4 IR
4 CZ
4 AR
3 ZA
3 TH
3 SC
3 PK
3 NO
3 ML
3 HK
3 EE
3 CO
2 SV
2 KW
2 HU
2 FI
2 BO
2 BG
2 AU
1 ZM
1 RO
1 PT
1 LY
1 DZ
1 DO
1 BD
1 AZ
1 AM
---------------------------------------------

国コードMXが不正なアクセスが多いですねぇ。