使用 Fail2ban 保护 FRP 内网穿透服务
最近用树莓派搭了一个服务器,用 frp 内网穿透的方式暴露到了公网。随后便遇到的 SSH 字典/弱口令扫描。虽然使用密钥登录、高强度密码和 2FA 可以有效避免被弱口令提权,但是一直高频率的 SSH 认证也很占用资源和流量。通常当你封禁某个 IP 时,攻击者会更换代理使用其他 IP 继续攻击,因此我们需要使用 Fail2ban —— 一种根据日志频率联动防火墙封禁 IP 的一款软件。
但是使用 frp 时情况略有不同,如果在内网主机上通过 journalctl | grep sshd | grep "Failed password" 查看登录失败日志时,只会看到 frpc 客户端从本地(127.0.0.1)进行连接。所以我们需要在公网服务器上进行配置。

安装
我的公网服务器使用的 Ubuntu Server 所以直接 apt-get 安装。
sudo apt-get install fail2ban配置
1 开启 fprs 的连接日志
frps 目前没有记录关于认证失败的日志,所以我们只能从频率进行限制,因为通常我们自己不会高频的连接又退出服务器。另外连接日志需要开启 debug 级别的 log level 才有显示。找到你的 frps 配置文件:/path/to/yours/frps.toml 在顶部新增一行。
log.level = "debug"2 配置 fail2ban
文件:/etc/fail2ban/jail.d/frps.conf
[frps]
enabled = true
findtime = 5m
maxretry = 5
bantime = 30d
backend = systemd
filter = frps
journalmatch = _SYSTEMD_UNIT=frps.service
port = all
action = iptables-allports[name=frp,protocol=tcp]文件:/etc/fail2ban/filter.d/frps.conf
[Definition]
failregex = ^.*get a user connection \[<HOST>:[0-9]*\]
ignoreregex =配置完成后,重启服务
fail2ban-client reload验证
使用这行命令查看 fail2ban 的封禁列表
sudo fail2ban-client status frps
另外也需要查看防火墙的配置是否对应增加。
iptables -L
其他
解禁 IP
sudo fail2ban-client set sshd unbanip 192.168.1.110