在甲骨文云上,配合系统防火墙使用 fail2ban 监控 SSH 登录日志并自动封禁异常 IP 是基础防护手段,但配置前务必确认日志路径和防火墙后端,避免把自己锁在门外。
先说结论:fail2ban 能有效缓解暴力破解,但必须结合甲骨文云控制台的安全列表规则,且配置时需区分操作系统版本及防火墙后端。
- 先判断操作系统版本及 SSH 日志具体路径(Ubuntu 为 auth.log,Oracle Linux 为 secure)
- 优先配置 jail.local 文件,明确指定 action 为 iptables 或 firewalld
- 操作前务必开启云控制台 VNC 或串行控制台,防止配置错误导致失联
- 验证防火墙规则是否实际写入且未误封自己
命令速用版
以下命令适用于大多数基于 Debian 或 RedHat 的系统,执行前请确保你有控制台访问权限以防失联。
# 安装 fail2ban
apt install fail2ban -y # Ubuntu/Debian
dnf install fail2ban -y # Oracle Linux/CentOS
# 启用并启动服务
systemctl enable fail2ban
systemctl start fail2ban
# 查看 SSH 防护状态
fail2ban-client status sshd
核心配置步骤
1. 确认日志路径与防火墙后端
不同系统日志位置不同,配置错误会导致 fail2ban 无法工作。同时需确认系统使用的防火墙工具。
- 日志路径:
- Ubuntu/Debian:/var/log/auth.log
- Oracle Linux/CentOS:/var/log/secure
- 防火墙后端检查:
systemctl status firewalld # 检查是否运行 firewalld systemctl status iptables # 检查是否运行 iptables
2. 创建本地配置文件
不要直接编辑 jail.conf,升级时会被覆盖。复制默认配置到 local 文件:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
3. 编辑配置
使用编辑器打开 /etc/fail2ban/jail.local,找到 [sshd] 部分。确保 enabled = true,并根据第一步确认的结果修改 logpath 为具体路径,同时指定 action。
[sshd]
enabled = true
port = ssh
# Ubuntu 填写 /var/log/auth.log,Oracle Linux 填写 /var/log/secure
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
# 根据防火墙后端选择 action,二选一
# action = iptables-multiport
# action = firewalld-multiport
4. 重启服务
配置完成后重启 fail2ban 使设置生效:
systemctl restart fail2ban
甲骨文云安全列表联动
fail2ban 仅管理操作系统内部防火墙,甲骨文云外层还有网络安全列表(Security List)。建议双重防护:
- 登录甲骨文云控制台,进入Networking -> Virtual Cloud Networks。
- 点击实例所在的子网(Subnet),进入Security Lists。
- 在Ingress Rules中,确保 SSH(端口 22)仅对可信 IP 开放,或保持 0.0.0.0/0 但依赖 fail2ban 封禁。
- 若需彻底杜绝扫描,可将 SSH 源 IP 限制为固定地址,此时 fail2ban 作为内部冗余防护。
紧急解封与验证
1. 查看状态
执行 fail2ban-client status sshd,观察 Currently failed 和 Total banned 计数。
2. 检查防火墙规则
使用 iptables -L -n 或 nft list ruleset 查看是否有 fail2ban 相关的链规则,确认被封 IP 是否出现在规则中。
3. 模拟测试
在另一台机器上尝试多次错误密码登录,观察本机日志 /var/log/fail2ban.log 是否有 Ban 记录,同时确认该 IP 是否无法再连接。
4. 紧急解封命令
若误封自己 IP 且无法 SSH 连接,需通过云控制台 VNC 登录后执行:
# 查看被禁 IP 列表
fail2ban-client status sshd
# 解封特定 IP
fail2ban-client set sshd unbanip <你的 IP 地址>
# 若配置错误导致服务异常,可临时停止 fail2ban
systemctl stop fail2ban
常见坑
1. 把自己锁在外面
配置错误可能导致本机 IP 被误封。操作前建议在甲骨文云控制台开启 VNC 或串行控制台访问权限,以便在 SSH 断开时恢复。
2. 日志路径不匹配
Oracle Linux 8/9 与 Ubuntu 的日志路径不同,若 logpath 指向空文件,fail2ban 不会封禁任何 IP。务必使用绝对路径而非宏定义。
3. 防火墙后端冲突
若系统使用 firewalld 但 fail2ban 配置为 iptables,规则可能无法写入。务必通过 systemctl 确认当前活跃防火墙服务,并在 jail.local 中指定对应的 action。
4. 默认端口风险
虽然修改 SSH 端口不能防止扫描,但能减少日志噪音。如果修改了端口,需在 fail2ban 配置中同步更新 port 参数。