12.1. 构建支持防火墙伪装和转发的内核

再次强调,您需要做的第一件事是确保您的内核在构建时启用了网络防火墙支持和防火墙功能。在 2.2.14 内核版本中,您需要确保您对以下问题回答了对于以下问题
         Networking options:
         
         Network firewalls (CONFIG_FIREFALL) [N] Y
         IP:Firewalling (CONFIG_IP_FIREWALL) [N] Y
         IP:TCP syncookie support (CONFIG_SYN_COOKIES) [N] Y
         

Note: 如果您遵循了 Linux 内核部分并重新编译了您的内核,则上面显示的选项网络防火墙、IP:防火墙和 IP:TCP 同步 Cookie 支持已经设置。

IP 伪装和 IP ICMP 伪装仅网关服务器需要。
         IP:Masquerading (CONFIG_IP_MASQUERADE) [N] Y
         IP:ICMP Masquerading (CONFIG_IP_MASQUERADE_ICMP) [N] Y
         

Important: 只有您的网关服务器需要启用 IP:伪装和 IP:ICMP 伪装内核选项。 这是将您的内部网络伪装到外部所必需的。

伪装意味着如果您的本地网络上的计算机(您的 Linux 机器(或网关)充当防火墙)想要向外部发送内容,您的机器可以伪装成那台计算机。换句话说,它将流量转发到预期的外部目的地,但使其看起来像是来自防火墙本身。

它是双向工作的:如果外部主机回复,Linux 防火墙将静默地将流量转发到相应的本地计算机。这样,您本地网络上的计算机对于外部世界是完全不可见的,即使它们可以访问外部并可以接收回复。这使得本地网络上的计算机即使没有正式注册的 IP 地址也可以参与 Internet。

IP 伪装代码只有在您的系统上启用 IP 转发时才能工作。此功能默认情况下处于禁用状态,您可以使用以下命令启用它

Version 6.1 only

要在您的服务器上启用 IP 转发功能,请执行以下命令
         [root@deep] /#echo 1 > /proc/sys/net/ipv4/ip_forward
         
您可以将上面的一行添加到您的/etc/rc.d/rc.local脚本文件中,以便即使您的服务器重新启动,IP 转发也会自动为您启用。在 Red Hat Linux 6.1 中,也可以通过更改/etc/sysconfig/network文件中的行从
         FORWARD_IPV4="false"
         
到读取
         FORWARD_IPV4="yes"
         

您必须重启您的网络才能使更改生效
         [root@deep] /# /etc/rc.d/init.d/network restart
         

         Bringing up interface lo	        [  OK  ]
         Bringing up interface eth0	        [  OK  ]
         Bringing up interface eth1	        [  OK  ]
         
因此,您可以将 `echo 1 > /proc/sys/net/ipv4/ip_forward` 命令行添加到您的rc.local脚本文件,或者您更改行FORWARD_IPV4=falseyes在网络文件中将此功能设置为开启。 我个人更喜欢第二种选择。

Version 6.2 only

要在您的 RH 6.2 系统上启用 IPv4 转发,请编辑/etc/sysctl.conf文件并添加以下行
         # Enable packet forwarding
         net.ipv4.ip_forward = 1
         
您必须重启您的网络才能使更改生效。重启网络的命令如下

要在您的系统上手动重启所有网络设备,请使用以下命令
         [root@deep] /# /etc/rc.d/init.d/network restart
         

         Setting network parameters	       [  OK  ]
         Bringing up interface lo	       [  OK  ]
         Bringing up interface eth0	       [  OK  ]
         Bringing up interface eth1	       [  OK  ]
         

Important: 只有当您对内核选项 IP:伪装 (CONFIG_IP_MASQUERADE) 回答并选择让服务器充当网关并为您的内部网络伪装时,才需要上面的 IP 转发行。

如果您启用了 IP 伪装,那么模块ip_masq_ftp.o用于 ftp 文件传输,ip_masq_irc.o用于 irc 聊天,ip_masq_quake.o 你猜对了!, ip_masq_vdolive.o用于 VDOLive 视频连接,ip_masq_cuseeme.o用于 CU-SeeMe 广播和ip_masq_raudio.o用于 RealAudio 下载将自动编译。 它们是使这些协议的伪装工作所必需的。

另外,不要忘记您需要构建模块化内核并对启用可加载模块支持 (CONFIG_MODULES) 选项回答而不是单内核,以便能够在您的网关服务器上使用伪装功能和模块,例如ip_masq_ftp.o有关更多信息,请参阅本书前面 Linux 内核部分

IP: 伪装描述的基本伪装代码仅处理 TCPUDP 数据包以及现有连接的 ICMP 错误。IP:ICMP 伪装选项增加了对伪装 ICMP 数据包的额外支持,例如 ping 或 Windows 95™ tracer 程序使用的探测。

请记住,其他服务器(如 Web 服务器邮件服务器 示例)不需要启用这些选项,因为它们要么分配了真实的 IP 地址,要么不充当内部网络的网关。