一文轻松理解Linux防火墙的五表五链

背景

防火墙里面有五条链五个表,但是常用的是三表五链。对于三表来讲,也就是三张存储了不同类别的表。而五链则不只是五个链条,还涉及到匹配顺序等。如果对于五条链理解不透彻,看着链的名字都头疼。本文就对五条链进行讨论,以促进深刻的理解这五条链。

 

分析

Linux的防火墙,采用了五表五链的方式实现按顺序的规则遍历和处理。五条链代表了不同的处理时机。要充分理解五条链的作用,能够游刃有余的运用防火墙,则需要在概念上对五条链进行深入思考。

a4a67722225742caa3c242f5232c6c23.png

 

上图是我绘制的五链的示意图,按照数字的标号,以及箭头的流向大概说明了五条链的处理位置。

 

我们先从链的名字下手。

1. PREROUTING ,即PRE-ROUT-ING,PRE代表什么之前,ROUTING的ROUT的原单词为ROUTE,即路由的意思。ING表示进行中。这里我们需要理解一个概念,即路由。

 

路由即交通,指挥交通,表示要去哪里。路由可以让我们想到系统中的路由表,网络转发请求的路由器。请求的流向也就是路由了。那路由发生在哪里呢?

 

要发生路由,必然需要请求达到网卡。网卡接收到请求之后,才需要处理路由问题,才需要说把请求往哪里送。所以PREROUTING也就是在正在处理路由,但还没有把请求送出去的这个过程中。这个过程发生在网卡的驱动处理,这个属于底层的处理,是在Linux内核中执行的。

 

它可以用来修改数据包的目标IP地址(DNAT),将目标IP由公网IP改为局域网IP等。通过PREROUTING,可以对数据包进行预处理,以确保数据包按照设定的规则被正确路由到目标主机。

 

5.POSTROUTING,即POST-ROUT-ING,POST代表什么之后,这里就表示刚处理完路由,要将请求发出去之前。就好比一个人要出远门了,什么都准备好了,问家里人还有没有要交代的。

POSTROUTING是处理发出去的一些基础处理,修改数据包的数据包的源IP地址(SNAT) ,将局域网的IP改为公网IP。和PREROUTING是一个相反的过程。

 

2.INPUT,即输入。既然说输入,那肯定要问输入到哪里,从哪输入。请求先经过网卡的预处理,处于内核态。请求最终要交给用户的应用程序来处理才有用。所以这个请求一定要交给用户态程序处理。所以这里的入指的是从内核态进入用户态。

 

进入到用户态的应用程序,才是真正决定这个请求是否合法。如果用户禁止了80端口,也就表示80的请求都是不合法的。但是这个对于内核来说是不知道的,这个是用户自己定义的。所以用户态的应用程序可以给INPUT链设置规则,以决定哪些请求允许进入,哪些不允许等等。

 

3.OUTPUT,即输出。和INPUT是一个相反的过程,即从用户态到内核态的过程。可以是对请求的响应,也可以是直接由用户态的应用程序发起对外的请求。一般来说,防护墙都是阻止外部对内部的访问,而不会限制内部对外部的访问,正所谓“严于律人宽于律己”就是这样。对别人严格限制,是为了自己的安全,对自己宽松是为了自己的方便。

 

4.FORWARD,即向前。前面说了INPUT是输入,这里就不再需要输入了。那就还有一种情况,不需要到用户态,不处理直接出去即可。所以FORWARD又称为转发。因为这个行为仅仅是转了一圈,到此一游,不做任何处理。

如果服务器接收到了广播请求,而这个请求的目的IP又不是自己,这样的请求就没有必要去INPUT到用户应用程序,所以直接转发掉即可。

但是随着容器化等虚拟化技术的发展,虚拟网卡以及虚拟网桥是没有实际的物理媒介的,而且是隔离的网络。所以无法通过传统的路由进行转发。此时需要借助防火墙的转发功能,将这些流量可以正常送到用户应用程序,否则就被丢弃了。

 

需要注意的是,INPUT和FORWARD是没有先后顺序的,他们是一条路的分叉,如果是请求本机的走INPUT,不是则走FORWARD。走了INPUT就要走OUTPUT,最后都要走POSTROUTING。这个不用记,只要理解图里关系,形成一个闭环即可,你就知道什么情况下有几条链了。

 

而对于五个表,只不过是对五条链设置的规则要存储在表里,在匹配流量时要查表确定。

a3ed3866295347279a243b04a0d3eed5.png

 

filter表:过滤。对于输入INPUT、输出OUTPUT和转发FORWARD都可以进行过滤。

nat表:地址转换功能。地址转换是对流量包做修改。一般底层操作较多,应用操作较少。涉及PREROUTING, OUTPUT, POSTOUTING三条链。

mangle表:修饰。对数据包修改功能,每条链上都可以做修改操作。修改报文元数据,做防火墙标记等。

raw表:原始。快速通道功能。为了提高效率,优先级最高,符合raw表规则的数据包会跳过一些检查。涉及到PREROUTING和OUTPUT。

security表:需要和selinux结合使用,内置规则比较复杂,通常都会被关闭。

 

通常来说,最后两个用的很少,所以常说的掌握三表五链就够了,三表就是前面三个。而在前面三个中,最常用的是filter表,默认不指定表就是filter。其次需要做NAT的就需要用到nat表。

 

总结

防火墙的五表五链,如果从概念上去理解,是非常费劲的。如果从示意图的时空顺序去理解,那就是非常轻松的事情。当然对于链的名字也需要进行基础的理解,这样和时空顺序也有对应,这样对名字也不再害怕了。

 

来源: http://www.yu7s.com/article/20240326201344108.html

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值