我的服务器偶尔会出现宕机情况,当我检查 nginx 日志时,通常会看到如下内容:
78.37.54.31 - - [20/Apr/2016:20:58:51 +0300] "\x00\x00\x00TZ\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x04\x010I\x00\x00\x00\x00\xFC\x01\xA8\xC0\x00!\x00\xFDk\x00\x00\x00\x00\x00\x00\x00\x00" 400 166 "-" "-" 89.169.219.212 - - [21/Apr/2016:11:37:22 +0300] "\x00\x00\x00 c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 400 166 "-" "-"
我使用这个推荐的默认配置设置了fail2banDigitalOcean 文章,但它并没有阻止这些扫描仪偶尔使我的服务器超载。现在安装 naxsi 对我来说不是一个选择。有人能帮我为 fail2ban 形成正确的正则表达式规则吗?“apache-badbots”和“apache-wootwoot”监狱(可以很容易地在谷歌上搜索到)对我来说不起作用。
答案1
在 /etc/fail2ban/jail.conf 中
[nginx-x00]
enabled = true
port = http,https
filter = nginx-x00
logpath = /var/log/nginx/access.log
bantime = 3600
maxretry = 1
并在 /etc/fail2ban/filter.d/nginx-x00.conf
[Definition]
failregex = ^<HOST> .* ".*\\x.*" .*$
然后你就大功告成了。下次有人再骚扰你,他/她将被禁言一小时或你在 bantime 中定义的任何时间。
不必担心带有 \x 的格式正确的请求,因为它们是 urlencoded 的,可以正常处理。