这几天在别人那整了一台服务器,但怎么连接也是一个问题,由于不在同一个内网,所以需要借助内网穿透工具。好不容易解决了内网穿透,结果接连两天,内网穿透端口都一直被人攻击(心中一万只草泥马奔腾而过)。因此,这里也记录一下如何防护陌生IP攻击。
1. 内网穿透frp
什么是内网穿透:
主机A在10.21.0.0/16 局域网内,主机B在10.39.0.0/16 局域网内,那么这两台主机不能相互通信。此时需要做的就是找一台中介服务器,作为这两台主机的通信媒介。
实现内网穿透后能做什么:
实现了后就可以在校外直接访问校内的服务器,不需要校园VPN。
送上frp的下载链接:github-frp 。
通过主页可以看到已经有很多版本,我下载的是frp_0.38.0_linux_amd64.tar.gz 版本。该问价解压后的目录如下:
- frpc命名开头的文件是客户端,即client。也就是上述的主机中需要使用的
- frps命名开头的是服务端,即server。也就是上述的中介服务器
- .ini结尾的就是配置文件
- 绿色的表示执行文件
现在我们需要从校外访问校内的主机A,那么就要通过一个拥有外网IP的服务器B做中介,其配置如下:
客户端(校内主机A):
修改frpc.ini
配置的意思:主机A通过服务器IP:9877,来跟服务器B建立连接,并且接受服务器B的6000端口的所有信息。
服务端(拥有外网IP的服务器B)
修改frps.ini
只需要填写监听端口9877, log_file在后面会用到
此时在主机A和服务器B上运行即可,运行命令:
./frpc -c frpc.ini # 客户端
./frps -c frps.ini # 服务端
在校外网络的主机C上运行ssh命令
ssh -p 6000 用户@公网服务器IP
这里的用户是校内主机A里面的用户名。
2 如何防止攻击
上述配置后的frp,其工作模式其实就是将6000端口的内容全部转发给主机A的22端口。因此会有很多暴力攻击端口,如果稍加不注意,很容易被暴力破解掉密码,然后黑进服务器,偷GPU、CPU来挖矿。下面给出几个防止此类事情发生的方法:
- 避免使用密码登录,尽量使用密钥登录
- 使用frp的密钥认证:内网穿透神器frp之进阶配置
- 用iptables 禁止某些ip访问: Linux 禁止某个IP地址访问的几种方法
- 使用fail2ban
我用的是第三种,但是攻击者的IP一直在变,因此在github上找到了一个开源项目:frptables
作者也给出了项目解释:Go frp内网穿透防暴力破解工具
代码的工作模式很简单,分析frp的日志找到对应的请求IP地址,根据IP地址查询IP所在地,如果不是目标区域的地址,则将其加入到禁止IP表中