使用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

标签: shell

添加新评论