iptables表和链的介绍与基础操作
iptables表和链的介绍与基础操作
iptables采用“表”和“链”的分层结构,在Linux中是四表五链结构,表链的存在在iptables中有重要的意义,通过对表链进行规则的策略配置,可以对系统的防火墙进行很好的安全维护。具体的四表五链的对应关系如下图所示:
表的组成与功能介绍:
filter表—3条链:INPUT、FORWARD、OUTPUT。
作用:过滤数据包。内核模块:iptablesfilter。Nat表—3条链:PREROUTING、POSTROUTING、OUTPUT(centos7中还会有INPUT链)
作用:用于网络地址转换(IP、端口)。内核模块:iptablenat。Mangle表—4条链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块:iptablemangle(别看这个表这么麻烦,设置策略时几乎都不会用到它)Raw表—2条链:OUTPUT、PREROUTING
作用:决定数据包是否被状态跟踪机制处理。内核模块:iptableraw。
链的功能介绍:
- INPUT—进来的数据包应用此规则链中的策略
- OUTPUT—外出的数据包应用此规则链中的策略
- FORWARD—转发数据包时应用此规则链中的策略
- PREROUTING—对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
- POSTROUTING—对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)
同一链在不同表中的执行优先级次序(由高而低):raw→mangle→nat→filter
实验步骤
一、iptables表链查看
对表中的链进行查看,用到的主要命令是:iptables -t 表名 -L,使用-t指定规则表。
查看filter表中的内容:iptables -t filter -L。可以看到filter表中有3条链INPUT、FORWARD和OUTPUT,与上面图中的介绍相对应。可以看到此表中还有默认策略存在。
如果要查看表中某条链的规则策略,使用命令:iptables -t 表名 -L 链名。查看filter表中INPUT链的策略:
iptables -t filter -L INPUT。
查看nat表中的内容。可以看到nat表中有4条链PREROUTING、POSTROUTING、OUTPUT和INPUT,与前文的介绍相对应。如果要查看某条链,同样在后面添加链即可。
查看mangle表的内容,表中有5条链PREROUTING、POSTROUTING、INPUT、OUTPUT和FORWARD,与前文的介绍相对应。
查看raw表的内容,表中有2条链OUTPUT和PREROUTING,与前文中的介绍相对应。
二、iptables传输数据包的过程
数据包经过iptables的基本流程。
当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。
三、iptables表链基础操作
上面对表链的内容进行了查看,下面主要介绍表链的一些基础操作,例如:增、删、改、默认、记数等简单操作。结合man iptabels对表链进行操作,首先执行命令man iptabes查看iptables表链操作方法。
增加自定义链:iptables -t 表名 -N 链名
在终端输入命令iptables -t nat -N test1,可以在表中添加一条名为test1的新链。使用-L列出所有规则:iptables -t nat -L。
使用上一步的方法继续在表中增加两条新链test2和test3。
iptables -t nat -N test2 增加新链test2
iptables -t nat -N test3 增加新链test3
iptables -t nat -L 查看nat表的内容,增加了两条新链。
修改自定义链:iptables -t 表名 -E 旧链名 新链名。
对自定义链进行重命名使用参数-E。使用下面的命令将test2的链名重命名为ceshi2。
iptables -t nat -E test2 ceshi2 将链test2重命名为ceshi2
删除自定义链:iptables -t 表名 -X 链名
若想删除某条自定义的链,使用-X参数。在终端输入命令iptables -t nat -X test1,删除表nat中自定义的链test1。
删除某表所有自定义链:iptables -t 表名 -X
在终端输入命令iptables -t nat -X 可以直接删除表nat中所有自定义的链。
修改链的默认策略
可以使用-P参数修改某条链的默认规则。例如在终端输入命令iptables -P OUTPUT DROP将表filter中的链OUTPUT的默认规则改为DROP。这里没有指定表,修改的就是默认的filter表。
利用–policy也可以对规则进行修改。
利用–policy将上面的策略改回默认的ACCEPT,按下面命令进行配置。
iptables –policy OUTPUT ACCEPT 将filter表中的OUTPUT链的默认策略改为ACCEPT
以数字形式显示链中的规则:–line-numbers
查看链中的规则,并以数字的形式显示,使用命令:iptables –line-numbers -L。
规则计数器:-v
链中的规则和默认策略经常使用-v选项来观察规则的匹配情况,执行命令-nvL可以查看详细信息。其中pkts是被本机报文匹配的个数,bytes是报文所有大小加起来之和。