iptables组成
3个表 5条链
规则表
mangle表:为数据包设置标记,用来做流量整形的.
nat表:修改数据包中的源、目标IP地址或端口.
filter表:确定是否放行该数据包(过滤)
5条链
INPUT:处理入站数据包
OUTPUT:处理出站数据包
FORWARD:处理转发数据包
POSTROUTING链:在进行路由选择后处理数据包
PREROUTING链:在进行路由选择前处理数据包
数据包转发流程
梳理顺序
表的优先顺序
mangle>nat>filter
规则链间的匹配顺序
入站数据:PREROUTING > INPUT
出站数据:OUTPUT > POSTROUTING
转发数据:PREROUTING > FORWARD > POSTROUTING
iptables 书写命令
iptables [-t 表名] <-A|I|D|R> 链名 [规则编号] [-i|o 网卡名称] [-p 协议类型] [-s 源ip|源子网] [--sport 源端口号] [-d 目的IP|目标子网] [--dport 目标端口号] [-j 动作]
- 几个注意事项
- 不指定表名时,默认表示filter表
- 不指定链名时,默认表示该表内所有链
- 除非设置规则链的缺省策略,否则需要指定匹配条件
- 添加规则
- -A:在一个链的最后面新增( append ) 一条规则
- -I:在链内某个位置插入(insert)一条规则(默认插入第一个,加数字按数字位置加)
- 清除规则
- -D:删除指定位置或内容的规则
- -F:清空规则链内的所有规则
- -Z:清空计数器
- 替换规则
- -R:在链内某个位置替换(replace)一条规则
- 显示规则
- -L:列出一个链中的规则
- 自定义规则链
- -N:创建一条新的规则链
- -X:删除自定义的规则链
例如:#插入规则/sbin/iptables -t filter -A INPUT -p tcp -j ACCEPT/sbin/iptables -I INPUT -p udp -j ACCEPT/sbin/iptables -I INPUT 2 -p icmp -j ACCEPT/sbin/iptables -L INPUT --line-numbers#删除规则/sbin/iptables -D INPUT 2/sbin/iptables -F INPUT#清空计数器/sbin/iptables --list -v -n/sbin/iptables -Z#修改chain目标/sbin/iptables -P INPUT DROP
- 协议匹配
- 使用“-p 协议名”的形式
- 协议名可使用在“/etc/protocols”文件中定义的名称
- 常用的协议包括tcp、udp、icmp等
- 地址匹配
- 使用“-s 源地址”、 “-d 目标地址”的形式
- 地址可以是单个IP地址、网络地址(带掩码长度)
- 接口匹配
- 使用“-i 网络接口名”、 “-o 网络接口名”的形式,分别对应接收、发送数据包的网络接口
#协议匹配/sbin/iptables -I INPUT -p icmp -j REJECT/sbin/iptables -A FORWARD -p ! icmp -j ACCEPT#地址匹配/sbin/iptables -A FORWARD -s 192.168.1.11 -j REJECT/sbin/iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP#接口匹配/sbin/iptables -A FORWARD -o eth1 -d 61.35.4.3 -j DROP
- 端口匹配
- 使用“--sport 源端口”、“--dport 目标端口”的形式
- 采用“端口1:端口2”的形式可以指定一个范围的端口
- TCP标记匹配
- 使用“--tcp-flags 检查范围 被设置的标记”的形式
- 如“--tcp-flags SYN,RST,ACK SYN”表示检查SYN、RST、ACK这3个标记,只有SYN为1时满足条件
- ICMP类型匹配
- 使用“--icmp-type ICMP类型”的形式
- ICMP类型可以使用类型字符串或者对应的数值,例如Echo-Request、Echo-Reply
1 2 3 4 5 6 |
|