Linux防火墙——iptables简介

一、防火墙相关概念

这里描述了一些相关的概念。

[En]

Some related concepts are described here.

从逻辑上讲,防火墙可以分为主机防火墙和网络防火墙。

[En]

Logically, firewalls can be divided into host firewalls and network firewalls.

主机防火墙:旨在保护单个主机。

[En]

Host firewall: designed to protect a single host.

网络防火墙:通常位于网络入口或边缘,旨在保护网络入口,以服务于防火墙后面的局域网。

[En]

Network firewall: often at the network entrance or edge, aimed at protecting the network entrance to serve the local local area network behind the firewall.

网络防火墙和主机防火墙之间不存在冲突,可以理解为网络防火墙主体(集体)外部和主机防火墙内部(个体)。

[En]

There is no conflict between the network firewall and the host firewall, which can be understood as outside the main body of the network firewall (collective) and inside the host firewall (individual).

从物理上讲,防火墙可以分为硬件防火墙和软件防火墙。

[En]

Physically speaking, firewalls can be divided into hardware firewall and software firewall.

硬件防火墙:部分防火墙功能在硬件层面实现,另一部分基于软件实现,性价比高。

[En]

Hardware firewall: part of the firewall function is realized at the hardware level, and the other part is based on software, which has high performance and high cost.

软件防火墙:应用软件处理逻辑运行在低性能、低成本的通用硬件平台的防火墙上。

[En]

Software firewall: the application software processing logic runs on the firewall on the general hardware platform with low performance and low cost.

Linux防火墙——iptables简介

那么在此处,我们就来聊聊Linux的iptables。

iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的”安全框架”中,这个”安全框架”才是真正的防火墙,这个框架的名字叫 netfilter

netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间,iptables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。

Linux防火墙——iptables简介

用户 —> 调用iptables —> ip_tables内核模块 —> Netfilter(系统安全框架) —> 过滤请求

netfilter/iptables(下文中简称为iptables)组成Linux平台下的包过滤防火墙(过滤数据包的防火墙),与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。

在数据传输过程,并不是一次性传输完成的;而是将数据分成若干个数据包,一点一点的传输

Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:

  • 网络地址转换(Network Address Translate)
  • 数据包内容修改
  • 和包过滤的防火墙功能
    [En]

    and the firewall function of packet filtering*

所以说,虽然我们使用service iptables start启动iptables”服务”,但是其实准确的来说,iptables并没有一个守护进程,所以并不能算是真正意义上的服务,而应该算是内核提供的功能。

二、iptables基础

我们知道iptables是按照规则来办事的,我们就来说说规则(rules),规则其实就是网络管理员预定义的条件,规则一般的定义为”如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(ACCEPT)、拒绝(REJECT)和丢弃(DROP)等。配置防火墙的主要工作就是添加、修改和删除这些规则。

这可能并不容易理解。让我们以一种容易理解的方式从头开始。

[En]

This may not be easy to understand. Let’s start from the beginning in a way that is easy to understand.

当客户端访问服务器的web服务时,客户端发送报文到网卡,而tcp/ip协议栈是属于内核的一部分,所以,客户端的信息会通过内核的TCP协议传输到用户空间中的web服务中,而此时,客户端报文的目标终点为web服务所监听的套接字(IP:Port)上,当web服务需要响应客户端请求时,web服务发出的响应报文的目标终点则为客户端,这个时候,web服务所监听的IP与端口反而变成了原点,我们说过,netfilter才是真正的防火墙,它是内核的一部分,所以,如果我们想要防火墙能够达到”防火”的目的,则需要在内核中设置关卡,所有进出的报文都要通过这些关卡,经过检查后,符合放行条件的才能放行,符合阻拦条件的则需要被阻止,于是,就出现了input关卡和output关卡, 而这些关卡在iptables中不被称为”关卡”,而被称为”链”

Linux防火墙——iptables简介

其实我们上面描述的场景并不完善,因为客户端发来的报文访问的目标地址可能并不是本机,而是其他服务器,当本机的内核支持IP_FORWARD时,我们可以将报文转发给其他服务器,所以,这个时候,我们就会提到iptables中的其他”关卡”,也就是其他”链”,他们就是 “路由前”、”转发”、”路由后”,他们的英文名是:

  • PREROUTING
  • FORWARD
  • POSTROUTING

也就是说,当我们启用了防火墙功能时,报文需要经过如下关卡,根据实际情况的不同,报文经过”链”可能不同。如果报文需要转发,那么报文则不会经过input链发往用户空间,而是直接在内核空间中经过forward链和postrouting链转发出去的。

Linux防火墙——iptables简介

因此,根据上图,我们可以想象一些常见场景下的消息流:

[En]

So, based on the figure above, we can imagine the flow of messages in some common scenarios:

  • 到本机某进程的报文:PREROUTING –> INPUT
  • 由本机转发的报文:PREROUTING –> FORWARD –> POSTROUTING
  • 由本机的某进程发出报文(通常为响应报文):OUTPUT –> POSTROUTING

eg:由A经过B到达C的报文流向:
A —> OUTPUT —> POSTROUTING | —> PREROUTING —> FORWARD —> POSTROUTING —> B —> PREROUTING —> INPUT —> C

三、链的概念

现在,我们想象一下,这些”关卡”在iptables中为什么被称作”链”呢?我们知道,防火墙的作用就在于对经过的报文匹配”规则”,然后执行对应的”动作”,所以,当报文经过这些关卡的时候,则必须匹配这个关卡上的规则,但是,这个关卡上可能不止有一条规则,而是有很多条规则,当我们把这些规则串到一个链条上的时候,就形成了”链”,所以,我们把每一个”关卡”想象成如下图中的模样 ,这样来说,把他们称为”链”更为合适,每个经过这个”关卡”的报文,都要将这条”链”上的所有规则匹配一遍,如果有符合条件的规则,则执行规则对应的动作。

Linux防火墙——iptables简介

四、表的概念

我们再想想另外一个问题,我们对每个”链”上都放置了一串规则,但是这些规则有些很相似,比如,A类规则都是对IP或者端口的过滤,B类规则是修改报文,那么这个时候,我们是不是能把实现相同功能的规则放在一起呢,必须能的。

我们把具有相同功能的规则的集合叫做”表”,所以说,不同功能的规则,我们可以放置在不同的表中进行管理,而iptables已经为我们定义了4种表,每种表对应了不同的功能,而我们定义的规则也都逃脱不了这4种功能的范围,所以,学习iptables之前,我们必须先搞明白每种表的作用。

iptables为我们提供了如下规则的分类,或者说,iptables为我们提供了如下”表”:

  • filter表:负责过滤功能,防火墙;内核模块:iptables_filter
  • nat表:网络地址转换功能;内核模块:iptable_nat
  • mangle表:拆解报文,做出修改,并重新封装的功能;内核模块:iptable_mangle
  • raw表:负责数据包跟踪功能;内核模块:iptable_raw

换句话说,我们定制的所有规则都是这四个类别中的规则,或者说所有的规则都存在于这四个“表”中。

[En]

In other words, all the rules we customize are the rules in these four categories, or all the rules exist in these four “tables”.

五、表链关系

但是我们需要注意的是,某些”链”中注定不会包含”某类规则”,就像某些”关卡”天生就不具备某些功能一样,比如,A”关卡”只负责打击陆地敌人,没有防空能力,B”关卡”只负责打击空中敌人,没有防御步兵的能力,C”关卡”可能比较NB,既能防空,也能防御陆地敌人,D”关卡”最屌,海陆空都能防。

那让我们来看看,每个”关卡”都有哪些能力,或者说,让我们看看每个”链”上的规则都存在于哪些”表”中。

我们还是以图为例,先看看prerouting”链”上的规则都存在于哪些表中。

注意:下图只用于说明prerouting链上的规则存在于哪些表中,并没有描述表的顺序。

Linux防火墙——iptables简介

这幅图是什么意思呢?它的意思是说,prerouting”链”只拥有nat表、raw表和mangle表所对应的功能,所以,prerouting中的规则只能存放于nat表、raw表和mangle表中。

因此,基于以上思路,让我们来总结一下每一层都有哪些功能,也就是说,每一层中的规则都存在于哪些表中。

[En]

So, based on the above ideas, let’s summarize what functions each “level” has, that is to say, in which “tables” the rules in each “chain” exist.

- PREROUTING    的规则可以存在于:raw表,mangle表,nat表
- INPUT      的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)
- FORWARD     的规则可以存在于:mangle表,filter表
- OUTPUT     的规则可以存在于:raw表mangle表,nat表,filter表
- POSTROUTING    的规则可以存在于:mangle表,nat表

但是, 我们在实际的使用过程中,往往是通过”表”作为操作入口,对规则进行定义的,之所以按照上述过程介绍iptables,是因为从”关卡”的角度更容易从入门的角度理解,但是为了以便在实际使用的时候,更加顺畅的理解它们,此处我们还要将各”表”与”链”的关系罗列出来:

表(功能)

  • raw 表中的规则可以被哪些链使用:PREROUTING,OUTPUT
  • mangle 表中的规则可以被哪些链使用:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
  • nat 表中的规则可以被哪些链使用:PREROUTING,OUTPUT,POSTROUTING(centos7中还有INPUT,centos6中没有)
  • filter 表中的规则可以被哪些链使用:INPUT,FORWARD,OUTPUT

其实我们还需要注意一点,因为数据包经过一个”链”的时候,会将当前链的所有规则都匹配一遍,但是匹配时总归要有顺序,我们应该一条一条的去匹配,而且我们说过,相同功能类型的规则会汇聚在一张”表”中,那么,哪些”表”中的规则会放在”链”的最前面执行呢,这时候就需要有一个优先级的问题,我们还拿prerouting”链”做图示:

Linux防火墙——iptables简介

prerouting链中的规则存放于三张表中,而这三张表中的规则执行的优先级如下:

raw –> mangle –> nat

但是我们知道,iptables为我们定义了4张”表”,当他们处于同一条”链”时,执行的优先级如下:

优先级顺序(从高到低):

[En]

Priority order (from high to low):

raw –> mangle –> nat –> filter

但是我们前面说过,某些链天生就不能使用某些表中的规则,所以,4张表中的规则处于同一条链的目前只有output链,它就是传说中海陆空都能防守的关卡。

为了更方便的管理,我们还可以在某个表里面创建自定义链,将针对某个应用程序所设置的规则放置在这个自定义链中,但是自定义链接不能直接使用,只能被某个默认的链当做动作去调用才能起作用,我们可以这样想象,自定义链就是一段比较”短”的链子,这条”短”链子上的规则都是针对某个应用程序制定的,但是这条短的链子并不能直接使用,而是需要”焊接”在iptables默认定义链子上,才能被IPtables使用,这就是为什么默认定义的”链”需要把”自定义链”当做”动作”去引用的原因。这是后话,后面再聊,在实际使用时我们即可更加的明白。

六、数据经过防火墙的流程

在介绍数据通过防火墙的流程之前,我们需要弄清楚这五条链在防火墙中运行的位置,然后才能理解以下流程介绍图。以下是一个一般性的解释:

[En]

Before introducing the process of data passing through the firewall, we need to figure out where these five chains are running in the firewall before we can understand the following process introduction diagram. Here is a general explanation:

    1) PREROUTING: 主机外报文进入位置
    2) INPUT:报文进入本机用户空间位置
    3) OUTPUT:报文从本机用户空间出去的位置
    4) FOWARD:报文经过路由并且发觉不是本机决定转发但还不知道从哪个网卡出去
    5) POSTROUTING:报文经过路由被转发出去

综合以上描述,我们可以将数据包通过防火墙的过程总结如下:

[En]

Combined with all the above descriptions, we can summarize the process of packets passing through the firewall as follows:

Linux防火墙——iptables简介

如果想要Linux主机支持转发,则需要开启内核的IP_FORWARD功能,可以临时修改对应文件:/proc/sys/net/ipv4/ip_forward

我们在写iptables规则的时候,要时刻牢记这张路由次序图,灵活配置规则

我将在这里重写常用的通信,以方便查看相应的图例:

[En]

I will rewrite the commonly used correspondence here to facilitate the corresponding legend to view:

链的规则存放于哪些表中(从链到表的对应关系):

  • PREROUTING 的规则可以存在于:raw表,mangle表,nat表
  • INPUT 的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)
  • FORWARD 的规则可以存在于:mangle表,filter表
  • OUTPUT 的规则可以存在于:raw表,mangle表,nat表,filter表
  • POSTROUTING 的规则可以存在于:mangle表,nat表

表中的规则可以使用哪些链(表到链的对应关系):

[En]

Which chains can be used by the rules in the table (the correspondence from the table to the chain):

  • raw 表中的规则可以被哪些链使用:PREROUTING,OUTPUT
  • mangle 表中的规则可以被哪些链使用:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
  • nat 表中的规则可以被哪些链使用:PREROUTING,OUTPUT,POSTROUTING(centos7中还有INPUT,centos6中没有)
  • filter 表中的规则可以被哪些链使用:INPUT,FORWARD,OUTPUT

下图中nat表在centos7中的情况就不再标明:

Linux防火墙——iptables简介

说了这么多,关于iptables的实际操作部分我们还没进行介绍,那关于iptables的使用相关请移步我的下一篇博客:iptables的使用

Original: https://www.cnblogs.com/JZjuechen/p/15738180.html
Author: JZEason
Title: Linux防火墙——iptables简介

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/524240/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • [云计算]腾讯云从业者认证-思维导图

    第一章 云计算基础介绍 第二章 腾讯云服务器产品介绍 第三章 腾讯云网络产品介绍 第四章 腾讯云CDN加速产品介绍 第五章 腾讯云存储产品介绍 第六章 腾讯云数据库产品介绍 第七章…

    Linux 2023年6月13日
    091
  • 微服务架构项目浅析

    微服务架构的演变 最初的需求 业务发展后需要克服的问题 微服务架构使用的组件 Nginx Redis Rabbitmq Mysql jar jdk * 总结 ​ 这个章节主要介绍微…

    Linux 2023年6月14日
    0103
  • linux系统(centos)下su和sudo命令的区别

    linux系统(centos)下su和sudo命令的区别 su命令:switch user缩写,切换用户。用于 切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码…

    Linux 2023年5月27日
    0102
  • SQLI-LABS(Less-2)

    Less-2(GET-Error based-Intiger based) 打开 Less-2页面,可以看到页面中间有一句 Please input the ID as param…

    Linux 2023年6月6日
    070
  • 【论文笔记】(知识蒸馏)Distilling the Knowledge in a Neural Network

    摘要 模型平均可以提高算法的性能,但是计算量大且麻烦,难以部署给用户。《模型压缩》这篇论文中表明,知识可以从复杂的大型模型或由多个模型构成的集成模型中压缩并转移到一个小型模型中,本…

    Linux 2023年6月7日
    0150
  • JavaScript快速入门-06-函数

    6 函数 6.1 函数定义 函数可以封装语句,然后在任何地方、任何时间执行。JavaScript中的函数使用 function关键字声明,主要由 函数名、 函数参数和 函数体组成。…

    Linux 2023年6月7日
    090
  • 【数学建模相关】matplotlib画多个子图(散点图为例 左右对照画图)

    @ 例题 例图 代码展示 例题 乙醇偶合制备 C4 烯烃 C4 烯烃广泛应用于化工产品及医药的生产,乙醇是生产制备 C4 烯烃的原料。 在制备过程中,催化剂组合(即:Co 负载量、…

    Linux 2023年6月8日
    082
  • Jenkins,8080端口无法修改问题

    今天安装了 Jenkins 。想把8080 端口修改为 6699 。 出现以下状况。 一:找到 jenkins.xml 文件。 vi /usr/lib/firewalld/serv…

    Linux 2023年6月13日
    078
  • 5.9 Linux Vim批量注释和自定义注释

    使用 Vim 编辑 Shell 脚本,在进行调试时,需要进行多行的注释,每次都要先切换到输入模式,在行首输入注释符 #再退回命令模式,非常麻烦。 连续行的注释其实可以用替换命令来完…

    Linux 2023年6月7日
    070
  • PWN学习总结

    一、栈溢出原理 什么是栈溢出?栈溢出就是缓冲区溢出的一种。 由于缓冲区溢出而使得有用的存储单元被改写,往往会引发不可预料的后果。程序在运行过程中,为了临时存取数据的需要,一般都要分…

    Linux 2023年6月8日
    076
  • WebBug Java漏洞靶场 Java代码审计

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月6日
    089
  • MySQL实现备份(1)

    完全备份和部分备份 冷备份、热备份、温备份 温备份适用于:myisam 热备份适用于:innodb 物理备份和逻辑备份 完全备份:备份所有数据 部分备份:只备份部分数据内容 两者第…

    Linux 2023年6月7日
    0128
  • 辗转相除法:(求最大公约数)

    辗转相除法:(最大公约数)又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除…

    Linux 2023年6月7日
    099
  • linux之ifconfig查看ip

    ifconfig 用于显示或设置网络设备。 设置网络设备的状态和信息 [En] set the status and information of network devices*…

    Linux 2023年5月27日
    0111
  • Typora+gitee+picgo搭建本地博客环境

    前言 现在现成的博客平台数不胜数,如果选择服务器+自建博客也有很多方案,可是本人对相片、博客等信息数据总是有本地和互联网各存储一遍才放心的习惯,所以作者本人选择了csdn、博客园、…

    Linux 2023年6月7日
    0101
  • aspx页面,后端通过Attributes.Add给textbox添加事件时,传参失效问题。

    测试一:————————————&#…

    Linux 2023年6月7日
    080
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球