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绘画赚钱的主要方式…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
