使用fail2ban为frp增加一道墙
使用fail2ban为frp增加一道墙
一、前期准备
在 frp 的配置文件中添加 log.to = "/var/log/frps.log"
这一行内容,目的是把 frp 的日志输出到指定的 /var/log/frps.log
文件,方便后续 fail2ban 读取日志进行分析。
二、安装 fail2ban
使用 yum
命令来安装 fail2ban,该工具可对 frp 提供防护功能。具体命令如下:
1
yum install fail2ban
三、配置 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 =
-
rd.break
参数在控制权传递给内核之前中断引导过程。此时,当你运行passwd
命令进行密码重置时,相关的影子文件(/etc/shadow)会被修改为错误的SELinux上下文。touch /.autorelabel
命令在根目录下创建一个名为.autorelabel
的隐藏文件。在下次启动时,SELinux子系统会检测到这个文件,然后重新标记系统中所有文件的正确SELinux上下文。在大型磁盘上,这个过程可能需要相当长的时间。文档中还提到了一种替代完全重新标记的方法。首先,在编辑GRUB条目时使用参数rd.break enforcing=0
。这将导致系统最终以SELinux设置为宽容模式(警告但不阻止)启动。然后,按照之前相同的方式更改密码。继续引导过程并允许系统启动。一旦系统启动,运行restorecon /etc/shadow
以恢复/etc/shadow
文件的正确SELinux上下文。然后,运行setenforce 1
以重新启用SELinux并开始使用系统。shell ignoreregex
:为空表示不设置忽略的正则表达式规则。
添加 .local
文件
在 fail2ban 中添加 .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 列表(若有)。
过段时间可以看到已经发力了:
本文由作者按照
CC BY 4.0
进行授权