如在之后加上 -l 的参数,则会列出目前已设定的 rule 。例如在 linux.phys 中,已设定的 rule 为:
|
"default policy" 意思是,如果封包没有受限与其它的 rule, 则 kernel 就以此预设值处理它。以 "Input rules" 为例,凡是来自 127.x.x.x 网域的封包完全被档在server 之外 (deny), 而其它的封包则可以被 server 接受。原因是 127.x.x.x 是属于 loop back 设定用的,按规定任何公开的电脑都不能将 IP 设成这个,而在此设这个 rule 主要是预防某些粗心大意的系统管理者误设了这样的 IP, 而该电脑又试图与我们的 server 连线。
由于 linux.phys 使用的是 Debian-2.0 系统,在 kernel 起动 IP-Firrewall 功能时,系统在每次重开机后都会自动设好以上的 "Input, Output rules", 使其 defaultpolicy 为 accept, 如此该 server 才能自由自在地对外连线、或接受外来的连线。同时 "Forward rules" 的 default policy 亦为 accept, 即外头的网络可以自由地经由本 server 连线到内部网络、反之亦然。现在要使用 IP-Masq 以连接内部的IP伪装 与外部的真实 IP, 我们必须改变此设定:
|
将其 default policy 设成 deny, 从此以后内外网络无法自由连线
|
将来自 192.168.1.x (内部、虚拟) 网域的封包,经由 IP-Masq (m)传送到外部网络的任何地方 (0.0.0.0/0), 当然,在此之前我们必须先设好第一步,让 PPP 接口接管 192.168.1.x 这个网域)
如此一来,IP伪装 与外头的世界就正确地建立连线了。这两行可以直接写入开机启动档中以自动执行。
FreeBSD 的做法
同样的,我们先来看看第二步。重新 compile kernel 时,请将以下选项写入设定档中 (节录自 man natd):
|
并在 /etc/rc.conf 中写入这一行
|
以便在重开机时开启 gateway 的功能。与 Linux 最大的部同是, Linux 的 IP-Masq的运作完全是在 kernel 中进行,而 FreeBSD 的 NAT 还需要跑一苹 natd 的程序来运作。请在 /etc/services 加入一行:
|
然后在开机时执行这个程序:
|
其意义为: 所有来自虚拟 (内部) 网络的封包,经转换后经由 ed0 (ethernet) 接口对外传送。
第二步我们要设定 IP-Firewall rule 。在 FreeBSD 要用 ipfw 指令。使用 ipfw -a show 会列出目前所有的 rule:
|
与 Linux 的 ipfwadm 不一样,在 FreeBSD 中不特别区分 Input, Output, Foreward这三项,也没有 default policy, 但它每一个 rule 都有一个号码,代表 rule 的比对顺序。进来的封包会按此顺序一个个地比对,一旦比对符合就按此 rule 来处理。以上的 rule 其意义是:
01000: 允许封包经由 lo0 (loop back) 互传 01010: 拒绝 127.0.0.0/8 到 127.0.0.0/8 的封包 (作用与上述 Linux 的 rule 类似) 06000: 使用 IP-Divert 建立虚拟与真实 IP 的连线 65000: 允许所有的封包自由流通 (如此 server 本身便能自由对外连线、接受连线) 65535: 拒绝所有的封包在 freebsd.phys 系统中,用的是 FreeBSD-2.2.5 操作系统,当启动 IP-Firewall之后,除了 06000 那个 rule 以外,其它的 rule 系统每次重开机时便会帮我们自动建立。而要使用 IP-Divert & natd, 我们必须自行建立 06000 这个 rule:
|
其中 06000 这个数字就决定了此 rule 在整个 rule table 的安插顺序。请注意顺序非常重要! 它一定要在 65000 之前,否则的话,来自IP伪装 的封包因为满足65000 rule, 系统就以此 rule 处理,而不再往下看有关 IP-Divert 的 rule, 结果是,IP伪装 的封包未经处理就往外丢,连线无法正确建立,网络不通。并在 /etc/rc.conf 中写入这一行