保证安全
云主机暴露在公网中,难免遭到各种人的恶意扫描,有必要采取措施保证安全。
修改ssh端口
默认通过ssh连接云主机的端口为22,这是最容易被恶意扫描的端口,可以修改成其他端口以减少被扫描概率。
- 修改ssh端口号
输入:
vim /etc/ssh/sshd_config
向下找到Port 22
这段,在下一行插入:
Port 2222
(这个端口号你自己定,最大不要超过65535)
保存退出。 - 重启ssh服务
输入:
sudo service sshd restart
- 检查是否修改成功
输入:
netstat -ltnp
结果中有:0.0.0.0:2222
即为成功 - 修改云主机安全组
登陆云主机控制台,选择:安全组 -> 入站规则 -> 添加规则。
规则类型:自定义,
来源:0.0.0.0/0,
协议端口:TCP:2222(同ssh端口),
策略:允许 - ssh登陆测试
新开个终端窗口,输入:
ssh 主机名@ip地址 -p 2222
使用frp做内网穿透
利用云主机具有公网ip的优点,可以通过搭建内网穿透服务,来远程访问家中的主机。此方法适合云主机配置不高(如最便宜的1核2G1M),又有远程访问家中主机需求的。通过内网穿透,不仅可以通过ssh、远程桌面连接家中主机,还可以通过浏览器远程访问和下载家中主机中的文件。
frp分为frps(server)和frpc(client)两个包 ,其中前者安装到云主机上,后者安装在需要被外网访问到的各个设备上(如家中的主机)。
云主机端
-
下载frp软件
下载地址:https://github.com/fatedier/frp/releases
选择适合自己系统的版本,如ubuntu18.04选择下载frp_0.37.1_linux_amd64.tar.gz
解压:
tar -zxvf frp_0.37.1_linux_amd64.tar.gz
重命名:
mv frp_0.37.1_linux_amd64 frp
-
修改frps.ini
把frps.ini中的内容改为:
[common]
# 服务器监听端口
bind_port = 7000
# dashboard监听端口
dashboard_port = DASH_PORT
# dashboard登陆用户名
dashboard_user = NAME
# dashboard登陆密码
dashboard_pwd = PWD
# 权限验证方式
authentication_method = token
# token验证密码
token = TOKEN_PWD
其中,DASH_PORT、NAME、PWD、TOKEN_PWD需要自己更改。
- 设置服务开机自启
新建文件:/etc/systemd/system/frps.service
,内容为:
[Fusion]
Description=Frp Server Daemon
After=syslog.target network.target
Wants=network.target
[Service]
Type=simple
# 改为自己的路径
ExecStart=/home/ubuntu/Downloads/frp/frps -c /home/ubuntu/Downloads/frp/frps.ini
ExecStop=/usr/bin/killall frps
#启动失败1分钟后再次启动
RestartSec=1min
KillMode=control-group
#重启控制:总是重启
Restart=always
[Install]
WantedBy=multi-user.target
修改后,输入:
sudo systemctl enable frps.service
sudo systemctl start frps.service
查看启动结果:
sudo systemctl status frps.service
家中主机端
- 下载frp软件
同样的下载地址:
https://github.com/fatedier/frp/releases
如果家中主机也是ubuntu18.04,下载同样的安装包即可。下载后解压、重命名。 - 修改frpc.ini
frpc.ini中的内容修改为:
[common]
# 云主机ip
server_addr = ADDR
authentication_method = token
# token验证密码,和frps.ini中的相同
token = TOKEN_PWD
server_port = 7000
# 开放ssh访问
[ssh_1]
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 需要云主机开放相关端口
remote_port = SSH_PORT
# 使用加密
use_encryption = true
# 使用压缩
use_compression = true
# 最大连接数
pool_count = 2
# 开放远程桌面访问
[rdp_1]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
# 需要云主机开放相关端口
remote_port = RDP_PORT
# 开放远程文件访问
[static_file]
type = tcp
# 需要云主机开放相关端口
remote_port = FILE_PORT
plugin = static_file
# 要对外暴露的文件目录
plugin_local_path = /home/ubuntu/Downloads/
# 用户访问 URL 中会被去除的前缀,保留的内容即为要访问的文件路径
plugin_strip_prefix = file
# 远程文件访问登陆用户名
plugin_http_user = FILE_USER
# 远程文件访问登陆密码
plugin_http_passwd = FILE_PWD
# 浏览器访问: http://x.x.x.x:FILE_PORT/file/
其中,ADDR、TOKEN_PWD、SSH_PORT、RDP_PORT、FILE_PORT、FILE_USER、FILE_PWD需要自行设置。
- 设置服务开机自启
新建文件:/etc/systemd/system/frpc.service
,内容为:
[Fusion]
Description=Frp Server Daemon
After=syslog.target network.target
Wants=network.target
[Service]
Type=simple
# 改为自己的路径
ExecStart=/home/ubuntu/Downloads/frp/frpc -c /home/ubuntu/Downloads/frp/frpc.ini
ExecStop=/usr/bin/killall frpc
#启动失败1分钟后再次启动
RestartSec=1min
KillMode=control-group
#重启控制:总是重启
Restart=always
[Install]
WantedBy=multi-user.target
修改后,输入:
sudo systemctl enable frpc.service
sudo systemctl start frpc.service
查看启动结果:
sudo systemctl status frpc.service
- 安装xrdp
通过rdp来进行远程桌面连接
输入:
sudo apt install xrdp
sudo adduser xrdp ssl-cert
sudo systemctl start xrdp
查看启动结果:
sudo systemctl status xrdp
远程连接ubuntu桌面时可能会黑屏,解决方法:
编辑/etc/xrdp/startwm.sh,在测试和执行Xsession的行之前添加下面两行:
unset DBUS_SESSION_BUS_ADDRESS
unset XDG_RUNTIME_DIR
重启xrdp:
sudo systemctl restart xrdp
开放云主机端口
上面,我们开放了frp服务端口:7000、dashboard端口:DASH_PORT、ssh端口:SSH_PORT、远程桌面访问端口:RDP_PORT、远程文件访问端口:FILE_PORT,这些端口都需要在云主机的控制台中开放,才可访问。
以frp服务端口7000为例:
登陆云主机控制台,选择:安全组 -> 入站规则 -> 添加规则。
规则类型:自定义,
来源:0.0.0.0/0,
协议端口:TCP:7000,
策略:允许
备注:frp
其他端口开放操作同上。
测试
- 在云主机端,重启frps.ini服务:
sudo systemctl restart frps.service
- 在家中主机端,重启frpc.ini服务:
sudo systemctl restart frpc.service
- 测试ssh:
用另一台电脑,远程连接家中主机。如果是windows系统,打开powershell,如果是mac,打开terminal,输入:
ssh USER@ADDR -p SSH_PORT
其中,USER为家中主机的登陆用户名,ADDR为云主机ip,SSH_PORT为frpc.ini中设置开放的ssh端口。
连接成功,输入家中主机密码后,即登陆成功。 - 测试远程桌面:
用另一台电脑,远程连接家中主机的桌面。
如果是windows系统,打开远程桌面连接,计算机名为:ADDR:RDP_PORT,用户名为:USER
其中,USER为家中主机的登陆用户名,ADDR为云主机ip,RDP_PORT为frpc.ini中设置开放的远程桌面端口。
在rdp登陆界面:
session:xorg
username:家中主机登陆用户名
password:家中主机登陆密码
连接成功,再次输入家中主机密码后,即登陆成功。 - 测试远程文件访问:
用另一台电脑,打开浏览器,访问: http://ADDR:FILE_PORT/file/
其中,ADDR为云主机ip,FILE_PORT为frpc.ini中设置开放的远程文件访问端口。
连接成功,输入家中主机用户名和密码后,即登陆成功,可访问和下载家中主机的文件。 - 测试dashboard
dashboard是管理frp的面板,用另一台电脑,打开浏览器,访问: http://ADDR:DASH_PORT
其中,ADDR为云主机ip,DASH_PORT为frps.ini中设置的dashboard端口。
连接成功,输入frps.ini中设置的dashboard用户名和密码后,即登陆成功,可查看frp连接情况。
安全使用
暴露在公网的云主机很容易被攻击,如果攻击者通过云主机远程连接家中的主机,那就比较危险了,所以,在使用frp时可以通过下列方法,在一定程度上减少被攻击的概率:
- 及时关闭云主机中的frps.service服务。
在需要远程连接家中主机时手动该服务,使用后手动关闭。 - 设置访问ip白名单
在云主机控制台的安全组中,设置访问白名单,只允许自己的电脑ip访问,其他ip一律不允许访问。 - 使用密钥登陆
在云主机中,设置只允许通过密钥登陆,关闭密码登陆,也能起到限制指定电脑访问的作用。 - 使用stcp
frp支持使用stcp连接,即在需要访问的电脑上,也安装一个frp,通过配置frpc.ini,再添加一层安全认证,保证安全。缺点是,需要在每台想要访问家中主机的电脑上,都安装一遍frp。
参考:
https://gofrp.org/docs/
https://zhuanlan.zhihu.com/p/336429888?utm_source=zhihu&utm_medium=social&utm_oi=1169924703535304704
https://zhuanlan.zhihu.com/p/396428643
https://zhuanlan.zhihu.com/p/347239470
https://www.zhihu.com/question/391105587
https://www.sohu.com/a/446523786_495675