跨境站服务器fail2ban拦截海外暴力破解
跨境站服务器如何用Fail2ban有效拦截海外暴力破解
跨境站服务器经常遭到来自海量的暴力破解尝试,尤其是 SSH 和 Web 后台登录接口。
Fail2ban 是一款轻量级防御工具,通过分析日志、临时封禁恶意 IP,能大幅降低被攻破的风险。
本文从零开始,带你完成在跨境站服务器上部署 Fail2ban 并针对海外攻击源进行拦截的完整流程。
安装 Fail2ban 前的准备
确保服务器系统为 CentOS 7+、Ubuntu 18.04+ 或其他主流 Linux 发行版,拥有 root 或 sudo 权限。
以下命令分别适用于不同系统:
- CentOS / RHEL / Rocky Linux:
yum install epel-release -y && yum install fail2ban -y - Ubuntu / Debian:
apt update && apt install fail2ban -y
安装完成后,先不要急着启动,我们需要先配置规则,避免把自己封在外面。
核心配置:针对海外暴力破解的规则
Fail2ban 的主配置文件是 /etc/fail2ban/jail.conf,
但官方建议新建 /etc/fail2ban/jail.local 来覆盖默认设置,
这样升级时不会丢失自定义内容。
创建并编辑 /etc/fail2ban/jail.local:
sudo vim /etc/fail2ban/jail.local
写入以下基础配置(着重保护 SSH 服务):
[DEFAULT]
bantime = 3600 # 封禁时长,单位秒(1小时)
findtime = 600 # 检测时间窗口,10分钟内
maxretry = 3 # 在 findtime 内最多允许失败 3 次
ignoreip = 127.0.0.1/8 ::1 # 永远不封禁本地回环地址
action = %(action_mwl)s # 封禁并发送邮件警告(可选)
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log # Ubuntu路径;CentOS为/var/log/secure
maxretry = 3
bantime = 3600
注意:如果 SSH 端口不是默认的 22,请将port = ssh改为实际端口号,例如port = 2222。
针对海外攻击的重要优化:大部分暴力破解来自境外 IP,可以结合 GEOIP 模块只封禁非中国 IP,但新手直接让 Fail2ban 封禁所有超过阈值的 IP 也能有效过滤掉绝大多数海外扫描。
更精细的做法是配合 ipset 和 xtables-addons 实现国家区域封禁,但本文先聚焦 Fail2ban 本身。
常见的误伤与白名单设置
如果你的跨境站服务器同时有国内用户通过 SSH 登录,
或者你希望自己的管理 IP 永远不被 Ban,
可以在 [DEFAULT] 段或具体 jail 的 ignoreip 中添加 IP 或段,
用空格分隔:
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 114.114.114.114
这里 114.114.114.114 是你自己的公网 IP,请根据实际替换。ignoreip 中的地址不受限速和封禁影响。
启动与验证效果
配置完成后,启动 Fail2ban 并设置开机自启:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
然后检查服务运行状态:
sudo fail2ban-client status
可以看到 Status 下显示已激活的 jail(比如 sshd)。
进一步查看 SSH jail 的封禁详情:
sudo fail2ban-client status sshd
输出会列出当前被封禁的 IP 列表,以及总封禁次数。
如果服务器刚上线,可能没有封禁记录;
你可以故意用错误密码尝试几次,然后再次查看,就会看到自己的 IP 被列入 Banned IP list。
避坑指南 & 高频问题
Q1:Fail2ban 启动后 SSH 连不上怎么办?
A:大概率是配置错误导致本机 IP 被封。解决方案:通过 VNC 或面板控制台登录,修改 jail.local 中 ignoreip 添加你的管理 IP,然后重启 systemctl restart fail2ban。
Q2:只拦截海外 IP,但 Fail2ban 本身不支持区域过滤?
A:Fail2ban 主要基于失败次数封禁,无论国内国外。如果要只拦截海外,需要结合 ipset 和 xt_geoip 模块,或者使用类似 firewall-cmd --permanent --new-ipset=china --type=hash:net 的方式提前加载国内 IP 段并反向设定规则,操作稍复杂。对于跨境站,建议直接允许国内 IP 段,而对其他 IP 启用 Fail2ban 的严格策略(把 maxretry 设小)。也可以先观察日志,如果大部分攻击来源是海外 IP,直接用 Fail2ban 封禁全段也是有效方案。
Q3:Fail2ban 日志在哪里?如何查看封禁日志?
A:默认日志文件位于 /var/log/fail2ban.log,可实时查看:sudo tail -f /var/log/fail2ban.log。
Q4:如何解除一个误封的 IP?
A:使用命令 sudo fail2ban-client set sshd unbanip 。如果需要临时恢复所有封禁:sudo fail2ban-client unban --all。
Q5:除了 SSH 还想保护 web 后台(例如 WordPress 登录)怎么办?
A:Fail2ban 内置了 wordpress 等 filter,但也需要配置相应 jail。以 Nginx 为例,将 [nginx-http-auth] 或 [wordpress] 的 enabled = true,并指定正确的 logpath。具体参考官方文档或后续教程。
效果验证与运维建议
部署一周后,检查 fail2ban-client status sshd 的封禁总数,通常跨境服务器每天能拦截几十到几百次尝试。
如果封禁数量极少,请检查日志是否被正确读取(logpath 设置是否正确,service 是否正常运行)。
建议每季度检查一次 ignoreip 是否需要更新(比如管理 IP 变了),同时关注 Fail2ban 官方是否有安全更新。
对于高并发业务,也可以适当加大 findtime 和 maxretry,避免误伤合法流量。
如果你按照本文步骤配置完成,跨境站服务器的暴力破解风险将大幅降低。
后续可以根据实际需求扩展 Jail 规则,比如保护 FTP、邮件服务或 Web 管理后台。
遇到异常时优先回看避坑指南中的常见问题,能帮助你快速定位并解决问题。