在 Ubuntu 上使用 Fail2Ban 可以有效地增强系统的安全性,自动监控并阻止潜在的恶意 IP 地址,防止暴力破解等攻击。Fail2Ban 会通过监控日志文件,自动检测恶意活动,并根据规则动态更新防火墙规则,阻止攻击者的 IP 地址。
1. 安装 Fail2Ban
首先,你需要安装 Fail2Ban:
sudo apt update sudo apt install fail2ban
2. 配置 Fail2Ban
Fail2Ban 的主要配置文件位于 /etc/fail2ban
目录下。主要配置文件是 fail2ban.conf
和 jail.conf
。为了避免在更新时丢失自定义的配置,通常我们不直接修改 jail.conf
,而是创建一个本地配置文件 jail.local
来覆盖默认配置。
2.1 创建本地配置文件
首先,复制一份 jail.conf
为 jail.local
:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
这样,你就可以在 jail.local
文件中自定义设置,而不会影响到原始的 jail.conf
文件。
2.2 配置 Fail2Ban 的基本选项
打开 jail.local
文件进行编辑:
sudo nano /etc/fail2ban/jail.local
在文件中,你可以调整以下几个常见的基本选项:
-
ignoreip: 该选项指定哪些 IP 地址不应被 Fail2Ban 屏蔽。通常可以设置为你自己的 IP 地址或本地网络地址。
ignoreip = 127.0.0.1/8 ::1
-
bantime: 被禁止的时间(以秒为单位)。例如,
bantime = 3600
表示被禁止 1 小时。bantime = 600 # 禁止 10 分钟
-
findtime: 在多长时间内发生了多次失败登录才会触发封禁。例如,
findtime = 600
表示如果在 10 分钟内发生了 5 次失败登录,则封禁该 IP。findtime = 600 # 10 分钟内
-
maxretry: 允许的最大失败次数。例如,
maxretry = 3
表示 3 次失败登录后会触发封禁。maxretry = 3
2.3 启用常见服务保护
Fail2Ban 可以保护许多常见的服务,如 SSH、Apache、Nginx 等。配置文件中已经为这些服务提供了预定义的 "jail" 配置。
比如,启用 SSH 防护,确保 sshd
服务的保护是开启的:
[sshd] enabled = true port = ssh logpath = /var/log/auth.log maxretry = 3 bantime = 600
对于其他服务,你可以搜索并启用相关的 jail
配置,或者自己添加自定义的监控规则。
2.4 保护 SSH 服务
默认情况下,Fail2Ban 会监控 SSH 登录尝试(通过 sshd
),如果你对 SSH 登录做了很多尝试,它会自动封禁这些 IP 地址。
如果你想对 SSH 设置额外的保护,可以进一步修改 sshd
配置:
[sshd] enabled = true port = ssh logpath = /var/log/auth.log maxretry = 5 bantime = 600 findtime = 600
这样,如果在 10 分钟内 SSH 登录失败超过 5 次,Fail2Ban 会封禁该 IP 地址 10 分钟。
3. 启动并启用 Fail2Ban
完成配置后,启动 Fail2Ban 服务并使其在启动时自动启动:
sudo systemctl start fail2ban sudo systemctl enable fail2ban
4. 查看 Fail2Ban 状态
你可以使用以下命令查看 Fail2Ban 的状态,确认它是否正常运行:
sudo systemctl status fail2ban
你还可以查看某个特定 jail 的状态,例如 SSH 服务的状态:
sudo fail2ban-client status sshd
这将显示有关 SSH 防护的详细信息,包括被禁用的 IP 地址、禁用的时间等。
5. 手动解除封禁
如果某个 IP 地址被误封禁了,你可以使用以下命令手动解除封禁:
sudo fail2ban-client set sshd unbanip <IP_ADDRESS>
替换 <IP_ADDRESS>
为你想要解封的 IP 地址。
6. 自定义 Fail2Ban 过滤器
Fail2Ban 使用 "filter" 来分析日志文件,匹配潜在的恶意活动。如果现有的过滤器不适合你的需求,你可以创建自定义的过滤器。
- 过滤器配置文件位于
/etc/fail2ban/filter.d/
目录下。你可以创建一个新的配置文件,定义新的过滤规则。 - 在
jail.local
文件中配置新的 jail,引用你自定义的过滤器。
7. 其他常见服务的保护
Fail2Ban 支持保护很多服务,以下是一些常见的服务和对应的 jail.local
配置:
-
Apache:
[apache-auth] enabled = true port = http,https logpath = /var/log/apache*/*error_log maxretry = 3 bantime = 600
-
Nginx:
[nginx-http-auth] enabled = true port = http,https logpath = /var/log/nginx/*error.log maxretry = 3 bantime = 600
-
Postfix (邮件服务):
[postfix] enabled = true port = smtp,ssmtp logpath = /var/log/mail.log maxretry = 3 bantime = 600
8. 配置 Fail2Ban 邮件通知(可选)
如果你希望在有人被封禁时收到电子邮件通知,可以在 jail.local
中添加邮件通知配置。例如:
[DEFAULT] mta = sendmail destemail = your-email@example.com sender = fail2ban@example.com action = %(action_mwl)s
这会在有 IP 地址被封禁时,发送邮件通知给你。