Ubuntu安装fail2ban:防暴力破解

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

🔧 安装 Fail2ban

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

bash 复制代码
sudo apt update
sudo apt install fail2ban

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

bash 复制代码
sudo systemctl status fail2ban

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

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

  1. 创建自定义配置文件:

    bash 复制代码
    sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
  2. 编辑配置文件 :

    使用文本编辑器(如 nano 或 vim)打开 jail.local 文件:

    bash 复制代码
    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] 部分,您可以找到这些参数并进行全局设置。一个配置示例如下:

ini 复制代码
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 192.168.1.100
bantime = 3600
findtime = 600
maxretry = 3

🔍 启用并监控服务

  1. 启用并启动防护 :

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

    bash 复制代码
    sudo systemctl restart fail2ban
    sudo systemctl enable fail2ban  # 设置为开机自启
  2. 检查服务状态 :

    使用 fail2ban-client 可以查看监控状态。

    • 查看所有活跃的监控项(jails):

      bash 复制代码
      sudo fail2ban-client status
    • 查看特定监控项(如 sshd)的详细信息,包括当前被禁止的IP列表:

      bash 复制代码
      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,可以手动解封:

      bash 复制代码
      sudo fail2ban-client set sshd unbanip IP地址
    • 手动封禁IP :在特殊情况下,也可以手动封禁IP:

      bash 复制代码
      sudo fail2ban-client set sshd banip IP地址

⚠️ 注意事项

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

按照以上步骤,您就可以在Ubuntu服务器上成功部署Fail2ban这道重要的安全防线了。它是一个非常强大的工具,正确的配置能极大增强服务器抵抗自动化攻击的能力。

如果你遇到了问题,可以按照以下步骤进行诊断和修复:

  1. 检查当前封禁列表

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

    bash 复制代码
    sudo fail2ban-client status sshd

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

  2. 临时解封你的IP

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

    bash 复制代码
    sudo fail2ban-client set sshd unbanip <你的IP地址>

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

  3. 将你的IP加入白名单

    为了避免再次被误封,最可靠的方法是将你的静态IP地址(或你所在网络的CIDR段)加入到 Fail2ban 的白名单中。编辑配置文件 /etc/fail2ban/jail.local,找到 [DEFAULT] 部分,修改 ignoreip 一行:

    ini 复制代码
    [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 服务使其生效:

    bash 复制代码
    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加入白名单,问题通常都能迎刃而解。

相关推荐
R²AIN SUITE1 分钟前
企业智能体平台私有化部署需要什么服务器?CPU、内存、显卡与项目管理集成的7个评估项
运维·服务器
坚定的共产主义生产设备永不宕机2 分钟前
服务器从裸机开始搭建ESXI虚拟机
linux·服务器·网络
刚入门的大一新生8 分钟前
Linux-线程封装
linux·运维·服务器
god_cvz12 分钟前
实践:Linux环境构建CTB工具(cesium-terrain-builder)
linux·gis·ctb
n1121221 分钟前
Docker 容器时区错 8 小时:3 个坑
运维·docker·容器·故障排查·服务器运维·容器时区
Android系统攻城狮27 分钟前
Linux FFmpeg深度解析之av_dump_format调用流程与实战(十一)
linux·运维·服务器·ffmpeg·1024程序员节·音视频进阶
Android系统攻城狮42 分钟前
Linux FFmpeg深度解析之avcodec_find_decoder调用流程与实战(十二)
linux·运维·服务器·ffmpeg·1024程序员节·音视频进阶
小白的码BUG之路1 小时前
K8s -- 启动一主二从节点
linux·运维·服务器
Escalating_xu1 小时前
【Linux 网络编程】IP 分片与重组:3000 字节的数据报,怎样拆开又拼回来?
linux·网络·tcp/ip
小相会自律1 小时前
全平台远程控制软件推荐2026:Win/Mac/Linux/手机/鸿蒙互通哪款好
linux·macos·智能手机·todesk·teamviewer·向日葵