在 Ubuntu 上安装和配置 Fail2ban 是增强服务器安全性的重要一步,它能有效防止暴力破解等恶意攻击。下面为您整理了完整的操作指南。
🔧 安装 Fail2ban
在终端中执行以下命令即可完成安装: - sudo apt update
- sudo apt install fail2ban
复制代码安装完成后,Fail2ban 服务会自动启动。您可以通过以下命令验证服务是否正常运行: - sudo systemctl status fail2ban
复制代码⚙️ 基础配置:创建配置文件
不建议直接修改默认配置文件,因为它们可能在软件更新时被覆盖。最规范的做法是创建 .local 文件来覆盖默认设置。
-
创建自定义配置文件: - sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
复制代码 -
编辑配置文件:
使用文本编辑器(如 nano 或 vim)打开 jail.local 文件: - sudo nano /etc/fail2ban/jail.local
复制代码
🛡️ 核心配置参数说明
下表列出了需要重点关注的配置项及其含义,您可以根据需要进行修改。
| 配置参数 | 说明与示例 | 建议值 |
|---|
| bantime | 封禁时长。IP地址被禁止访问的秒数。-1 表示永久封禁。bantime = 3600 表示封禁1小时。 | 3600 (1小时) 或 86400 (1天) | | findtime | 检测时间窗口。在此时间窗口内(秒)的失败尝试会被累计。findtime = 600 表示在10分钟内的失败尝试会被统计。 | 600 (10分钟) | | maxretry | 最大重试次数。在 findtime 时间窗口内,允许的最大失败尝试次数。maxretry = 3 表示失败3次即触发封禁。 | 3 或 5 | | ignoreip | 白名单IP。此列表中的IP地址将永远不会被封锁。务必将您自己的IP或可信网络段加入其中,以防误封。 | 127.0.0.1/8 ::1 192.168.1.0/24 |
在配置文件的 [DEFAULT] 部分,您可以找到这些参数并进行全局设置。一个配置示例如下: - [DEFAULT]
- ignoreip = 127.0.0.1/8 ::1 192.168.1.100
- bantime = 3600
- findtime = 600
- maxretry = 3
复制代码🔍 启用并监控服务
-
启用并启动防护:
默认情况下,通常只有 [sshd] 监狱(jail)是启用的,它用于保护SSH服务。确认其已启用后,重启Fail2ban以使配置生效。 - sudo systemctl restart fail2ban
- sudo systemctl enable fail2ban # 设置为开机自启
复制代码 -
检查服务状态:
使用 fail2ban-client 可以查看监控状态。
- 查看所有活跃的监控项(jails):
- sudo fail2ban-client status
复制代码 - 查看特定监控项(如 sshd)的详细信息,包括当前被禁止的IP列表:
- sudo fail2ban-client status sshd
复制代码
💡 高级功能与配置
- 为其他服务配置防护:Fail2ban的强大之处在于它可以为多种服务(如Nginx, Apache, FTP等)提供防护。您可以在 jail.local 文件中为这些服务创建新的配置段,并将 enabled 设置为 true。
- 邮件通知:可以配置Fail2ban,使其在封禁IP时发送邮件通知。这需要在配置中设置收件人邮箱(destemail)和发件人邮箱(sender),并将操作(action)修改为 %(action_mw)s(发送带Whois信息的邮件)或 %(action_mwl)s(附加相关日志)。
- 手动管理封禁:
- 解封IP:如果您误封了某个IP,可以手动解封:
- sudo fail2ban-client set sshd unbanip IP地址
复制代码 - 手动封禁IP:在特殊情况下,也可以手动封禁IP:
- sudo fail2ban-client set sshd banip IP地址
复制代码
⚠️ 注意事项
- 谨慎配置:修改配置参数时,特别是 maxretry 和 findtime,要权衡安全性和便利性,过于严格的规则可能会误封正常用户。
- 检查日志:如果遇到问题,可以查看Fail2ban的日志文件 /var/log/fail2ban.log 来获取详细的调试信息。
- 防火墙依赖:Fail2ban通过调用系统的防火墙(如 iptables 或 firewalld)来实际执行封禁操作,请确保系统防火墙正常工作。
按照以上步骤,您就可以在Ubuntu服务器上成功部署Fail2ban这道重要的安全防线了。它是一个非常强大的工具,正确的配置能极大增强服务器抵抗自动化攻击的能力。
如果你遇到了问题,可以按照以下步骤进行诊断和修复:
-
检查当前封禁列表
首先,你需要登录到服务器(如果无法登录,可能需要通过云服务商提供的VNC控制台方式),然后运行以下命令查看SSH相关的监控单元(jail)是否封禁了你的IP: - sudo fail2ban-client status sshd
复制代码在输出中查看 Banned IP list。如果发现了你的IP地址,那就是原因所在。
-
临时解封你的IP
确认IP被误封后,可以手动解封,这是最快的恢复方法: - sudo fail2ban-client set sshd unbanip <你的IP地址>
复制代码执行后,立即尝试使用SSH密钥登录。如果成功,说明问题根源就是IP被误封。
-
将你的IP加入白名单
为了避免再次被误封,最可靠的方法是将你的静态IP地址(或你所在网络的CIDR段)加入到 Fail2ban 的白名单中。编辑配置文件 /etc/fail2ban/jail.local,找到 [DEFAULT] 部分,修改 ignoreip 一行: - [DEFAULT]
- ignoreip = 127.0.0.1/8 ::1 192.168.1.100 203.0.113.50
复制代码将 192.168.1.100 和 203.0.113.50 替换为你需要放行的IP地址。修改保存后,重启 Fail2ban 服务使其生效: - sudo systemctl restart fail2ban
复制代码 -
检查SSH和Fail2ban的配置
确保你的SSH服务(/etc/ssh/sshd_config)和 Fail2ban 的监控配置(/etc/fail2ban/jail.local 中 [sshd] 部分)指向的是同一个端口和正确的日志文件路径。例如,如果你修改了SSH端口,Fail2ban的配置也必须同步修改。
💡 最佳实践建议
为了从根本上避免这类问题,建议你:
- 先配密钥,再装Fail2ban:理想的流程是:1) 在SSH服务端配置好公钥认证;2) 客户端测试密钥登录无误;3) 最后再安装和配置 Fail2ban。这样可以确保在配置过程中因密码输错而触发封禁。
- 务必设置IP白名单:这是最重要的一步,尤其对于你的办公网络或家庭IP,将其加入 ignoreip 列表,一劳永逸。
- 考虑完全禁用密码登录:在确保密钥登录稳定可靠后,可以在SSH配置中设置 PasswordAuthentication no。这样既提升了安全性,也从根本上避免了因密码尝试失败而触发 Fail2ban 的可能。
💎 总结
总而言之,Fail2ban 和 SSH 密钥登录可以很好地协同工作。绝大多数“失效”情况都是由于IP在配置密钥前已被封禁或白名单未设置导致的。通过检查封禁列表并将可信IP加入白名单,问题通常都能迎刃而解。 |