如何配置Fail2ban工具以阻断SSH暴力破解攻击?
美国、香港服务器
如何配置Fail2ban工具以阻断SSH暴力破解攻击?
10-20 来源:
Fail2ban 是一款通过监控日志文件识别恶意行为(如 SSH 暴力破解)并自动阻断攻击 IP 的工具,配置步骤如下(以 Linux 系统为例,适用于 CentOS/Ubuntu/Debian):
一、安装 Fail2ban
根据系统包管理器选择对应命令:
CentOS/RHEL:
bash
sudo yum install epel-release # 先安装 EPEL 源(Fail2ban 在 EPEL 仓库中)
sudo yum install fail2ban -y
Ubuntu/Debian:
bash
sudo apt update && sudo apt install fail2ban -y
二、核心配置:创建自定义规则文件
Fail2ban 的默认配置文件为 /etc/fail2ban/jail.conf,但不建议直接修改(升级时可能被覆盖),需创建 jail.local 自定义配置(优先级高于 jail.conf):
bash
sudo vi /etc/fail2ban/jail.local
添加以下内容(针对 SSH 暴力破解的核心配置):
ini
[DEFAULT]
# 全局默认配置,适用于所有规则
ignoreip = 127.0.0.1/8 192.168.1.0/24 # 白名单IP/网段(不封禁,如内网IP)
bantime = 3600 # 封禁时间(秒),建议设为 3600(1小时),严重攻击可设为 86400(24小时)
findtime = 600 # 检测时间窗口(秒),600秒内超过 maxretry 次则触发封禁
maxretry = 5 # 最大失败次数,5次失败则封禁
# SSH 服务规则([sshd] 为规则名称,需与 filter 匹配)
[sshd]
enabled = true # 启用该规则(必须设为 true)
port = ssh # 目标端口(ssh 对应默认 22 端口,若修改过 SSH 端口需改为实际端口,如 2222)
filter = sshd # 引用的过滤规则(对应 /etc/fail2ban/filter.d/sshd.conf)
logpath = /var/log/auth.log # SSH 登录日志路径(CentOS 可能为 /var/log/secure)
backend = auto # 日志读取方式(auto 自动适配)
三、关键参数说明(根据需求调整)
ignoreip:白名单 IP 或网段,避免误封禁管理员 / 内网 IP。例如:ignoreip = 127.0.0.1/8 10.0.0.0/24 203.0.113.100(允许本地、内网 10.0.0.x、IP 203.0.113.100 访问)。
bantime:封禁时长,可根据攻击频率调整:
轻度攻击:3600(1 小时);
持续攻击:86400(24 小时);
永久封禁:-1(谨慎使用,避免误封后无法恢复)。
findtime 与 maxretry:
findtime = 600(10 分钟)内,若某 IP 失败登录次数超过 maxretry = 5 次,则触发封禁。
若攻击频繁,可收紧规则(如 findtime = 300,maxretry = 3)。
logpath:SSH 日志路径需与系统匹配:
Ubuntu/Debian:/var/log/auth.log;
CentOS/RHEL:/var/log/secure;
若自定义过 SSH 日志路径,需改为实际路径。
port:若 SSH 端口不是默认 22(如改为 2222),需将 port = ssh 改为 port = 2222。
四、启动并验证 Fail2ban
启动服务并设置开机自启:
bash
# 启动服务
sudo systemctl start fail2ban
# 设置开机自启
sudo systemctl enable fail2ban
# 查看状态(确认是否运行正常)
sudo systemctl status fail2ban
检查 SSH 规则是否生效:
bash
sudo fail2ban-client status sshd
正常输出示例(初始状态无封禁 IP):
plaintext
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
五、模拟攻击测试(验证拦截效果)
从另一台机器尝试多次错误登录:
bash
# 连续输入错误密码 6 次(超过 maxretry=5)
ssh 目标服务器IP
查看 Fail2ban 状态,确认 IP 被封禁:
bash
sudo fail2ban-client status sshd
若成功封禁,输出会显示被封禁的 IP:
plaintext
Status for the jail: sshd
...
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 攻击IP
验证被封禁的 IP 无法登录:从被封禁的 IP 再次尝试 SSH 登录,会提示 “连接超时” 或 “拒绝连接”(因已被防火墙拦截)。
六、管理操作(解封 IP / 调整规则)
手动解封某个 IP:
bash
sudo fail2ban-client set sshd unbanip 被封禁的IP
临时禁用 SSH 规则:
bash
sudo fail2ban-client stop sshd
修改规则后重启服务生效:
bash
sudo systemctl restart fail2ban
七、注意事项
避免误封管理员 IP:务必在 ignoreip 中添加管理员常用 IP 或内网网段,防止自己被封禁(若误封,可通过服务器本地控制台或 VNC 登录后解封)。
配合防火墙使用:Fail2ban 默认通过 iptables(Linux 防火墙)封禁 IP,需确保 iptables 服务正常运行(systemctl status iptables)。
日志权限:确保 Fail2ban 有 SSH 日志文件的读取权限(默认日志文件权限为 640,属组 adm,Fail2ban 运行用户 root 可正常读取)。
通过以上配置,Fail2ban 可自动识别并阻断 SSH 暴力破解攻击,大幅降低服务器被破解的风险。建议定期查看 /var/log/fail2ban.log 日志,监控攻击趋势(如是否有持续攻击源),必要时调整 bantime 等参数加强防护。
三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快