Linux 防火墙:iptables (二)
文章目录
- SNAT 原理与应用
- SNAT 应用环境
- SNAT 原理
- SNAT 转换前提条件
- SNAT 格式
- SNAT 转换规则配置
- DNAT 原理与应用
- DNAT 应用环境
- DNAT 原理
- DNAT 转换前提条件
- DNAT 格式
- DNAT 转换规则配置
- iptables 规则的备份和还原
- 导出(备份)所有表的规则
- 导入(还原)规则
- 使用系统默认配置文件备份和还原规则
- 使用 tcpdump 抓取网络数据包
- 命令格式
- 使用示例
SNAT 原理与应用
SNAT 应用环境
SNAT(源网络地址转换)通常用于局域网内的主机共享单个公网 IP 地址接入 Internet,因为私有 IP 地址不能在 Internet 中正常路由。

SNAT 原理
SNAT 的工作原理是将数据包的源地址从局域网地址转换为公网 IP 地址。
SNAT 转换前提条件
- 局域网内各主机已正确设置 IP 地址、子网掩码、默认网关地址。
- Linux 网关需要开启 IP 路由转发功能。
-
临时打开 IP 路由转发:
echo 1 > /proc/sys/net/ipv4/ip_forward或者:
sysctl -w net.ipv4.ip_forward=1 -
永久打开 IP 路由转发:
编辑/etc/sysctl.conf文件,添加或修改以下内容:net.ipv4.ip_forward = 1然后,使用以下命令使修改生效:
sysctl -p
SNAT 格式
SNAT (Source NAT) - 转换源地址
用于内网主机访问外网服务器时,转换数据包的源地址。
规则格式:
iptables -t nat -A POSTROUTING -s <内网源地址/网段> -o <出站网卡> -j SNAT --to <要转换的公网源地址>
-t nat:指定使用nat表。-A POSTROUTING:在数据包路由后的处理链POSTROUTING中添加规则,适用于源地址转换(SNAT)。-s <内网源地址/网段>:内网的源地址或网段,如192.168.1.0/24。-o <出站网卡>:指定出站的网卡接口,如eth0。-j SNAT:使用 SNAT 动作,表示源地址转换。--to <要转换的公网源地址>:转换成的公网源地址,如203.0.113.5。
SNAT 转换规则配置
-
固定的公网 IP 地址:
将数据包源地址转换为指定的公网 IP 地址。
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens36 -j SNAT --to 12.0.0.1或使用 IP 地址池:
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens36 -j SNAT --to-source 12.0.0.1-12.0.0.10解释:
192.168.80.0/24为内网 IP,ens36为外网网卡,12.0.0.1或12.0.0.1-12.0.0.10为外网 IP 或地址池。 -
非固定的公网 IP 地址(共享动态 IP 地址):
使用
MASQUERADE规则动态分配 IP 地址。iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens36 -j MASQUERADE
扩展:一个 IP 地址做 SNAT 转换,可以让 100 到 200 台内网主机实现上网。
DNAT 原理与应用
DNAT 应用环境
DNAT(目标网络地址转换)常用于在 Internet 中发布位于局域网内的服务器。

DNAT 原理
DNAT 的工作原理是将数据包的目的地址从公网地址转换为局域网内的服务器地址。
DNAT 转换前提条件
- 局域网内的服务器能够访问 Internet。
- 网关的外网地址有正确的 DNS 解析记录。
- Linux 网关需要开启 IP 路由转发功能。
编辑 /etc/sysctl.conf 文件,添加或修改以下内容:
net.ipv4.ip_forward = 1
然后使用以下命令使修改生效:
sysctl -p
DNAT 格式
DNAT (Destination NAT) - 转换目的地址
用于外网主机访问内网服务器时,转换数据包的目的地址及端口。
规则格式:
iptables -t nat -A PREROUTING -i <入站网卡> -d <原公网目的地址> -p <协议> --dport <原目的端口> -j DNAT --to <要转换的私网IP[:端口]
-t nat:指定使用nat表,nat表用于处理网络地址转换。-A PREROUTING:在数据包路由前的处理链PREROUTING中添加规则,适用于目标地址转换(DNAT)。-i <入站网卡>:指定入站的网卡接口,如eth0。-d <原公网目的地址>:原目标公网地址,需要转换的目标地址,如203.0.113.5。-p <协议>:指定协议类型(如tcp、udp)。--dport <原目的端口>:原目标端口,需要转换的端口号,如80。-j DNAT:使用 DNAT 动作,表示目标地址转换。--to <要转换的私网IP[:端口]>:要转换的内网服务器 IP 和端口,如192.168.1.100:8080,端口部分为可选。
DNAT 转换规则配置
-
发布内网的 Web 服务:
把从
ens33进来的要访问 Web 服务的数据包的目的地址转换为192.168.80.11:iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.80.11 # 端口号可省或者:
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.80.11解释:
ens33为入站外网网卡,12.0.0.1为外网 IP,192.168.80.11为内网服务器 IP。如果要将目标地址转换为一个 IP 地址范围:
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.80.11-192.168.80.20 -
发布时修改目标端口:
发布局域网内部的 OpenSSH 服务器,外网主机需使用
250端口进行连接:iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 250 -j DNAT --to 192.168.80.11:22在外网环境中使用 SSH 测试:
ssh -p 250 root@12.0.0.1
注意:使用 DNAT 时,一般要配合 SNAT 使用,才能实现响应数据包的正确返回。
扩展
- 主机型防火墙:主要使用
INPUT和OUTPUT链,设置规则时一般要详细地指定端口。 - 网络型防火墙:主要使用
FORWARD链,设置规则时通常指定到 IP 地址或网段即可,很少指定到具体端口。
iptables 规则的备份和还原
导出(备份)所有表的规则
使用 iptables-save 命令将当前的 iptables 规则导出到一个文件中,以便于备份:
iptables-save > /opt/ipt.txt
导入(还原)规则
使用 iptables-restore 命令将备份的规则文件导入到系统中,实现规则的还原:
iptables-restore < /opt/ipt.txt
使用系统默认配置文件备份和还原规则
将 iptables 规则文件保存在 /etc/sysconfig/iptables 中。这样在 iptables 服务启动时,规则会自动还原:
iptables-save > /etc/sysconfig/iptables
或使用 mv 命令,替换掉默认规则文件。
-
停止 iptables 服务会清空掉所有表的规则:
systemctl stop iptables -
启动 iptables 服务会自动还原
/etc/sysconfig/iptables中的规则:systemctl start iptables
使用 tcpdump 抓取网络数据包
tcpdump 是一个命令行界面的网络数据包抓取工具,可以用来分析网络通信情况。
命令格式
tcpdump 命令的一般使用格式如下:
tcpdump [协议] -i <网卡> -s 0 -c <抓包数量> [and src/dst port <端口号>] [and src/dst net <网段>] [and src/dst host <主机IP>] -w <文件名.cap>
选项说明:
[协议]:指定抓取的协议类型,如tcp、udp、icmp等,也可以是ip、arp、rarp等数据链路层协议类型。这些选项必须放在第一个参数的位置,用来过滤数据包的类型。-i <网卡>:指定要监听的网卡接口,例如ens33。只抓取经过此接口的网络数据包。-s 0:设置抓包的快照长度,0表示抓取完整的数据包。默认情况下,tcpdump只抓取数据包的前 68 字节。-c <抓包数量>:指定抓取的数据包数量,当达到该数量时停止抓包。src/dst port <端口号>:指定源或目标端口号,用于过滤特定端口的数据包。可以用!来排除某个端口号。src/dst net <网段>:指定源或目标网络地址,用于过滤特定网段的数据包。src/dst host <主机IP>:指定源或目标主机 IP 地址,用于过滤特定主机的数据包。-w <文件名.cap>:将抓取的数据包保存到文件中(.cap格式),便于后续用 Wireshark 或其他工具进行分析。-t:不显示时间戳。
使用示例
示例 1:使用 tcpdump 抓取 TCP 数据包
抓取指定网络接口、协议类型、IP 范围以及端口号的基础上对数据进行过滤,并将结果保存到指定文件中用于后续的分析。
tcpdump tcp -i ens33 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
tcp:过滤 TCP 协议的数据包。-i ens33:只抓取经过接口ens33的数据包。-t:不显示时间戳。-s 0:抓取完整的数据包。-c 100:只抓取 100 个数据包。dst port ! 22:不抓取目标端口为22的数据包。src net 192.168.1.0/24:只抓取源网络地址为192.168.1.0/24的数据包。-w ./target.cap:将抓取的结果保存到target.cap文件中。
示例 2:抓取从 192.168.100.100 主机发送的经过 ens33 网卡的 HTTP 协议的数据包
tcpdump tcp -i ens33 and src host 192.168.100.100 and dst port 80 -s 0 -w XXX.cap
tcp:过滤 TCP 协议的数据包。-i ens33:只抓取经过接口ens33的数据包。src host 192.168.100.100:只抓取源主机地址为192.168.100.100的数据包。dst port 80:只抓取目标端口为80(HTTP 协议端口) 的数据包。-s 0:抓取完整的数据包。-w XXX.cap:将抓取的结果保存到XXX.cap文件中。
相关文章:
Linux 防火墙:iptables (二)
文章目录 SNAT 原理与应用SNAT 应用环境SNAT 原理SNAT 转换前提条件SNAT 格式SNAT 转换规则配置 DNAT 原理与应用DNAT 应用环境DNAT 原理DNAT 转换前提条件DNAT 格式DNAT 转换规则配置 iptables 规则的备份和还原导出(备份)所有表的规则导入(…...
小目标检测顶会新思路!最新成果刷爆遥感SOTA,参数小了18倍
遥感领域的小目标检测一直是个具有挑战性和趣味性的研究方向,同时也是顶会顶刊的常客。但不得不说,今年关于遥感小目标检测的研究热情尤其高涨,已经出现了很多非常优秀的成果。 比如SuperYOLO方法,通过融合多模态数据并执行高分辨…...
【Ubuntu】虚拟机安装USB摄像头ROS驱动 usb_cam(最新方法)
写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作&…...
免费的成绩查询微信小程序,让家长轻松掌握学生表现
传统的教学方式在不断地被革新。在成绩查询这一环节,老师们曾经面临着繁琐的手工操作和信息安全的风险。可现如今有一个让成绩查询变得轻松、高效且安全的新工具——易查分。 过去需要花费大量时间来整理成绩,然后通过短信或者打电话的方式告知给家长。以…...
[含视频和源码]CRUD的最佳实践,联动前后端,包含微信小程序,API,HTML等(三)
关说不练假把式,在上一,二篇中介绍了我心目中的CRUD的样子 基于之前的理念,我开发了一个命名为PasteTemplate的项目,这个项目呢后续会转化成项目模板,转化成项目模板后,后续需要开发新的项目就可以基于这…...
如何把我另一个分支上的commit拿过来
在开源过程中,每一次PR都是要经过严格的review的,这期间可能会进行多次修改,补充提交,而且这一般来说不是一个很迅速的过程,此时我们可能会先往后进行开发。我一般会把项目分模块逐步建立分支,当前一个pr合…...
【rpg像素角色】俯视角-行走动画
制作像素角色的俯视角行走动画并不像看上去那么复杂,尤其是在你已经完成了角色的4个方向站立姿势之后(其中左右方向可以通过水平翻转实现)。接下来,我会一步步为你讲解如何制作行走动画。 1. 理解行走规律 在制作行走动画之前&am…...
Python时间序列分析新技能,轻松掌握时间索引
大家好,在数据分析领域,时间序列数据分析是一项非常重要的技能。Pandas作为Python中强大的数据处理库,在处理时间序列数据时提供了丰富的功能,其中时间索引的应用是时间序列分析中的关键。本文将介绍如何在Pandas中使用时间索引进…...
sklearn-逻辑回归-特征工程示例
sklearn-逻辑回归-特征工程示例 在实际应用场景中,有时候特征的数量会很多,我们出于业务考虑,也出于计算量的考虑,希望对逻辑回归进行特征选择来降维。比如在判断一个人是否会患乳腺癌的时候,医生如果看58个指标来确诊…...
RTMP播放器延迟最低可以做到多少?
技术背景 RTMP播放器的延迟可以受到多种因素的影响,包括网络状况、推流设置、播放器配置以及CDN分发等。因此,RTMP播放器的延迟并不是一个固定的数值,而是可以在一定范围内变化的。 正常情况下,网上大多看到的,针对R…...
细致刨析JDBC ① 基础篇
目录 一、JDBC概述 1.JDBC的概念 编辑2.JDBC的核心组成 ① 接口规范: ② 实现规范: 二、JDBC快速入门 1.JDBC搭建步骤 三、核心API理解 1.注册驱动 2.Connection 3.Statement 4.PreparedStatement 5.ResultSet 四、基于Preparedment实现CRUD 1.查询单行单列 2.查询单行…...
Reactive 编程-Loom 项目(虚拟线程)
Reactive 编程与 Loom 项目(虚拟线程) Java 项目 Loom 是 Oracle 在 JVM 上的一项重大变革,旨在引入 虚拟线程(Virtual Threads),以简化并发编程。传统的 Java 线程是重量级的,由操作系统管理&…...
Windows下使用MinGW编译安装zmq的步骤
背景: 在开发过程中,需要使用zmq库进行数据交互,因此需要编译zmq库。 安装步骤 软件下载 https://github.com/zeromq/libzmq.git 下载,将代码切换到git checkout 4c6cff6391分支 软件编译 cd .\libzmq\ mkdir build cd .\bu…...
电商云账户分账系统:打造高效资金流转体系
在当今的电子商务时代,随着消费者购物习惯的转变和在线交易量的激增,电商平台的运营模式也日趋复杂。为了满足多商家共存、利益共享的需求,电商分账成为了一个至关重要的环节。 电商分账是指电商平台在销售商品或服务后,根据事先…...
设计模式 -- 单例设计模式
1.1 单例 创建一个单例对象 SingleModel , SingleModel 类有它的私有构造函数和本身的一个静态实例。 SingleModel 类提供了一个静态方法,供外界获取它的静态实例。 DesignTest 我们的演示类使用 SingleModel 类来获取 SingleModel 对象。 创建 Single…...
python fastapi 打包exe
创建虚拟环境 python -m venv 国内依赖仓库 # 换源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip config set install.trusted-host mirrors.aliyun.com 安装nuitka pip install nuitka 生成exe nuitka --mingw64 --show-progress --s…...
【测试开岗面试】知识点总结
1.知识点总结 Q:请你分别介绍一下单元测试、集成测试、系统测试、验收测试、回归测试 单元测试 (Unit Testing) 单元测试是对软件中最小可测试单元(通常是函数或方法)进行验证的过程。它的目的是确保每个单元在设计时的功能能够正常运行。单元测试通常由…...
【高级编程】synchronized 解决并发问题 类的线程安全类型
文章目录 并发问题同步方法同步代码块 线程安全类型ArrayListHashtableHashMapVector 多线程共享数据引发的问题 模拟 “A” “B” “C” 三人抢票,总票数10张,打印抢票情况以及剩余票数。 public class Site implements Runnable {int count 10; // …...
Speculative RAG:为知识密集型数据服务的RAG
论文链接 RAG的一个棘手问题是不知道该召回多少chunk,少了可能丢信息,多了会引入噪声信息。虽然有self-reasoning等自我反思的解决办法,但是整体链路太长,延迟高,不利于工业落地。 虽然无法面对整个服务场景ÿ…...
[Go]-抢购类业务方案
文章目录 要点:1. 抢购/秒杀业务的关键挑战2. 技术方案3.关键实现点4.性能优化建议5.其他考虑因素 细节拆分:1. **高并发处理**2.**限流与防护**3.**库存控制**4. **异步处理**5. **数据一致性**6. **常用架构设计**7. **代码示例**8. 进一步优化9. 注意…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
