咨询军哥,nginx如何通过日志里的关键词自动屏蔽IP?
最近被论坛注册机骚扰的很头疼,所以想通过什么方式可以自动扫描nginx日志来屏蔽IP。例如:=======================================================================122.227.71.170 - - "formhash=&posttime=&wysiwyg=1&typeid=1¬iceauthor=¬icetrimstr=¬iceauthormsg=&subject=%e6%96%af%e8%af%ba%e5%85%8b%e4%b8%8a%e6%b5%b7%e5%a4%a7%e5%b8%88%e8%b5%9b%e8%90%bd%e5%b9%95+%e7%90%83%e6%a1%8c%e5%b1%a1%e6%88%90%e2%80%9c%e6%9b%bf%e7%bd%aa%e7%be%8a%e2%80%9d&message=%e5%b9%b3%e5%ba%b8%e3%80%82%e5%8c%85%e6%8b%ac%e5%a5%a5%e6%b2%99%e5%88%a9%e6%96%87%e5%9c%a8%e5%86%85%ef%bc%8c%e6%80%bb%e5%85%b1%e6%9c%89%e4%b9%9d%e5%90%8d%e4%b8%96%e7%95%8c%e5%89%8d16%e7%90%83%e6%89%8b%e6%b2%a1%e8%83%bd%e8%b7%a8%e8%bf%87%e7%ac%ac%e4%b8%80%e8%bd%ae%e8%bf%99%e9%81%93%e5%9d%8e%ef%bc%8c%e8%80%8c%e5%bd%93%e4%bb%96%e4%bb%ac%e8%b0%88%e8%ae%ba%e8%b5%b7%e4%b8%ba%e4%bd%95%e4%bc%9a%e8%bf%99%e6%a0%b7%e6%97%b6%ef%bc%8c%e2%80%9c%e7%90%83%e6%a1%8c%e2%80%9d%e6%88%90%e4%ba%86%e8%a2%ab%e6%8f%90%e5%8f%8a%e9%a2%91%e7%8e%87%e6%9c%80%e9%ab%98%e7%9a%84%e4%b8%a4%e4%b8%aa%e5%ad%97%e3%80%82%0d%0a+%e5%a4%a9%e6%b0%94%e4%b8%80%e7%9b%b4%e5%9c%a8%e6%89%be%e9%ba%bb%e7%83%a6%0d%0a+%e4%b8%8a%e5%91%a8%e4%ba%94%ef%bc%8c%e4%b8%81%e4%bf%8a%e6%99%96VS%e6%a0%bc%e9%9b%b7%e5%a7%86%c2%b7%e5%a4%9a%e7%89%b9%e7%9a%84%e6%af%94%e8%b5%9b%e8%bf%9b%e8%a1%8c%e5%88%b0%e4%b8%80%e5%8d%8a%ef%bc%8c%e4%b8%80%e5%9c%ba%e5%a4%a7%e9%9b%a8%e5%80%be%e7%9b%86%e8%80%8c%e4%b8%8b%ef%bc%8c%e7%9f%ad%e7%9f%ad%e5%8d%81%e5%87%a0%e5%88%86%e9%92%9f%e4%b9%8b%e5%86%85%ef%bc%8c%e5%8e%9f%e6%9c%ac%e8%bf%98%e5%9c%a8%e7%90" 400 166 "-" "-" -
=======================================================================
上面的例子中这条日志中加粗显示部分就是关键词,如何根据这个关键词让nginx自动扫描并屏蔽该IP呢?请教军哥或其他高手帮忙,非常感谢。 cat /home/wwwlogs/access.log |grep "formhash=&posttime="|awk '{print $1}'> blockips.txt
for blockips in `cat blockips.txt`;
do iptables -I INPUT -s "${blockips}" -j DROP; done
大体这样自己再完善就行了 我试一下,非常感谢! 再请教军哥,如果想根据日志中的多个关键词来屏蔽IP,该如何编写呢?另外,这个脚本里iptable会不会重复添加屏蔽同一个IP呢?
[ 本帖最后由 Thinking 于 2014-9-30 20:17 编辑 ] 往上面加grep就行了
cat /home/wwwlogs/access.log |grep "formhash=&posttime="|grep ”我是关键词“|awk '{print $1}'> blockips.txt
会重复 感谢军哥的回复,那么有办法解决iptable重复添加规则的问题吗? 再请教军哥,按照你提供的脚本制作运行后出现下述错误,该如何解决?谢谢!
=======================================================
iptables v1.4.7: invalid mask `blockips.txt' specified
Try `iptables -h' or 'iptables --help' for more information.
=======================================================
blockips.txt可以正确生成,但是iptables好像不认?! 7楼的问题请军哥指点,多谢! 只要你日志格式是lnmp默认的,获取和封ip的代码和我前面发的一样就不会有问题
按给出的错误你脚本那边可能执行了iptables -I INPUT -s192.168.1.1/blockips.txt -j DROP 一个类似的命令造成的
这个命令mask部分明显是不符合要求的 已经解决了,感谢军哥。:lol
页:
[1]