VPS侦探论坛

 找回密码
 注册
查看: 56584|回复: 9

咨询军哥,nginx如何通过日志里的关键词自动屏蔽IP?

[复制链接]
发表于 2014-9-29 20:15:37 | 显示全部楼层 |阅读模式

最近被论坛注册机骚扰的很头疼,所以想通过什么方式可以自动扫描nginx日志来屏蔽IP。
例如:
=======================================================================

122.227.71.170 - - [29/Sep/2014:14:09:47 +0800] "formhash=&posttime=&wysiwyg=1&typeid=1&noticeauthor=&noticetrimstr=&noticeauthormsg=&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呢?请教军哥或其他高手帮忙,非常感谢。
美国VPS推荐: 遨游主机LinodeLOCVPS主机云搬瓦工80VPSVultr美国VPS主机中国VPS推荐: 阿里云腾讯云。LNMP付费服务(代装/问题排查)QQ 503228080
发表于 2014-9-30 09:36:14 | 显示全部楼层


  1. cat /home/wwwlogs/access.log |grep "formhash=&posttime="|awk '{print $1}'> blockips.txt

  2. for blockips in `cat blockips.txt`;
  3. do iptables -I INPUT -s "${blockips}" -j DROP; done
复制代码


大体这样自己再完善就行了
Linux下Nginx+MySQL+PHP自动安装工具:https://lnmp.org
 楼主| 发表于 2014-9-30 18:28:40 | 显示全部楼层

我试一下,非常感谢!
美国VPS推荐: 遨游主机LinodeLOCVPS主机云搬瓦工80VPSVultr美国VPS主机中国VPS推荐: 阿里云腾讯云。LNMP付费服务(代装/问题排查)QQ 503228080
 楼主| 发表于 2014-9-30 20:08:09 | 显示全部楼层



再请教军哥,如果想根据日志中的多个关键词来屏蔽IP,该如何编写呢?另外,这个脚本里iptable会不会重复添加屏蔽同一个IP呢?

[ 本帖最后由 Thinking 于 2014-9-30 20:17 编辑 ]
Linux下Nginx+MySQL+PHP自动安装工具:https://lnmp.org
发表于 2014-9-30 23:14:24 | 显示全部楼层

往上面加grep就行了
cat /home/wwwlogs/access.log |grep "formhash=&posttime="|grep ”我是关键词“|awk '{print $1}'> blockips.txt

会重复

军哥运维代购:http://shop63846532.taobao.com/

 楼主| 发表于 2014-9-30 23:24:49 | 显示全部楼层

感谢军哥的回复,那么有办法解决iptable重复添加规则的问题吗?
 楼主| 发表于 2014-10-1 00:43:35 | 显示全部楼层

再请教军哥,按照你提供的脚本制作运行后出现下述错误,该如何解决?谢谢!
=======================================================
iptables v1.4.7: invalid mask `blockips.txt' specified
Try `iptables -h' or 'iptables --help' for more information.
=======================================================
blockips.txt可以正确生成,但是iptables好像不认?!
美国VPS推荐: 遨游主机LinodeLOCVPS主机云搬瓦工80VPSVultr美国VPS主机中国VPS推荐: 阿里云腾讯云。LNMP付费服务(代装/问题排查)QQ 503228080
 楼主| 发表于 2014-10-2 21:46:28 | 显示全部楼层

7楼的问题请军哥指点,多谢!
Linux下Nginx+MySQL+PHP自动安装工具:https://lnmp.org
发表于 2014-10-3 08:59:19 | 显示全部楼层

只要你日志格式是lnmp默认的,获取和封ip的代码和我前面发的一样就不会有问题

按给出的错误你脚本那边可能执行了iptables -I INPUT -s192.168.1.1/blockips.txt -j DROP 一个类似的命令造成的
这个命令mask部分明显是不符合要求的
美国VPS推荐: 遨游主机LinodeLOCVPS主机云搬瓦工80VPSVultr美国VPS主机中国VPS推荐: 阿里云腾讯云。LNMP付费服务(代装/问题排查)QQ 503228080
 楼主| 发表于 2014-10-3 18:36:18 | 显示全部楼层



已经解决了,感谢军哥。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|VPS侦探 ( 鲁ICP备16040043号-1 )

GMT+8, 2024-10-16 15:33 , Processed in 0.028379 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表