Iptables四表五链
什么是Iptables?
iptables实际上只是位于用户空间的一个面向系统管理员的 Linux 防火墙的管理工具而已,而真正实现防火墙功能的是 netfilter,它是 Linux 内核中实现包过滤的内核模块,iptables 对应在内核中的模块应该是 ip_tables,我们查看系统内核中ip_tables 的信息的时候可以看到 ip_tables.ko 这个模块是在 netfilter 这个目录下的。
什么是链?
数据流量经过网卡后到达内核里面,在内核中有关卡对数据进行检查,符合条件放行,不符合的进行组织,这个就被称之为链。
五链
iptables 中有 5 条链路,分别为 PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。
input
链:当收到访问防火墙本机地址的数据包时,将应用此链中的规则;output
链:当防火墙本机向外发送数据包时,将应用此链中的规则;forward
链:当收到需要通过防火中转发给其他地址的数据包时,将应用此链中的规则,注意如果需要实现forward转发需要开启Linux内核中的ip_forward功能;prerouting
链:在对数据包做路由选择之前,将应用此链中的规则;postrouting
链:在对数据包做路由选择之后,将应用此链中的规则;
什么是表?
每个链上都有一串对流量进行检测的规则,比如 PREROUTING 链上有拆解报文,做出修改
的规则,INPUT表也有拆解报文,做出修改
的规则,那么我们就用把这些相同的规则集中存储起来,这就是表。
四表
iptables 的四个表 iptable_filter
,iptable_mangle
,iptable_nat
,iptable_raw
,默认表是 filter(没有指定表的时候就是 filter 表)。
filter
表:用来对数据包进行过滤,具体的规则要求决定如何处理一个数据包。nat
表:nat 全称:network address translation 网络地址转换,主要用来修改数据包的 IP 地址、端口号信息。mangle
表:主要用来修改数据包的服务类型,生存周期,为数据包设置标记,实现流量整形、策略路由等。raw
表:主要用来决定是否对数据包进行状态跟踪。
每个链对应的表
数据包进入网卡后,在每个链路上的检测规则是有顺序的,比如 RREROUTING 链顺序就是 raw
->mangle
->nat
每个链路中的表也是有许多规则的也是有顺序的,此处可以看出 forward 是从 1->2->3 顺序执行的。
处理动作
此处列出一些常用的动作,之后的文章会对它们进行详细的示例与总结:
- ACCEPT:允许数据包通过。
- DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
- REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
- SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
- MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
- DNAT:目标地址转换。
- REDIRECT:在本机做端口映射。
- LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。
结尾
其中部分内容摘抄朱双印博客