【Docker】iptables基本原理

news2024/11/29 6:37:46

在当今数字化时代,网络安全问题变得越来越重要。为了保护我们的网络免受恶意攻击和未经授权的访问,我们需要使用一些工具来加强网络的安全性。其中,iptables是一个强大而受欢迎的防火墙工具,它可以帮助我们控制网络流量并保护网络资源。

从逻辑上讲,防火墙可以大体分为主机防火墙和网络防火墙。从物理上讲,防火墙可以分为硬件防火墙和软件防火墙。

今天主要介绍的是如何通过iptables软件对本机的网络服务进行保护。

iptables概述

通过iptables,可以对本机提供的网络服务 (FTP、WEB、EMAIL、DB…) 进行保护,通过规则进行过滤。

iptables并不是真正的防火墙,可以理解为一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的安全框架中,这个安全框架才是真正的防火墙,这个框架的名字叫netfilter。

netfilter位于内核空间,而iptables其实是一个命令行工具,位于用户空间。

netfilter/iptables组成Linux平台下的包过滤防火墙。可以完成封包过滤、封包重定向和网络地址转换 (NAT) 等防火墙功能。

这是第一个要说的地方,iptables和netfilter的关系是一个很容易让人搞不清的问题。很多人知道iptables却不知道netfilter。其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables目录下。

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

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

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

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

iptables基础

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

到本机某进程的报文:PREROUTING->INPUT

由本机转发的报文:PREROUTING-> FORWARD -> POSTROUTING

由本机的某进程发出报文 (通常为响应报文):OUTPUT-> POSTROUTING

链的概念

现在,我们想象一下,这些“关卡”在iptables中为什么被称作”链”呢?

我们知道,防火墙的作用就在于对经过的报文匹配“规则”然后执行对应的“动作”,所以,当报文经过这些关卡的时候,则必须匹配这个关卡上的规则,但是,这个关卡上可能不止有条规则,而是有很多条规则,当我们把这些规则串到一个链条上的时候,就形成了“链”,所以,我们把每一个“关卡”想象成如下图中的模样:

这样来说,把他们称为“链”更为合适,每个经过这个“关卡”的报文,都要跟这条”链”上的规则进行匹配,如果有符合条件的规则,则执行规则对应的动作。

防火墙要达到防火的目的,需要在内核中设置关卡,所有进出的报文都要通过这些关卡,经过检查后,符合放行条件的才能放行,符合阻拦条件的都被阻拦。在iptables中,这些关卡称为链。之所以称为链,是因为防火墙的作用在于对经过每一个关卡的报文匹配规则,然后执行动作,而这个关卡上可能不止一条规则,当我们把多条规则串在一个链条上时,就形成了链。

五条规则链:

  1. PREROUTING(路由前)
  2. INPUT(数据包流入口)
  3. FORWARD(转发管卡)
  4. OUTPUT(数据包出口)
  5. POSTROUTING(路由后)

表的概念

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

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

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

  • filter表:负责过滤功能,防火墙,对应的内核模块为iptables _filter
  • nat表:networkaddress translation,网络地址转换功能,对应的内核模块为iptable_nat
  • mangle表:拆解报文,做出修改,并重新封装的功能,对应的内核模块为iptable_mangle
  • raw表:关闭nat表上启用的连接追踪机制,对应的内核模块为iptable_raw

也就是说,我们自定义的所有规则,都是这四种分类中的规则,或者说,所有规则都存在于这4张”表”中。

filter表

filter表用于过滤数据包,是iptables默认的表。

$ sudo iptables -t filter -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

nat表

nat表用于网络地址转换,例如将内网IP地址转换为公网IP地址。

$ sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

mangle表

mangle表用于修改数据包的TTL(生存时间)、TOS(服务类型)等信息。

$ sudo iptables -t mangle -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

raw表

raw表用于配置数据包的豁免规则,例如不被连接追踪等。

$ sudo iptables -t raw -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

表与链的关系

由于每条链所处位置不同,需要发挥的功能不同,包含的规则也不同。因此某些链并不会包含某些规则。

preroutinginputforwordoutputpostrouting
rawYY
mangleYYYYY
filterYYY
natYYYY

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

  • PREROUTING的规则可以存在于: raw表,mangle表,nat表。
  • INPUT的规则可以存在于: mangle表,filter表,nat表。
  • FORWARD的规则可以存在于: mangle表,filter表。
  • OUTPUT的规则可以存在于: raw表,mangle表,nat表,filter表。
  • POSTROUTING的规则可以存在于: mangle表,nat表。

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

  • raw表中的规则可以被哪些链使用:PREROUTING,OUTPUT
  • mangle表中的规则可以被哪些链使用:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
  • nat表中的规则可以被哪些链使用:PREROUTING,INPUT,OUTPUT,POSTROUTING
  • filter表中的规则可以被哪些链使用:INPUT,FORWARD,OUTPUT

数据包经过一条链时,会将当前链的所有规则都匹配一遍,匹配的时候会根据匹配规则依次执行。

iptables定义的4张表执行的优先级为:raw > mangle > nat > filter

规则

根据指定的匹配条件来匹配每个流经此处的报文,一旦匹配成功,则由规则后面指定的处理动作进行处理。

防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下从前到后进行过滤的。

防火墙如果根据设置的规则匹配上了规则,即明确表明是阻止还是通过,此时数据包就不在向下匹配新规则了。

如果数据包在所有规则中没有匹配到明确的规则是阻止还是通过,从而会向下进行匹配直到匹配默认规则后,得到明确的默认规则,从而得出确认是阻止还是通过。

防火墙的默认规则是对应链里的所有规则执行完以后才会执行的(最后执行的规则)。

匹配条件

iptables可以根据不同的匹配条件来过滤网络数据包。iptables的匹配条件可以分为通用匹配条件和扩展匹配条件两种。

通用匹配条件:

  • -p:指定协议类型,如TCP、UDP、ICMP等。
  • -s:指定源IP地址或地址段。
  • -d:指定目标IP地址或地址段。
  • –sport:指定源端口号。
  • –dport:指定目标端口号。
  • -i:指定数据包进入的网络接口。
  • -o:指定数据包输出的网络接口。

扩展匹配条件:除了通用匹配条件其余可用于匹配的条件称为扩展配条件,这些扩展匹配条件在netfilter中以模块的形式存在,如果想使用这些条件,则需要依赖对应的拓展模块。

扩展匹配条件包括:

  • –mac-source:指定源MAC地址。
  • –mac-destination:指定目标MAC地址。
  • –state:指定连接状态,如NEW、ESTABLISHED、RELATED等。
  • –tcp-flags:指定TCP标志位。
  • –icmp-type:指定ICMP类型。
  • –limit:限制匹配规则的匹配次数。
  • –comment:为匹配规则添加注释。

处理动作

iptables规则的处理动作是指对匹配到的数据包所采取的操作。

常见的处理动作包括:

  • ACCEPT:允许数据包通过
  • DROP:直接丢弃数据包,不给任何回应信息。。
  • REJECT:拒绝数据包通过,必要时会给数据发送端一个相应的信息,客户端刚请求就会收到拒绝的信息。
  • SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
  • MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的IP上。
  • DNAT:目标地址转换
  • REDIRECT:在本机做端口映射。
  • LOG:在/var/log/mesages文件中记录日志信息,然后将数据包传递给下一条规则。即除了记录外不对数据包做任何其他操作,仍然让下一条规则进行匹配

iptables的安装

iptables通常是Linux系统中自带的一部分,一般情况下,你不需要单独安装。但是,如果你的系统中没有iptables,或者你需要安装一个新版本的iptables,那么你就需要手动安装。

在大多数基于Debian和Ubuntu的Linux发行版中,你可以使用下面的命令来安装iptables:

sudo apt-get update
sudo apt-get install iptables

在基于Red Hat和CentOS的发行版中,你可以使用下面的命令来安装iptables:

sudo yum install iptables

安装完成后,你可以使用下面的命令来检查iptables是否安装成功:

$ iptables --version
iptables v1.6.1

这个命令会显示出iptables的版本信息,如果你看到了版本信息,那么就说明iptables已经成功安装了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1187701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vtk夹角计算控件

开发环境: Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example参考代码目的:学习与总结 demo解决问题:renderWindow中创建一个夹角测量控件,通过三个点确定一个夹角 典型的控件类继承关系&am…

超声波清洗机怎么选?优质清洁力强超声波清洗机推荐

清洁物品对于大部分朋友来说都是件麻烦事情,能不动手就不动手。眼镜清洗也是一样的道理,随着科技发展,一些智能小家电的出现给我们的生活带来很大便利!超声波清洗机不仅能够清洗眼镜,还可以清洗首饰、化妆刷等生活中的…

大小仅为人血细胞的1/10?揭秘纳米机器人的厉害之处

原创 | 文 BFT机器人 纳米机器人是一种比血细胞小10倍的微型机器人,有望彻底改变医疗保健行业。纳米技术与下一代软件平台和监督机器学习相结合,提供了广泛的强大的诊断、监测和治疗工具。 纳米机器人(nanorobots)旨在执行非常具…

golang工程中间件——redis常用结构及应用(set,zset)

Redis 命令中心 这些篇文章专门以应用为主,原理性的后续博主复习到的时候再详细阐述 set 集合,为了描述它的特征,我们可称呼为无序集合;集合的特征是唯一,集合中的元素是唯一存在 的; 存储结构 元素都…

易点易动固定资产管理系统:定制流程与用量控制的高效管理利器

固定资产管理对于企业来说至关重要,而如何提高固定资产管理的效率和精确度一直是企业管理者关注的焦点。易点易动固定资产管理系统以其自定义固定资产流程和用量控制功能,成为了提升固定资产管理效率的利器。本文将详细介绍易点易动固定资产管理系统的自…

【技术驿站】分布式基础与常见面试问题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

虚幻5.3打包Windows失败

缺失UnrealGame二进制文件。 必须使用集成开发环境编译该UE项目。或者借助虚幻编译工具使用命令行命令进行编译 解决办法: 1.依次点击平台-项目启动程序 2.点击后面的按钮进行设置 3.稍等后,打包后的程序即可运行,之后就可以愉快的打包了

10个改变你Figma体验的高效插件!

Figma Ex 实用指数:⭐️⭐️⭐️⭐️⭐️ figma插件一直受到批评,很难找到。特别是一旦插件安装得太多,你就得去大海捞针,这是浪费时间。 这个工具可以使Figma的所有插件直接悬浮在右边的画布上,最重要的是显示每个插…

智慧工地管理系统源码 智慧大屏、手机APP、SaaS模式

一、智慧工地可以通过安全八要素来提升安全保障,具体措施包括: 1.安全管理制度:建立科学完善的安全管理制度,包括安全标准规范、安全生产手册等,明确各项安全管理职责和要求。 2.安全培训教育:对工地人…

DHorse(K8S的CICD平台)的实现原理

综述 首先,本篇文章所介绍的内容,已经有完整的实现,可以参考这里。 在微服务、DevOps和云平台流行的当下,使用一个高效的持续集成工具也是一个非常重要的事情。虽然市面上目前已经存在了比较成熟的自动化构建工具,比如…

汽车标定技术(六)--基于模型开发如何生成完整的A2L文件(2)

目录 1. 自定义ASAP2文件 2. asap2userlib.tlc需要修改的部分 3. 标定量观测量地址替换 3.1 由elf文件替换 3.2 由map文件替换 3.3 正则表达式(含asap2post.m修改方法) 4.小结 书接上文汽车标定技术(五)--基于模型开发如何生成完整的A2L文件(1)-C…

Python进阶该怎么学?有什么书推荐吗?

给大家再分享一下整理出来的Python进阶以及Python实践操作可以参考学习的堪称经典的书籍,同样是豆瓣高分榜!内容有点长,一定要耐心看完。 Python进阶学习书籍 Effective Python:编写高质量Python代码的90个有效方法(…

UVM 源码__report 机制浅析(一)

以uvm_error 为例浅析其背后的故事: uvm_error 是一个宏,在声明的时候只需要传入ID 和 msg,均为字符类型; 分析以上源码,发现起内部主要是调用了一个叫做uvm_report_enabled的函数进行判断,打印函数使用的…

零基础学Python有什么建议?如何入门编程?

零基础,如何入门编程? 首先要明确一点,编程之所以被成为超能力,在于其无所不能。学到深处,你自然可以跳脱限制,随心所欲;入门之时,你却处处碰壁,像蹒跚学步的孩童。其实…

Sublime Text Dev v4.0(HTML代码编辑)

Sublime Text是一款代码编辑器,也是一个先进的文本编辑器,支持HTML和散文。该软件由程序员Jon Skinner于2008年1月份开发,最初被设计为一个具有丰富扩展功能的Vim。 Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图、…

人工智能进入强监管时代

全球AI产业正进入“强监管”时代,对人工智能安全威胁的监管正在成为各国政府普遍关注的重要议题。 以ChatGPT为代表的基于LLM(大语言模型)的生成式人工智能应用正风靡全球,各行各业都在争先恐后将其集成到前端和后端的各种系统中,与此同时生…

Docker - 概述

Docker概述 Docker概述Docker安装Docker命令 镜像命令容器命令操作命令 … Docker镜像容器数据卷DockerFileDocker网络管理IDEA整合DockerDocker ComposeDocker Swarm 简化版的K8s Docker为什么出现? 传统的项目部署,环境配置是十分麻烦,第…

【理解链表指针赋值】链表中cur->next = cur->next->next->next与cur =cur->next->next的区别

最近在做链表的题目的时候,对于所定义的cur链表指针产生了一些疑惑,查阅资料后整理一下我的理解: /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(n…

Linux 设置静态IP(Ubuntu 20.04/18.04)

以Ubuntu20.04示例 第一步:查看当前网络信息 ifconfig 本机网卡名为:ens32,IP地址为:192.168.15.133,子网掩码为:255.255.255.0 第二步:查看当前网关信息 route -n 网关地址为:1…

麒麟KYLINOS命令行设置系统静音

原文链接:麒麟KYLINOS命令行设置系统静音 hello,大家好啊,今天给大家带来一篇在麒麟KYLINOS上使用命令行调节系统静音的方法,有时候需要制作模板,便可以采用此方法,话不多说,一起来看看吧。 1、…