云南地区
有影响力的网站

adguardhome怎么在服务器上安装设置Fail2Ban来防止网络放大攻击

第一部分:Fail2Ban 的安装与卸载
1. 安装 Fail2Ban

在终端输入以下命令:

sudo apt update
sudo apt install fail2ban -y

安装完成后,服务会自动启动。你可以通过 sudo systemctl status fail2ban 查看其状态。
2. 彻底卸载 Fail2Ban

如果你不再需要它,可以执行以下命令:

# 停止并删除程序
sudo apt remove --purge fail2ban -y
# 清理残留的配置文件
sudo rm -rf /etc/fail2ban
sudo rm -rf /var/lib/fail2ban

第二部分:核心配置步奏

Fail2Ban 的工作需要两个文件:过滤器 (Filter) 告诉它抓什么,监狱 (Jail) 告诉它封多久。
1. 创建过滤器(定义恶意行为)

直接运行这条命令,它会自动创建并写入规则:

sudo tee /etc/fail2ban/filter.d/adguard-home.conf <<EOF
[Definition]
# 匹配 AdGuard 日志中查询 A, TXT 或 ANY 记录的客户端 IP
failregex = ^.* \[dns\] .* client <HOST>:\d+ - query: .* (A|TXT|ANY) IN
ignoreregex =
EOF

原理:

该规则会寻找日志中疯狂请求解析的行为。
2. 创建监狱(设定封禁策略)

针对你担心的“刷抖音误杀”和“慢速攻击”,我们设定一个平衡参数:

findtime (60秒):统计 1 分钟内的行为。

maxretry (30次):1 分钟内解析超过 30 个新域名才封禁(兼容高频上网)。

bantime (10天):一旦抓到,封锁 10 天。

直接运行以下命令写入:

sudo tee /etc/fail2ban/jail.d/adguard.local <<EOF
[adguard-home]
enabled = true
filter = adguard-home
port = 53
protocol = udp
logpath = /opt/AdGuardHome/AdGuardHome.log
maxretry = 30
findtime = 60
bantime = 864000
EOF

3. 激活配置

每次修改完文件,必须重启才能生效:

sudo systemctl restart fail2ban

第三部分:日常管理与查询

配置完成后,你需要学会如何查看“战果”以及如何自救。
1. 查询监狱状态(看抓了多少人)

sudo fail2ban-client status adguard-home

Currently banned: 当前被关在大牢里的 IP 数量。

Total banned: 历史总计封禁人数。

2. 解封 IP(如果自己被误杀了)

如果你发现自己无法连接 DNS,说明你的 IP 触发了规则。请切换到手机流量连接服务器执行:

# 解封特定 IP
sudo fail2ban-client set adguard-home unbanip 你的公网IP

# 或者直接释放所有被封的 IP
sudo fail2ban-client unban --all

3. 实时盯着“抓捕现场”

想亲眼看到系统正在干活,可以运行:

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

第四部分:小白避坑指南

文件后缀名:/etc/fail2ban/jail.d/ 目录下的配置文件必须以 .local 结尾。

日志路径:请确保你的 AdGuard Home 日志路径确实是 /opt/AdGuardHome/AdGuardHome.log。如果路径不对,Fail2Ban 会启动失败。

白名单保护:为了永远不封锁你自己,建议在 jail.local 中加入 ignoreip = 127.0.0.1/8 你的家庭固定IP。

性能压力:Fail2Ban 在内核层拦截(iptables),比在 AdGuard 软件里拦截更省 CPU,也不会增加服务器负担。

建议下一步操作: 你可以先运行 sudo fail2ban-client status adguard-home 看看现在是否有 IP 被捕获。如果攻击依然很猛且带宽占用高,我们可以进一步将 maxretry 调小。

只看被禁的ip总数,不看具体的ip sudo fail2ban-client status adguard-home | grep "Currently banned"

# 查看国外封禁情况(预计这里的人数会增长较快)
sudo fail2ban-client status adguard-foreign

# 查看国内封禁情况(预计这里大部分时间应该是 0)
sudo fail2ban-client status adguard-domestic

sudo tee /etc/fail2ban/jail.d/adguard.local <<EOF
[adguard-foreign]
enabled = true
filter = adguard-json
port = 53
protocol = udp
logpath = /opt/AdGuardHome/data/querylog.json
findtime = 180
maxretry = 50
ignorecommand = /usr/sbin/ipset test cn_ip <ip>
bantime = 8640000
banaction = iptables-ipset-proto4

[adguard-domestic]
enabled = true
filter = adguard-json
port = 53
protocol = udp
logpath = /opt/AdGuardHome/data/querylog.json
findtime = 300
maxretry = 1000
bantime = 3600
banaction = iptables-ipset-proto4
EOF

中国i段的执行地址 /usr/local/bin/update-cn-ipset.sh

中国ip段的存放地址 /var/lib/ipset/cn.zone

以后你只需要输入 fstats 就能一次性看全两个监狱的战况了。

查看国外监狱 (严格模式) 的 IP 列表:

sudo ipset list f2b-adguard-foreign | less

查看国内监狱 (宽松模式) 的 IP 列表:

sudo ipset list f2b-adguard-domestic | less

只统计当前到底封了多少个 IP (不看具体数字)

# 统计国外监狱封禁总数
sudo ipset list f2b-adguard-foreign | grep -c '^[0-9]'

检查某个特定 IP 是否在黑名单中: 如果你怀疑某个 IP 被封了,直接查它:

sudo ipset test f2b-adguard-foreign 1.2.3.4

释放所有被封禁的国外ip

sudo ipset flush f2b-adguard-foreign

 

赞(0)
未经允许不得转载:云南聚优阁 » adguardhome怎么在服务器上安装设置Fail2Ban来防止网络放大攻击

评论 抢沙发

及时有趣的云南生活网

联系我们联系我们