鉴于上次服务器被攻击的事件(完蛋,摊上事了!我的服务器被攻陷了!),我在想,除了升级软件版本,降低漏洞风险之外,如何安全地访问内部服务成了一大门学问。
当然,openVPN是一个不错的选择(openVPN进阶技巧:如何实现从服务端反向访问客户端内网?),只是配置和管理有些复杂;现在有了自动化的证书管理系统(告别命令行复杂的证书管理!可视化OpenVPN证书管理系统实战,一键发证、过期提醒全搞定),管理难度有所降低,但操作还是稍微复杂,而且有被封的风险。
又或者,如果你的网站还没备案(搞网站的你,不了解一下共享虚拟主机和备案问题),怎么测试网站部署是否成功呢?有没有更轻量、更直接的绿色通道呢?
今天,就给大家介绍一个系统内置的网络乾坤大挪移神器——SSH本地端口转发。一条命令,让你通过本地端口安全地直达远程内部服务。
如果你使用CodeBuddy搭建过Linux服务(注册四年,开发十天:一个“菜鸟”的程序梦,全靠腾讯云CodeBuddy圆了),又或者使用Antigravity配置过相关远程业务(我用谷歌Antigravity部署AI手机,结果…远超CodeBuddy的智能,却败给一个开源BUG!),这些工具总会提醒你远程主机的某某端口可用。如果你照着提示进行操作,就会打开一个本地环回地址127.0.0.1的端口,比如localhost:3000,实际上,你本地并没有运行任何服务,这个服务就是本地转发的远程主机的服务端口。
它的核心原理就是,在本地和远程服务器之间建立一个加密的SSH隧道,将远程服务器上的某个端口,映射到本地的一个端口上。这样,访问本地的这个端口,就相当于访问了远程服务器的内部服务,安全又方便。
首先,我们准备一台云服务器,默认情况下,仅允许22、80、443这几个端口,但是没有备案的情况下,只有22可以被访问。那就安装几个测试服务,模拟几个端口服务。其中,nginx默认端口为80,redis-server默认端口为6379,iperf默认端口为5001;使用python起一个临时Web服务,使用端口8000,再用Netcat监听模式开一个只有TCP回显的9999端口。现在,这些端口都深居内网,对外不可见。
apt install -y nginx redis-server iperfpython3 -m http.server 8000nc -lk 9999ss -lntp '( sport = :80 or sport = :8000 or sport = :6379 or sport = :5001 or sport = :9999 )'正常来讲,由于安全组的策略配置,80端口现在扫描都是开放的。
但是,出于备案政策的管控,我们是访问不到这个端口的。
实际上,这个端口的服务是正常的。
接下来,先检查本地的端口监听情况。
确认本地的10080端口是没有服务的,我们测试一下通过SSH建立一个本地端口转发。
ssh -L 10080:127.0.0.1:80 root@120.53.3.54SSH连接建立成功之后,本地也就多了一个10080端口。与标准的sshd服务不同,这个端口对应的命令为ssh,也就是咱们刚才连接的命令。
这样的话,我们先测试一下本地访问。
curl 127.0.0.1:10080没有问题,那这个端口是私人专用的?还是支持团队共享,可以被远程访问的?
不可用,其实从端口监听状态,我们也可以看到,127.0.0.1:10080这个端口仅能通过127.0.0.1进行访问。如果要使能远程访问,我们只需要修改一下连接命令。
ssh -gL 10080:127.0.0.1:80 root@120.53.3.54可以看到,此时端口监听的状态就变成0.0.0.0:10080,表示监听所有端口。我们从其他主机上访问一下。
大功告成!从局域网内其他电脑发起访问,Nginx的欢迎页面跃然屏上,证明这条加密隧道已成功贯通内外,实现了代理其他主机访问相关业务端口。
那怎么添加多个远程服务的本地端口转发呢?只需要多次配置-L参数就可以了。
ssh -g -L 10080:127.0.0.1:80 -L 15001:127.0.0.1:5001 -L 18000:127.0.0.1:8000 -L 19999:127.0.0.1:9999 -L 16379:127.0.0.1:6379 root@120.53.3.54并且所有端口都可以被远程访问。
那这个命令对于Windows系统适用吗?我们也测试一下。
netstat -ano | findstr ":10080 :15001 :16379 :18000 :19999"不错,Windows和Linux系统都能用,那性能怎么样呢?
平均60 Mbps的性能,不是很高,可能跟加密机制有关系,也可能跟我本地的上行带宽有关系,又或者云主机的性能不高。一般来讲,60 Mbps貌似也够用了,毕竟云主机开这么大的带宽不少钱呢。
通过这次实践,我们看到SSH本地端口转发犹如一把网络瑞士军刀,简单、安全、高效。它特别适合临时调试、紧急访问、或对特定服务进行快速安全暴露的场景。当然,它并非要取代OpenVPN等专业VPN,而是作为一个有力的补充。下次当你需要穿透网络访问内网服务时,不妨先想想这把钥匙是否已经握在手中。
***推荐阅读***
无需公网IPv4!手把手教你配置基于IPv6的WireGuard安全隧道
IPv6隧道搭建指南:用WireGuard轻松玩转IPv4/IPv6混合网络
基于IPv6配置openVPN实战:告别双栈难题,一步打通IPv6隧道!
openVPN进阶技巧:如何实现从服务端反向访问客户端内网?
告别命令行复杂的证书管理!可视化OpenVPN证书管理系统实战,一键发证、过期提醒全搞定
揭秘运营商级域名策略路由:用dnsmasq与ipset实现同一IP三条不同网络路径的流量调度
RDP授权119天不够用?给你的Windows Server来个“永久”授权
完蛋,摊上事了!我的服务器被攻陷了!
隐形杀手:0.1%的微小丢包,如何吞噬你的一半带宽?
告别高价SaaS!我用这款国产AI编程神器,零元自建n8n工作流系统
我用谷歌Antigravity部署AI手机,结果…远超CodeBuddy的智能,却败给一个开源BUG!
从不可用到10分钟,再到10秒!我优化了AI手机操作,实现流畅运行
256台H100服务器的RoCEv2无损与全互联算力网络建设方案
2048卡H100算力中心100G无阻塞存储网建设方案
2048卡H100算力中心400G:380G无阻塞业务网建设方案