有两种特殊的策略组件指定 tcp_syn 标志 (-y) 和碎片包 (-f)。当 tcp 客户端第一次试图连接远程 tcp 服务器时,tcp_syn 标志被设置。不幸的是,黑客会利用它攻击远程服务器,其做法是发送大量 tcp_syn 消息而不真正连接服务器,从而锁住所有服务器进程,使其速度变慢或使服务器崩溃。只要为该组件指定 tcp 组件 -p,就可以阻止外部的 tcp_syn 攻击。 碎片包过滤规则组件是必要的,因为 ip 包常常通过不同容量的的网络连接。有时他们不得不分成一些名为 碎片 的更小的包以便顺利通过小容量的连接通道。在 ppp 协议下用调制解调器连接网络时常发生这种情况。例如,以太网可以传送长为 1500 字节的 ip 包,而调制解调器(串行线)的包通常是 256 字节;以太网量级的包不得不分成六份以符合调制解调器量级的碎片包。到达目的机器后,这些碎片包就被组合起来。因此,在 ppp 或 slip 协议下使用调制解调器连接网络时,您应该指定这个规则组件,这样防火墙才会把包视作一体。也只有如此它才能正确辨识传输层协议( tcp, udp, icmp) 信息,从而实施其他规则。 在命令行下运行以上规则,并用 /sbin/ipchains -l 命令检查其顺序是否正确。接着还要按照"开始/关闭"脚本指定的文件名来保存这些规则(我们的例子中,该文件是 /etc/firewall.rules )。下次系统启动时就会使用这些规则了。需要注意的是,每次您定义新规则都必须运行以下命令:
# /sbin/ipchains-save > /etc/firewall.rules 接下来给出一些配置实例,您可以看到如何为防火墙制定规则。 一些配置实例
# /sbin/ipchains -p forward deny # /sbin/ipchains -a forward -f -i ppp0 -j masq 采用以上两个规则,则在包流出之前,所有安装了防火墙的机器(bob,fred,jane 和 olivia)都被屏蔽了。同时禁止防火墙外部的机器接触任何内部设备。这里并没有涉及路由器,实际上本例中的防火墙是通过调制解调器建立到因特网 ppp 连接的。 嵌入路由器的防火墙代码并不少见。很多时候,防火墙和路由器可能位于同一机器。另一方面,利用 ppp 的调制解调器方案,防火墙就成为路由器,路由指令把所有非本地数据流转发到 ppp 端口。 您可能希望防火墙的功能复杂些,例如所有保护范围内的机器都可连到外部去,而只有指定的外部机器才能连接进来。下面的例子准许名为 familiar 的机器 (198.102.68.2) 连接到防火墙内部机器的某些指定端口 (telnet、ftp 和 www 等服务的公共端口)。
# /sbin/ipchains -p forward deny # /sbin/ipchains -a forward -f -i eth0 -j masq # /sbin/ipchains -a input -i eth0 -s 198.102.68.2 -j accept # /sbin/ipchains -a output -i eth1 -s 198.102.68.2 -d 0/0 -j deny # /sbin/ipchains -a output -i eth1 -s 198.102.68.2 -d 0/0 telnet -j masq # /sbin/ipchains -a output -i eth1 -s 198.102.68.2 -d 0/0 ftp -j masq # /sbin/ipchains -a output -i eth1 -s 198.102.68.2 -d 0/0 ftp-data -j masq # /sbin/ipchains -a output --i eth1 s 198.102.68.2 -d 0/0 www -j masq 在我们的例子中,有台名为 freedom 的服务器位于防火墙网络外但处于公司网络内部。这是一台任何机器都可达的公共网页服务器,它和互联网上其他计算机一样,可能遭受外部世界的攻击和破坏。不过我们可以假定它足够安全,并允许其连接到防火墙内部网络。这就需要添加下列规则:
# /sbin/ipchains -a input -i eth0 -s 216.19.15.32 -j accept # /sbin/ipchains -a output -i eth1 -s 216.19.15.32 -d 0/0 -j masq 应用协议 如此一来,为了过滤这些应用协议内核还需要加载另外的模块。这些模块包含某些协议,能够支持 ftp、realaudio、irc、vdo live、cu seeme 甚至某些流行的游戏 quake 等。 为了加载这些模块,可以在先前的"开始/关闭"脚本中加入以下用于特殊协议的代码行:
/sbin/modprobe ip_masq_raudio /sbin/modprobe ip_masq_irc /sbin/modprobe ip_masq_cuseeme /sbin/modprobe ip_masq_vdolive /sbin/modprobe ip_masq_quake /sbin/modprobe ports=ip_masq_quake 26000,27000,27910 ipchains 具有十分强大的功能,可以把几组规则一次"链接"。当您需要面对许多内部节点,并为它们分别定义网络数据包策略时,这种建立多链条的能力就更加重要。这些链条被指派给特定的网络接口,改变接口开关的安全规则(例如网络连接接通或断开)。 ipchains 将继续升级。随着下一内核版本 (2.3.x 和 2.4.x) 一起发布 ipchains 新版本,名为 netfilter 。新版本软件将能执行一些设计精巧的组件,例如逆向网络地址转换 (reverse nats),用于使一组内部网机器为某个地址进行负载平衡。 一般情况下,有效使用 ipchains 可以让您的内部网络细节受到防火墙良好的保护。它赋予您那台"慢吞吞"的老机器以崭新的使命,变成网络里相当有用的一员。
|