338 字
1 分钟
fail2ban
检查 SSH 端口是否被爆破
journalctl -u ssh如果在日志中看到了大量的不明 IP 地址在进行尝试,就说明有人在尝试爆破了。
安装 Fail2Ban
在基于 Debian/Ubuntu 的系统中执行:
sudo apt updatesudo apt install fail2ban -y在基于 RHEL/CentOS 的系统中执行:
sudo yum install epel-releasesudo yum install fail2ban -y配置文件管理原则
Fail2Ban 默认配置文件为 /etc/fail2ban/jail.conf。为防止软件更新覆盖配置,禁止直接修改该文件。所有自定义配置应写入 /etc/fail2ban/jail.local。
创建并编辑配置文件:
sudo touch /etc/fail2ban/jail.localsudo nano /etc/fail2ban/jail.local标准配置方案
将以下内容写入 /etc/fail2ban/jail.local:
[DEFAULT]# 基础封禁参数bantime = 24hfindtime = 1hmaxretry = 3
# 启用阶梯式封禁(针对多次被封禁的 IP 延长封禁时间)bantime.increment = truebantime.factor = 1bantime.maxtime = 5w
# 指定防火墙后端(推荐使用 nftables)banaction = nftables-multiportbackend = systemd
[sshd]enabled = true# 指定实际使用的 SSH 端口port = 4399# 开启激进模式以捕获协议错误、预认证阶段断开等恶意探测filter = sshd[mode=aggressive]关键参数说明
- mode = aggressive:此模式不仅监控密码失败,还会监控密钥交换失败(kex_protocol_error)、连接重置(Connection reset by… [preauth])等行为。适用于已禁用密码登录、仅使用证书登录的服务器。
- bantime.increment:开启后,如果同一 IP 重复触发封禁,封禁时间将按指数级增长,最高可达
bantime.maxtime。 - findtime = 1h:将监控窗口延长至 1 小时,用于捕获低频尝试的扫描脚本。
服务管理命令
启动与重新加载
# 启动服务并设置开机自启sudo systemctl enable --now fail2ban
# 每次修改 jail.local 后重新加载配置sudo systemctl restart fail2ban查看状态
# 查看 Fail2Ban 整体运行状态fail2ban-client status
# 查看 SSH 监狱的具体封禁列表和统计fail2ban-client status sshd验证配置生效情况
# 查询当前 sshd 监狱生效的 maxretry 值fail2ban-client get sshd maxretry
# 查询当前 sshd 监狱生效的模式fail2ban-client get sshd filter手动操作
# 手动封禁一个 IPfail2ban-client set sshd banip <IP地址>
# 手动解封一个 IPfail2ban-client set sshd unbanip <IP地址>日志监控
通过查看日志确认 Fail2Ban 是否正常识别并过滤恶意请求:
# 查看 Fail2Ban 运行日志sudo tail -f /var/log/fail2ban.log
# 查看 SSH 登录尝试日志sudo journalctl -u ssh -f部分信息可能已经过时









