fail2ban拦截海外IP暴力破解SSH端口

服务器挂到公网后,SSH端口(默认22)几乎每天都会收到海外IP的扫描和暴力破解尝试。
如果你是刚接触运维的新手,手动封禁效率低、还容易误伤。Fail2ban 是一款入侵防御软件,能实时读取日志、自动识别暴力破解行为,并调用防火墙临时封禁恶意IP。
本文全程面向零基础,带你完成安装、配置、避坑和效果验证。

安装Fail2ban并确认服务状态

大多数Linux发行版(CentOS、Ubuntu、Debian)都可以直接通过软件源安装:

# CentOS / Rocky Linux / AlmaLinux
sudo yum install epel-release -y
sudo yum install fail2ban -y

# Ubuntu / Debian
sudo apt update
sudo apt install fail2ban -y

安装完成后,先启动服务并设为开机自启:

sudo systemctl enable --now fail2ban
sudo systemctl status fail2ban

看到绿色 active (running) 即表示安装成功。
如果你的SSH端口不是22,后面配置时需要用真实端口替换。

配置SSH保护规则,一句话封掉暴力尝试

Fail2ban 的配置目录在 /etc/fail2ban/,我们不需要修改主配置文件,只需新建一个 本地覆盖文件 /etc/fail2ban/jail.local

[DEFAULT]
# 默认封禁时间(秒), 60*10 = 600秒 = 10分钟;后期可改为更长时间
bantime = 600
# 检测窗口(秒),60*5 = 300秒
findtime = 300
# 在findtime内允许的最大失败次数
maxretry = 5
# 封禁后通过邮件警报(可选,这里留空表示不启用)
action = %(action_)s

[sshd]
enabled = true
# 如果SSH端口不是22,改为实际端口,例如 port = 2222
port = ssh
# 日志路径通常不用改,Fail2ban自动识别
logpath = %(sshd_log)s
# 后端监控方式
backend = %(sshd_backend)s

保存后重启Fail2ban使配置生效:

sudo systemctl restart fail2ban

现在,如果有人5分钟内尝试SSH登录失败5次,就会被封10分钟。
你可以用以下命令查看当前封禁列表:

sudo fail2ban-client status sshd

输出中的 IP list 区域会列出被暂时封禁的IP地址。

避坑:避免误封自己,一定要设置白名单

配置完成后,最常遇到的问题是把自己(或正常使用的办公IP)封了
尤其是当你从动态IP或服务器内SSH登录测试时。
解决方法:在 jail.local[DEFAULT] 段中添加白名单:

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 你的公网IP

多个IP或网段用空格隔开。
建议把你常用的远程IP(如家庭宽带公网IP、跳板机IP)写进去。
如果IP不固定,可以用网段,例如 114.114.0.0/16
修改后执行:

sudo fail2ban-client reload

另外,如果发现封禁时间太短(默认10分钟)起不到威慑作用,可以修改 bantime 为更长值,比如 bantime = 86400(1天)。
但注意测试期先设为短时间,确认规则正常后再调长。

验证封禁效果:看防火墙规则和日志

想知道Fail2ban是否真的拦截了暴力尝试,可以检查防火墙规则。
Fail2ban默认通过iptables或nftables操作(取决于系统配置)。
以iptables为例:

sudo iptables -L -n | grep f2b

如果看到类似 Chain f2b-sshd 且有 DROP 条目,说明已生效。
同时查看Fail2ban的日志确认动作:

sudo tail -f /var/log/fail2ban.log

日志中会显示 BanUnban 的IP、时间和触发规则。
你也可以手动模拟一次暴力破解失败:用错误密码连续SSH登录数次,再查看日志,应该能看到该IP被列入封禁。

常见问题答疑

Q:我改了配置文件,重启后没反应?
检查配置文件语法:sudo fail2ban-client -d 如果输出有错误行,按提示修正。

Q:如何知道哪些IP正在尝试暴力破解?
查看SSH日志:sudo cat /var/log/auth.log | grep Failed(Ubuntu)或 sudo cat /var/log/secure | grep Failed(CentOS)。

Q:如果我想永久封禁某个IP,而不是临时阻塞?
jail.local 中为该IP设置 bantime = -1,或者直接在防火墙添加DROP规则:sudo iptables -A INPUT -s 恶意IP -j DROP。但建议先用Fail2ban自动管理,必要时手动补充。

Q:Fail2ban支持封禁海外IP吗?
Fail2ban本身不区分国家地区,它基于日志行为判断。如果你确实想手动拦截已知海外IP段,可以结合IP地理库(如GeoIP)写自定义过滤器,但新手建议先从默认规则开始,效果已经足够。

完成以上步骤后,你的SSH端口已经具备基础的自动防御能力。
建议定期检查Fail2ban日志,观察封禁量,并根据实际情况调整 maxretrybantime
如果遇到异常,优先回到 ignoreip 检查是否误封了自己的网络。

分享到:
上一篇
美国原生住宅ISP低延迟跨境建站部署:从选IP到网站上线
下一篇
外贸独立站数据库定时异地多副本备份实操教程
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意