frp安全设置

之前我的虚拟机疑似被黑了(https://www.cnblogs.com/CharrammaBlog/p/14846387.html)
于是花时间研究了下怎么做可以让frp连接更加安全。

一、stcp

这是官方提供的方法:
首先配置要暴露的内网主机

########### frpc.ini ###############
[common]
server_addr = x.x.x.x
server_port = 7000

[secret_ssh]
type=stcp
# 只有 sk 一致的用户才能访问到此服务
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22

然后在要连接内网主机的主机(另一个局域网的主机)上也安装frpc,进行配置

[common]
server_addr = x.x.x.x
server_port = 7000

[secret_ssh_visitor]
type = stcp
role = visitor
server_name = secret_ssh
sk = abcdefg
# 绑定本地端口用于访问 SSH 服务
bind_addr = 127.0.0.1
bind_port = 6000

这样做感觉忒麻烦,连接和被连接的主机都要安装frp客户端

二、内网主机加强密码复杂度

先来捋一下整个连接过程:

  1. 内部局域网主机A将自己的ip和ssh服务端口(假设是22)暴露给具有公网ip的主机B
  2. 主机B通过frp服务端开放一个端口(假设是6000)
  3. 外部局域网主机C通过主机B的ip和6000端口连接主机A,实现跟使用主机A的ip和22端口连接主机A一样的效果

所以看起来好像内网的ip和端口没有暴露到外部,实际上知道了公网主机B的ip和frp端口就相当于知道了你内网主机A的ip和ssh端口。
好比把门换了个位置,门锁还是没换,只要别人有你的钥匙就能进入你的房子,甚至比之前还容易,因为之前别人可没法接近你的房门。

# 随机生成一串16位字符串,可作为复杂密码使用
tr -dc '_A-Za-z0-9' </dev/urandom | head -c 16

三、设置内网主机只能通过密钥连接

很好理解,只有办卡登记过的用户才能进入。
修改ssh配置文件/etc/ssh/sshd_config内容如下所示

# 是否使用公钥验证
PubkeyAuthentication yes

# 公钥的保存位置
AuthorizedKeysFile .ssh/authorized_keys

# 禁止使用密码验证登录
PasswordAuthentication no

然后重启ssh服务

service sshd restart

然后在外部局域网主机上生成密钥,放到内部局域网主机的.ssh/authorized_keys下

四、禁止root远程登录

root用户权限太大了,禁止root远程登录,只通过一些权限较小的用户登录主机。
修改ssh配置文件/etc/ssh/sshd_config

sed -i "s/PermitRootLogin yes/PermitRootLogin no/g" /etc/ssh/sshd_config

然后重启ssh服务

五、公网主机的端口设置与常规端口不同

官方给的端口是6000,我设置的是6001,太容易被猜到了,设定为跟常规端口不同的端口号,特别是比较大的端口号,减少被扫描中的概率。

六、使用跳板机

不在重要的主机上直接做内网穿透,而是在同一局域网中的另一台不太重要的主机上做。能保证跳板机与其他内网主机连接就行。(感觉也挺麻烦的,每次连接上还要再连一次)

原文地址:https://www.cnblogs.com/CharrammaBlog/p/14866585.html