在Debian中,使用fail2ban与Nginx

・3 分钟阅读

我看了一下logwatch的邮件,结果看到一种来自中国常见的攻击模式(译者注: 国内有很多被入侵的肉鸡,经常被国外黑客当成攻击源),并且试图找到我的服务器配置的细节,这是我不喜欢的。

我找到了fail2ban,它是一个在服务器日志(sshd,httpd,authd... )上执行某些正规表达式匹配的工具,比如,禁用违规的IP 。

然后我在Debian框中安装了fail2ban :


apt-get install fail2ban

然后我查看了一下/etc/fail2ban/jail.conf,发现了一些Apache条目,但是,没有针对Nginx的条目,我现在使用的服务器,所以,我决定创建一个jail.local来添加一些Nginx内容(在debian中推荐使用hassle-free升级)。

我开始复制默认fail2ban的Apache部分,因为在我的情况下,日志文件使用相同的格式,允许我轻松使用Awstats。然后,我修改了日志路由以指向Nginx,并使用Apache规则,如果它们不工作,我将以后调整它们。


[nginx]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/nginx*/*error.log
maxretry = 6

[nginx-noscript]
enabled = false
port = http,https
filter = apache-noscript
logpath = /var/log/nginx*/*error.log
maxretry = 6

[nginx-overflows]
enabled = false
port = http,https
filter = apache-overflows
logpath = /var/log/nginx*/*error.log
maxretry = 2

虽然这样,我看到的机器人不会在error.log中留下跟踪,因此我看了一个有趣的apache-badbots.conf ,然后,我在/usr/share/doc/fail2ban中找到了默认的fail2ban文档,其中有badbots脚本的用法示例,我添加到jail.local :


[apache-badbots]
enabled = true
port = http,http
filter = apache-badbots
logpath = /var/log/nginx*/*access.log
bantime = 172800
maxretry = 1

最后,我将这个加到文件顶部,在规则匹配和主机被禁止时发送邮件给自己。


[DEFAULT]
action = %(action_mwl)s

最后,重新启动服务,并且开始接收邮件:


sudo /etc/init.d/fail2ban restart

我相信这需要进一步调整,但是这是我和那些机器人战争的开始。

Zhongy0410 profile image