前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iptables是如何影响数据包的传输的?

iptables是如何影响数据包的传输的?

原创
作者头像
蓝胖子的编程梦
发布2023-06-12 14:24:26
5330
发布2023-06-12 14:24:26
举报

iptables的表和链

iptables可以设置不同的规则,并且它把规则按用途进行分类,分成了4个表,分别是

用途

raw 表

用于去除数据包上的连接追踪机制(Connection Tracking)。

mangle 表

用于修改数据包的报文头信息,比如服务类型(Type Of Service,ToS)、生存周期(Time to Live,TTL)。

nat 表

用于修改数据包的源或者目的地址等信息,典型的应用是网络地址转换(Network Address Translation)。

filter 表

用于对数据包进行过滤,控制到达某条链上的数据包是继续放行、直接丢弃或拒绝(ACCEPT、DROP、REJECT),典型的应用是防火墙。

📢📢注意iptables不同的表拥有不同的用途,对应的对包的处理动作不一样,比如要想在nat表中加上过滤动作就不会被允许。

比如我想用nat表添加过滤功能的规则, -j 参数后面跟的是具体的过滤行文(例如: ACCEPT、DROP、REJECT)) 。

如下,在nat表下想添加具有过滤功能的规则就会报错

代码语言:shell
复制
root@ecs-295280:~# iptables -t nat  -A INPUT -p tcp -s 192.168.10.0/24 -j DROP
iptables v1.8.4 (legacy):
The "nat" table is not intended for filtering, the use of DROP is therefore inhibited.

关于iptables具体的常用命令可以参考我的这篇文章iptables的使用

不同类型的表可以在特定的链上添加不同的规则,为什么叫链呢?因为在某一条链上,可以加上很多条规则,就想链表一样,一个接一个。

固定的链类型有以下几种,分别会在数据流出流出的不同路径上起到作用。

用途

PREROUTING

在进入 IP 路由之前触发

INPUT

接收报文不需要经过转发,直接经过 路由到达应用程序之前会触发

FORWARD

报文需要经过转发,通常是在路由判断时发现报文的目的ip段需要主机的另一个网卡去发送

OUTPUT

报文从应用程序发出时,但在路由前会被触发

POSTROUTIN

发出报文经过路由后,会被触发

对每个链和表的作用有了大致的了解后,我们来细看下数据包流出流出过程中,各个链起的作用。

数据包是如何穿越不同的表和链的

数据包流入到应用程序,不需要经过转发

首先来看下不需要经过转发的场景,数据包是如何流动的。

如上图所示,不同的表在执行同一个链时是会有先后顺序的,这里再提一下conntrack的作用,conntrack也被称作连接跟踪,它的一个典型应用便是nat协议的实现,比如采用snat的包从网卡发出后再回来, NAT 模块收到一个新的报文时,它先查看 conntrack table, 如果其中存在相关连接信息的表项,它会根据这个表项修改报文的 ip 和 端口信息。 除此以外,Conntrack还可用于负载均衡,路由转发,QoS(Quality of Service),以及网络拓扑发现等应用场景。

数据包流入与流出时需要经过转发

接着我们再来看一下关于数据包转发的场景,这里我用docker容器的网桥和物理网卡举例,说明数据流入输出时是如何转发的。

如上图所示,在判断路由需要转发时,会先经过forward链执行相关规则,然后才将数据包发到对应转发的网卡上,然后执行postroutine链的规则。图中bridge则代表docker容器创建的网桥设备。数据包从互联网流入容器内部时,会由eth0物理网卡转发到bridge网桥,数据包从容器内部流到互联网时,会由beidge网桥转发到eth0物理网卡上。

数据包从应用程序发往互联网

接着最后来看下数据包从应用程序流出到互联网的场景,注意一点,从应用程序发出去的包虽然要路由判断,不过只有在经过nat的output链以后,路由才算真正被确认,因为dnat可以改变目的ip。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • iptables的表和链
    • 数据包是如何穿越不同的表和链的
      • 数据包流入到应用程序,不需要经过转发
        • 数据包流入与流出时需要经过转发
          • 数据包从应用程序发往互联网
          相关产品与服务
          容器镜像服务
          容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档