Ubuntu安装fail2ban:防暴力破解
总而言之,Fail2ban 和 SSH 密钥登录可以很好地协同工作。绝大多数“失效”情况都是由于IP在配置密钥前已被封禁或白名单未设置导致的。通过检查封禁列表并将可信IP加入白名单,问题通常都能迎刃而解。
在 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
- 查看所有活跃的监控项(jails):
💡 高级功能与配置
- 为其他服务配置防护: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地址
- 解封IP:如果您误封了某个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加入白名单,问题通常都能迎刃而解。
更多推荐



所有评论(0)