frp基于阿里云ECS实现内网穿透
服务器连接
首先花99元购买一台服务器一年的使用权
第一次通过Workbench通常是无法连接的,此时进入VNC连接界面,通过重置密码设置连接密码和连接方式,之后就可以连接了
面板安装
进入实例页面安装宝塔面板
进入如下页面查看详情
拉到最下面查看宝塔面板的地址
端口放行
这个放行要走两步,第一步是从安全策略放行,第二步是从宝塔面板放行
手动修改安全组访问规则
进入宝塔面板,批量放行端口号
frps自动运行
进入下面的位置
点击发送命令
端口防爆破
安装Fail2ban防爆破
插件,进入服务保护设置,修改默认的sshd
设置。
如果直接这样做,在日志/var/log/fail2ban.log
会收获下面的报错:
firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 0 -p tcp -m multiport --dports 22,7000,7001,7002,7003,7004,7005,7006,7007,7008,7009,7010,7011,7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,7028,7029,7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,7043,7044,7045,7046,7047,7048,7049,7050 -m set --match-set f2b-sshd src -j REJECT --reject-with icmp-port-unreachable
2024-07-07 06:37:45,928 fail2ban.utils [924]: ERROR 7fa510012e80 -- stderr: "Error: COMMAND_FAILED: '/usr/sbin/iptables-restore -w -n' failed: iptables-restore v1.8.4 (nf_tables): too many ports specified"
这个错误表明iptables-restore命令失败,因为指定的端口数量过多。iptables有一个限制,不允许在单个规则中指定过多的端口。这个限制是为了防止规则变得过于复杂,影响防火墙性能。
一个解决方案是使用端口范围表示法(如 --dports 22,7000:7050)来替代列出每个单独的端口,但是在宝塔插件的页面端,这样的配置是不生效的
因此只能直接改配置文件,在/etc/fail2ban/jail.local
文件中添加以下内容
[sshd]
enabled = true
filter = sshd
port = 22,7000:7050
maxretry = 5
findtime = 600
bantime = 864000
action = %(action_mwl)s
logpath = /var/log/secure
使用以下命令重启
sudo fail2ban-client reload
sudo systemctl restart fail2ban
刷新插件页面,可以看见了
但是经过一番测试,我发现它只能防本机22端口的ssh扫描,无法保护我添加的frp端口,这就要从Fail2ban的原理说起了:
Fail2ban 是一个入侵防御工具,通过监控日志文件检测多次失败的登录尝试等可疑行为,并自动更新防火墙规则封禁可疑 IP 地址,从而保护服务器免受暴力破解等攻击。
Fail2ban的核心是日志监控,虽然我把监控端口放进去了,但是frp连接的日志和解析规则我没有给,甚至目前frps是没有开启日志保存功能的。
因此第一步,进入frps.toml
文件,添加日志保存:
log.level = "info"
#日志保留时间
log.maxDays = 7
log.to = "/frp/frp_0.57.0_linux_amd64/frps.log"
第二步,针对日志中的SSH连接规则,写正则表达式,保存到/etc/fail2ban/filter.d/frps-ssh-ban.conf
:
[Definition]
failregex = ^.*\[.*SSH.*\] get a user connection \[<HOST>:[0-9]*\]
ignoreregex =
第三步,在/etc/fail2ban/jail.local
中添加新的jail
,二三步参考了使用Fail2ban防止FRP穿透SSH,RDP,FTP等服务被爆破:
[frps-ssh-ban]
enabled = true
findtime = 600
maxretry = 5
bantime = 864000
filter = frps-ssh-ban
logpath = /frp/frp_0.57.0_linux_amd64/frps.log
port = 22,7000:7050
最后重启一下frp和fail2ban,成功封禁IP
下面是frps的日志
下面是fail2ban的日志,五次连接后直接封禁
使用sudo fail2ban-client status frps-ssh-ban
可查看被封禁IP:
IP解禁与封禁
有时候我会不小心用多个软件同时连接某个端口,导致我的IP被封禁,这时可以通过这句话来解禁:sudo fail2ban-client unban xx.2xx.xx9.x8
接下来在/etc/fail2ban/jail.local
的[frps-ssh-ban]
部分加入白名单:ignoreip = 127.0.0.1/8 ::1 xx.2xx.xx9.x8
如果要封禁某个IP,使用这个命令sudo fail2ban-client set frps-ssh-ban banip xx.2xx.xx9.x8
更多推荐
所有评论(0)