一個很實用的iptables腳本,實作自動拒絕可疑IP位址,并發送報警郵件,短信
linux:~ # cat iptables
#!/bin/bash
touch /root/back_bad_ip.txt
time=`date +"%Y-%m-%d %H:%M:%S"`
ar=`wc -l /root/back_bad_ip.txt |awk '{print $1}'`
sleep 1
#紅色自己改有端口, SYN_RECV等
netstat -an |grep 80 |grep -v "STREAM"|awk '{print $5 }'|sort | awk -F: '{print $1}'|uniq -c |awk '$1 > 100 {print $1,$2}' > /root/bad_ip ;
cat bad_ip |awk -vtime="$time" '{print time" | " $1" | "$2}' >>/root/back_bad_ip.txt
ar2=`wc -l /root/back_bad_ip.txt |awk '{print $1}'`
for i in `awk '{print $2}' /root/bad_ip`
do
iptables -I INPUT -s $i -j DROP
done
i1=`echo "$ar2-$ar" |bc `
tail0=`tail -n $i1 /root/back_bad_ip.txt`
for i2 in `echo "$ar2-$ar" |bc`
if ([ $i2 -gt 0 ]&&[ $i2 -lt 5 ]) ; then
sendmail -t <<EOF
from: [email protected]
subject: warning
$time 你的系統可能被攻擊,請盡快作出響應,目前有$i1個攻擊源IP位址,系統已經幫你攔截。
$tail0
EOF
fi
tail5=`tail -n $i1 /root/back_bad_ip.txt`
if [ $i2 -gt 5 ] ; then
subject: Serious warning
$time 你的系統正在被攻擊,請盡快作出響應,目前有$i1個攻擊源IP位址,系統已經幫你攔截。
$tail5
自己寫的,shell不會用,但是這個腳本肯定好用。
可以在back_bad_ip.txt中檢視到連接配接的記錄 ,做到有據可查
linux:~ # cat back_bad_ip.txt
時間 建立連接配接的次數 IP位址
2011-07-09 08:59:37 | 127 | 118.144.78.36
2011-07-09 08:59:37 | 211 | 118.144.78.37
2011-07-09 08:59:37 | 115 | 118.144.78.38
2011-07-09 08:59:37 | 113 | 118.144.78.42
把這個腳本放在背景執行
linux:~ # /root/10_seconds &
linux:~ # cat 10_seconds
while [ 1 ]
/root/iptables
sleep 10
他會每10秒鐘執行一次/root/iptables腳本
郵件收到的效果
隻有在有人攻擊的情況下才生效
這個有個缺點就是,10秒鐘執行一次的話如果有攻擊會有很多重複的 規則添加到IPTABLES規則中,建議固定的規則儲存在配置檔案中。在一定的時間重新開機一次iptables服務,來清空自動添加的規則。 不影響原有規則 。
本文轉自zhaoyun00 51CTO部落格,原文連結:http://blog.51cto.com/zhaoyun/606878