在 Ubuntu 上安装和配置 Fail2ban 是增强服务器安全性的重要一步,它能有效防止暴力破解等恶意攻击。下面为您整理了完整的操作指南。

🔧 安装 Fail2ban

在终端中执行以下命令即可完成安装:

sudo apt update
sudo apt install fail2ban

安装完成后,Fail2ban 服务会自动启动。您可以通过以下命令验证服务是否正常运行:

sudo systemctl status fail2ban

⚙️ 基础配置:创建配置文件

不建议直接修改默认配置文件,因为它们可能在软件更新时被覆盖。最规范的做法是创建 .local 文件来覆盖默认设置。

  1. 创建自定义配置文件

    sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    
  2. 编辑配置文件
    使用文本编辑器(如 nanovim)打开 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次即触发封禁。 35
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

🔍 启用并监控服务

  1. 启用并启动防护
    默认情况下,通常只有 [sshd] 监狱(jail)是启用的,它用于保护SSH服务。确认其已启用后,重启Fail2ban以使配置生效。

    sudo systemctl restart fail2ban
    sudo systemctl enable fail2ban  # 设置为开机自启
    
  2. 检查服务状态
    使用 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地址
      

⚠️ 注意事项

  • 谨慎配置:修改配置参数时,特别是 maxretryfindtime,要权衡安全性和便利性,过于严格的规则可能会误封正常用户。
  • 检查日志:如果遇到问题,可以查看Fail2ban的日志文件 /var/log/fail2ban.log 来获取详细的调试信息。
  • 防火墙依赖:Fail2ban通过调用系统的防火墙(如 iptablesfirewalld)来实际执行封禁操作,请确保系统防火墙正常工作。

按照以上步骤,您就可以在Ubuntu服务器上成功部署Fail2ban这道重要的安全防线了。它是一个非常强大的工具,正确的配置能极大增强服务器抵抗自动化攻击的能力。
如果你遇到了问题,可以按照以下步骤进行诊断和修复:

  1. 检查当前封禁列表
    首先,你需要登录到服务器(如果无法登录,可能需要通过云服务商提供的VNC控制台方式),然后运行以下命令查看SSH相关的监控单元(jail)是否封禁了你的IP:

    sudo fail2ban-client status sshd
    

    在输出中查看 Banned IP list。如果发现了你的IP地址,那就是原因所在。

  2. 临时解封你的IP
    确认IP被误封后,可以手动解封,这是最快的恢复方法:

    sudo fail2ban-client set sshd unbanip <你的IP地址>
    

    执行后,立即尝试使用SSH密钥登录。如果成功,说明问题根源就是IP被误封。

  3. 将你的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.100203.0.113.50 替换为你需要放行的IP地址。修改保存后,重启 Fail2ban 服务使其生效:

    sudo systemctl restart fail2ban
    
  4. 检查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加入白名单,问题通常都能迎刃而解。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐