文章

使用fail2ban为frp增加一道墙

使用fail2ban为frp增加一道墙

一、前期准备

在 frp 的配置文件中添加 log.to = "/var/log/frps.log" 这一行内容,目的是把 frp 的日志输出到指定的 /var/log/frps.log 文件,方便后续 fail2ban 读取日志进行分析。

二、安装 fail2ban

使用 yum 命令来安装 fail2ban,该工具可对 frp 提供防护功能。具体命令如下:

1
2
yum install epel-release -y
yum install fail2ban -y

三、配置 fail2ban

编写自定义过滤器

/etc/fail2ban/filter.d/frps.conf 文件中编写如下内容:

1
2
3
4
[Definition]
failregex = ^.*get a user connection \[<HOST>:[0-9]*\]
            ^.*get a new work connection: \[<HOST>:[0-9]*\]
ignoreregex =

ignoreregex:为空表示不设置忽略的正则表达式规则。

添加 .local 文件

在 fail2ban 中添加 /etc/fail2ban/jail.local 文件,并进行如下配置:

1
2
3
4
5
6
7
8
9
10
11
[frp]
enabled = true
findtime = 10m
maxretry = 5
bantime = 3m
filter = frps
logpath = /var/log/frps.log
protocol = all
chain = all
port = all
action = iptables-allports[name=frp,protocol=tcp]
  • enabled = true:开启 frp 防护规则。
  • findtime = 10m:设定在 10 分钟内统计连接尝试次数。
  • maxretry = 5:10 分钟内连接尝试超过 5 次,判定为异常。
  • bantime = 3m:将异常 IP 封禁 3 分钟。
  • filter = frps:指定使用 frps 过滤器。
  • logpath = /var/log/frps.log:指定日志文件路径。
  • protocol = all:防护所有协议的连接。
  • chain = all:防护所有链。
  • port = all:防护所有端口。
  • action = iptables - allports[name=frp,protocol=tcp]:使用 iptables 封禁异常 IP 的所有 TCP 端口。

四、检查状态

使用 fail2ban - client 命令查看 frp 监狱的状态,该命令能显示当前被封禁的 IP 地址、尝试次数、封禁时间等信息:

1
sudo fail2ban-client status frp

输出信息包含:

  • Filter 部分
    • Currently failed:当前失败的连接尝试次数。
    • Total failed:总的失败连接尝试次数。
    • File list:日志文件路径,此处为 /var/log/frps.log
  • Actions 部分
    • Currently banned:当前被封禁的 IP 数量。
    • Total banned:总共被封禁的 IP 数量。
    • Banned IP list:被封禁的 IP 列表(若有)。

过段时间可以看到已经发力了:

image-20250507204534825

本文由作者按照 CC BY 4.0 进行授权