【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中,这些关卡称为链。之所以称为链,是因为防火墙的作用在于对经过每一个关卡的报文匹配规则,然后执行动作,而这个关卡上可能不止一条规则,当我们把多条规则串在一个链条上时,就形成了链。
五条规则链:
- PREROUTING(路由前)
- INPUT(数据包流入口)
- FORWARD(转发管卡)
- OUTPUT(数据包出口)
- 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
表与链的关系
由于每条链所处位置不同,需要发挥的功能不同,包含的规则也不同。因此某些链并不会包含某些规则。
| prerouting | input | forword | output | postrouting | |
|---|---|---|---|---|---|
| raw | Y | Y | |||
| mangle | Y | Y | Y | Y | Y |
| filter | Y | Y | Y | ||
| nat | Y | Y | Y | Y |
链的规则存放于哪些表中(从链到表的对应关系):
- 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自有的构建系统࿰…...
合肥工业大学数据库实验报告
✅作者简介: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消费出来的数据,直接就转换成我们的对象 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 应用对性能的要求日益提高,异步编程成为了提升响应速度、提高系统吞吐量的重要手段。Django 作为一个成熟的 Python Web 框架,自 3.1 版本开始支持了异步编程。在本文中,我们将探讨 Django 异步编程的关键概念,并提供实际…...
力扣 138. 随机链表的复制
文章目录 1.解题思路2.代码实现 1.解题思路 在原先链表的每一个元素后面插入一个与前一个相同val的值的结点,然后由于是在原链表进行的操作,因此找每个random就变得很方便直接访问即可,此题目的精髓是cur1->randomp->random->next,看懂这串代码…...
STM32外部中断大问题
问题:一直进入中断,没有触发信号,也一直进入。 描述:开PA0为外部中断,刚刚很好,一个触发信号一个中断,中断函数没有丢,也没有抢跑,开PA1为外部中断也是,都很好…...
生产车间生产管理哪个好?选生产车间生产管理系统前先搞懂这5个关键点
老板突然让你调研生产车间生产管理系统,你是不是一脸懵?别慌,这篇文章帮你快速理清思路。生产车间生产管理系统是专门针对车间级生产调度、质量管控、设备管理的软件系统。它不是ERP那种大而全的东西,而是更聚焦于"车间里实际…...
DSU Sideloader:安全便捷的安卓双系统安装工具
DSU Sideloader:安全便捷的安卓双系统安装工具 【免费下载链接】DSU-Sideloader A simple app made to help users easily install GSIs via DSUs Android feature. 项目地址: https://gitcode.com/gh_mirrors/ds/DSU-Sideloader 还在为刷机风险而担忧吗&…...
全面掌握RTL8852BE Wi-Fi 6网卡驱动:Linux用户的终极优化指南
全面掌握RTL8852BE Wi-Fi 6网卡驱动:Linux用户的终极优化指南 【免费下载链接】rtl8852be Realtek Linux WLAN Driver for RTL8852BE 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8852be 在Linux系统上获得稳定的Wi-Fi 6连接一直是许多用户面临的挑战&a…...
前端状态管理:Zustand 深度解析
前端状态管理:Zustand 深度解析 为什么 Zustand 如此重要? 在前端开发中,状态管理是一个核心问题。传统的状态管理库如 Redux 虽然功能强大,但配置复杂,学习曲线陡峭。Zustand 作为一个轻量级的状态管理库,…...
FPGA课程设计避坑指南:手把手教你搞定单周期CPU的IO与内存访问(附Verilog代码)
FPGA单周期CPU设计实战:从地址空间划分到波形调试全解析 在数字逻辑与计算机体系结构的交叉领域,单周期CPU设计始终是理解计算机工作原理的最佳实践。不同于理论课上抽象的概念讲解,当学生真正动手用Verilog实现一个完整的CPU模型时ÿ…...
深入浅出RV1126 RKMedia:搞懂VI模块的缓冲区(BufCnt)与工作模式(WorkMode)如何影响视频流性能
深入浅出RV1126 RKMedia:VI模块缓冲区与工作模式的性能优化实战 当你在RV1126平台上使用RKMedia进行视频流处理时,是否遇到过这样的困惑:明明硬件性能足够,却频繁出现丢帧?或者内存占用居高不下,却找不到优…...
如何永久备份QQ空间:简单三步保存你的数字青春回忆
如何永久备份QQ空间:简单三步保存你的数字青春回忆 【免费下载链接】QZoneExport QQ空间导出助手,用于备份QQ空间的说说、日志、私密日记、相册、视频、留言板、QQ好友、收藏夹、分享、最近访客为文件,便于迁移与保存 项目地址: https://gi…...
人类思想史上的一些思维模型整理
LLM 本质上是在做条件概率的接龙:根据你已经写下的每一个 token,去推断下一个最可能的分布。 你用的词、句式、段落节奏、甚至隐含的思维路径,都在不断收窄模型的“接下来该怎么说”的可能性空间。 所以,和 AI 对话时,…...
FISCO BCOS 跨链:WeCross 架构设计与网关开发
一、WeCross 是什么? WeCross 是微众银行区块链自研并开源的跨链协作平台,旨在解决 FISCO BCOS 与其他异构链(如 Hyperledger Fabric、国密链等)之间的互联互通问题-8。其核心定位是通用的区块链跨链互操作解决方案,支持合约跨链调用、跨链事务保障等功能-7。 目前 WeCr…...
Spring Cloud Gateway与Vite开发模式的协同工作
引言 在现代Web开发中,前端和后端的解耦使得开发变得更加灵活和高效。Spring Cloud Gateway作为一个强大的API网关,可以有效地管理微服务间的请求路由。然而,当前端应用使用Vite进行开发时,可能会遇到一些路由和请求转发的问题。今天我们来探讨如何解决Spring Cloud Gatew…...
