ssh端口转发的三种方式

转载请注明文章出处:ssh端口转发的三种方式web

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

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

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

本地转发

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

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

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

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

ssh -L5901:localhost:5901 username[@host](https://my.oschina.net/u/116016)

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

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

ssh -L8080:facebook.com:80 username[@host](https://my.oschina.net/u/116016)

远程转发

远程端口转发(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](https://my.oschina.net/u/116016)

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

动态转发

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

ssh -D 8080 username[@host](https://my.oschina.net/u/116016)

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

动态转发实际上实现了正向代理功能,所以能够用来kexue-上网。本地转发也能够作正向代理,但要对每个请求的主机和端口作转发,比较繁琐,实践中不会这么用。

其它

  1. 从用户端角度看,本地转发是正向代理;从资源提供方角度看,本地转发是反向代理;
  2. ssh链接断开远程转发/内网渗透便失效。若是但愿远程转发一直有效,须要ssh保活技术,建议用frp等专一于内网渗透的解决方案;
  3. 虽然ssh隧道中的流量都通过了加密,但防火墙对ssh隧道中承载的流量能比较智能的识别,所以用做kexue-上网很容易受到干扰;
  4. 若是仅作端口转发,实践中上述命令常常与"-NT -f"选项结合使用。其中"-f"选项将命令放入后台执行,断开链接须要用kill命令;
  5. 从代理角度看,ssh隧道是低效的,建议用专用软件;
  6. ssh隧道的流量都通过了加密,从安全角度是十分可靠的。
相关文章
相关标签/搜索