如何配置 fail2ban 防止甲骨文云 SSH 暴力破解

文章导读
在甲骨文云上,配合系统防火墙使用 fail2ban 监控 SSH 登录日志并自动封禁异常 IP 是基础防护手段,但配置前务必确认日志路径和防火墙后端,避免把自己锁在门外。
📋 目录
  1. 命令速用版
  2. 核心配置步骤
  3. 甲骨文云安全列表联动
  4. 紧急解封与验证
  5. 常见坑
A A

在甲骨文云上,配合系统防火墙使用 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)。建议双重防护:

  1. 登录甲骨文云控制台,进入Networking -> Virtual Cloud Networks
  2. 点击实例所在的子网(Subnet),进入Security Lists
  3. Ingress Rules中,确保 SSH(端口 22)仅对可信 IP 开放,或保持 0.0.0.0/0 但依赖 fail2ban 封禁。
  4. 若需彻底杜绝扫描,可将 SSH 源 IP 限制为固定地址,此时 fail2ban 作为内部冗余防护。

紧急解封与验证

1. 查看状态
执行 fail2ban-client status sshd,观察 Currently failed 和 Total banned 计数。

如何配置 fail2ban 防止甲骨文云 SSH 暴力破解

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 参数。