防火墙 01 — 基本概念

基本概念

Q:什么是防火墙?

简单来说就是工作在 网络边缘 或者 主机边缘、根据事先定义好的规则对进出的数据报文进行检查和处理的模块。

因为工作位置的不同,原理的不同,虽然都是防火墙,但是可以按照类别进行划分。

位置划分:

  • 对于工作在网络边缘的防火墙,我们叫它 网络防火墙,一般是硬件设备进行处理,也叫 硬件防火墙
  • 对于工作在主机/服务器边缘的防火墙,我们叫它 主机防火墙,一般是通过软件进行处理,也叫 软件防火墙

原理划分:

  • 包过滤防火墙:就是能够对数据包进行简单的过滤,比如说根据 源ip地址 和 目标ip地址 ,源端口和目标端口等等规则进行数据包过滤。常见的比如允许80端口的数据包放行,其他端口不允许。
  • 应用层防火墙:主要是用来过滤应用层信息。

配置划分:

  • 内核态防火墙
  • 用户态防火墙

GNU/Linux 防火墙由两部分组成,netfilteriptables(Centos 6 及以下的版本使用iptables,Centos 7/8/9 使用 firewalld )。netfilter 是基于内核的部分,管理员无法直接修改里面的内容,所以需要一个工具来修改里面的内容,也就是 iptables 或者 firewalld,两者结合才是完整的防火墙功能。

根据防火墙的定义,是需要预先定义好规则,即规则是防火墙最核心的内容,不管是哪种防火墙,都需要定义规则,去匹配相应的数据类型。所谓 防火墙规则,就是一种给防火墙筛选数据报文的方法。

GNU/Linux的规则有两种,即 默认规则自定义规则。默认规则是最基本的规则,要么全部通过(开放),要么全部不通过(关闭),这在生产环境下肯定不适合。所以,我们需要在默认规则的基础上,再去定义大量的自定义规则,从而实现允许个别,拒绝所有,或者是允许全部,拒绝个别。

Q:自定义规则的匹配标准常见有哪些?

  • IP头部,常见的源ip和目标ip
  • TCP头部,常见的源端口和目标端口
  • UDP头部,常见的源端口和目标端口

数据的走向

netfilter 提供了这么5个接口,管理员可以通过 iptables 在接口处配置规则,来实现数据包的过滤。

  1. 外部访问本地的程序

    当客户端通过 Eth 0 网卡发送数据包,要判断是否是从本地应用响应还是从当前的主机做数据转发,具体看 TCP/IP 协议路由表。如果这个数据是要发送给本地的话,那么它的过程如 绿色线 那样,通过 1 位置(或者叫 1 接口)转发给本机相应的应用程序。

  2. 本地访问外部程序

    当前主机的一个用户访问了外部的 web server,它的过程如 橘色线 那样,通过位置 2 访问 web server。2 位置也可以是响应的位置。

  3. 本地负责转发

    外部 client 通过 Eth 0 向我当前的主机发送了数据包,该数据包并不是访问当前本机的应用程序,通过接口 3 ,把经过Eth 0 网卡的数据包转发和发送出去,过程如 红色线 所示。

    Q:问题来了,如果我要拒绝某个客户端请求,是应该在请求的时候就拒绝,还是响应的时候拒绝?

    1 位置和 2 位置都能实现,只不过1 位置设置规则的话,数据包到达应用程序之前就会被拦截掉。而如果是 2 位置,则该数据包经过了应用程序。从效率上来说,在 1 位置设置规则的效率更加地高。

说明
防火墙的规则要设置在正确的位置,同时,如果有多条规则设置在 1 位置,则遵循 「自上而下」(从上到下一条一条匹配)和 「匹配即停止」。所谓匹配即停止,即一旦有数据包匹配规则,则停止往后匹配,执行相应的动作。

Q:除了1、2、3位置,还有其他的位置(接口)吗?

有,4 和 5。一台主机有多块网卡时,我们可以将这台主机配置成一台路由,让这台主机依据逻辑地址进行寻址并转发数据。这台 GNU/Linux 主机必须开启两个功能——路由功能(Router)和网络地址转换功能(NAT)。

比如说有这样的一个环境,一个局域网 client 访问公网的 web server,经过网关(也叫默认路由)后,如果这个数据包不做任何的变化,web server则会把 源地址 作为 目标地址 来响应客户端,但是我们都知道,私有IP地址是不能直接在公网上使用和通信的,所以这个数据包出网关之后,通过 NAT 把 源地址 转变为 公网地址。

现在我们知道了这五个位置,说明如下:

  • 1 位置,设置入站的防火墙规则,被称为 INPUT
  • 2 位置,设置出站的防火墙规则,被称为 OUTPUT
  • 3 位置,设置转发的防火墙规则,被称为 FORWARD
  • 4 位置,路由转发之前的防火墙规则,被称为 FREROUTING
  • 5 位置,做完路由转发之后的防火墙规则,被称为 POSTROUTING

规则链

我们知道在一个位置可以设置多条规则,遵循 「自上而下」和 「匹配即停止」 。把该位置的多条规则首尾连接起来,就形成了一个链状结构,即 规则链,作用是承载防火墙规则。

  • 如果是入站数据包,则是 PREROUTING链 —> INPUT链
  • 如果是出站数据包,则是 OUTPUT链 —> POSTROUTING链
  • 如果是转发数据包,则是 FREROUTING链 —> FORWARD链 —> POSTROUTING链

如下图所示:

规则表

所谓规则表,就是根据规则链组合实现功能的不同而定义的表,就叫 规则表

  • raw 表:实现状态跟踪。包含 FREROUTING 和 OUTPUT
  • mangle 表:标记,比如说给所有的数据包打标记,告诉数据包走哪条链路,或者标记数据包生存周期TTL等。包含INPUT、OUTPUT、FORWARD、FREROUTING、POSTROUTING
  • nat 表:转换源ip地址、目标地址、源端口、目标端口等。包含OUTPUT、FREROUTING、POSTROUTING
  • filter 表:数据包的过滤,顾名思义就是哪些数据包能通过防火墙。包含INPUT、OUTPUT、FORWARD

对于规则表来说,生效顺序依次是 raw表、mangle表、nat表、filter表。

我们常说的「四表五链」,它们之间的关系是这样的:

Avatar photo

关于 陸風睿

GNU/Linux 从业者、开源爱好者、技术钻研者,撰写文档既是兴趣也是工作内容之一。Q - "281957576";WeChat - "jiulongxiaotianci"
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇