iptables 命令指南语法:iptables [-t table] command [match] [target]
-t table:指定 iptables 表。
command:命令选项。
match:规则选项
target:动则选项
iptables 命令选项选 项 描 述
-A 在所选择的链规则结尾添加一条规则。
-D 从所选择的链中删除规则。有两种方法指定要删除的规则:一是把规则完整地写出来,再就是指定规则序号。
-R 在所选中的链里指定的行上替换match。如iptables -R INPUT number [match] [target]。当地址是以名字而不是以IP的形式出现时,若名字可以被解析为多个IP,则这条command会失败。
-I 根据给出的序号插入规则,默认向顶部插入规则。
-L 列出所选择的链的所有规则。如iptables -L INPUT,不指定链将列出表中所有规则。
-F 清空所选链的规则。
-Z 清空所选链的计数器。如iptables -Z INPUT,不指定链则认为是所有链。
-N 建立新链。
-X 删除指定的用户定义链。被删除的链必须没有被引用,如果被引用,在删除之前你必须删除与之有关的规则。如果没有给出参数,这条命令将会删除所有非内建链。
-P 定义链的默认target, 这里的target只能是DROP和ACCEPT。
-E 对自定义链进行重命名。如iptables -E allowed disallowed
-x 只能和-L连用,使-L输出中的计数器显示准确的数值,而不是K、M、G等估值。
-n
–line-numbers 只能和-L连用,以数值形式显示,而不是默认的名字:主机名、网络名、程序名等。
-c 只能和-A,-I,-R连用,在创建或更改规则时设置计数器,如-c 20 400,意思是让内核把包计数器设为20,把字节计数器设为400。
-m
–modprobe 此选项告诉 iptables 探测并装载要使用的模块
iptables 规则选项我把规则按协议方式分为五类:通用规则、TCP规则、UDP规则、ICMP规则、高级规则。其中通用规则是可以应用于任何协议的,也不用装载何种扩展的。而TCP规则、UDP规则、ICMP规则只能应用于对应的协议,要装入相应扩展模块,但它是自动或隐含装入内核的,不需手动使用 -m 载入,所以也称为隐含匹配。高级规则必须用 -m 装载扩展的,也称为显式匹配。
选 项 描 述
通用规则
-p 匹配协义类型。可以是协义名称(不分大小写),也可以是相应整数值,必需在/etc/protocols中定义,缺省设置为ALL。可以在协义前加英文感叹号取反。
-s 匹配源地址。单个地址:192.168.1.1 192.168.1.1/24;多个地址:192.168.1.0/24 192.168.1.0/255.255.255.0;在地址前加英文感叹号表示取反,注意空格:-s ! 192.168.1.0/24; 缺省是匹配所有地址。
-d 匹配目标地址。语法和-s完全一样。
-i 以包进入本地所使用的网络接口匹配包。要注意这个匹配操作只能用于INPUT,FORWARD,PREROUTING这三个链。感叹号表示取反,-i ! eth0。
-o 以包离开本地所使用的网络接口来匹配包。语法和-i完全一样。
-f 用来匹配一个被分片的包的第二个片或及以后的部分。因为它们不包含源或目的地址,或ICMP类型等信息,因此其它规则无法匹配到它,所以才有这个匹配操作。要注意碎片攻击哦。这个操作也可以加英文感叹号表示取反,但要注意位置,如 ! -f。取反时,表示只能匹配到没有分片的包或者是被分片的包的第一个碎片,其后的片都不行。现在内核有完善碎片功能,可以防止碎片攻击,所以不必使用取反的功能来防止碎片通过。如果你使用连接跟踪,是不会看到任何碎片的,因为在它们到达任何链之前就被处理过了。
TCP规则(必需有-p tcp作为前提条件)
–sport 基于TCP包的源端口来匹配包,不指定端口认为是全部端口。可以使用端口号或者服务名匹配,使用服务名时必需在/etc/servers中定义。可以使用连续的端口–sport 22:80,表示从22到80所有端口。使用连续端口时省略首位端口号时默认是0,如:–sport :80表示从0到80的所有端口,使用连续端口时省略末位端口时,默认是65535,如–sport 22:表示从22到65535的所有端口。在端口号前面加英文感叹号表示取反。
–dport 基于TCP包的目的端口来匹配包。语法和–sport完全一样。
–tcp-flags 匹配指定的TCP标记。有两个参数,它们都是列表,列表内部用英文逗号隔开,这两个列表之间用空格分开。第一个参数指定我们要检查的标记,第二个参数指定在第一个参数中设为1的标记(即状态是打开的标记),且其它标记值为0。这个匹配操作可以识别以下标记:SYN、ACK、FIN、RST、URG、PSH,另外还有两个词也可以使用就是ALL和NONE。ALL是指选定所有标记,NONE是不选定任何标记。–tcp-flags也可以使用英文感叹号取反值,如:–tcp-flags ! SYN,FIN,ACK SYN表示匹配FIN和ACK标记被设置而SYN标记没有设置的TCP包。
–syn 这是ipchains时代的遗留物,和–tcp-flags SYN,RST,ACK SYN的作用完作一样。也可以使用英文感叹号,如:! –syn用来匹配状态为已建立的连接包。
–tcp-option 这个选项我还没有理解,请网友帮助我补充。
UDP规则(必需有-p udp作为前提条件)
–sport 基于UDP的源端口匹配包,语法同-p tcp –sport完全一样。
–sport 基于UDP的目的端口匹配包,语法同上。
ICMP规则(必需有-p ICMP作为前提条件)
–icmp-type 根据ICMP类型匹配包,类型的指定可以使用十进制数值和相应的名字。数值在RFC792中有定义,名字可以用iptables -p ICMP –help查看。这个选项也可以用英文感叹号取反。
高级规则,要用 -m 装载扩展模声,把这个规则分开是因为更好描述。
选 项 描 述
-m limit 载入匹配速率模块。
–limit 为某条规则设置最大平均匹配速率,也就是单位时间内可以匹配几个包。它的形式是一个数值加一个单位,可以是/second /minute /hour /day。默认是每小时3次,即3/hour,也就是每20分种一次。也以用英文感叹号取反。
–limit-burst 定义limit match的峰值,就是在单位时间内最多匹配几个包,默认是5。
-m mac 载入 MAC匹配模块。
–mac-source 地址格式只能是xx:xx:xx:xx:xx:xx,也可以用英文感叹号取反。
-m mark 标志匹置模块
–mark 以包被设置的标志值来匹配包,这个值是由iptables的MARK target来设置的,它是一个无符号的整数。
-m multiport 多端口匹配模块,可以定义不连续的多个端口,最多定义15个不连续的端口,且不能同时使用标准端口匹配和多端口扩展匹配。应用于TCP规则和UDP规则
–sport 定义多个源端口,如:-p tcp -m multiport -sport 22,53,81,3389。
–dport 定义多个目的端口,语法同上。
–port 同端口多端口匹配,意思就是它匹配的是那种源端口和目的端口是同一端口的包。比如:端口80到端口80的包。语法同上。
-m iprange 多个连续IP匹配模块
–src-range 源IP匹配,例:192.168.0.1-192.168.0.100。
–dst-range 目的IP匹配
-m owner 应用级权限匹配模块
–uid-owner 基于生成包的用户ID来匹配外出的包。如:-m owner –uid-owner 0
–gid-owner 基于生成包的用户组ID来匹配外出的包。
–pid-owner 基于生成包的进程ID来匹配外出的包。
–sid-owner 按生成包的会话ID来匹配外出的包。
-m state 连接状态匹配模块
–state 4种状态可用:INVALID、ESTABLISHED、NEW、RELATED。INVALID意味着这个包没有已知的流或连接与之关联,也可能是它包含的数据或包头有问题;ESTABLISHED意思是包是完全有效的,而且属于一个已建立的连接,这个连接的两端都已经有数据发送。NEW表示包将要或已经开始建立一个新的连接,或者这个包和一个还没有在两端都有数据发送的连接有关。RELATED说明包正在建立一个新连接,这个连接和一个已建立的连接相关的。注意:NEW状态并不在试图建立新连接的TCP包里寻找SYN标记。
-m tos TCP的TOS字段匹配模块
–tos 根据TOS匹配包。
-m ttl TCP的TTL字段匹配模块
–ttl 根据TTL值来匹配,参数是十进制数。
iptables 动作选项就是匹配规则后发生的动作。命令 -j。
还有一个很有用的选项:-j 用户自定义链,这就就是跳入到这个用户自定义链中去。
选 项 描 述
-j ACCEPT 对符合规则的包允许通过。
-j DROP 对符合规则的包丢弃动作。
-j REJECT 拒绝数据包,并返回错误信息。只能用于INPUT、FORWARD、OUTPUT链中。
–reject-with 告诉REJECT target 应向发送者反回什么样的信息。可用的信息类型可以man一下。
-j DNAT 目的地址转换。DNAT只能应用于nat表的PREROUTING和OUTPUT中。
–to-destination 指定要写入的IP头的地址。可以使用这几种方式:1、单个IP;2、连续地址192.168.1.1-192.168.1.10,这种情况下每个流就会被随机分配一个要转发的地址,但同一个流总是使用同一个地址。3、我们还可以在地址后面指定端口或端口范围,如:192.168.1.1:80或192.168.1.1:80-100,要注意只有选用-p指定协议后,才能使用。
-j SNAT 源地址转换。只能应用于nat表的POSTROUTING中。
–to-source 指定要转换的源地址和端口。
-j MASQUERADE 这个动作和SNAT的作用是一样的,区别就是它不需要指定源地址。MASQUERADE被设计用于那些动态获取IP地址的连接的,比如拨号上网。MASQUERADE和SNAT一样,只能应用于nat表的POSTROUTING中。
–to-ports 在指定协义的前提下,设置外出包能使用的端口。例:–to-ports 1025或–to-ports 1024-1050。
-j LOG 记录包的有关信息,这个功能是通过内核的日志工具完成的,需要开启syslogd服务。
–log-level 记录等级设置,记录等级详细信息可以查看文件/etc/syslog.conf。
–log-prefix 在记录信息之前加上指定的前缀。如:–log-prefix “INPUT packets”
–log-tcp-sequence 把包的TCP序列号和其它日志信息一起记录下来。
–log-tcp-options 记录TCP包头中的字段大小不变的选项。
–log-ip-options 记录IP包头中的字段大小不变的选项。
-j MARK 用来设置mark值,这个值只能在本地的mangle表里使用,不能用在其它任何地方。
–set-mark 设置mark值,这个值是一个无符号的整数。
-j MIRROR 颠倒IP头中的源地址和目的地址,然后转发包。这个动作只能应就于INPUT、FORWARD、PREROUTING链和被它们调用的自定义链中,如果外出的包是因MIRROR target发出的,则它们是不会被filter、net、mangle表内的链处理的。
-j QUEUE 这个target为用户空间的程序或应用软件管理包队列。它是和iptables之外的程序或工具协同使用的,包括网络计数工具,高级的数据包代理或过滤应用,等等。
-j REDIRECT 在防火墙所在的机子内部转发包或流到另一端口。换包话说,这个target把要转发的包的目的地址改写为我们自已机子的IP。我们在做透明代理时,这个target可是起了很大作用的。
–to-ports 在指定协义前提下,定义目的端口。不使用这个选项,目的端口不会被改变。指定一个端口,如–to-ports 8080。指定端口范围,如–to-ports 8080-8090。
-j RETURN 若包在子链中遇到了RETURN target,则返回父链的下一条继续进行条件的比较。
-j TOS TOS是用来设置IP头中的Type of Service字段的。这个target只能应用于mangle表内使用。
–set-tos 设置TOS的值。
-j TTL 修改IP头中的Time To Live字段的值。只能用于mangle表中。
–ttl-set 设置TTL值。
–ttl-dec 设定TTL要被减掉的值。
–ttl-inc 设定TTL要被增加的值。
-ULOG 可以在用户空间记录被匹配的包信息,这些信息和整个包都会通过netlink socket被多播。然后一个或多个用户空间的进程就会接受它们。我们可以在ULOGD project page里面找ULOGD用户空间的软件。
–ulog-nlgroup 指定向哪个netlink组发送包。
–ulog-prefix 指定记录信息的前缀。
–ulog-cprange 指定每个包要向“ULOG在用户空间的代理”发送的字节数。
–ulog-qthreshold 表示先在内核里积聚多个少包,再把它们发送到用户空间里。
