所有可从互联网访问的服务器都有遭受恶意软件攻击的风险。例如,如果你有一个可以从公共网络访问的应用程序,攻击者可以使用暴力尝试来获得对该应用程序的访问。
Fail2ban是一个工具,通过监测服务日志中的恶意活动,帮助保护你的Linux机器免受暴力和其他自动攻击。它使用正则表达式来扫描日志文件。所有与模式相匹配的条目都会被计算,当它们的数量达到某个预定义的阈值时,Fail2ban会使用系统防火墙在特定时间内禁止违规的IP。禁令期满后,该IP地址将从禁令列表中删除。
这篇文章解释了如何在Debian 10上安装和配置Fail2ban。
$ sudo apt update
$ sudo apt install fail2ban
一旦完成,Fail2ban服务将自动启动。你可以通过检查该服务的状态来验证它。
$ sudo systemctl status fail2ban
输出结果将是这样的。
fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2021-03-10 18:57:32 UTC; 47s ago
...
就这样了。至此,您已经在您的Debian服务器上运行Fail2Ban。
/etc/fail2ban/jail.conf
/etc/fail2ban/jail.d/*.conf
/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local
配置Fail2ban最简单的方法是将jail.conf复制到jail.local并修改.local文件。更高级的用户可以从头开始建立一个.local 配置文件。.local 文件不需要包含对应的 .conf 文件中的所有设置,只需要包含那些你想覆盖的设置。
通过复制默认的 jail.conf 文件来创建一个 .local 配置文件。
$ sudo cp /etc/fail2ban/jail.{conf,local}
要开始配置Fail2ban服务器,请用文本编辑器打开jail.local文件。
$ sudo nano /etc/fail2ban/jail.local
该文件包括注释,描述了每个配置选项的作用。在这个例子中,我们将改变基本设置。
ignoreip = 127.0.0.1/8 ::1 123.123.123.123 192.168.1.0/24
bantime = 1d
要永久禁止该IP,使用一个负数。
findtime是设置禁言前失败次数的间隔时间。例如,如果Fail2ban被设置为在5次失败后禁止一个IP(maxretry,见下文),这些失败必须发生在findtime的时间内:
findtime = 10m
maxretry是一个IP被禁止之前的失败次数。默认值被设置为5,这对大多数用户来说应该是不错的。
maxretry = 5
action = %(action_mw)s
%(action_mw)s禁止了违规的IP,并发送了一封电子邮件和一份whois报告。如果你想在邮件中包括相关的日志,把动作设置为%(action_mwl)s。
你也可以改变发送和接收电子邮件的地址。
destemail = admin@febhost.com
sender = root@febhost.com
[postfix]
enabled = true
port = smtp,ssmtp
filter = postfix
logpath = /var/log/mail.log
我们在上一节中讨论的设置,可以在每个监狱中设置。下面是一个例子:
[sshd]
enabled = true
maxretry = 3
findtime = 1d
bantime = 4w
ignoreip = 127.0.0.1/8 11.22.33.44
过滤器位于/etc/fail2ban/filter.d目录下,存储在一个与监狱同名的文件中。如果你有自定义的设置和使用正则表达式的经验,你可以对过滤器进行微调。
每次修改配置文件时,必须重启Fail2ban服务以使修改生效。
$ sudo systemctl restart fail2ban
$ fail2ban-client -h
这个工具可以用来禁止/取消IP地址,改变设置,重启服务,等等。下面是几个例子。
# 获取服务器的当前状态
$ sudo fail2ban-client status
# 检查监狱的状态
$ sudo fail2ban-client status sshd
# 解除一个 IP 的禁令
$ sudo fail2ban-client set sshd unbanip 11.22.33.44
# 禁用一个 IP
$ sudo fail2ban-client set sshd banip 11.22.33.44