某些协定现在无法配合 masquerading 使用,因为它们不是假设有关埠号的一些事情,就是在位址及埠号的资料流里编码资料 - 後面这些协定需要在 masquerading 程式码里建立特定的代理程式使它们能运作.
Masquerading 完全不能处理外界的服务请求 (incoming services). 只有极少方法能允许它们,但这完全与 masquerading 无关,而且实在是标准的防火墙方式.
如果你并不要求高度的安全性那麽你可以简单地重导(redirect)这些埠. 有几种不同的方法可以做这件事 - 我使用一只修改过的 redir 程式(我希望这只程式很快就能从 sunsite 及其 mirrors 取得). 如果你希望能够对外界进入系统的服务请求有某种程度的身分验认(authorisation) 那麽你可以在 redir 的顶层(0.7 or above) 使用 TCP wrappers 或是 Xinetd 来允许特定 IP 位址通过,或使用其它的工具.TIS 防火墙工具集是寻找工具及资讯的好地方.
更多的详节可在 IP Masquerade Resource 找到.
** 下面的列表将不再被维护了.可经由 Linux IP masquerading 运作的应用程式请参考这里 和 IP Masquerade Resource 以取得进一步的细节. **
一般说来,使用传输控制协定(TCP) 或是使用者定义资料协定 (UDP)的应用程式应该都能运作. 如果你有任何关於应用程式与 IP Masquerade 相容的建议,提示或问题,请拜访由 Lee Nevo 维护的 可与 Linux IP masquerading 运作的应用程式 网页.
一般客户端软体
所有有支援的平台,浏览网页
所有有支援的平台,电子邮件软体
所有有支援的平台,远端签入作业
所有有支援的平台,配合 ip_masq_ftp.o 模组(不是所有站台都能配合各种客户端软体;例如某些不能使用 ws_ftp32 触及的站台却能使用 netscape 进入)
所有有支援的平台,档案搜寻软体(并非所有 archie 客户端软体都支援)
所有有支援的平台,网路新闻软体
Windows (可能所有有支援的平台都可以),虚拟实境浏览
主要是 UNIX 系列的平台,某些变种可能无法运作
所有平台,配合 ICMP 修补档
所有有支援的平台,配合 ip_masq_irc.o 模组
所有有支援的平台
所有有支援的平台
多媒体客户端软体
Windows, 网路资料流音讯,配合载入 ip_masq_raudio 模组
Windows, 网路资料流音讯
Windows, 网路资料流音讯
Windows, 客户-伺服端立体交谈(3D chat) 程式
Windows, Windows, 客户-伺服端立体交谈(3D chat) 程式
Windows, 点对点文字声音白板通讯,如果你呼叫别人,人们可以与你交谈,但是他们不能呼叫你.
所有有支援的平台,配合载入 cuseeme 模组,详细细节请参 阅 IP Masquerade Resource
Windows, 配合 vdolive 修补档
注意: 即使不是由你呼叫别人,使用 ipautofw 套件某些客户端软体像是 IPhone 以及 Powwow 可能还是可以运作(参阅 4.6 节)
其它客户端软体
DOS, 包含 telnet, ftp, ping 等等的一组套件.
MS-Windows, 经由 TCP/IP 远端遥控 PC ,只有在作为客户端而非主机端的情形下才能运作
使用 ntp - 网路时间协定
Linux, 网路帐号管理套件
可以连上但声音只能单向(往外)传送
无法连上伺服器
无法连接对方
这将不会运作 - 需要撰写一份核心代理程式.
目前无法运作(它做了不合法的位址假设).
没有测试过,但我想除非有人建立一套 X 代理程式否则它无法运作,这可能是 masquerading 程式码之外的一个外部程式.一个让它运作的方式是使用 ssh 作为链结并且使用其内部的 X 代理功能来执行!
这一节提供关於 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.个人的选择最重要.
IPautofw 是一个给 Linux masquerading 使用的一般性 TCP 及 UDP 转送程式.一般使用需要 UDP 的套件的时候,需要载入特定的 ip_masq 模组;ip_masq_raudio, ip_masq_cuseeme,... Ipautofw 以更一般化的方式运作,它将会转送包含这些应用程式特定模组都不会转送的任何资料流型态.如果没有正确地管理这可能造成安全上的漏洞.