45

ssh端口转发的三种方式

 4 years ago
source link: https://www.tuicool.com/articles/baYVNrf
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

ssh是我使用最频繁的两个命令行工具之一(另一个则必须是vim)。有了ssh,我可以远程处理各种可能出现的问题而无需肉身到现场。

这几天teamviewer被黑的事情影响挺大,于是由远程控制想到了内网穿透,自然而然的想到了ssh的端口转发也能实现内网穿透。再细想一下,发现 ssh隧道 、或者说 端口转发 ,竟然实现了 正向代理反向代理内网穿透 三种常用的网络功能,更佩服其功能的强大和使用中的便利。

ssh有三种端口转发模式,本文一一对其做简要介绍。

本地转发

本地端口转发( Local Port Forwarding ),是将本地主机某个端口流量转发到远程主机的指定端口。其命令行语法是: -L [bind_address]:localport:[remote_host]:remote_port 。”-L”即“local”的首字母,类似的远程转发的”-R”是“remote”的首字母,动态转发的“-D”是“dynamic”的首字母,很好记。

举一个例子说明本地转发的使用场景。

CentOS 7安装GUI界面及远程连接 一文中介绍了安装vnc服务并开启端口访问。在实际中,暴露出来的59xx端口每天都会源源不断的受到自动化脚本的爆破攻击。如果你的vnc和登录用户使用弱密码或字典密码,主机安全将受到极大威胁。这种情形下该如何防护?

一种简单安全的防护方法是:使用iptables/firewalld关闭端口的外网访问,有连接需求时用 ssh 隧道转发端口:

ssh -L5901:5901 username@host

该命令中将本地的5901端口通过 ssh隧道 转发到远程主机的5901端口,远程连接时输入localhost或者127.0.0.1和5901端口便连到了远程主机的5901端口。通过iptables和ssh的本地转发,实现了他人无法连接,只有自己才能访问的目的。

需要注意的是“-L”选项中的“远程主机”并不特指连接过去的机器(默认是连接上的机器),可以是任何一主机。例如可以将本机的8080端口流量转发到facebook.com的80端口:

ssh -L8080:facebook.com:80 username@host

远程转发

远程端口转发( Remote Port Forwarding ),是将远程主机某个端口转发到远程主机的指定端口。其命令行语法是: -R [bind_address]:port:[local_host]:local_port

远程转发最常用的功能是 内网穿透 。有一个公网ip的主机,便可以借助ssh隧道的远程转发实现内网渗透,达到外网访问内网资源的目的。需要注意的是ssh远程转发 默认只能绑定远程主机的本地地址 ,即127.0.0.1。如果想要监听来自其他主机的连接,需要修改远程主机ssh的配置,将”GatewayPorts”改成“yes”,重启ssh后生效。

一个将远程的8080端口流量转发到本地80web端口的示例:

ssh -R0.0.0.0:8080:80 username@host

通过远程转发,访问公网ip主机的8080端口便是访问内网web主机的80端口,这样就实现了内网穿透。

动态转发

无论本地转发还是远程转发,都需要指定本地和远程主机的端口。动态转发( Dynamic Port Forwarding )则摆脱这种限制,只绑定本地端口,远程主机和端口由发起的请求决定。动态转发的语法是:”-D bind_address:port”,一个转发示例:

ssh -D 8080 username@host

该命令让ssh监听本地8080端口,经过8080端口的流量都通过ssh隧道由远程服务器代为请求,从而达到获取被屏蔽资源、隐藏真实身份的目的。

动态转发实际上实现了正向代理功能,因此可以用来科学上网。本地转发也可以做正向代理,但要对每一个请求的主机和端口做转发,比较繁琐,实践中不会这么用。

其它

kill

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK