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

相关推荐
黑客思维者14 小时前
嵌入式系统DevSecOps深度设计:构建固件级漏洞免疫体系的自动化管道
运维·自动化·devsecops·嵌入式系统
古城小栈14 小时前
吃透Cron表达式
linux·服务器·数据库
猫猫的小茶馆15 小时前
【ARM】BootLoader(Uboot)介绍
linux·汇编·arm开发·单片机·嵌入式硬件·mcu·架构
Yeliang Wu15 小时前
LLaMA-Factory 模型评估理论与实战:基于 Ubuntu 22.04 的系统化指南
linux·ubuntu·llama·评估·llamafactory
生信大表哥15 小时前
单细胞测序分析(十一)轨迹分析
linux·rstudio·数信院生信服务器·生信云服务器
躺着听Jay15 小时前
【1267 - Illegal mix of collations 】mysql报错解决记录
java·linux·前端
不秃头的帅哥15 小时前
程序地址空间(基于c++和linxu的一些个人笔记
linux·开发语言·c++·操作系统·内存空间
Yweir15 小时前
Linux性能监控的工具集和分析命令工具
java·linux·jvm
ZKNOW甄知科技15 小时前
AI-ITSM的时代正在到来:深度解读Gartner最新报告
大数据·运维·人工智能·低代码·网络安全·微服务·重构
XH-hui15 小时前
【打靶日记】群内靶机Monkey
linux·网络安全