一、背景

云服务器使用的是阿里云,安装的系统是 Alibaba Cloud Linux。最新登录一直有类似下面的提示,判断是服务器遭受过 SSH 暴力破解,于是安装 Fail2ban

There were 2233 failed login attempts since the last successful login.

二、Fail2ban 介绍

1、什么是 Fail2ban

Fail2ban 是一款基于 Python 编写的开源安全工具,主要功能是防止服务器遭受暴力破解(Brute-force attack)。
它通过实时监控系统日志(如 SSH、Nginx、Postfix 等服务的日志文件),自动检测可疑的登录失败行为,并临时或永久封禁攻击源 IP。
简单来说:Fail2ban 就像是你服务器门口的保安,看到有人连续输错密码,就把他踢出去,并暂时禁止他靠近。

2、工作原理

Fail2ban 的核心逻辑可以用一句话概括:

“读取日志 → 匹配失败规则 → 达到阈值 → 封禁 IP(通过防火墙或其他方式)”

工作流程如下:

  1. 监控日志文件(如 /var/log/auth.log)
  2. 使用正则表达式过滤登录失败的记录
  3. 累计失败次数(达到配置的阈值)
  4. 调用封禁动作(action)
  5. 超时自动解封(默认 10 分钟,可配置)

3、主要组成部分

组件说明
jail一个“监狱”单元,对应一个被保护的服务(如 sshd、nginx、postfix)
filter过滤器,定义如何识别攻击行为(正则匹配日志)
action执行封禁或通知的操作
logpath被监控的日志文件路径
bantime封禁时长(秒)
findtime检测周期(秒)
maxretry最大失败次数

三、Fail2ban 安装步骤

1、启用 EPEL 仓库(推荐)

sudo dnf install epel-release -y

2、安装 Fail2ban

sudo dnf install fail2ban fail2ban-firewalld -y

3、启用与启动服务

sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo systemctl status fail2ban

四、Fail2ban 配置

Fail2ban 的配置目录位于:

/etc/fail2ban/

主要文件:

jail.conf          # 默认模板(不要直接改)
jail.local         # 自定义配置文件(推荐)
filter.d/          # 过滤规则
action.d/          # 封禁动作

1、创建本地配置文件

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

2、修改全局参数(推荐配置)

[DEFAULT]
ignoreip = 127.0.0.1/8  # 白名单 IP,或添加你的远程管理IP
bantime  = 900          # 封禁时间,单位秒(15分钟),也可以 15m
findtime = 600          # 检测时间窗口(10分钟),也可以 10m
maxretry = 3            # 失败次数
backend  = systemd      # Alibaba Cloud Linux 默认使用 systemd 日志
banaction = firewallcmd-ipset  # firewalld 集成

3、启用 SSH 防护(最常见)

[sshd]
enabled  = true
port     = ssh
logpath  = %(sshd_log)s
maxretry = 3  # 不写的话会继承自 [DEFAULT]
bantime  = 900  # 不写的话会继承自 [DEFAULT]
findtime = 600  # 不写的话会继承自 [DEFAULT]

4、重启 Fail2ban 服务并验证服务状态:

sudo systemctl restart fail2ban
sudo fail2ban-client status

5、邮件通知(可选)

如果你想在 IP 被封禁时收到邮件提醒,可以在 [DEFAULT] 部分添加:
destemail = admin@yourdomain.com
sender = fail2ban@yourdomain.com
mta = sendmail
action = %(action_mw)s

并确保系统中安装了 sendmail:
sudo dnf install sendmail -y

五、 Fail2ban 常用命令

1、查看所有 jail

sudo fail2ban-client status

2、查看 SSH 封禁列表

sudo fail2ban-client status sshd

3、手动封禁 IP

sudo fail2ban-client set sshd banip 1.2.3.4

4、手动解封 IP

sudo fail2ban-client set sshd unbanip 1.2.3.4

5、实时查看封禁日志

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

6、搜索最近封禁记录

grep "Ban" /var/log/fail2ban.log

7、搜索解封记录

grep "Unban" /var/log/fail2ban.log

2、查看版本

fail2ban-client version
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐