31、【Ubuntu】【远程开发】内网穿透:反向隧道建立(三)

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

上篇 blog
【Ubuntu】【远程开发】内网穿透:反向隧道建立(二)

分析了 SSH -R 选项的剩下关键内容,并开始分析 sshd_config 中的关键配置项 GatewayPorts,下面继续

内网穿透

下面回到 sshd_config 配置项 GatewayPorts 继续分析

  • 默认情况下,SSH 服务进程 sshd 会把 ssh -R 选项创建的监听端口绑定到回环地址 127.0.0.1,只有服务器自己能连这个端口,外网无法访问,遵循的默认最小权限的安全设计原则,防止用户无意中把内网服务暴露到公网,是一个安全防护机制
  • 如果想让外网也能这些转发端口,就需要显式启用 GatewayPorts 选项 ,启用后,sshd 才会允许将监听地址绑定到非回环地址上,比如 0.0.0.0 或其他公网 IP 等,这样其他主机就有连接机会了

这里面 GatewayPorts 配置项有三个可选参数:

  • no这也是默认参数 ,强制所有 ssh -R 转发只能绑定到回环地址 127.0.0.1,外网无法访问,只有服务器本机可用,很安全,适合内部调试用
  • yes强制所有的 ssh -R 转发都绑定到 *,也就是 0.0.0.0 所有 ssh -R 的端口自动对公网开放,所有 IP 都能访问,简单但风险高,不推荐
  • clientspecified:允许客户端通过 ssh -R [bind_address:]... 指定绑定地址,客户端可自由选择是否对公网开放,推荐这种方式,灵活可控

这里再强调下 GatewayPorts yesGatewayPorts clientspecified 的区别,yes 是强制行为 ,服务端强制决定所有客户端的 ssh -R 请求自动绑定到 *0.0.0.0 接口上,也就是所有用户的 ssh -R 都会被暴露到公网上,即使有客户端不想暴露,只想在服务器上本地用也不行,也会被服务端强制公开clientspecified 会尊重客户端的意愿 ,除非客户端显式写 bind_address,否则就默认只绑定服务器的回环地址 127.0.0.1yes的安全性较低,只适合内部可信环境,或测试服务器,用来内网穿透,而且是长期使用,还是选 clientspecified 更安全

OK,下面来就来配置云服务器,之前 blog 【Ubuntu】【远程开发】内网穿透:环境准备 已经介绍了云服务器的一些信息,下面进入云服务器控制台,在终端输入

bash 复制代码
sudo vim /etc/ssh/sshd_config

root 权限编辑 sshd_config 配置文件,找到 GatewayPorts 配置项(应该默认是 no),给他设置成 GatewayPorts clientspecified

另外,这里再最后说下 ssh 命令的格式,在

bash 复制代码
ssh -N -v -R 云服务器端口:localhost:本地端口 云服务器用户名@云服务器ip

之中,前面的选项都说完了,还剩最后的 用户@ip,打开终端,输入 man ssh,可以查看 ssh 命令描述如下

可以看到,ssh 命令中唯一一个必选项就是 destination,其格式描述在 DESCRIPTION 部分,可以看到,必选项 destination 就是 [user@]hostname,这里用户名 user@ 是可选项,(如果不写,会默认使用当前本地用户名或配置文件中的默认用户 ),这里 manual 手册没有提到(本地试下就会发现,这里就不演示了),手册的维护者倾向于让手册更简洁,应该是假设用户已了解了基本 Unix 行为,就比如现在的场景,不指定用户就默认用当前用户

最后,在云服务器的防火墙上开放反向隧道要指定的端口访问 ,点击服务器面板上的防火墙规则

点击添加规则

按照自己 ssh -R 指定的端口设置规则

ok,现在在终端输入

bash 复制代码
ssh -N -v -R 0.0.0.0:ServerPort:localhost:22 ServerUser@ServerIp

应该可以看到反向隧道建立成功


OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog

相关推荐
Wins_calculator2 小时前
Ubuntu重新挂载Windows C盘以及如何安全退出外挂硬盘
windows·ubuntu
skywalk81633 小时前
在FreeBSD 14.3上部署轻量级Linux jail环境 仅仅占用10M内存
linux·运维·服务器·虚拟机·轻量化·freebsd·jail
知南x3 小时前
【STM32MP157 异核通信框架学习篇】(10)Linux下Remoteproc相关API (下)
linux·stm32·学习
Tipriest_3 小时前
Linux 环境变量的添加与查看详解
linux·环境变量
牢七4 小时前
新linux
linux
keep__go5 小时前
spark 单机安装
大数据·运维·分布式·spark
HIT_Weston7 小时前
27、【Ubuntu】【远程开发】内网穿透:CA 签名
linux·运维·ubuntu
阿巴~阿巴~7 小时前
基于UDP协议的英汉翻译服务系统:从网络通信到字典查询的完整机制
linux·服务器·网络·网络协议·udp协议·套接字绑定·英汉翻译服务系统
阿巴~阿巴~7 小时前
简易回声服务器实现与网络测试指南
linux·服务器·网络·udp协议·网络测试·udp套接字编程