扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:51cto 2007年10月18日
关键字:
在本页阅读全文(共3页)
命令 | 陈述 |
ipchains -N <chain-name> | 创建一个新链 |
ipchains -X <chain-name> | 删除已有链 |
ipchains -L <chain-name> | 列出链中的所有规则 |
ipchains -F <chain-name> | 删除链中的所有规则,但仍保留该链 |
ipchains -Z <chain-name> | 删除与链相关的统计数据 |
ipchains -P <chain-name> <policy> | 设置链的全部策略(接受 ACCEPT, 否决 DENY, 拒绝 REJECT, 屏蔽 MASQ, 改向 REDIRECT, 返回 RETURN 等) |
ipchains -M -L | 列出所有使用屏蔽的链 |
ipchains -M -S <timeout-values> | 对所有使用屏蔽的链,根据协议不同而分配若干超时限制 |
命令 | 陈述 |
ipchains -A <chain-name> <rule> | 将规则添加到链中 |
ipchains -D <chain-name> <rule-number> | 根据规则在链中的位置,删除该规则 |
ipchains -R <chain-name> <rule-number> <rule> | 根据规则在链中的位置,用新规则取代它 |
ipchains -I <chain-name> <rule-number> <rule> | 将新规则插入到链中的指定位置 |
ipchains -C <chain-name> <protocol-info> | 使用链中的规则来过滤 protocol-info 中的内容,从而测试该链 |
表 3 中的过滤规则命令需要指定源和目的地址、协议类型和相关的端口号、其他IP协议的标志、以及所施行于它们的规则。这些规则条目可以逐一列出,以便或含糊或准确的描述被过滤掉的包的类型。
源地址 (-s) 和目的地址 (-d) 具有相同的格式。您可以具体指定单个主机地址或某网络的一组主机地址。前一种情况,只需要插入主机地址;后一种情况则需要指定网络地址和网络地址掩码或比特掩码。比特掩码和网络掩码的作用是一样的,不同于网络掩码给定四组十进制数,它从网络掩码的左端开始计入比特数。例如,网络掩码 255.255.255.0 等效于比特掩码 24,255.255.224.0 等效于 19。不方便的是,您不能指定任意范围的网络地址,比如从 192.168.1.1 到 192.168.1.133 ―― 因为您无法用合适的网络掩码来表示它们。这个软件不得不这么工作,因为想要使它有效地过滤任意一段网络地址实在是太困难了。
规则 | 陈述 |
-d 192.168.1.24 -j ACCEPT | 接受所有发送到 192.16.1.24 (Jane) 的包 |
-d 192.168.0.0/255.255.224.0 -j DENY | 拒绝所有试图到达 192.168.1.0 到 192.168.31.255 范围中某个地址的数据包,这就意味着 Bob, Fred 和 Jane 的主机都被保护起来,而 Olivia 则没有。 |
-d 192.168.0.0/19 -j DENY | 和上一命令相同,只是用比特掩码来表示范围的结束地址。 |
上面的例子展示了目的地址的细节(用 -d ),但和源地址的用法是相同的(只是代之以 -s )。下一个策略组件是协议类型。ipchains 支持三种常用的传输协议类型:TCP、UDP 和 ICMP。其他协议仍处于试用阶段,这里略过不谈。
-p TCP -s 192.168.1.24 -j ACCEPT | 接受所有来自 Jane (192.168.1.24) 的包 |
-p TCP -d 192.168.0.0/19 -j DENY | 否决所有到达 Bob, Fred 和 Jane 的 TCP 包 |
-p TCP -d 192.168.1.24 80 -j ACCEPT | 接受到达 Jane 机器80端口的所有 TCP 包 |
-p TCP -d 192.168.1.24 www -j ACCEPT | 和上一命令类似,但用 www 来表示缺省的 Web 服务器端口。在 /etc/services 文件中定义了此端口。 |
-p TCP -d 192.168.1.24 0:1024 -j DENY | 否决所有要到 Jane 的0到1024范围中任何一个端口的 TCP 包。 |
-p TCP -d 192.168.1.24 www -j ACCEPT | 接收要到 Jane 机器上 www 端口(缺省情况下即80端口)的所有 TCP 包。 |
-p TCP -d 192.168.1.24 ! www -j DENY | D 否决要到 Jane 机器上 www 之外任何端口的 TCP 包。命令中的感叹后(!)表示对它后面的值取非,这里即用 ! www 来表示除了 www 之外的所有端口值。 |
-p TCP -d ! 192.168.1.24 www -j DENY | 否决要到除了 Jane 之外的其他机器 www 端口的所有 TCP 包。注意这条命令与上一条并不相同。 |
-p TCP -d ! 192.168.1.24 ! www -j DENY | 否决所有要到 Jane 之外的其他机器,并且非 www 端口的 TCP 包。也就是说,它允许那些到达 Jane 的 www 端口的 TCP 包。尽量不要用这样的规则,以免引起混乱。 |
-p ! TCP -d 192.168.1.24 -j DENY | 否决所有要到 Jane 机器上的 TCP 之外的数据包。 |
对于 UDP 协议,其工作情况类似。而对于支持 ping 和 traceroute 的 ICMP 协议则需要指定端口.
-p ICMP -d 192.168.1.24 0 -j ACCEPT -p ICMP -d 192.168.1.24 8 -j ACCEPT | 接受对 Jane 的 ping 包。为了让 ping 正常工作,这两条规则(ICMP 端口0 和 8)必须分开写。 |
-p ICMP -d 192.168.1.24 3 -j ACCEPT | 如果 Jane 机器上的用户试图访问一个远程站点,所返回的“无法到达” ICMP 消息允许通过。访问一些远程机器的 telnet 或其他服务时,常有这种没有回应的情况发生,因此通常都会使用这条规则。 |
-p ICMP -d 192.168.1.24 11 -j DENY | 否决来自防火墙外部 traceroute 命令的数据包。 |
除了地址和协议信息,您还可以指定通过包的网络接口驱动程序。如果要加入考虑数据包的来源,是比较容易的,在指定过滤规则应用的网络端口时也很有用。
-i eth0 -s 192.168.1.24 -j ACCEPT | 使用第一块以太网卡 (eth0) 来接受所有来自 Jane 的数据包。 |
-i eth+ -s 192.168.1.24 -j ACCEPT | 可以用任何一块网卡 (eth+) 来接受来自 Jane 的数据包。 |
-i ppp0 -p TCP -s 198.102.68.2 1025:65535 -j ACCEPT | 通过 ppp 接口,来接受所有来自 familiar (198.102.68.2) 1025 到 65535 端口之间的 TCP 包。 |
有两种特殊的策略组件指定 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 )。下次系统启动时就会使用这些规则了。需要注意的是,每次您定义新规则都必须运行以下命令:
|
接下来给出一些配置实例,您可以看到如何为防火墙制定规则。
一些配置实例
这个例子是最简单的防火墙模型,只允许位于保护范围内的机器访问外部网络,但禁止任何外部机器进入内部网络。您首先要拦截由任何接口流出的所有包,然后只让那些具有转换过的地址信息的包通过。
|
采用以上两个规则,则在包流出之前,所有安装了防火墙的机器(Bob,Fred,Jane 和 Olivia)都被屏蔽了。同时禁止防火墙外部的机器接触任何内部设备。这里并没有涉及路由器,实际上本例中的防火墙是通过调制解调器建立到因特网 PPP 连接的。
嵌入路由器的防火墙代码并不少见。很多时候,防火墙和路由器可能位于同一机器。另一方面,利用 PPP 的调制解调器方案,防火墙就成为路由器,路由指令把所有非本地数据流转发到 PPP 端口。
您可能希望防火墙的功能复杂些,例如所有保护范围内的机器都可连到外部去,而只有指定的外部机器才能连接进来。下面的例子准许名为 familiar 的机器 (198.102.68.2) 连接到防火墙内部机器的某些指定端口 (telnet、FTP 和 WWW 等服务的公共端口)。
|
在我们的例子中,有台名为 Freedom 的服务器位于防火墙网络外但处于公司网络内部。这是一台任何机器都可达的公共网页服务器,它和互联网上其他计算机一样,可能遭受外部世界的攻击和破坏。不过我们可以假定它足够安全,并允许其连接到防火墙内部网络。这就需要添加下列规则:
|
应用协议
有些应用要求协议包含正确的主机地址信息,否则无法工作。这些应用可能会将网络或主机地址信息嵌入到 TCP 或 UDP 包里,但包过滤器一般不深入探究这些包中的内容。
如此一来,为了过滤这些应用协议内核还需要加载另外的模块。这些模块包含某些协议,能够支持 FTP、RealAudio、IRC、VDO Live、CU SeeMe 甚至某些流行的游戏 Quake 等。
为了加载这些模块,可以在先前的"开始/关闭"脚本中加入以下用于特殊协议的代码行:
|
ipchains 具有十分强大的功能,可以把几组规则一次"链接"。当您需要面对许多内部节点,并为它们分别定义网络数据包策略时,这种建立多链条的能力就更加重要。这些链条被指派给特定的网络接口,改变接口开关的安全规则(例如网络连接接通或断开)。
ipchains 将继续升级。随着下一内核版本 (2.3.x 和 2.4.x) 一起发布 ipchains 新版本,名为 netfilter 。新版本软件将能执行一些设计精巧的组件,例如逆向网络地址转换 (reverse NATs),用于使一组内部网机器为某个地址进行负载平衡。
一般情况下,有效使用 ipchains 可以让您的内部网络细节受到防火墙良好的保护。它赋予您那台"慢吞吞"的老机器以崭新的使命,变成网络里相当有用的一员。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者