iptables工作在应用层,和工作在内核的netfilter共同构成了linux的防火墙与网络流量转发工具,可以用作负载均衡。其由一堆表构成,每个表由一组链构成,每条链包含一组规则。
一般来说iptables包含四个默认表:

  1. Filter表,默认使用的路由表,用来对数据包进行过滤,具体的规则要求决定如何处理一个数据,这个表包含三条链:
    • INPUT 链
    • OUTPUT 链
    • FORWARD 链
  2. NAT表,用于NAT转换,这个表也包含三条链:
    • PREROUTING 链
    • POSTROUTING 链
    • OUTPUT 链
  3. Mangle表,主要用来修改数据包的服务类型,生存周期,为数据包设置标记,实现流量整形、策略路由等。这会改变TCP报头中的QOS位,包含全部5条链:
  4. 原始表,这个表主要用来决定是否对数据包进行状态跟踪,包含2条链:
    • PREROUTING 链
    • OUTPUT 链

四个表有彼此重叠的链,这意味着每个链经由多个表处理,示意图如下:
image

表的处理优先级:raw>mangle>nat>filter
查看某个表的全部链和规则:

iptables -t <表名> -nvL

raw表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在系统进行ip_conntrack(连接跟踪)前进行处理。一但用户使用了raw表,在某个链上,raw表处理完后,将跳过NAT表和ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了。RAW表可以应用在那些不需要做nat的情况下,以提高性能。

每条规则包含一个标准和一个目标,如果条件匹配,则转到目标中指定的规则或者执行目标中提到的特殊值。如果不匹配,则继续执行下一条规则。
以下是您可以在目标中指定的可能的特殊值。

  • ACCEPT – 防火墙将接受数据包。
  • DROP – 防火墙将丢弃数据包。
  • QUEUE – 防火墙将数据包传递到用户空间。
  • RETURN – 防火墙将停止为此数据包执行当前链中的下一组规则。控制将返回到调用链。

iptables –list 命令输出中的规则包含以下字段:

  • num - 特定链中的规则编号
  • target – 我们上面讨论的特殊目标变量
  • prot - 协议。tcp、udp、icmp等,
  • opt – 该特定规则的特殊选项。
  • source – 数据包的源 IP 地址
  • 目的地 - 数据包的目的地 IP 地址

iptables命令的详细使用见下面网址:
iptables(一)基础概念、filter表常用语法规则 - flag_HW - 博客园
iptables参数及规则链解析_iptables规则链路径-CSDN博客

插入自定义链:
iptables详解(10):iptables自定义链-朱双印博客

iptables命令选项详解
-A 在指定链的末尾添加(append)一条新的规则
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
-L 列出(list)指定链中所有的规则进行查看
-E 重命名用户定义的链,不改变链本身
-F 清空(flush)
-N 新建(new-chain)一条用户自己定义的规则链
-X 删除指定表中用户自定义的规则链(delete-chain)
-P 设置指定链的默认策略(policy)
-Z 将所有表的所有链的字节和数据包计数器清零
-n 使用数字形式(numeric)显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-h 获取帮助(help)
image-1726282470201
image-1726282481804
通过-j指定默认链要调用的自定义链。