如何批量查找日志中特殊字符的IP地址? 如何在nginx/apache日志文件,导出IP文件,生成IP列表文件,并加入iptables屏蔽
满足条件的所有ip地址:
more log.ctohome.com.135 |grep baidu|grep Mozilla|grep Showya|awk '{print $1}'>ip.1
[[email protected] nginx]# more ip.1 | wc
1488895 1488895 21391447
居然有148万条记录
过滤掉重复的记录:
more log.ctohome.com.135 |grep baidu|grep Mozilla|grep Showya|awk '{print $1}'|sort|uniq>ip.2
[[email protected]]# more ip.2 | wc
1876 1876 26991
原来不重复的只有不到2000个IP
把IP地址/ip文件,批量导入iptables屏蔽起来
awk '{system("iptables -I INPUT -s "$0" -j DROP ")}' ip.2
自动化:
vi /backup/www.ctohome.com/block.ip.sh
#!/bin/sh
YEAR=`date +%Y`
MONTH=`date +%m`
DAY=`date +%d`
HOUR=`date +%H`
MIN=`date +%M`
DATE=$YEAR-$MONTH-$DAY-$HOUR-$MIN
more www.ctohome.com.access.log |grep baidu|grep Mozilla|grep Showya|awk '{print $1}'|sort|uniq>ip."$DATE"
awk '{system("iptables -I INPUT -s "$0" -j DROP ")}' ip."$DATE"
需要的时候执行下 sh block.ip.sh 即可。如果要很频繁的执行,可考虑crontab
避免重复添加iptables:
awk '{system("iptables -D INPUT -s "$0" -j DROP;iptables -I INPUT -s "$0" -j DROP ")}' ip."$DATE"