linux基础理解和使用 iptables 防火墙
本文档旨在编写一份详尽的 iptables基础 使用指南,涵盖其核心概念、使用方法以及高级技巧。将结合图表和示例,更好地理解和应用 iptables。
1. 什么是 iptables?
iptables 是 Linux 系统自带的包过滤防火墙,它与内核空间的 netfilter 框架紧密结合。netfilter 负责内核级别的包过滤,而 iptables 则提供用户空间的命令行接口,用于管理和配置 netfilter 规则。 两者协同工作,实现对网络数据包的灵活控制。
-
netfilter: 内核空间的包过滤框架,由一系列数据包过滤表组成,这些表包含内核用于控制数据包过滤处理的规则集。它并非以程序或文件形式存在,而是内核的一部分。
-
iptables: 用户空间的命令行工具,位于
/sbin/iptables目录下,用于添加、删除、修改和查看netfilter规则。
2. 四表五链架构
iptables 的核心架构由四个表和五个链组成,它们按照特定的优先级顺序处理数据包:
| 表名 | 功能 | 规则链 | 优先级 |
|---|---|---|---|
| raw | 决定是否对数据包进行状态跟踪 | PREROUTING, OUTPUT | 最高 |
| mangle | 修改数据包的 QoS 等属性,例如 TTL、TOS 等 | INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING | 高 |
| nat | 网络地址转换 (NAT),例如 SNAT、DNAT | PREROUTING, POSTROUTING, OUTPUT | 中 |
| filter | 过滤数据包,决定是否允许数据包通过 | INPUT, OUTPUT, FORWARD | 最低 |
数据包处理流程图:

五链详解:
-
INPUT: 处理进入防火墙本机的数据包。
-
OUTPUT: 处理从防火墙本机发出的数据包。
-
FORWARD: 处理需要由防火墙转发到其他地址的数据包。
-
PREROUTING: 在路由选择之前处理数据包,常用于 NAT。
-
POSTROUTING: 在路由选择之后处理数据包,常用于 NAT。
3. 数据包过滤匹配流程和规则链内部匹配原则
iptables 按照预定义的顺序依次检查规则链中的规则。 匹配到第一条符合条件的规则后,将停止后续规则的匹配并执行该规则的动作。如果遍历整个链都没有匹配的规则,则执行该链的默认策略 (通常是 ACCEPT 或 DROP)。
4. 规则编写语法
iptables 命令的基本语法如下:
iptables [-t table] command [chain] [match-criteria] [-j target]
-
table: 指定操作的表 (raw, mangle, nat, filter),默认为 filter。 -
command: 操作类型,例如-A(append),-I(insert),-D(delete),-L(list),-F(flush),-P(policy),-E(rename),-X(delete chain),-Z(zero counters),-R(replace)。 -
chain: 指定操作的链 (INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING)。 -
match-criteria: 匹配条件,用于指定要处理的数据包特征,例如源 IP 地址、目标端口等。 -
target: 控制类型,指定匹配数据包后的动作,例如ACCEPT,DROP,REJECT,LOG,DNAT,SNAT,MASQUERADE,REDIRECT。
5. 匹配条件和控制类型示例
匹配条件:
-
-p protocol: 指定协议 (tcp, udp, icmp 等)。 -
-s source: 指定源 IP 地址或网络。 -
-d destination: 指定目标 IP 地址或网络。 -
--sport port: 指定源端口。 -
--dport port: 指定目标端口。 -
-m multiport --sports/dports port1,port2,...: 多端口匹配。 -
-m iprange --src-range/dst-range start-ip-address-end-ip-address: IP 范围匹配。 -
-m mac --mac-source mac-address: MAC 地址匹配。 -
-m conntrack --ctstate state: 连接状态匹配 (ESTABLISHED, RELATED 等)。 -
-m state --state NEW,ESTABLISHED: 状态匹配 (NEW, ESTABLISHED, RELATED 等)
控制类型:
-
ACCEPT: 允许数据包通过。 -
DROP: 丢弃数据包,不发送任何回应。 -
REJECT: 拒绝数据包,并发送 ICMP 错误消息。 -
LOG: 记录日志信息到/var/log/messages,然后继续处理数据包。 -
DNAT: 目标地址转换。 -
SNAT: 源地址转换。 -
MASQUERADE: 一种特殊的 SNAT,用于动态获取公网 IP 地址。 -
REDIRECT: 将数据包重定向到本地端口。
6. 实际案例
(a) 允许内网 (192.168.1.0/24) 访问 SSH (端口 22):
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT
(b) 丢弃所有来自 10.0.0.1 的数据包:
iptables -A INPUT -s 10.0.0.1 -j DROP
© 将所有指向 80 端口的流量重定向到 8080 端口:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
7. iptables 的管理
-
查看规则:
iptables -L -n -v(-n 使用数字显示 IP 地址和端口, -v 显示详细信息) -
保存规则:
iptables-save > /etc/iptables/rules.v4 -
加载规则:
iptables-restore < /etc/iptables/rules.v4 -
启动/停止 iptables 服务: 这取决于你的 Linux 发行版,例如
systemctl start/stop iptables或service iptables start/stop。 (注意:有些发行版使用nftables替代iptables)
8. 安全注意事项
-
谨慎使用
iptables -P INPUT DROP或iptables -P FORWARD DROP,这会阻止所有入站或转发流量,除非你配置了允许的规则。 -
定期备份你的 iptables 规则。
-
在生产环境中测试你的规则,避免意外中断网络连接。
ps: 更高级的应用,例如 ipset 的使用、复杂的 NAT 配置以及与其他网络工具的集成, 建议查阅相关文档和教程。
相关文章:
linux基础理解和使用 iptables 防火墙
本文档旨在编写一份详尽的 iptables基础 使用指南,涵盖其核心概念、使用方法以及高级技巧。将结合图表和示例,更好地理解和应用 iptables。 1. 什么是 iptables? iptables 是 Linux 系统自带的包过滤防火墙,它与内核空间的 netf…...
【系统架构设计师】2024年下半年真题论文: 论软件维护及其应用(包括参考素材)
更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 真题题目(2024年下半年 试题2)论文素材参考软件维护的类型软件维护的方法软件维护应用案例分析软件维护面临的挑战与应对策略真题题目(2024年下半年 试题2) 请围绕 “论软件维护及其应用” 论题,依次从以下三…...
【数学二】线性代数-矩阵-初等变换、初等矩阵
考试要求 1、理解矩阵的概念,了解单位矩阵、数量矩阵、对角矩阵、三角矩阵、对称矩阵、反对称矩阵和正交矩阵以及它们的性质. 2、掌握矩阵的线性运算、乘法、转置以及它们的运算规律,了解方阵的幂与方阵乘积的行列式的性质. 3、理解逆矩阵的概念,掌握逆矩阵的性质以及矩阵可…...
MinerU容器构建教程
一、介绍 MinerU作为一款智能数据提取工具,其核心功能之一是处理PDF文档和网页内容,将其中的文本、图像、表格、公式等信息提取出来,并转换为易于阅读和编辑的格式(如Markdown)。在这个过程中,MinerU需要利…...
BFS 解决拓扑排序
BFS 解决拓扑排序 1.课程表1.1. 题⽬链接:1.2 题⽬描述:1.3. 解法:1.4 代码 2. 课程表2.1题⽬链接:2.2 题⽬描述:2.3解法:2.4代码 3. ⽕星词典(hard)3.1题⽬链接:3.2 题⽬…...
MySQL 程序设计课程复习大纲
作为一门基础的 MySQL 程序设计课程,期末复习的重点应放在常见的数据库操作、基本查询、数据建模、关系型数据库的规范化设计等方面。以下是针对基础课程的 MySQL 期末复习知识点。 1. MySQL 基础概念与数据库操作 数据库基础 数据库与表的概念数据库管理系统&…...
C++ : STL容器(适配器)之stack、queue剖析
STL容器适配器之stack、queue剖析 一、stack、queue的接口(一)stack 接口说明(二)queue 接口说明 二、stack、queue的模拟实现(一)stack、queue是容器适配器stack、queue底层默认容器--deque1、deque概念及…...
nuxt3安装pinia报错500[vite-node] [ERR_LOAD_URL]问题解决
按照pinia官网步骤安装运送服务会报一个500[vite-node] [ERR_LOAD_URL]问题,查阅各个网站资料没有找到有用信息. 最后解决:在package.json中把pinia的版本给降回0.5.5版本之后就正常了 "dependencies": {"element-plus/icons-vue": "^2.3.1",&q…...
青少年编程能力等级测评CPA试卷(2)Python编程(一级)
青少年编程能力等级测评CPA试卷(2) Python编程(一级) (考试时间90分钟,满分100分) 一、单项选择题(共20题,每题3.5分,共70分) 下列语句的输出结果是( &am…...
wordpress判断page页与非page页
在WordPress中,你可以使用is_page()函数来判断当前页面是否为page类型。以下是如何使用这个函数的示例: <?php if (is_page()) {// 当前页面是page类型echo 这是一个Page页面; } else {// 当前页面不是page类型echo 这不是一个Page页面; } ?> …...
JavaScript 库-qs的使用
meta.query qs.parse(query)语句解析:qs.parse(query) qs 是一个常用的 JavaScript 库(全称为 query-string 或 qs),它用于处理 URL 查询字符串。qs.parse(query) 会将查询字符串解析成一个对象。举个例子: 假设有一…...
Leetcode 两数之和 Ⅱ - 输入有序数组
这段代码实现了在一个非递减排序的数组中找到两个数,使它们的和等于目标值的算法。算法使用了双指针技术,具体思想如下: 算法思想: 初始化指针:定义两个指针 left 和 right,分别指向数组的起始位置和末尾位…...
多处理器一致协议(MSI)协议详细介绍
多处理器一致协议 MSI 协议详细介绍 #mermaid-svg-2lc6AxM2mRiND4C0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-2lc6AxM2mRiND4C0 .error-icon{fill:#552222;}#mermaid-svg-2lc6AxM2mRiND4C0 .error-text{fill:…...
SSH实验5密钥登录Linuxroot用户(免密登录)
当用户尝试通过SSH连接到远程服务器时,客户端会生成一对密钥:公钥和私钥。公钥被发送到远程服务器,并存储在服务器的~/.ssh/authorized_keys文件中。而私钥则由客户端保管,不会传输给服务器。 在连接过程中,客户端使用…...
2024 网鼎杯 - 青龙组 Web WP
2024 网鼎杯 - 青龙组 WEB - 02 打开容器一个登录界面,随便输入账号密码可以进到漏洞界面 这里有一个发送给boss的功能,一眼xss 有三个接口:/flag 、/update 、/submit /flag :要求boss才能访问,/update …...
ORACLE 闪回技术简介
闪回技术是若干技术的集合 包含对数据库整体的闪回 对表的闪回 对事务的闪回 经典面试题面试题:简述Oracle数据库闪回技术? 1.闪回Oracle数据库 2.闪回表 3.闪回事务 数据库闪回 要想实现数据库闪回 1.必须配置数据库的恢复区 SQL> show parameter …...
【笔记】LLC电路工作频点选择 2-2 开关管与滤波压力
LLC谐振变换器稳态工作波形分析 - 知乎,上面这篇文的结论相较MPS那篇文章的结论更严格。我们分析一下它的频点选择为什么会更窄: 1. LLC电路模型 电流滞后的特性就是电路呈感性注意这里也是开关管ZVS开通。 2.工作循环的波形 iLm的波形,最终…...
【CUDA】认识CUDA
目录 一、CUDA编程 二、第一个CUDA程序 三、CUDA关键字 四、device管理 4.1 初始化 4.2 Runtime API查询GPU信息 4.3 决定最佳GPU CUDA C 编程指南CUDA C在线文档:CUDA C 编程指南 CUDA是并行计算的平台和类C编程模型,能很容易的实现并行算法。只…...
Linux(CentOS)yum update -y 事故
CentOS版本:CentOS 7 事情经过: 1、安装好CentOS 7,系统自带JDK8,版本为:1.8.0_181 2、安装好JDK17,版本为:17.0.13 3、为了安装MySQL执行了 yum update -y(这个时候不知道该命令的…...
AI绘画赚钱秘籍!掌握ai绘画赚钱技巧,开启副业新篇章,ai绘画赚钱实战指南!
AI绘画赚钱:方法与策略 一、引言 随着人工智能技术的日益发展,AI绘画作为新兴领域,正逐渐成为赚钱的新途径。本文将从多个角度探讨AI绘画赚钱的完整策略,帮助读者深入了解并把握这一领域的商机。 二、AI绘画赚钱的主要方式…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
