参考:为 frp 后的 SSH 配置 fail2ban
参考:使用 fail2ban 保护 frp 服务

仍然推荐 pubkey 登录以及为密码添加 2FA。

前置条件:frps 由 systemd 启动。安装了 iptables。

局限性:仅仅根据连接频率来判断异常连接,而并非判断连接失败。因而有可能因为频繁连接而被误封。

文件 /etc/fail2ban/jail.d/frps.conf

1
2
3
4
5
6
7
8
9
10
[frps]
enabled = true
findtime = 10m
maxretry = 3
bantime = 10d
backend = systemd
filter = frps
journalmatch = _SYSTEMD_UNIT=frps.service
port = all
action = iptables-allports[name=frp,protocol=tcp]

文件 /etc/fail2ban/filter.d/frps.conf

1
2
3
4
[Definition]

failregex = ^.*ssh2] get a user connection \[<HOST>:[0-9]*\]
ignoreregex =

注意 failregex 开头的 ssh2] 部分,用于匹配以 ssh2 结尾的 frp 服务。自行调整匹配内容

#frps 配置

设置 log_level = debug 以启用 get a user connection 这类日志就好。

文件 frps.ini

1
2
3
[common]
log_level = debug
...

#效果验证

fail2ban: sudo fail2ban-client status frps

image-20250326133204041

并不隐去可恶的攻击者 IP。

iptables: sudo iptables -L

image-20250326133321118

两边都有攻击者 IP 才算启动成功。