让fail2ban监控UFW BLOCK日志并自动封禁IP

fail2ban 自动监控 UFW BLOCK 日志,并在检测到攻击时封禁 IP!
比手动 ufw deny 更高效,适合长期防御!

安装 ufw 防火墙 和 fail2ban

1
sudo apt install ufw -y

安装完成后,启用 ufw 防火墙:

1
sudo ufw enable

建议自己稍微配置一下防火墙,关掉所有端口,只留下必要的 80/443 等端口,SSH等端口不要开放(最好设置仅对白名单 IP 放行)

安装 fail2ban:

1
sudo apt install fail2ban -y

设置 fail2ban 开机自启动:

1
2
sudo systemctl start fail2ban
sudo systemctl enable fail2ban

创建自定义 jail 规则

首先需要手动添加一个新的监控规则来专门处理 UFW BLOCK 日志:

编辑 jail.local 配置文件:

1
sudo vi /etc/fail2ban/jail.local

参考配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[DEFAULT]
# 忽略的IP列表(白名单),建议添加内网IP和管理IP
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
# IPv6支持
allowipv6 = true
# 日志检测机制(推荐systemd)
backend = systemd
# 全局默认设置
bantime = 3600
findtime = 600
maxretry = 5

[sshd]
enabled = true
filter = sshd
# 如果使用了非标准SSH端口,需要修改
port = ssh
logpath = %(sshd_log)s
# 更安全的封禁时间(避免永久封禁导致管理问题)
bantime = 86400
findtime = 86400
maxretry = 3
# 推荐的action
action = %(action_)s

[ufw-block]
enabled = true
filter = ufw-block
logpath = /var/log/ufw.log
maxretry = 5
findtime = 600
bantime = -1 # 改为永久封禁
# 使用更具体的filter避免误封
action = ufw[application="Block", blocktype=reject]

# 建议添加的额外保护规则
[nginx-botsearch]
enabled = true
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 100
findtime = 600
bantime = 2592000

创建 ufw-block 过滤器

fail2ban 需要知道如何从日志中提取攻击 IP。创建过滤器:

1
sudo vi /etc/fail2ban/filter.d/ufw-block.conf

写入以下内容:

1
2
3
[Definition]
failregex = ^.*\[UFW BLOCK\].*SRC=<HOST>.*$ # 匹配 UFW BLOCK 日志中的 SRC=<IP>
ignoreregex = # 可留空,用于排除某些 IP

重启 fail2ban 使配置生效

验证配置正确性的命令

1
2
3
4
5
6
7
# 检查语法
sudo fail2ban-client -t

# 重载配置
sudo systemctl restart fail2ban


1
sudo fail2ban-client status

现在应该能看到 jail list 多了一个 ufw-block

1
2
3
Status
|- Number of jail: 3
`- Jail list: nginx-botsearch, sshd, ufw-block

查看 ufw-block 的封禁情况:

1
sudo fail2ban-client status ufw-block

解封 IP

如果需要手动解封某个 IP:

1
sudo fail2ban-client set ufw-block unbanip 123.123.123.123

白名单

为了防止自己设备的 IP 被误封,可以添加常用 IP 到 fail2ban 的白名单:

1
sudo vi /etc/fail2ban/jail.local

里面的一行后面加上自己的 IP:

1
2
3
4
bantime = -1 # 不是这行
findtime = 600 # 不是这行
maxretry = 1 # 不是这行
ignoreip = 例如 123.123.123.123 # 在这行添加白名单 IP

感谢

https://linux.do/t/topic/533088


让fail2ban监控UFW BLOCK日志并自动封禁IP
http://example.com/2025/04/06/让fail2ban监控UFW-BLOCK日志并自动封禁IP/
作者
Justin
发布于
2025年4月6日
许可协议