Linux 作为代理服务器
代理服务器是在您的防火墙机器上运行的软件应用程序,旨在为您的网络提供间接的互联网访问。防火墙可以是“单宿主”主机或“双宿主”主机。“单宿主”主机是一台只有一块网卡的机器。这种配置依赖于互联网路由器来阻止所有发往除防火墙之外的任何机器的数据包。“双宿主”主机是一台装有两块网卡且禁用了路由功能的机器。防火墙后面的计算机可以与双宿主主机通信,而互联网上的计算机也可以与双宿主主机通信。但是,由于网络卡之间的路由被禁用,防火墙后面的计算机无法直接与互联网上的计算机通信。
代理服务器用于允许从受保护网络内部通过单宿主或双宿主主机防火墙访问互联网。客户端应用程序直接与代理服务器对话,而代理服务器又代表客户端直接与互联网主机对话,从而充当代理。这种交互允许内部网络上的所有客户端访问互联网,但只留下防火墙这一台机器直接容易受到来自互联网的攻击。
代理服务器从您的网络内部获取一个发往互联网的数据包,并将其“来源”地址更改为自己的地址。然后,它将数据包转发到目标主机。代理服务器的妙处在于,目标主机认为它只与防火墙对话。当防火墙收到来自目标主机的响应时,代理服务器将数据包发回原始请求机器。客户端有一种错觉,认为它一直在直接与互联网上的主机通信。互联网上的主机也有一种错觉,认为它只与防火墙打交道。
当您访问执行双反向查找的 FTP 站点时,这种方法是一个很大的优势。这些站点作为一种安全措施,希望确保您确实来自您给出的地址。请求 IP 地址的主机名在 DNS 记录中查找。然后,服务器对它收到的主机名进行查找。如果从最后一次查找收到的 IP 地址与请求的 IP 地址不匹配,或者 DNS 查找未能找到任何条目,服务器将拒绝访问。
如果您被拒绝访问这些站点之一,则很可能是您的 DNS 设置有问题。当您必须管理网络中的多台机器时,保持所有条目更新可能是一项艰巨的任务。有了代理服务器,您的整个网络看起来都来自代理服务器的 IP 地址,从而减少了您需要正确配置的 DNS 条目的总数。
使用代理服务器的另一个优势是,由于所有出站流量都必须通过防火墙,作为管理员,您可以监控正在发生的互联网活动类型。代理服务器具有非常强大的日志记录功能,使您能够查看谁在访问互联网上的什么内容。来自外部的尝试访问也会被密切记录。
我不会详细介绍如何设置数据包过滤路由器,因为这类信息是特定于供应商的。但是,我将为您提供有关设置双宿主主机防火墙的基本信息。假设您使用 Linux 机器作为主机,您需要在机器中安装两块网卡。请阅读位于 ftp://sunsite.unc.edu/ 的“Multiple-Ethernet”迷你 HOWTO。我使用了两块 3Com509 网卡。
当使用两块相同的网卡时,自动检测要加载的模块是一个常见问题,因此我将驱动程序编译到单内核而不是模块化内核中。我还将以下行添加到我的 /etc/lilo.conf 文件中
append="ether=11,0x300,eth0 ether=10,0x270,eth1"
这确保了在启动时传递正确的参数。
配置您的内核以阻止其路由 IP 数据包(请参阅列表 1)。为了进一步确保保护和匿名性,请使用 RFC1918 中规定的“伪造”类地址之一(请参阅表 1)。这些 IP 地址由 INTERNIC 保留,用于防火墙后面。任何带有这些 IP 地址的数据包都会被互联网骨干路由器丢弃。有关具有双宿主主机防火墙的网络拓扑示例,请参见图 1。本文中的示例配置文件基于此基本拓扑。我们的受保护网络被分配了“伪造”的 C 类地址 192.168.50,我们假设防火墙互联网侧的有效 IP 地址为 111.222.333.1。
Socks5 服务器可以从 http://www.socks.nec.com/ 免费获得。使用 Socks5 服务器有几个优点。许多 TCP/IP 应用程序都内置了对 Socks5 代理的支持。有一个关于它的 INTERNIC RFC(RFC1928)。它通过一个端口代理所有服务,允许您阻止大多数其他端口上的传入数据包。最后,它支持您的用户想要的最常用的服务:HTTP、FTP、TELNET、finger、archie、whois、ping 和 traceroute。Unix 客户端包含在源代码分发中并随之编译。Win 3.11、Win95 和 WinNT 的客户端应用程序也可供下载。如果您有自定义应用程序,可以使用 Socks5 库将 Socks5 支持编译到您的应用程序中。
我第一次就正确编译了 Socks5 的源代码分发。配置脚本用于为您的系统设置所有必要的标志、参数和 Makefile。之后,只需执行 make 然后执行 make install 即可将所有二进制文件和 man 页面放入 /usr/local/ 目录树中。以下是构建和安装 Socks5 软件所需的步骤
tar -xvzf socks5-beta-0.17.2-exportable.tar.gz cd socks5-beta-0.17.2-exportable ./configure make su make install
服务器可以通过 inetd 启动,也可以作为守护进程运行。作为守护进程运行具有提高用户性能的优势。通过 inetd 运行可以减轻防火墙在不使用时的负担。如果您的站点像我的一样,那么永远不会有不访问互联网的时候。我将 Socks5 服务器配置为作为守护进程运行,并将启动服务器的命令添加到我的 /etc/rc.d/rc.local 文件中。
防火墙的配置分两个步骤完成。首先,服务器上有一个配置文件,必须专门为您的站点设置。默认文件是 /etc/socks5.conf(请参阅列表 2)。man 页面提供了有关适当语法的信息,并且在 http://www.socks.nec.com/v5examples.html 上也有示例配置。其次,必须在您的每个客户端工作站上完成配置。在 Unix 客户端上,这是 /etc/libsocks5.conf 文件(请参阅列表 3)。
在您的基于 Windows 的机器上,需要完成几件不同的事情。如果您的所有用户都将其互联网使用限制在 Web 上,您可以将您的配置限制为 Netscape Navigator 和 Microsoft Internet Explorer 中都可用的选项。对于 Netscape Navigator,适当的设置位于“选项”-> “网络设置”->“代理”中。选择“手动配置”,然后输入 Socks5 服务器 IP 地址和端口 1080(注意:这是默认端口,可以在编译时配置为不同的端口)。对于 Netscape Navigator 4.0,设置位于“编辑”->“首选项”->“高级”-> “代理”下。其余配置与上述相同。对于 MS Internet Explorer,选择“查看”->“选项”->“连接”。选择“通过代理服务器连接”。输入您的 Socks5 服务器的 IP 地址以及端口 1080。
如果您的用户的需求超出简单的 Web 访问,Socks5 软件的下载站点还包含 SocksCap 的两个版本,即 Windows 重定向器:SocksCap16 和 SocksCap32。SocksCap16 软件用于 Windows 3.11 客户端,而 SocksCap32 用于 Win95 和 WinNT。SocksCap16 应用程序只需要与 Winsock 应用程序同时运行即可代理该应用程序。但是,SocksCap32 应用程序必须首先启动,并且 Winsock 应用程序必须从 SocksCap32 中启动。或者,您可以创建桌面或“开始”菜单的快捷方式,从命令行调用 Winsock 应用程序配置文件
C:\Program Files\SocksCap\sc32.exe ws_ftp
两个版本的 SocksCap 都要求您在首次启动应用程序时输入服务器的相应 IP 地址和端口。
Trusted Information Systems Firewall Toolkit (TIS fwtk) 是另一种广泛使用的免费代理服务器解决方案。TIS 防火墙工具包为每项服务提供非常具体的代理,使您能够设置仅 HTTP 代理服务器,例如,如果您希望将您的用户限制为仅该服务。当软件包构建时,构建的代理包括 HTTP (http-gw)、FTP (ftp-gw)、TELNET (tn-gw)、rlogin (rlogin-gw)、X (x-gw) 和通用代理 (plug-gw)。还包括 sendmail (smap) 的安全替代品以及身份验证模块 (authsrv)。通用代理使您能够为特定机器和端口配置代理。此代理的可能用途可能包括代理 Usenet 新闻以及通过 POP3 协议访问电子邮件。(Socks5 不包括对 News 或 POP3 的支持。)
TIS fwtk 构建起来相当容易。我必须应用 http-gw 补丁才能构建 HTTP 代理。如果您在 Linux 以外的系统上构建此工具包,请确保使用 gmake 而不是 make。当我在 SGI 上尝试构建此软件包时,遇到了这个问题。这样做可能需要您首先获取并构建 GNU make,它可以在 ftp://prep.ai.mit.edu/pub/gnu/ 上找到。
TIS fwtk 没有可用的配置脚本。相反,有几个版本的 Makefile.config。只需应用 http-gw 补丁,将 Makefile.config.linux 移动到 Makefile.config,运行 make,然后运行 make install。请注意,为了构建 x-gw X 代理,您需要 Motif 库。获取它们的最简单方法是下载 lesstif,这是一个 Motif 克隆,可在 http://www.hungry.com/products/ 上获得。以下是构建和安装 fwtk 软件所需的步骤
tar xvzf fwtk-2.0.tar.gz cd fwtk chmod -R 755 * tar xvf ../http-gw.patch.tar mv Makefile.config Makefile.config.orig ln -s Makefile.config.linux Makefile.config makea su make install
二进制文件被放置在 /usr/local/etc 目录中,该位置不太可能受到系统升级的影响。代理可以配置为作为守护进程或由 inetd 运行。请仔细注意 man 页面。必须调用特定的命令行参数才能使代理作为守护进程运行。正如我上面提到的,您可以配置提供的代理中的任意多个或任意少个。配置比 Socks5 服务器复杂得多。配置文件名为 /usr/local/etc/netparam,并根据代理进行解析。每行以代理的名称开头,后跟一个冒号,然后是选项(请参阅列表 4)。
客户端配置与 Socks5 配置不同。对于上面提到的两个浏览器,只需将 Socks5 条目留空,并填写 HTTP 代理和端口,以及 FTP 和 TELNET 条目(如果您已在防火墙上设置了这些服务)。对于使用 Navigator 和 Explorer 以外的浏览器的用户来说,好消息是 - 您可以将 TIS fwtk http-gw 代理与任何浏览器一起使用。只需在所有 Web 地址前加上 http://防火墙主机的 IP 或名称/ 即可。对于 FTP,您首先 FTP 到代理服务器主机。当提示输入用户名时,输入 anonymous@ftp.ftpsite.com;然后代理会出去并建立适当的连接。对于新闻,您必须按照配置文件中的说明配置 plug-gw(请参阅列表 4)。访问新闻就像配置您的新闻客户端以指向代理服务器而不是真实的新闻服务器一样简单。
当我最初着手构建我工作场所的防火墙/代理服务器解决方案时,我最初选择了 Socks5 服务器。(我下载了这两个服务器,但 Socks5 服务器编译时没有错误,因此确定了我的选择。)在一天之内,我就弄清楚了我的网络需要的设置,并使服务器作为守护进程运行。
让用户对使用代理服务器而不是直接互联网访问感到兴奋并不容易。最近,一位用户向我抱怨他无法从互联网上流式传输视频。在他平静下来后,我问他试图访问哪个 URL。然后我很快找到了他正在使用的特定插件的 FAQ,其中有一个类似于“我如何通过防火墙流式传输视频”的条目。在阅读 FAQ 并查看可用选项后,我发现这个特定的插件不支持 Socks5。但是,它确实支持通用 HTTP 代理。因此,我将注意力转回到我 10 个月前放弃的 TIS fwtk。我找到了一个更新的版本,应用了 http-gw 补丁,执行了 gmake,并在当天晚些时候使工具包运行起来。视频流工作得非常漂亮。
这个故事说明了您不必就 Socks5 或 TIS 防火墙工具包做出非此即彼的决定。这两个软件包可以一起使用,为您的用户提供各种各样的互联网访问。
设置代理服务器是为您的用户提供互联网访问同时仍然保护您的网络免受互联网攻击的好方法。在 Socks5 服务器和 TIS 防火墙工具包之间,您可以根据需要为您的用户提供尽可能多或尽可能少的互联网访问。
