绕过防火墙

最有效的绕过防火墙的方法是隧道技术,它能够隐藏数据的真实意图。搭建隧道的方式有很多种, 其中虚拟专用网络(virtual private network, VPN)在IP层搭建隧道,被广泛用来绕过防火墙。

使用SSH隧道绕过防火墙

实验场景:
公司防火墙会拦截所有进入公司的telnet数据,但允许用SSH登陆到内部一台叫apollo的机器
home是自己机器名称,work是公司内部的一台机器,平时上班和家里都有需要通过telnet到 work机器来工作。

Ssh本地端口通过跳板映射到其他机器

HostA$ ssh -L 0.0.0.0:PortA:HostC:PortC user@HostB
HostA 上启动一个 PortA 端口,通过 HostB 转发到 HostC:PortC上,在 HostA 上运行

故要实现以上需求,只需两条命令:

ssh -L 8000:work:23 apollo

通过apollo,把本机8000端口映射到work的23端口

telnet localhost 8000

相当于telnet到了work的23端口

另一个实验场景:
正在使用公司内的work计算机,想访问facebook,但公司防火墙阻止访问。

ssh -L 8000:www.facebook.com:80 home

通过home机器,把本机8000映射到facebook的80端口,只需访问localhost:8000即可绕过防火墙

动态端口转发

上面为一个专门的网站建立了一个SSH隧道,那总不可能为每个网站都建一个隧道,就需要使用动态端口转发

本地socks5代理

HostA$ ssh -D localhost:1080 HostB
在 HostA 的本地 1080 端口启动一个 socks5 服务, 通过本地 socks5 代理的数据会通过 ssh 链接先发送给 HostB,再从 HostB 转发送给远程主机
那么在 HostA 上面,浏览器配置 socks5 代理为 127.0.0.1:1080, 看网页时就能把数据通过 HostB 代理出去,类似 ss/ssr 版本,只不过用 ssh 来实现

动态端口转发工作在TCP/IP模型的应用层和传输层之间(即OSI模型的会话层),因此它独立于应用逻辑,比 Web代理更加通用。

使用VPN绕过防火墙

最初开发VPN是出于安全考虑,希望提供从外部专用网络到内网的安全访问。然而,如今VPN通常被用来绕过防火墙, 尤其是绕过出口过滤。