如果您已经阅读了防火墙和计费章节,那么使用 ipfwadm、ipchains 和 iptables 命令来配置 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 -P forward -j deny # ipchains -A forward -s 192.168.1.0/24 -d 0/0 -j MASQ |
# iptables -t nat -P POSTROUTING DROP # iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE |
要列出您创建的伪装规则,请使用-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 … |
要使用 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 |
当每个新连接建立时,IP 伪装软件会在内存中创建连接中涉及的每个主机之间的关联。您可以随时通过查看/proc/net/ip_masquerade文件来查看这些关联。但是,这些关联将在一段时间不活动后超时。
您可以使用 ipfwadm 命令设置超时值。通用语法如下
ipfwadm -M -s <tcp> <tcpfin> <udp> |
对于 ipchains 命令,语法如下
ipchains -M -S <tcp> <tcpfin> <udp> |
iptables 实现使用更长的默认计时器,并且不允许您设置它们。
这些值中的每一个都代表 IP 伪装软件使用的计时器,单位为秒。下表总结了计时器及其含义