网络工具-iptables简介

Posted by 周思进 on May 5, 2020

iptables 和 ip6tables 工具用于向Linux内核的数据包处理模块 Netfilter 设置处理数据包的规则。

所以在使用 iptables 工具前,需要先简单了解下 Netfilter 模块,该模块主要包含的功能:
1、数据包的过滤
2、数据包修改
3、数据包地址转换
4、连接跟踪


不同的功能由不同的表设置具体的规则来实现,下面对相应的表进行简单说明:
filter:数据包过滤表,常用的地址过滤功能就是通过该表实现,如允许或者禁止某个 ip 访问、禁止某个端口访问等等
nat:数据包网络地址转换表,即进行源 ip、目标 ip 等等转换
mangle: 数据包修改
raw: 连接跟踪设置

iptables 通过 -t 选项指定所要操作的表,默认是filter表


每个表又包含多个链,就拿filter表来讲,数据包进来可设置过滤规则,数据包出去也可设置过滤规则,所以一个过滤功能可在不同环节设置规则,对应的就是不同的链。

链总共有五种:
PREROUTING: 路由判断前的数据包,即流经网口的所有数据包
FORWARD: PREROUTING 通过后的数据包经路由判断,目标非本机的数据包,如支持路由转发,则数据包会经过该表过滤检查
INPUT:PREROUTING 通过后的数据包经路由判断,目标是本机的数据包会经过该表过滤检查
OUTPUT:由本机产生的数据包,准备向外发送,经路由判断后,经过该表过滤检查
POSTROUTING:数据包发送出去的最后一个关口检查


不过需要注意不是每个表都有上述五个规则链
filter表包含三个链:INPUT、FORWARD、OUTPUT
nat表包含三个链:PREROUTING、OUTPUT、POSTROUTING
mangle包含五个链:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
raw包含两个链:PREROUTING、OUTPUT

但同一个环节(也即链上)还是会存在多个表的作用,比如INPUT链在filter和mangle表中都存在,这就涉及表的优先级顺序了,毕竟数据包只要某个规则匹配了,就只会按这个规则进行处理了,不会再往下匹配规则了。

四个表的处理优先级顺序:raw->mangle->nat->filter


通过上述对表、链的介绍,可以对整个数据包的经过流程绘图如下:

image


清楚表和链之后,接下来就是具体的规则设置了,规则的目的是针对匹配的数据包要有对应的处理操作,具体的目标操作比如下面几种:

ACCEPT: 允许包通过
DROP: 直接将包丢弃
SNAT: 源地址转换
DNAT: 目的地址转换
REDIRECT: 端口映射

下一篇针对地址过滤介绍具体的iptables命令操作。