iptables是制定本机与外界通信流量的一个规则;网络包过滤系统是一种功能强大的工具,可用于添加、编辑和除去ip流量规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。
四表五链
- 4个表:filter,nat,mangle,raw,默认表是filter(规则中没有指定表的时候就是filter表)。各个表的处理优先级:raw>mangle>nat>filter。
- filter:一般的过滤功能
- nat:用于nat功能(端口映射,地址映射,中转IP等)
- mangle:用于对特定数据包的修改
- raw:优先最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能
- 5个链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。
- PREROUTING:数据包进入路由表之前
- INPUT:通过路由表后目的地为本机
- FORWARDING:通过路由表后,目的地不为本机
- OUTPUT:由本机产生,向外转发
- POSTROUTIONG:发送到网卡接口之前。
- 表和链在控制主机端网络数据包的输入和输出的关系如下:
nat 和 filter表
- nat:此规则表拥有 PREROUTING 和 POSTROUTING 两个规则链,主要功能为进行一对一、一对多、多对多等网址转换工作(SNAT、DNAT),这个规则表除了作网址转换外,请不要做其它用途。
- filter: 这个规则表是默认规则表,拥有 INPUT、FORWARD 和 OUTPUT 三个规则链,这个规则表顾名思义是用来进行封包过滤的处理动作(例如:DROP、 LOG、 ACCEPT 或 REJECT),我们会将基本规则都建立在此规则表中。
Linux环境下iptables规则的创建、修改、删除
- 在缺省的情况下默认做的修改是对filter表进行修改,需要添加一条路由规则,直接使用指令
iptables XXX
(XXX是/etc/sysconfig/iptables文件中的一条指令),之后执行service iptables save
- 但是想对nat或者其他的表进行修改,需要指定这个特定的表,
iptables -t nat XXX
- iptables工具相关指令:
iptables-restore < iptables.save # 从备份文件中恢复出iptables iptables-save > iptables.save # 将当前的iptables保存到iptables.save
- 路由规则中一些参数的意义:
- 命令 -A, –append:说明 新增规则到某个规则链中,该规则将会成为规则链中的最后一条规则。
- 参数 -s, –src, –source:匹配封包的来源 IP
- 参数 -d, –dst, –destination:匹配封包的目的
- 参数 -p, –protocol:匹配封包的协议
- 参数 -i, –in-interface:说明 用来匹配封包是从哪块网卡进入,可以使用通配字符 + 来做大范围匹配
- 参数 –sport, –source-port:说明 用来匹配封包的源端口,可以匹配单一端口,或是一个范围
- 参数 –dport, –destination-port:说明用来匹配封包的目的地端口号
- 参数 -m state –state:说明 用来匹配连接状态, 连接状态共有四种:INVALID、ESTABLISHED、NEW 和 RELATED。
- INVALID 表示该封包的连接编号(Session ID)无法辨识或编号不正确。
- ESTABLISHED 表示该封包属于某个已经建立的连接。
- NEW 表示该封包想要起始一个连接(重设连接或将连接重导向)。
- RELATED 表示该封包是属于某个已经建立的连接,所建立的新连接。
- -j 参数用来指定要进行的处理动作,常用的处理动作包括:ACCEPT、REJECT、DROP、REDIRECT、MASQUERADE、LOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、MARK
- DNAT: 改写封包目的地 IP 为某特定 IP 或 IP 范围
- ACCEPT: 将封包放行,进行完此处理动作后,将不再匹配其它规则,直接跳往下一个规则链(natostrouting)。