Loading...

文章背景图

iptables四表五链

2026-03-30
10
-
- 分钟
|

docker运行时插入新的规则,可能导致所有设备无法访问,重启docker可能解决这个问题

iptables是位于用户空间的防火墙管理工具,在实际工作中是在Linux内核中,利用内核中netfilter模块来进行,其中四表是用户记录和修改数据包中字段,五链主要是每个阶段对应的规则。这个工具在/sbin目录下,所以只能root用户才能操作。

iptables介绍

iptables在使用时必须要知道一个表所包含的链,才能够正确的在这个表中添加规则

四个表分别是filter、net、raw、mangle

四个表是由优先级的一个链的的表的优先级是raw、mangle、nat、filter

  • filter主要是进行数据包的过滤,包含input、output、forward链

  • nat主要是进行nat地址的转换,包含prerouting、postrouting、output链。。nat是必须在数据包连接的基础上使用的,如果raw选择不进行追踪,就会跳过nat表

  • mangle主要是修改服务类型,数据包的生存周期等值,包含全部的五链

  • raw主要是进行看这个数据包是否要进行追踪,只包含output、pereouting链

数据包跟踪是一种进行消耗CPU资源的为数据包添加状态的操作,他会在内存中建立一个哈希表进行存储,这个大小是有限的,当这个连接表溢出后会导致网络连接失败。不进行追踪也不会影响后面的过滤,但是会有高级功能需要这个追踪。如果要禁止数据包在raw中进行可以提高效率,例如禁止ping,在raw中禁止ping,可以节省进行追踪的CPU资源。指定raw比默认filter效率高

五链主要是input、output、forward、prerouting、postrouting五个链

  • input主要是收到本机IP的数据包

  • output主要是发出本机IP的数据包

  • forward主要是从本机中转的数据包

  • prerouting主要是在路由确定前的数据包

  • postrouting主要是路由确定后的数据包

如果说一个机器没有开启流量中转功能ip_forward,forward就没有事情,prerouting会一直活跃,如果说ip_forward没有开启,它会数据包丢弃

iptables使用

  • -t 加上要操作的表,如果没有使用,默认在filter表中添加规则

  • -A 加上-t指定的表中的链,如果后面的链不存在前面的表中会报错

  • -p 指定具体的协议,如果这个协议中又有不同的具体协议可以加上,例如-p icmp --icmp-type echo-request

  • -j 添加具体要进行的操作,ACCEPT同意,DROP拒绝,REJECT拒绝并给发送者提醒,LOG将这个记录的syslog中并匹配下一个,具体的表还有不同的操作

  • -s 添加源地址

  • -d 添加目的地址

  • --sport 添加源端口(可能需要和-p tcp/udp使用)

  • --dport 添加目的端口

  • -i/-d 添加网络接口

  • -D 删除规则

  • -I 在开头插入

  • --list 展示规则

  • -n 不解析域名

  • -v 看流量包数量

如果想要主机禁止别人ping自己可以在raw表PREROUTING链中禁止icmp,具体命令,大写是不能随意换成小写的

sudo iptables -t raw -A PREROUTING -p icmp --icmp-type echo-request -j DROP

删除时直接将-A换成-D即可,比如删除raw中prerouting链中的第一行规则

sudo iptables -t raw -D PREROUTING 1

后面删除的可以添加行号,也可以直接将原始的规则中A换成D,但是其他部分必须完全相同才能匹配。

-A直接换成-I就可以直接插入开头

查看并显示行号

sudo iptables -t raw -L -n -v --line-numbers

清空表规则

sudo iptables -t filter -F

更新规则第一行的规则

sudo iptables -R INPUT 1 -s 192.168.1.1 -j ACCEPT

评论交流

文章目录