下一页 上一页 目录

11. SOCKS 代理服务器

11.1 设置代理服务器

SOCKS 代理服务器可以从 http://www.socks.nec.com/ 获取。

解压缩并将文件解压到您系统上的一个目录中,并按照说明进行编译。我在编译时遇到了一些问题。请确保您的 Makefile 文件是正确的。

需要注意的一个重要事项是,需要将代理服务器添加到 /etc/inetd.conf。您必须添加一行

  socks  stream  tcp  nowait  nobody  /usr/local/etc/sockd  sockd

来告诉服务器在被请求时运行。

11.2 配置代理服务器

SOCKS 程序需要两个单独的配置文件。一个用于告知允许的访问权限,另一个用于将请求路由到适当的代理服务器。访问文件应位于服务器上。路由文件应位于每台 UNIX 机器上。DOS 和(据推测)Macintosh 计算机将进行自己的路由。

访问文件

对于 socks4.2 Beta,访问文件名为 "sockd.conf"。它应包含 2 行,一个 permit 行和一个 deny 行。每行将包含三个条目

标识符是 permit 或 deny。您应该同时拥有 permit 行和 deny 行。

IP 地址以典型的 IP 点分十进制表示法保存一个四字节地址。例如,192.168.1.0。

地址修饰符也是一个典型的 IP 地址四字节数字。它的工作方式类似于网络掩码。将此数字设想为 32 位(1 或 0)。如果该位为 1,则它正在检查的地址的相应位必须与 IP 地址字段中的相应位匹配。例如,如果该行是

    permit 192.168.1.23 255.255.255.255

它将仅允许与 192.168.1.23 中的每一位相匹配的 IP 地址,例如,仅 192.168.1.3。该行

    permit 192.168.1.0 255.255.255.0

将允许 192.168.1.0 到 192.168.1.255 组内的每个数字,即整个 C 类域。不应有以下行

    permit 192.168.1.0 0.0.0.0

因为这将允许每个地址,无论如何。

因此,首先允许您要允许的每个地址,然后拒绝其余的地址。要允许域 192.168.1.xxx 中的所有人,以下行

    permit 192.168.1.0 255.255.255.0
    deny 0.0.0.0 0.0.0.0

将很好地工作。请注意 deny 行中的第一个 "0.0.0.0"。对于 0.0.0.0 的修饰符,IP 地址字段无关紧要。所有 0 是标准,因为它很容易输入。

允许每个条目使用多个。

还可以授予或拒绝特定用户的访问权限。这是通过 ident 身份验证完成的。并非所有系统都支持 ident,包括 Trumpet Winsock,因此我不会在此处深入探讨。socks 的文档中对此主题有充分的说明。

路由文件

SOCKS 中的路由文件被错误地命名为 "socks.conf"。我说 "错误地命名" 是因为它与访问文件的名称太接近了,很容易将两者混淆。

路由文件用于告诉 SOCKS 客户端何时使用 socks 以及何时不使用。例如,在我们的网络中,192.168.1.3 不需要使用 socks 与 192.168.1.1 防火墙通信。它通过以太网直接连接。它自动定义 127.0.0.1,即环回地址。当然,您不需要 SOCKS 与自己通信。有三个条目

Deny 告诉 SOCKS 何时拒绝请求。此条目与 sockd.conf(访问文件)中的条目具有相同的三个字段:标识符、地址和修饰符。通常,由于这也是由 sockd.conf(访问文件)处理的,因此修饰符字段设置为 0.0.0.0。如果您想阻止自己调用任何地方,您可以在此处执行此操作。

direct 条目告诉哪些地址不使用 socks。这些是所有无需代理服务器即可到达的地址。同样,我们有三个字段:标识符、地址和修饰符。我们的示例将具有

    direct 192.168.1.0 255.255.255.0

因此,直接访问我们受保护网络上的任何内容。

sockd 条目告诉计算机哪个主机具有 socks 服务器守护程序。语法是

  sockd @=<serverlist> <IP address> <modifier>

请注意 @= 条目。这允许您设置代理服务器列表的 IP 地址。在我们的示例中,我们仅使用一个代理服务器。但是,您可以拥有多个代理服务器以允许更大的负载,并在发生故障时实现冗余。

IP 地址和修饰符字段的工作方式与其他示例中相同。您通过这些指定哪些地址去往何处。6.2.3. 来自防火墙后的 DNS

从防火墙后设置域名服务是一项相对简单的任务。您只需在防火墙机器上设置 DNS。然后,将防火墙后的每台机器设置为使用此 DNS。

11.3 使用代理服务器

Unix

要使您的应用程序与代理服务器一起工作,它们需要被 "sockified"。您将需要两个不同的 telnet,一个用于直接通信,一个用于通过代理服务器通信。SOCKS 附带有关如何 SOCKify 程序的说明,以及一些预先 SOCKified 的程序。如果您使用 SOCKified 版本直接访问某个位置,SOCKS 将自动为您切换到直接版本。因此,我们希望重命名我们受保护网络上的所有程序,并用 SOCKified 程序替换它们。"Finger" 变为 "finger.orig","telnet" 变为 "telnet.orig" 等。您必须通过 include/socks.h 文件告诉 SOCKS 关于这些程序的信息。

某些程序将自行处理路由和 sockifying。Netscape 就是其中之一。您可以通过在 Proxies 下的 SOCKs 字段中输入服务器的地址(在我们的例子中为 192.168.1.1)来在 Netscape 下使用代理服务器。每个应用程序至少需要进行一些调整,无论它如何处理代理服务器。

MS Windows 与 Trumpet Winsock

Trumpet Winsock 带有内置的代理服务器功能。在 "setup" 菜单中,输入服务器的 IP 地址以及所有可以直接访问的计算机的地址。然后,Trumpet 将处理所有传出的数据包。

使代理服务器与 UDP 数据包一起工作

SOCKS 软件包仅适用于 TCP 数据包,不适用于 UDP。这使得它的实用性大大降低。许多有用的程序,如 talk 和 Archie,都使用 UDP。有一个软件包旨在用作 UDP 数据包的代理服务器,名为 UDPrelay,由 Tom Fitzgerald <fitz@wang.com> 开发。不幸的是,在撰写本文时,它与 Linux 不兼容。

11.4 代理服务器的缺点

代理服务器首先是一个 安全设备。使用它来增加互联网访问并限制 IP 地址将有许多缺点。代理服务器将允许从受保护网络内部到外部的更大访问权限,但将使内部完全无法从外部访问。这意味着没有服务器、talk 或 archive 连接,或直接邮件发送到内部计算机。这些缺点可能看起来很小,但请这样想

FTP 会给代理服务器带来另一个问题。当获取或执行 ls 时,FTP 服务器会在客户端机器上打开一个套接字,并通过它发送信息。代理服务器不允许这样做,因此 FTP 无法正常工作。

而且,代理服务器运行缓慢。由于开销更大,几乎任何其他获得此访问权限的方式都会更快。

基本上,如果您有 IP 地址,并且不担心安全性,请不要使用防火墙和/或代理服务器。如果您没有 IP 地址,但也不担心安全性,您可能还需要研究使用 IP 模拟器,如 Term、Slirp 或 TIA。Term 可从 ftp://sunsite.unc.edu 获取,Slirp 可从 ftp://blitzen.canberra.edu.au/pub/slirp 获取,TIA 可从 marketplace.com 获取。这些软件包将运行更快,允许更好的连接,并提供从互联网到内部网络的更高级别的访问。代理服务器适用于那些拥有大量主机,并且希望通过一次设置和少量后续工作即可动态连接到互联网的网络。


下一页 上一页 目录