语法格式
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