
将 Linux 服务器暴露在网络中,就好比放置了一块吸引机器人的磁铁。如果您没有配置任何安全措施,您的日志中可能已经记录了成千上万次的登录失败尝试;不断有自动化程序尝试各种用户名和密码组合,试图通过暴力破解攻击来控制您的机器。
这时 Fail2ban 就派上用场了,它就像一个不知疲倦的守卫者。严格来说,它并非防火墙,而是通过分析系统日志来阻止入侵。一旦检测到有人试图强行闯入,它就会使用 iptables 或 nftables 等工具屏蔽其 IP 地址,从而将入侵者拒之门外。接下来,我们将介绍如何配置它,让你的服务器固若金汤。
Fail2ban究竟是什么?它是如何工作的?
简而言之,Fail2ban 是一个守护进程,它会持续监控您服务的日志文件。当它发现符合预定义规则(称为过滤器)的可疑模式时,就会开始统计失败次数。如果某个 IP 地址在一定时间内达到允许的尝试次数上限,程序就会执行相应的操作,通常是将该 IP 地址添加到防火墙的黑名单中。
这些配置被组织成所谓的“监狱”(jail)。监狱本质上是一组应用于特定服务(例如 SSH、Apache 或 MySQL)的规则。这样,您可以对远程访问设置非常严格的策略,而对 Web 服务器设置更宽松的策略,从而确保入侵者被自动阻止,而无需您每五分钟手动检查一次日志。

根据您的 Linux 发行版进行安装
根据您使用的系统不同,安装命令略有差异,但几乎所有官方存储库中通常都有提供。
- 在 Ubuntu 和 Debian 系统上: 很简单,你只需要运行
sudo apt update接下来sudo apt install fail2ban. - 在 Rocky Linux 或 AlmaLinux 系统上: 由于这些是企业版发行版,您必须首先启用 EPEL 存储库。
sudo dnf install epel-release然后使用以下命令安装软件包sudo dnf install fail2ban fail2ban-firewalld. - 在 Alpine Linux 系统中: 使用 APK 管理器
sudo apk add fail2ban而且,由于它使用 OpenRC,因此您必须启用它。sudo rc-update add fail2ban default并以……开始sudo rc-service fail2ban start.

主配置:.local 文件的秘密
一个非常常见的错误是直接编辑文件。 jail.conf千万别这么做!系统更新时,该文件可能会被覆盖。正确的做法是创建一个名为 `.txt` 的副本。 jail.local您在第二个文件中添加的任何参数都将优先于原始文件,您的更改将被覆盖。 免受更新影响.
首先,您可以使用以下命令克隆原始文件: sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local 然后用你喜欢的编辑器打开它,例如 nano 或 vim。在“部分”中 [默认] 在这里,您需要定义系统的整体行为:
- 禁令时间: 恶意 IP 地址冻结的时间长度。单位可以是秒,也可以用“m”表示分钟(例如,10m)。
- 查找时间: Fail2ban 检查错误的时间间隔。如果某人在一小时内失败 5 次,但检查时间为 10 分钟,则不会被封禁。
- 最大重试次数: 系统提示之前允许的失败尝试次数 够了,封禁该IP地址。.
- 忽略 IP: 避免被封禁至关重要。您必须在此处输入您的 公用IP地址 或者您的 VPN 范围。
逐步保护特定服务
完成常规设置后,就可以激活您最关心的服务的隔离区了。为了使保护措施生效,您必须进行以下设置。 enabled = true 在其各自的章节中 jail.local.
SSH 访问(最关键的一点)
端口 22 是首要目标。一个稳健的配置将定义 maxretry = 3 和 bantime = 3600 (一小时)。Fail2ban 将读取该文件。 /var/log/auth.log (在 Debian/Ubuntu 系统上) /var/log/secure (在 CentOS/RHEL 上)检测身份验证失败并关闭攻击者的访问权限。
Web服务器(Apache和Nginx)
如果您拥有网站或在线商店,机器人会尝试访问敏感路径,例如: /wp-admin o /login.php您可以在以下位置创建自定义筛选器: /etc/fail2ban/filter.d/ 检测这些模式。例如,为了 保护 WordPress监控 403 错误或失败尝试 wp-login.php如果 IP 地址超过 Apache 或 Nginx jail 中设置的限制,则将其屏蔽。
数据库和FTP
对于 MySQL,您可以监控该短语的错误日志。 用户访问被拒绝对于 FTP(例如 ProFTPD),确保以下几点至关重要: logpath 请确保日志文件的实际路径与 Fail2ban 的日志文件路径一致,因为如果 Fail2ban 找不到日志文件,则保护功能将无法正常工作。
使用 fail2ban-client 进行高级管理
您并非总是需要编辑文件并重启服务才能进行快速更改。该命令 fail2ban-client 它允许您通过控制台即时管理系统。
要查看哪些监狱处于活动状态以及有多少 IP 地址被阻止,请使用 sudo fail2ban-client status如果您想深入了解某项服务(例如 SSH),请运行 sudo fail2ban-client status sshd此外,如果因疏忽而导致 您已屏蔽一位同事 或者,您可以使用以下命令快速自行释放 IP 地址。 sudo fail2ban-client set sshd unbanip IP_A_DESBLOQUEAR.
维护和故障排除
如果您发现 Fail2ban 没有按预期进行阻止,首先应该查看该工具自身的日志文件。 /var/log/fail2ban.log。 使用 tail -f 您可以实时查看哪些人被禁言以及原因。
请记住,Fail2ban 会将锁定状态存储在 SQLite 数据库中。 /var/lib/fail2ban/fail2ban.sqlite3因此,如果您重启服务器,被封禁的 IP 地址将被解封。 将继续处于封锁状态 直到您的处罚期结束。每当您更改配置文件时,请务必使用以下命令应用更改: sudo systemctl restart fail2ban.
部署此工具可将您的服务器从易受攻击的目标转变为自动化堡垒,通过在网络层拦截恶意流量来降低 CPU 负载,让您高枕无忧,因为您无需担心僵尸网络无法通过暴力破解入侵。通过结合使用 .local 文件、管理特定 jail 以及持续的日志监控,您可以构建一个纵深防御系统,这对于任何 Linux 系统管理员来说都至关重要。
