当前位置: 首页 > news >正文

【Docker】iptables基本原理

在当今数字化时代,网络安全问题变得越来越重要。为了保护我们的网络免受恶意攻击和未经授权的访问,我们需要使用一些工具来加强网络的安全性。其中,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               destinationChain FORWARD (policy ACCEPT)
target     prot opt source               destinationChain 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               destinationChain INPUT (policy ACCEPT)
target     prot opt source               destinationChain OUTPUT (policy ACCEPT)
target     prot opt source               destinationChain 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               destinationChain INPUT (policy ACCEPT)
target     prot opt source               destinationChain FORWARD (policy ACCEPT)
target     prot opt source               destinationChain OUTPUT (policy ACCEPT)
target     prot opt source               destinationChain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

raw表

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

$ sudo iptables -t raw -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destinationChain 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已经成功安装了。

相关文章:

【Docker】iptables基本原理

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

微服务架构——笔记(3)Eureka

微服务架构——笔记(3) 基于分布式的微服务架构 本次笔记为 此次项目的记录,便于整理思路,仅供参考,笔者也将会让程序更加完善 内容包括:1.支付模块、2.消费者订单模块、支付微服务入驻Eureka、Eureka集群…...

网络编程套接字(2)——简单的TCP网络程序

文章目录 一.简单的TCP网络程序1.服务端创建套接字2.服务端绑定3.服务端监听4.服务端获取连接5.服务端处理请求6.客户端创建套接字7.客户端连接服务器8.客户端发起请求9.服务器测试10.单执行流服务器的弊端 二.多进程版的TCP网络程序1.捕捉SIGCHLD信号2.让孙子进程提供服务 三.…...

MySQL数据库的简单的面试题

1、MySQL有哪些锁机制 MySQL有以下几种机制: 行级锁:行极锁在mysql 中最常用的锁机制,它只针对表的某一行进行加锁不受影响。MySQL的行级锁分为共享锁和排他锁两种类型,共享锁和排它锁不能同时存在于一行。 表级锁:表…...

hbuilderx打包应用上传到app store构建版本的教程

简介: 将ipa上架app store的过程中,发现需要将打包的ipa文件上传到app store的构建版本里,但是苹果官方推荐的上传工具,只有xcode和transporter等工具,这些工具是不能安装在windows电脑的。那么有没有windows电脑的上传…...

第五届泰迪杯数据分析技能赛B题源码图片分享

需要B题源码以及第六届带队”指导“请私信本人,团队包含技能赛双一等,数学建模省一,泰迪杯挖掘国一,研究生队友。 去年一等作品可视化图如下,私信获取源码...

【小白专用】VSCode下载和安装与配置PHP开发环境(详细版) 23.11.08

1. 下载VSCode2. 解决VSCode下载速度特别慢3. 安装VSCode 一、VSCode介绍 VSCode 是一款由微软开发且跨平台的免费源代码编辑器;该软件支持语法高亮、代码自动补全、代码重构、查看定义功能,并且内置了命令行工具和 Git 版本控制系统。 二、官方下载地址…...

Qlik Sense : Fetching data with Qlik Web Connectors

目录 Connecting to data sources Opening a connector Connecting to a data source Authenticating the connector Defining table parameters Using standard mode or legacy mode Standard mode Connector overview Using multi-line input parameters to fetch da…...

聊一聊 tcp/ip 在.NET故障分析的重要性

一:背景 1. 讲故事 这段时间分析了几个和网络故障有关的.NET程序之后,真的越来越体会到计算机基础课的重要,比如 计算机网络 课,如果没有对 tcpip协议 的深刻理解,解决这些问题真的很难,因为你只能在高层做…...

利用梯度上升可视化卷积核:基于torch实现

利用梯度上升可视化卷积核 文章目录 前言基本原理版本和包结果展示 简单绘图修改源码绘图方法一 方法二(推荐) 报错解决总结 前言 基于梯度上升的可视化是一种常用的技术,用于理解卷积神经网络(CNN)中的卷积核是如何对…...

python+playwright 学习-85 启动参数 proxy 设置代理几种方式

前言 在使用playwright执行代码的时候,如需设置代理,可以在启动的时候加proxy 参数设置代理。 本篇总结下可以加proxy代理的几种方式。 launch 启动全局代理 launch 启动的时候设置全局代理,以下是示例 from playwright.sync_api import Playwright, sync_playwrightwit…...

Clion 搭建Qt projects

Qt projects Qt is a cross-platform C framework for creating GUI applications. Qt uses its own build system, qmake, and also supports building with CMake starting from the version Qt4. Qt是一款创建桌面程序的跨平台的C框架。qmake是Qt自有的构建系统&#xff0…...

合肥工业大学数据库实验报告

✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :hfut实验课设 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台,永远是个观众。平台再好,你不参与,永远是局外人。能力再大,你不行动,只能看别人成功!没有人会关心你付出过多少…...

设计模式-装饰器模式(Decorator)

设计模式-装饰器模式(Decorator) 一、装饰器模式概述1.1 什么是装饰器模式1.2 简单实现装饰器模式1.3 使用装饰器模式的注意事项 二、装饰器模式的用途三、装饰器模式的实现方式3.1 通过接口和抽象类实现3.2 通过Java反射实现3.3 通过使用第三方库实现 一…...

Java 数据结构篇-实现双链表的核心API

🔥博客主页: 小扳_-CSDN博客 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 双链表的说明 1.1 双链表 - 创建 1.2 双链表 - 根据索引查找节点 1.3 双链表 - 根据索引插入节点 1.4 双链表 - 头插节点 1.5 双链表 - 尾插 1.6 双链表 - 根据索引来…...

电脑如何截屏?一起来揭晓答案!

在数字时代,截屏已经成为我们日常生活和工作中的必备技能。无论是为了捕捉有趣的网络瞬间,保存重要信息,还是为了协作和教育,电脑截屏都是一个强大而方便的工具。本文将介绍三种电脑如何截屏的方法,以满足各种需求&…...

【实战-08】flink 消费kafka自定义序列化

目的 让从kafka消费出来的数据&#xff0c;直接就转换成我们的对象 mvn pom <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information …...

深入浅出 Django 异步编程

随着 Web 应用对性能的要求日益提高&#xff0c;异步编程成为了提升响应速度、提高系统吞吐量的重要手段。Django 作为一个成熟的 Python Web 框架&#xff0c;自 3.1 版本开始支持了异步编程。在本文中&#xff0c;我们将探讨 Django 异步编程的关键概念&#xff0c;并提供实际…...

力扣 138. 随机链表的复制

文章目录 1.解题思路2.代码实现 1.解题思路 在原先链表的每一个元素后面插入一个与前一个相同val的值的结点,然后由于是在原链表进行的操作&#xff0c;因此找每个random就变得很方便直接访问即可&#xff0c;此题目的精髓是cur1->randomp->random->next,看懂这串代码…...

STM32外部中断大问题

问题&#xff1a;一直进入中断&#xff0c;没有触发信号&#xff0c;也一直进入。 描述&#xff1a;开PA0为外部中断&#xff0c;刚刚很好&#xff0c;一个触发信号一个中断&#xff0c;中断函数没有丢&#xff0c;也没有抢跑&#xff0c;开PA1为外部中断也是&#xff0c;都很好…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...