概述
- iptables,即:netfilter/iptables,IP信息包过滤系统。由netfilter(内核空间)和iptables(用户空间)两部分组成。
- iptables组件是一种工具,它使插入、修改和移除信息包过滤表中的规则变得容易。
- iptables,是基于内核的防火墙,功能非常强大。所有规则,严格控制大小写,即:所有表都是小写,所有链都是大写。配置后立即生效,不需要重启服务。
“三表五链”。
iptables常用部分如下:
三表:
- filter表,负责过滤数据包,包括的规则链有,input,output和 forward;
- nat表,涉及到网络地址转换(私网-公网)-路有层次,包括的规则链有,prerouting,postrouting和output、input;
- mangle表,主要应用在修改数据包内容上,用来做流量整形的,给数据包打个标识,默认的规则链有:INPUT,OUTPUT、 forward,POSTROUTING,PREROUTING;
五链:
- INPUT匹配目标IP是本机的数据包,入口流量;
- OUTPUT匹配出口数据包,一般不在此链上做配置;
- FORWARD匹配流经本机的数据包;
- PREROUTING用来修改目的地址,用来做DNAT(目的NAT – 所以,修改目的IP–服务接受-内部集群分发处理) 如:把内网中的80端口映射到路由器外网端口上;
- POSTROUTIING用来修改源地址用来做SNAT(源NAT–修改的源IP–家用共享上网SNAT)。
如:内网通过路由器NAT转换功能实现,内网PC机通过一个公网IP地址上网。
表名 | PREROUTING | INPUT | OUTPUT | FORWARD | POSTROUTING |
---|---|---|---|---|---|
raw | 有 | 无 | 有 | 无 | 无 |
mangle | 有 | 有 | 有 | 有 | 有 |
nat | 有 | 有 | 有 | 无 | 有 |
filter | 无 | 有 | 有 | 有 | 无 |
iptables过滤封包过程:
-->PREROUTING-->[ROUTE]-->FORWARD-->POSTROUTING-->
mangle | mangle ^mangle
nat | filter |nat
V |
INPUT OUTPUT
|mangle ^mangle
|filter |nat
V------->local------>|filter
数据包分为两类:
1. 直接发给防火墙的数据包;
2. 经过防火墙的数据包
数据包流转过程:
1. 数据包进入网卡时,首先进入PREROUTING链,内核判断是否转发,判断依据是:数据包的目的IP;
2. 如果目的IP是本机,则数据包到达INPUT链,此时任何进程都会收到该数据包;
3. 本机程序发送的数据包,首先进入OUTPUT链,再经过POSTROUTING链后输出到网络中。
4. 如果目的IP不是本机,需要本机转发的,且内核允许转发,则数据包经过FORWARD链,到达POSTROUTING链,最后输出到网络中。
[表]的优先匹配顺序为:raw > mangle > nat > filter
[链]的优先匹配顺序为:
入站数据:PREROUTING,INPUT;
出站数据:OUTPUT,POSTROUTING;
转发数据:PREROUTING,FORWARD,POSTROUTING
[链]内匹配顺序:
- 从上向下一次匹配,找到匹配的规则,立即停止匹配;所以,配置时应该:严格策略在上,宽松策略在下;
- 找不到匹配的规则,则按照默认规则执行;(一般默认是“允许”)