攔截相同IP連接數(shù)過大的會(huì)話請(qǐng)求
創(chuàng)新互聯(lián)長(zhǎng)期為上1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為荊州企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè),荊州網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
系統(tǒng)環(huán)境:Centos 6.5 x64
為避免Linux主機(jī)遭受***,需要定時(shí)查看主機(jī)上的會(huì)話連接數(shù)。對(duì)于同一IP會(huì)話數(shù)過高的,肯定判斷為不正常??梢酝ㄟ^shell腳本定時(shí)把不正常的IP加入進(jìn)防火墻中,來DROP掉它。
[root@host ssh]# vi /etc/ssh/blockip
#!/bin/bash
#auto drop IP ,IP address greater than 10
#by authors evanli 2017-6-15
ip_regex="[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}"
netstat -na --tcp| grep ESTABLISHED | awk '{ if ( index($4,":"'"$port_num"'"") ) print $5}' | awk -F ':' '{print $1}' | sort > /var/log/IPLIST
IP_ADDR=`tail -n 100 /var/log/IPLIST | egrep -o $ip_regex | sort -nr | uniq -c | awk '$1>=10 {print $2}'`
IPTABLES_CONF=/etc/sysconfig/iptables
for i in `echo $IP_ADDR`
do
cat $IPTABLES_CONF |grep $i >/dev/null
if
[ $? -ne 0 ];then
sed -i "5 a -A INPUT -s $i/32 -j DROP" $IPTABLES_CONF
else
echo "This is $i is exist in iptables,please exit ....."
fi
done
給腳本可執(zhí)行權(quán)限
[root@host ssh]# chmod +x /etc/ssh/blockip
添加到排程任務(wù),每30分鐘執(zhí)行一次
[root@host ssh]# vi /etc/crontab
*/30 * * * * root /etc/ssh/blockip
腳本說明:
1、首先生成所有連接數(shù)IP的文件/var/log/IPLIST
2、在IPLIST文件中統(tǒng)計(jì)出現(xiàn)數(shù)次大于10的IP。awk '$1>=10(此10數(shù)字可修成你需要的數(shù)字)
3、將出現(xiàn)數(shù)次大于10的IP加入到防火墻DROP掉。
4、判斷防火墻中是否存在該IP,如果有了,出現(xiàn)提示This is IP is exist in iptables,please exit .....
5、vi /etc/sysconfig/iptables查看DROP掉的IP是否有加入進(jìn)來。
6、查檢沒問題,最后需要重起防火墻,設(shè)定才會(huì)生效。
附件為腳本,可以直接運(yùn)行
以上腳本測(cè)試完成于2017.06.15,by evan.li