语法格式

iptables [ -t table] command [match] [target/jump]

target必须放在最后,若不指定表名,默认为filter表,command是增删或修改一个规则

match描述包的特点,可以指定IP,接口,协议类型等等

若数据包匹配match的描述,内核用target来处理,或把包发往target

Tables

nat    网络地址转换

mangle 改变不同的包的包头的内容,如TTL,TOS,或MARK,mangle有五个链:PREROUTING,POSTROUTING,OUTPUT,INPUT,FORWARD。在mangle表内不能做任何NAT

filter    专门过滤包,INPUT,OUTPUT,FORWARD

command

-A     --append

末尾添加规则

-D     --delete

删除规则,一是完整写出规则,二是指定规则的序号(由1开始)

-I    --insert

根据序号插入规则,默认序号是1

-R    --replace

替换规则,要指定序号

-L   --list

显示所选链的所有规则

-F    --flush

清空所选的链,不指定链会清空表的所有链

-Z    --zero

把指定链(不指定是所有链)的计数器清零

-N    --new-chain

根据指定的名字建新链

-X    --delete-chain

删除指定的自定义链(不指定删除默认表的所有非内建链)

-P    --policy

默认的target,所有不符合规则的包被强制使用这个策略。只有内建的链可以使用策略

-E    --rename-chain

对自定义的链重命名

option

-v    --verbose(详细的)

可以使用此选项的命令:--list  --append --insert --delete --replace

-x  --exact(精确的)

--list

-n  --numeric(数值)

--list

--line-numbers(序号)

--list

-c --set-counters(设置计数器)

--insert --append --replace

--modprobe(探测并加载模块)

ALL

matches

五类:通用匹配,TCP匹配,UDP匹配,ICMP匹配,特殊匹配(state,owner limit等)

通用匹配:可以直接使用,不需要前提条件

-p --protocol    协议名

例:iptables -A INPUT -p tcp

1,名字不分大小写,但必须是/etc/protocols中定义的

2,可以使用相应的数值,ICMP是1,TCP是6,UDP是17

3,缺省是ALL,只匹配TCP,UDP,ICMP

4,可以是列表,以逗号分隔,如tcp,udp

5,可以加!取反,值范围是TCP,UDP,ICMP

-s --source --src     来源地址

iptables -A INPUT -s 192.168.1.1

1,单个地址

2,网络,192.168.1.0/24    192.168.1.0/255.255.255.0

3,加!取反

4,缺省是所有地址

 

-d --dst --destination    目的地址

iptables -A INPUT -d 192.168.1.1

同 -s一样

 

-i --in-interface    网络接口

iptables -A INPUT -i eth0

只能用于INPUT,FORWARD,PREROUTING

1,指定接口名称

2,可使用通配符,如 +号匹配所有包,不考虑接口,eth+表示所有ethernet接口

3,加!取反

 

-o --out-interface

同 -i

 

-f --fragment

iptables -A INPUT -f

匹配被分片的包的第二片及以后的部分

 

隐含匹配

TCP matches 只能匹配TCP,必须有 -p tcp为前提

--sport --source-port

1,不指定表示所有端口

2,可以用服务名或端口号,服务名从/etc/services中查找,用端口号装载规则会更快

3,连续端口号,22:80=>20到80的端口号, :80 =>0到80的端口号,80: =>80到65535的端口号

4,可以加!号取反, -sport ! 22

5,不匹配连续的端口列表

 

--dport --destination-port

用法同sport,目的地端口

 

--tcp-flags

iptables -p tcp --tcp-flags SYN,FIN,ACK SYN 表示匹配仅SYN标记被设置的包

iptables -p tcp --tcp-flags ALL NONE 匹配所有标记都未设置1的包

iptables -p tcp --tcp-flags ! SYN,FIN,ACK SYN 表示FIN,ACK被设置的包

 

--syn

为ipchain兼容

 

--tcp-option

iptables -p tcp --tcp-option 16

根据TCP表头匹配

 

UDP matches

只有--sport --dport,用法与TCP一样

 

ICMP matches

--icmp-type

iptables -A INPUT -p icmp --icmptype 8

icmp类型匹配 ,可以加!取反

 

显式匹配

--limit

iptables -A INPUT -m limit --limit 3/hour

单位时间内可匹配的包

--limit-burst

iptables -A INPUT -m limit 3/hour --limit-burst 5

单位时间内可匹配包的峰值

--mac-source

iptables -A INPUT -m --mac-source AA:BB:00:11:CC:DD

mac地址匹配,只能用于以太网,可用!取反,只能用在PREROUTING,FORWARD,INPUT链中

多端口匹配

可以指定不连续的多个端口,不能同时使用标准端口匹配和多端口匹配.

iptables -A INPUT -p tcp -m multiport --source-port 22,53,80

iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80

iptables -A INPUT -p tcp -m multiport --port 22,53,80 同端口匹配,如80到80的包

 

owner match

基于包的生成者的ID来匹配包,只能用于OUTPUT

--uid-owner      用户名ID

--gid-owner      组ID

--pid-owner      进程号

--sid-owner      生成包的会话ID(SID)

iptables -A OUTPUT -m --pid-owner 100

 

state match 连接状态跟踪机制匹配

--state

iptables -A INPUT -m --state RELATED,ESTABLISHED

 

TOS match

TOS是IP头的一部分,由8个二进制位组成,包括一个3 bit的优先权子字段(现在已被忽略),4 bit的TOS子字 段和1 bit未用位(必须置0)。它一般用来把当前流的优先权和需要的服务(比如,最小延时、最大吞吐量 等)通知路由器。但路由器和管理员对这个值的处理相差很大,有的根本就不理会,而有的就会尽量满足要 求。

--tos

iptables -A INPUT -p tcp -m --tos 0x16

 

TTL match

根据IP头里的time to live来匹配

--ttl

iptables -A OUTPUT -m ttl --ttl 60