iptables命令大家都经常用到,但本文要讲的是iptables命令的结构,对学习和记忆iptables命令非常有帮助!
命令行本节列出了iptables命令行的组成部分(跟在实用工具名iptables后面的内容)。除了明确标示出来的部分之外,实用工具iptables对命令行参数的位置并没有特殊的要求。本章中的示例反映的是一种普遍接受的语法,它可以让命令行更加易于阅读、理解和维护。不是所有命令都包括全部的组成部分。
iptables命令行中的很多符号都有两种形式:短格式(单个字母,前面还有一个连字符)和长格式(一个单词,前面有两个连字符)。为了简洁起见,大多数脚本使用短格式,而使用长格式的命令行显得有些笨重。下面的两条iptables命令行是一样的效果,本节将它们作为示例:
表指定命令所操作的表的名称:Filter、NAT还是Mangle。可以在任何iptables命令中指定表名。如果不指定表名,那么该命令操作的就是Filter表。本章的大多数示例不指定表名,因此它们操作的是Filter表。用-ttablename或--tabletablename来指定表。
命令用来说明命令行剩余部分的作用,比如添加或删除规则、显示规则或添加规则链。这个示例中的命令(-A和--append)将命令行指定的规则添加到指定的表和规则链中。15.7.1节列出了所有命令。
规则链指定规则所属的规则链或命令操作的规则链的名称。规则链有INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING,或者由用户定义的规则链。在指定规则链时,直接将规则链的名字放进命令行,不需要在前面放置任何连字符。本节开头的示例操作的是FORWARD规则链。
匹配条件 有两种匹配条件:分组匹配条件(匹配网络分组)和规则匹配条件(匹配已有规则)。
分组匹配条件/规则定义分组匹配条件用来识别网络分组,并实现规则,对匹配条件的分组采取相应的行动。分组匹配条件和动作的组合被称为规则定义。规则定义构成了分组过滤的基础。本节开头的第一个示例使用的规则匹配条件是--in-interfaceeth1--out-interface eth0。第二个示例使用的是同一个条件,但用的是短格式:-i eth1-oeth0。这两条规则都用来转发设备eth1上接收到的分组,并将其通过设备eth0发送到网络。
规则匹配条件规则匹配条件识别已有的规则。iptables命令能够修改、删除或将一条新规则放置到与规则匹配条件指定的规则相邻的地方。有两种方法可以指定某条已有规则:可以使用与曾经用来建立规则相同的规则定义,也可以使用规则的序号(被称为规则编号)。规则编号从1开始,它表示的是规则链中的第一条规则,可在iptables-L(或者--line-numbers)的结果中显示。下面的第一条命令将本节开头所列的规则删除。第二条命令将INPUT规则链中编号为3的规则替换成另一条规则,将所有来自IP地址192.168.0.10的分组拒绝:
跳转或目标用来指定内核对分组(它们匹配规则的所有匹配条件)所采取的动作。指定跳转或目标的方式为-jtarget或者--jumptarget。本节开头的示例使用命令--jump ACCEPT和-jACCEPT,来指定目标ACCEPT。
跳转跳转将控制转移到同一个表中的不同规则链。下面的命令将一条规则添加(--append)到INPUT链,将使用TCP协议(--protocoltcp)的分组传递给用户定义链tcp_rules(--jumptcp_rules):
当分组经过tcp_rules链的处理之后(假设还没有被丢弃或拒绝),它将从刚跳转的那条规则之后的规则继续经过INPUT链处理。
目标目标指定内核对分组所采取的动作,最简单的动作是ACCEPT、DROP和REJECT,下面的命令向FORWARD链中添加一条规则,将来自FTP端口(/etc/services--iptables根据这个文件来确定使用哪个端口--显示FTP使用的端口是23)的分组拒绝:
有些目标(比如LOG)并不是最终的目标:在执行该目标之后,将控制传递给下一条规则。
通过文章的详细描述,我们知道了iptables命令的结构,希望大家都能快速掌握iptables命令!
【编辑推荐】