使用fail2ban解决基于frp内网穿透的远程桌面爆破问题
使用fail2ban解决基于frp内网穿透的远程桌面爆破问题
需求分析
家中Windows server通过RDP远程桌面进行连接,为方便随时使用,使用frp内网穿透暴露到公网中。但会受到爆破攻击,windows安全策略在失败过多后会锁定账户一段时间,引起不便。
尝试在Windows端进行安全策略的配置,但基于frp的连接,IP等效于127.0.0.1即本地,故在Windows进行处理比较麻烦。
故尝试在内网穿透中转服务器上进行处理和拦截。
Fail2Ban简介
Fail2Ban 扫描/var/log/auth.log等日志文件,并禁止进行过多失败登录尝试的 IP 地址。它通过更新系统防火墙规则以在可配置的时间内拒绝来自这些 IP 地址的新连接来实现此目的。 Fail2Ban 开箱即用,可以读取许多标准日志文件,例如 sshd 和 Apache 的日志文件,并且可以轻松配置为读取任何日志文件。
安装fail2ban
1 | |
编写FRP防爆规则配置文件
规则是使用正则匹配对应的服务名称,所以FRPC启用的名称需要相应匹配,比如SSH服务的FRPC启动服务名为HOME_SSH,则正则为
failregex = ^.*\[.*HOME_SSH.*\] get a user connection \[<HOST>:[0-9]*\]
防SSH爆破规则文件
编写规则配置文件
注意规则文件名称,下面定义配置文件时需要使用
1
vim /etc/fail2ban/filter.d/frps-ssh-ban.conf写入以下代码
1
2
3[Definition]
failregex = ^.*\[.*SSH.*\] get a user connection \[<HOST>:[0-9]*\]
ignoreregex =
防FTP爆破规则配置文件
编写规则文件
注意规则文件名称,下面定义配置文件时需要使用
1
vim /etc/fail2ban/filter.d/frps-ftp-ban.conf写入以下代码
1
2
3[Definition]
failregex = ^.*\[.*FTP_21.*\] get a user connection \[<HOST>:[0-9]*\]
ignoreregex =
防RDP爆破规则配置文件
编写规则文件
注意规则文件名称,下面定义配置文件时需要使用
1
vim /etc/fail2ban/filter.d/frps-rdp-ban.conf写入以下代码
1
2
3[Definition]
failregex = ^.*\[.*RDP.*\] get a user connection \[<HOST>:[0-9]*\]
ignoreregex =
编辑配置文件
1 | |
测试
验证fail2ban是否成功运行
1
sudo fail2ban-client ping返回
Server replied: pong则表示正常测试并查看日志文件
查看日志
1
sudo tail -f /var/log/fail2ban.log
查看被Fail2ban封锁的IP
查看SSH被Fail2ban封锁的IP
1
sudo fail2ban-client status frps-ssh-ban查看RDP被Fail2ban封锁的IP
1
sudo fail2ban-client status frps-rdp-ban1
2
3
4
5
6
7
8
9
10sudo fail2ban-client status frps-rdp-ban
Status for the jail: frps-rdp-ban
|- Filter
| |- Currently failed: 4
| |- Total failed: 968
| `- File list: /var/log/frps.log
`- Actions
|- Currently banned: 2
|- Total banned: 7
`- Banned IP list: 193.3.19.26 80.94.95.39查看FTP被Fail2ban封锁的IP
1
sudo fail2ban-client status frps-ftp-ban
解封IP
1 | |
可能存在的问题
frps未开启日志功能导致Fail2ban无法起作用
方法:修改配置文件,指定日志路径,与Fail2ban中的配置相匹配,重启frps服务
1 | |
参考文章