2. 简介

2.1. 前言

本文档有一个寓意。寓意是:防火墙无法保护网络免受其内部用户的侵害,甚至不应该尝试这样做。

当内部用户要求您系统管理员打开一个到外部机器的出站端口,或一个到内部机器的入站端口时,您应该为他这样做。当然,您应该帮助用户确保他的事务是安全的,并且他的软件是健壮的。但是断然拒绝服务是完全的无能。因为除非他被防火墙完全隔离,与外部世界完全隔绝,没有 ssh,没有 telnet,没有网页浏览,没有电子邮件,没有 dns,没有 ping,没有电话线,没有无线电,什么都没有,否则用户可以并且将会使用防火墙穿透技术来访问他想要的机器,而对安全性的最终结果将是一个未经审计的与外部世界的连接。因此,要么您在适当的培训和选拔后信任您的用户,要么您根本不应该授予他们访问网络的权限——但是话又说回来,网络管理员的角色通常是为用户服务的,所以您的目标应该是前者而不是后者。您可以而且应该保护他们免受外部世界的侵害;您可以而且应该保护您的关键服务免受他们的侵害;但是您不能而且不应该保护他们免受自身的侵害。

由于存在系统管理员不响应、缺席、工作过度、完全无能、不负责任,或者更普遍地由无能的人管理的情况,因此用户可能会发现自己身处防火墙之后,他可能会穿越防火墙,但只能以笨拙的方式。这个迷你HOWTO解释了一种通用的、可移植的穿透防火墙隧道的方法,通过将任何微小的比特流变成一条成熟的信息高速公路,以便用户可以无缝地使用标准工具来访问防火墙另一侧的计算机。同样的技术也可以被有能力的系统管理员用来构建虚拟专用网络 (VPN)。

2.2. 安全问题

当然,如果您的系统管理员设置了防火墙,他/她可能有充分的理由,并且您可能已签署协议不绕过它。另一方面,您可以使用 telnet、web、电子邮件或任何其他与防火墙外部的双向信息流(这是所提出的黑客技术工作的前提条件)这一事实意味着您被允许访问外部系统,并且您可以以某种方式登录到特定的外部系统这一事实意味着您也被允许这样做。

所以这一切都归结为方便地使用防火墙中的合法漏洞,并允许通用程序从那里使用通用协议,而不是需要特殊的或修改过的(和重新编译的)程序,通过大量可能被粗心或无能的系统管理员错误配置的专用代理,或者安装大量专用转换器,以通过防火墙支持的方式(如 web)访问您的每项常用服务(如电子邮件)。

此外,使用用户级 IP 模拟器(如 SLiRP)仍然应该防止外部攻击者以相反的方式穿透防火墙,除非您明确允许(或者他们很聪明和邪恶,并且是 root 用户或能够以其他方式监视您在服务器主机上)。

总而言之,提出的黑客技术应该是相对安全的。但是,这一切都取决于您设置事物的具体情况,我无法保证此黑客技术的安全性。关于任何互联网连接,无论是使用此黑客技术与否,都有许多内在不安全的东西,所以除非您有充分的理由和/或一路使用某种加密,否则不要假设任何东西是安全的。

让我们重复网络安全的基础知识:您对连接的信任程度不能超过您对可以处理未加密数据的主机的信任程度,包括连接两端的主机,以及所有可以拦截通信的主机,除非通信已使用密钥正确加密。如果您放错了信任,您的密码可能会被盗并被利用来对付您,您的信用卡号可能会被盗并被利用来对付您,并且您可能会因危害整个公司而被解雇。真倒霉。

总而言之,除非您知道自己在做什么,否则不要使用此黑客技术。请重新阅读上面的免责声明。

2.3. 其他要求

假设您知道自己在做什么,您了解配置网络连接,如果遇到疑问,您将阅读所有相关文档(HOWTO、手册页、网页、邮件列表存档、RFC、课程、教程)。

假设您在防火墙的两侧都有 shell 帐户,您可以以某种方式在防火墙之间双向传输信息包(目前已知可行的途径包括 telnetssh、电子邮件和 web),并且您可以让守护进程在服务器站点作为后台任务运行(或从现有的守护进程 sshdtelnetdsendmail/procmail 中受益)。

假设您知道或愿意学习如何在每一侧配置 IP 模拟器(pppdslirp)或互联网访问守护进程及其关联库(SOCKSTerm),根据您的连接需求和您的访问权限,并在需要时重新编译某些软件。

最后但并非最不重要的一点,为了您可以使用本文档中描述的黑客技术,假设您是需要对另一侧进行完全透明 IP 访问的防火墙一侧的 root 用户。实际上,您会希望在此侧运行 PPP 守护进程,这允许使用正常的内核数据包路由工具。如果您在此侧不是 root 用户,那么您的情况也并非绝望:实际上,Barak Pearlmutter 的 Term-Firewall mini-HOWTO 描述了如何使用纯用户级程序 Term 来达到穿透防火墙的目的。虽然没有 HOWTO,但我怀疑 SOCKS 也可用作一种无需 root 权限即可穿透防火墙的方法;我将很乐意接受对此 HOWTO 的补丁,以描述这种穿透防火墙的方法。

2.4. 下载软件

本 HOWTO 中命名的大多数软件都应该可以从您的标准 Linux 发行版中获得,可能在 contrib 的目录中。至少,以下前四个可以在.rpm.deb软件包中获得。如果您想获取最新的源代码(毕竟,连接的一端可能不是在 Linux 下运行),请使用以下地址