使用iptables封锁IP
使用iptables封锁
#!/bin/bash
#iptables封锁
max=500 #最大访问量
logdir=/usr/local/nginx12/logs/access.log #nginx访问日志文件路径
confdir=/data/test.conf # ip黑名单
port=80
drop_ip=""
today=$(date +"%d/%b/%Y") # 今天的日志
#循环遍历日志文件取出访问量大于500的ip
for drop_ip in $(cat $logdir |grep $today| awk '{print $1}' | sort|uniq -c |sort -rn |awk '{if($1>500)print $2}')
do
grep -q "$drop_ip" $confdir && eg=1 || eg=0;
if (( $eg==0 ));then
echo $drop_ip >> $confdir
iptables -I INPUT -p tcp --dport $port -s $drop_ip -j DROP
echo ">>>>> `date '+%Y-%m-%d %H%M%S'` - 发现攻击ip -> $drop_ip " >> /data/test.log #记录log
fi
done
解锁iptables
#!/bin/bash
iptables -F INPUT #清空 filter表INPUT所有规则
#iptables -F #清空所有规则
完整代码
black_ip.sh
#!/bin/bash
#iptables封锁
max=500 #最大访问量
logdir=/usr/local/nginx12/logs/access.log #nginx访问日志文件路径
confdir=/data/test.conf # ip黑名单
port=80
drop_ip=""
today=$(date +"%d/%b/%Y") # 今天的日志
#循环遍历日志文件取出访问量大于500的ip
for drop_ip in $(cat $logdir |grep $today| awk '{print $1}' | sort|uniq -c |sort -rn |awk '{if($1>500)print $2}')
do
grep -q "$drop_ip" $confdir && eg=1 || eg=0;
if (( $eg==0 ));then
echo $drop_ip >> $confdir
iptables -I INPUT -p tcp --dport $port -s $drop_ip -j DROP
echo ">>>>> `date '+%Y-%m-%d %H%M%S'` - 发现攻击ip -> $drop_ip " >> /data/test.log #记录log
fi
done
# 解锁iptables
release_time=$(date "+%H")
if [[ $release_time -eq "23" ]]
then
iptables -F INPUT #清空 filter表INPUT所有规则
#iptables -F #清空所有规则
fi
*/1 * * * * /bin/sh black_ip.sh