Linux通过ipset批量屏蔽IP地址
linux分析web日志的时候常常需要过滤一些条件进行更有效的分析。比如排除搜索引擎爬虫,spam等内容。
可能我们在Web服务器软件里(比如nginx/apache)已经禁止某些spam[?]正确抓取网站页面。但是他们还是会连接进来消耗资源。且日志中会写入大量的日志,比如UA:cdnunion_monitor就是这样一个垃圾。尽管我已经将他的所有访问返回410,但它每天还是大量尝试抓取我的网站页面。因此最好的办法就是iptables[?]封锁
选取部分日志提取cdnunion_monitor的所有IP,demo日志选取请根据实际情况修改
find access*15*10_* -exec grep 'cdnunion' {} \;|awk '{print $1}'|sort|uniq
通常使用iptables一条一个添加相关命令即可,但是由于数量过多,而且后期不好维护,所以使用ipset管理IP集然后配合iptables使用。
安装ipset
yum install ipset
创建名字为cdnunion的IP集
ipset create cdnunion hash:net
向cdnunion的IP集增加IP的单个命令如下
ipset add cdnunion 60.251.86.53
ipset list # 可以看到变化
因为从日志获取到的IP太多,所以可以用个bash批处理添加IP(过程略)
iptables增加规则
iptables -I INPUT -m set --match-set cdnunion src -p tcp -j DROP
service iptables save
service iptables restart
现在可以跟踪查看日志是否还有cdnunion特征的IP访问,因为我开始只选了一个区间的日志,并没有选更大的范围。所以我这里有个别遗漏掉的IP,后续通过ipset add cdnunion增加即可。