11.3. 配置 IP 伪装

如果您已经阅读了防火墙和计费章节,那么使用 ipfwadmipchainsiptables 命令来配置 IP 伪装规则可能不会让您感到惊讶。

伪装规则是一种特殊的过滤规则。您只能伪装在一个接口上接收的并将路由到另一个接口的数据报。要配置伪装规则,您需要构建一个非常类似于防火墙转发规则的规则,但带有特殊的选项,告诉内核伪装数据报。ipfwadm 命令使用 -m 选项,ipchains 使用-j MASQ,而 iptables 使用-j MASQUERADE来指示应该伪装与规则规范匹配的数据报。

让我们看一个例子。格劳乔·马克斯大学的一位计算机科学专业的学生在家中将多台计算机通过以太网小型局域网连接起来。她选择使用保留的私有互联网网络地址之一来构建她的网络。她与其他学生合住,所有学生都有兴趣使用互联网。由于学生的居住条件非常简朴,他们负担不起永久的互联网连接,因此他们使用简单的拨号 PPP 互联网连接。他们都希望能够共享连接,以便在 IRC 上聊天、浏览网页以及通过 FTP 直接检索文件到他们的每台计算机——IP 伪装就是答案。

该学生首先配置一台 Linux 机器来支持拨号链路并充当局域网的路由器。当她拨号连接时分配给她的 IP 地址并不重要。她配置了带有 IP 伪装的 Linux 路由器,并为她的局域网使用了私有网络地址之一192.168.1.0。她确保局域网上的每台主机都具有指向 Linux 路由器的默认路由。

以下 ipfwadm 命令是使伪装在她的配置中工作所需的全部命令
# ipfwadm -F -p deny
# ipfwadm -F -a accept -m -S 192.168.1.0/24 -D 0/0
或使用 ipchains
# ipchains -P forward -j deny
# ipchains -A forward -s 192.168.1.0/24 -d 0/0 -j MASQ
或使用 iptables
# iptables -t nat -P POSTROUTING DROP
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 
现在,每当任何局域网主机尝试连接到远程主机上的服务时,它们的数据报将由 Linux 伪装路由器自动伪装。每个示例中的第一个规则阻止 Linux 机器路由任何其他数据报,并增加了一些安全性。

要列出您创建的伪装规则,请使用-l参数到 ipfwadm 命令,正如我们在前面讨论防火墙时所描述的那样。

要列出我们之前创建的规则,我们使用
# ipfwadm -F -l -e
这应该显示类似如下内容
# ipfwadm -F -l -e
IP firewall forward rules, default policy: accept
 pkts bytes type  prot opt  tosa tosx ifname  ifaddress  …
    0     0 acc/m all  ---- 0xFF 0x00 any     any        …
输出中的 “/m” 表示这是一个伪装规则。

要使用 ipchains 命令列出伪装规则,请使用 -L 参数。如果我们使用 ipchains 列出我们之前创建的规则,输出将如下所示
# ipchains -L
Chain input (policy ACCEPT):
Chain forward (policy ACCEPT):
target     prot opt     source                destination           ports
MASQ       all  ------  192.168.1.0/24        anywhere              n/a

Chain output (policy ACCEPT):

任何目标为MASQ的规则都是伪装规则。

最后,要使用 iptables 列出规则,您需要使用
# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy DROP)
target     prot opt source               destination         
MASQUERADE  all  --  anywhere             anywhere           MASQUERADE 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
同样,伪装规则的目标显示为MASQUERADE.

11.3.1. 设置 IP 伪装的定时参数

当每个新连接建立时,IP 伪装软件会在内存中创建连接中涉及的每个主机之间的关联。您可以随时通过查看/proc/net/ip_masquerade文件来查看这些关联。但是,这些关联将在一段时间不活动后超时。

您可以使用 ipfwadm 命令设置超时值。通用语法如下
ipfwadm -M -s <tcp> <tcpfin> <udp>

对于 ipchains 命令,语法如下
ipchains -M -S <tcp> <tcpfin> <udp>

iptables 实现使用更长的默认计时器,并且不允许您设置它们。

这些值中的每一个都代表 IP 伪装软件使用的计时器,单位为秒。下表总结了计时器及其含义

名称描述
tcp

TCP 会话超时。TCP 连接在空闲多久后,其关联将被删除。

tcpfin

FIN 后的 TCP 超时。TCP 连接断开后,关联将保留多长时间。

udp

UDP 会话超时。UDP 连接在空闲多久后,其关联将被删除。