Next Previous Contents

4. 其它 IP Masquerade 的问题及软件支持

4.1 IP Masquerade 的问题

某些协定现在无法配合 masquerading 使用,因为它们不是假设有关埠号的一些事情,就是在位址及埠号的资料流里编码资料 - 后面这些协定需要在 masquerading 程序码里建立特定的代理程序使它们能运作。

4.2 进入系统的服务(incoming services)

Masquerading 完全不能处理外界的服务请求 (incoming services)。 只有极少方法能允许它们,但这完全与 masquerading 无关,而且实在是标准的防火墙方式。

如果你并不要求高度的安全性那么你可以简单地重导(redirect)这些埠。 有几种不同的方法可以做这件事 - 我使用一只修改过的 redir 程序(我希望这只程序很快就能从 sunsite 及其 mirrors 取得)。 如果你希望能够对外界进入系统的服务请求有某种程度的身分验认(authorisation) 那么你可以在 redir 的顶层(0.7 or above) 使用 TCP wrappers 或是 Xinetd 来允许特定 IP 位址通过,或使用其它的工具。TIS 防火墙工具集是寻找工具及信息的好地方。

更多的详节可在 IP Masquerade Resource 找到。

将会加上一小节更多关于转送服务的的信息。

4.3 已支持的客户端软件以及其它设定方面的注意事项

** 下面的列表将不再被维护了。可经由 Linux IP masquerading 运作的应用程序请参考 这里IP Masquerade Resource 以取得进一步的细节。 **

一般说来,使用传输控制协定(TCP) 或是使用者定义资料协定 (UDP)的应用程序应该都能运作。 如果你有任何关于应用程序与 IP Masquerade 兼容的建议,提示或问题,请拜访由 Lee Nevo 维护的 可与 Linux IP masquerading 运作的应用程序 网页。

可以使用的客户端软件

一般客户端软件

HTTP

所有有支持的平台,浏览网页

POP & SMTP

所有有支持的平台,电子邮件软件

Telnet

所有有支持的平台,硬件签入作业

FTP

所有有支持的平台,配合 ip_masq_ftp.o 模块(不是所有站台都能配合各种客户端软件;例如某些不能使用 ws_ftp32 触及的站台却能使用 netscape 进入)

Archie

所有有支持的平台,文档搜寻软件(并非所有 archie 客户端软件都支持)

NNTP (USENET)

所有有支持的平台,网路新闻软件

VRML

Windows (可能所有有支持的平台都可以),虚拟实境浏览

traceroute

主要是 UNIX 系列的平台,某些变种可能无法运作

ping

所有平台,配合 ICMP 修补档

anything based on IRC

所有有支持的平台,配合 ip_masq_irc.o 模块

Gopher client

所有有支持的平台

WAIS client

所有有支持的平台

多媒体客户端软件

Real Audio Player

Windows, 网路资料流音讯,配合载入 ip_masq_raudio 模块

True Speech Player 1.1b

Windows, 网路资料流音讯

Internet Wave Player

Windows, 网路资料流音讯

Worlds Chat 0.9a

Windows, 客户-伺服端立体交谈(3D chat) 程序

Alpha Worlds

Windows, Windows, 客户-伺服端立体交谈(3D chat) 程序

Powwow

Windows, 点对点文字声音白板通讯,如果你呼叫别人,人们可以与你交谈,但是他们不能呼叫你。

CU-SeeMe

所有有支持的平台,配合载入 cuseeme 模块,详细细节请参 阅 IP Masquerade Resource

VDOLive

Windows, 配合 vdolive 修补档

注意: 即使不是由你呼叫别人,使用 ipautofw 套件某些客户端软件像是 IPhone 以及 Powwow 可能还是可以运作(参阅 4.6 节)

其它客户端软件

NCSA Telnet 2.3.08

DOS, 包含 telnet, ftp, ping 等等的一组套件。

PC-anywhere for windows 2.0

MS-Windows, 经由 TCP/IP 硬件遥控 PC ,只有在作为客户端而非主机端的情形下才能运作

Socket Watch

使用 ntp - 网路时间协定

Linux net-acct package

Linux, 网路帐号管理套件

无法使用的客户端软件

Intel Internet Phone Beta 2

可以连上但声音只能单向(往外)传送

Intel Streaming Media Viewer Beta 1

无法连上伺服器

Netscape CoolTalk

无法连接对方

talk,ntalk

这将不会运作 - 需要撰写一份核心代理程序。

WebPhone

目前无法运作(它做了不合法的位址假设)。

X

没有测试过,但我想除非有人建立一套 X 代理程序否则它无法运作,这可能是 masquerading 程序码之外的一个外部程序。一个让它运作的方式是使用 ssh 作为链结并且使用其内部的 X 代理功能来执行!

已测试过可以作为其它机器的平台/作业系统

基本上,所有支持 TCP/IP 而且允许你指定匣道器/路由器(gateway/router)的作业系统都应该能和 IP Masquerade 一起工作。

4.4 IP 防火墙管理 (ipfwadm)

这一节提供关于 ipfwadm 更深入的使用指引。

这是一个给在固定 PPP 位址之 PPP 连线后面的防火墙/伪装系统使用的设定。信赖(trusted) 界面为 192.168.255.1, PPP 界面已经修改过以避免犯错 :) 。我分别列出每一个进入(incoming)以及送出(outgoing)界面来抓出变更递送路径(stuffed routing) 以及/或是伪装(masquerading)等等这些个 IP spoofing 技巧。同时任何没有明确允许的东西都是禁止的!

#!/bin/sh
#
# /etc/rc.d/rc.firewall,  定义防火墙配置,从 rc.local 执行。
#

PATH=/sbin:/bin:/usr/sbin:/usr/bin

# 测试用,等待一段时间然后清除所有的防火墙规则。
# 如果你希望防火墙十分钟之后自动关闭就取消下列几行的注解。
# (sleep 600; \
# ipfwadm -I -f; \
# ipfwadm -I -p accept; \
# ipfwadm -O -f; \
# ipfwadm -O -p accept; \
# ipfwadm -F -f; \
# ipfwadm -F -p accept; \
# ) &

# 进入伪装闸道的设定,更新以及设定拒绝的策略(policy)。事实上
# 预设的策略没什么关系,因为原先就希望拒绝以及记录所有规则
ipfwadm -I -f
ipfwadm -I -p deny
# 伪装闸道的本地(local) 界面,区域网路里的机器,允许连往任何
# 地方
ipfwadm -I -a accept -V 192.168.255.1 -S 192.168.0.0/16 -D 0.0.0.0/0
# 伪装闸道的硬件(remote)界面,声称是区域网路里的机器,IP spoofing
# 拒绝
ipfwadm -I -a deny -V your.static.PPP.address -S 192.168.0.0/16 -D 0.0.0.0/0 -o
# 伪装闸道的硬件界面,任何来源,允许送往固定 (permanent) PPP
# 位址
ipfwadm -I -a accept -V your.static.PPP.address -S 0.0.0.0/0 -D your.static.PPP.address/32
# 回授(loopback)界面是允许的
ipfwadm -I -a accept -V 127.0.0.1 -S 0.0.0.0/0 -D 0.0.0.0/0
# 捕捉所有规则,任何其它的进入方式都会被拒绝并记录。可惜没有
# 记录用的选项但这可以代替
ipfwadm -I -a deny -S 0.0.0.0/0 -D 0.0.0.0/0 -o

# 送出伪装闸道的设定,更新以及设定拒绝的策略(policy)。事实上
# 预设的策略没什么关系,因为原先就希望拒绝以及记录所有规则
ipfwadm -O -f
ipfwadm -O -p deny
# 本地界面,允许任何来源送出至区域网路
ipfwadm -O -a accept -V 192.168.255.1 -S 0.0.0.0/0 -D 192.168.0.0/16
# 硬件界面送出至区域网路,stuffed routing ,拒绝
ipfwadm -O -a deny -V your.static.PPP.address -S 0.0.0.0/0 -D 192.168.0.0/16 -o
# 区域网路的机器从硬件界面送出,stuffed masquerading,拒绝
ipfwadm -O -a deny -V your.static.PPP.address -S 192.168.0.0/16 -D 0.0.0.0/0 -o
# 区域网路的机器从硬件界面送出,stuffed masquerading,拒绝
ipfwadm -O -a deny -V your.static.PPP.address -S 0.0.0.0/0 -D 192.168.0.0/16 -o
# 任何其它硬件界面送出的东西都是允许的
ipfwadm -O -a accept -V your.static.PPP.address -S your.static.PPP.address/32 -D 0.0.0.0/0
# 回授(loopback)界面是允许的
ipfwadm -O -a accept -V 127.0.0.1 -S 0.0.0.0/0 -D 0.0.0.0/0
# 捕捉所有规则,任何其它的送出方式都会被拒绝并记录。可惜没有
# 记录用的选项但这可以代替
ipfwadm -O -a deny -S 0.0.0.0/0 -D 0.0.0.0/0 -o

# 伪装闸道的转送设定,更新以及设定拒绝的策略(policy)。事实上
# 预设的策略没什么关系,因为原先就希望拒绝以及记录所有规则
ipfwadm -F -f
ipfwadm -F -p deny
# 伪装区域网路的机器从本地界面送出至任何地方的资料
ipfwadm -F -a masquerade -W ppp0 -S 192.168.0.0/16 -D 0.0.0.0/0
# 捕捉所有规则,任何其它的转送方式都会被拒绝并记录。可惜没有
# 记录用的选项但这可以代替
ipfwadm -F -a deny -S 0.0.0.0/0 -D 0.0.0.0/0 -o

你可以使用 -I, -O 或是 -F 来控制到某特定节点的流量。记得这些规则集是由上往下扫描的而 -a 代表"附加(append)"到目前现有的规则集中所以任何限制必须在全域(global)规则之前出现。例如(没测试过) :-

使用 -I 规则。可能是速度最快的但是它只能阻止区域网路里的机器,防火墙本身仍然可以存取"禁止"的节点。当然你可能想允许这样的组合。

... start of -I rules ...
# 拒绝并记录本地界面,区域网路里的机器通往 204.50.10.13
ipfwadm -I -a reject -V 192.168.255.1 -S 192.168.0.0/16 -D 204.50.10.13/32 -o
# 本地界面,区域网路里的机器,允许通往任何地方
ipfwadm -I -a accept -V 192.168.255.1 -S 192.168.0.0/16 -D 0.0.0.0/0
... end of -I rules ...

使用 -O 规则。最慢,因为封包首先经过伪装但这个规则阻止防火墙存取禁止的节点。

... start of -O rules ...
# 拒绝并记录送出至 204.50.10.13 的资料
ipfwadm -O -a reject -V your.static.PPP.address -S your.static.PPP.address/32 -D 204.50.10.13/32 -o
# 允许任何其它硬件界面送出的东西
ipfwadm -O -a accept -V your.static.PPP.address -S your.static.PPP.address/32 -D 0.0.0.0/0
... end of -O rules ...

使用 -F 规则。可能比 -I 慢而这仍然只能阻止伪装的机器(例如内部的机器),防火墙仍然可以取得禁止的节点。

... start of -F rules ...
# 拒绝并记录 PPP  界面送出从区域网路到 204.50.10.13 的资料。
ipfwadm -F -a reject -W ppp0 -S 192.168.0.0/16 -D 204.50.10.13/32 -o
# 伪装本地界面从区域网路送出至任何地方的资料。
ipfwadm -F -a masquerade -W ppp0 -S 192.168.0.0/16 -D 0.0.0.0/0
... end of -F rules ...

不需要有个特定的规则来允许 192.168.0.0/16 通往 204.50.11.0, 这涵盖于全域规则中。

有一种以上的方法可以对界面设定上述规则。例如可以使用 -W eth0 来取代 -V 192.168.255.1,可以使用 -W ppp0 来取代 -V your.static.PPP.address。个人的选择最重要。

4.5 IP 防火墙链 (ipchains)

这个主要是给 2.2.x 核心使用的防火墙规则管理工具(加上一个修补档后也可在 2.0.x 上运作)。

我们会尽快更新此节,给一些使用 ipchains 的范例。

细节请参考 Linux IP Firewalling Chains page 以及 Linux IPCHAINS HOWTO

4.6 IP Masquerade 以及需求式拨接(Demand-Dial-Up)

  1. 如果你想把网路设定成自动拨接上网际网路,那么 diald demand 拨接套件将会是很棒的工具。
  2. 要设定 diald, 请查看 Setting Up Diald for Linux Page 网页
  3. 一旦 diald 以及 IP masq 设定完成,你可以在任何客户端机器上启动 web, telnet 或是 ftp 连线。
  4. Diald 将会侦测到进入系统的请求,然后拨接到你的 ISP 并建立连线。
  5. 第一次连线将会发生逾时(timeout) 的情形。如果你使用类比式的数据机那这是无可避免的。 建立数据机连结以及 PPP 连线所花费的时间将会使你的客户端软件不耐。 如果你使用 ISDN 连线那这是可以避免的。你得做的只是结束客户端软件现行的程序再重新启动即可。

4.7 IPautofw 封包转送程序

IPautofw 是一个给 Linux masquerading 使用的一般性 TCP 及 UDP 转送程序。一般使用需要 UDP 的套件的时候,需要载入特定的 ip_masq 模块;ip_masq_raudio, ip_masq_cuseeme,... Ipautofw 以更一般化的方式运作,它将会转送包含这些应用程序特定模块都不会转送的任何资料流型态。如果没有正确地管理这可能造成安全上的漏洞。

4.8 CU-SeeMe 与 Linux IP-Masquerade 的简短说明

Michael Owings 所提供。

简介

本节解释让 CU-SeeMe (包括 Cornell 及 White Pine 版本) 与 Linux 的 IP 伪装功能一起运作的方法。

CU-SeeMe 是一个桌上视讯会议的软件,有 Windows 及 Macintosh 两种客户端。 一个免费的版本可从 Cornell University 取得。商业的加强版可从 White Pine Software 取得。

IP 伪装允许一部或更多部在区域网路上的工作站"伪装"在一部连接到网际网路的 Linux 主机之后。 区域网路内的工作站可以几乎透通地取用网际网路,即使它没有合法的 IP 地址。 Linux 主机重写从内部网路到网际网路的外送封包,使它们看起来就像是从这部 Linux 机器发出的一样。 送进来的回应封包也被改写并转送至内部网路的正确工作站上。 这项安排使得许多网际网路的应用程序可以透通地从内部网路的工作站上执行。 然而,对某些应用程序来说(像 CU-SeeMe), Linux 的伪装程序需要一些小技巧的辅助才能使得封包转送得以正确运作。 这些辅助技巧通常来自于某些特殊的核心可载入模块。 关于 IP-Masquerading 的更多信息,请参考 The Linux IP Masquerading Website

让它运作

首先你需要适当地配置核心。你应该加入 IP-Masquerading 及 IP AutoForwarding 的完整支持。IP Autoforwarding 出现在 2.0.30 及其后的核心选项 -- 更早的核心你需要修补档。 参见 Linux IP Masquerade Resource 关于 IP-Autoforwarding 的信息指引。

接下来,你要取得最新版本的 ip_masq_cuseeme.c。 这可经由匿名 FTP 从 ftp://ftp.swampgas.com/pub/cuseeme/ip_masq_cuseeme.c 取得。 这个新的模块也已经加入 2.0.31 的核心之中。你可以用新的版本来取代核心中的版本。 ip_masq_cuseeme.c 通常位于 Linux 核心原始码的 net/ipv4 目录中。 你必须编译并安装此模块。

接下来,你必须建立 UDP 埠号 7648-7649 的自动转送如下:

ipautofw -A -r udp 7648 7649 -c udp 7648 -u
ipautofw -A -r udp 7648 7649 -h www.xxx.yyy.zzz 

第一个形式允许呼叫利用埠号 7648 (主要的 cu-seeme 埠号)进出工作站。 第二个使用 ipautofw 的方式仅允计 cu-seeme 进出 www.xxx.yyy.zzz。 我较喜欢前面这种形式,因为它更有弹性而且没有必要指定一个特别的工作站 IP。 然而,这个方式会要求一工作站能收到呼叫前先送出呼叫。

注意这两种方式都将客户端机器的 UDP 埠号 7648-7649 开放给外界 -- 虽然这不至于有严重的安全危险,你还是应特别小心。

最后,以下法载入新的 ip_masq_cuseeme 模块:

modprobe ip_masq_cuseeme 

现在你可以从你区域网路上一部被伪装的机器上执行 CU-SeeMe 并连接到硬件的回应器(reflector)上,或另一个 CU-SeeMe 的使用者。 你应该也可以收到呼叫。注意外界的呼叫者必须使用你 Linux 匣道器的 IP, 而不是被伪装工作站的 IP。

限制/警告

密码保护的回应器

目前没有任何办法使用。 White Pine 使用来源 IP (由客户端程序计算)在传送前将密码编码保护。 因为我们改写了位址,回应器使用错误的来源 IP 来解码,因此得到不正确的密码。 除非 White Pine 改变他们密码编码的策略(我已经建议过了),或是他们愿意开放他们密码编码的公式以便让我能加到 ip_masq_cuseeme。 由于后面一个办法的可能性很小,因此我非常鼓励看到这份文件的人与 White Pine 联络并建议他们采用前一种作法。 因为本页的流量相当满高的,我怀疑我们能否产生足够的电子邮件以使此问题能进入 White Pine 的优先处理名单中。

感谢 Thomas Griwenka 提醒我这件事。

执行回应器

你不能尝试在你跑 ip_masq_cuseeme 及 ipautoforwarding 埠号 7648 的相同机器上执行回应器(reflector)。 这没有用,因为两者都需要配置埠号 7648。 或者用另一部可直达网际网路的主机来执行,或是在执行回应器前卸下 CU-SeeMe 的客户端支持。

多 CU-SeeMe 使用者

你不能一次有多位 CU-SeeMe 使用者同时在一个区域网路上面。 这是由于 CU-SeeMe 顽固地坚持使用埠号 7648, 使得在区域网路内一次仅能有一台工作站能(容易地)被重导向。

使用 -c (control port) 来呼叫 ipautofw, 你可以避免指定一固定的工作站位址去使用 CU-SeeMe -- 第一部使用控制埠号 7648 送出任何东西的工作站会被指定为接收来自埠号 7648-7649 的流量。 如果经过五分钟左右这部工作站不再使用埠号 7648, 另一部工作站就可接著使用。

协助设定 CU-SeeMe

若有任何评论或问题请写信到 mikey@swampgas.com。 或者如果你愿意的话,你可以 透过 CU-SeeMe 来呼叫我

4.9 其它相关工具

我们会尽快更新此节加上更多其它伪装相关的工具如 ipportfw 以及 masqadmin。


Next Previous Contents