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

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 转换前提条件

  1. 局域网内各主机已正确设置 IP 地址、子网掩码、默认网关地址。
  2. 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 转换规则配置

  1. 固定的公网 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.112.0.0.1-12.0.0.10 为外网 IP 或地址池。

  2. 非固定的公网 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 转换前提条件

  1. 局域网内的服务器能够访问 Internet。
  2. 网关的外网地址有正确的 DNS 解析记录。
  3. 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 <协议>:指定协议类型(如 tcpudp)。
  • --dport <原目的端口>:原目标端口,需要转换的端口号,如 80
  • -j DNAT:使用 DNAT 动作,表示目标地址转换。
  • --to <要转换的私网IP[:端口]>:要转换的内网服务器 IP 和端口,如 192.168.1.100:8080,端口部分为可选。

DNAT 转换规则配置

  1. 发布内网的 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
    
  2. 发布时修改目标端口:

    发布局域网内部的 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 使用,才能实现响应数据包的正确返回。

扩展

  • 主机型防火墙:主要使用 INPUTOUTPUT 链,设置规则时一般要详细地指定端口。
  • 网络型防火墙:主要使用 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>

选项说明:

  • [协议]:指定抓取的协议类型,如 tcpudpicmp 等,也可以是 iparprarp 等数据链路层协议类型。这些选项必须放在第一个参数的位置,用来过滤数据包的类型。
  • -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 规则的备份和还原导出&#xff08;备份&#xff09;所有表的规则导入&#xff08;…...

小目标检测顶会新思路!最新成果刷爆遥感SOTA,参数小了18倍

遥感领域的小目标检测一直是个具有挑战性和趣味性的研究方向&#xff0c;同时也是顶会顶刊的常客。但不得不说&#xff0c;今年关于遥感小目标检测的研究热情尤其高涨&#xff0c;已经出现了很多非常优秀的成果。 比如SuperYOLO方法&#xff0c;通过融合多模态数据并执行高分辨…...

【Ubuntu】虚拟机安装USB摄像头ROS驱动 usb_cam(最新方法)

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…...

免费的成绩查询微信小程序,让家长轻松掌握学生表现

传统的教学方式在不断地被革新。在成绩查询这一环节&#xff0c;老师们曾经面临着繁琐的手工操作和信息安全的风险。可现如今有一个让成绩查询变得轻松、高效且安全的新工具——易查分。 过去需要花费大量时间来整理成绩&#xff0c;然后通过短信或者打电话的方式告知给家长。以…...

[含视频和源码]CRUD的最佳实践,联动前后端,包含微信小程序,API,HTML等(三)

关说不练假把式&#xff0c;在上一&#xff0c;二篇中介绍了我心目中的CRUD的样子 基于之前的理念&#xff0c;我开发了一个命名为PasteTemplate的项目&#xff0c;这个项目呢后续会转化成项目模板&#xff0c;转化成项目模板后&#xff0c;后续需要开发新的项目就可以基于这…...

如何把我另一个分支上的commit拿过来

在开源过程中&#xff0c;每一次PR都是要经过严格的review的&#xff0c;这期间可能会进行多次修改&#xff0c;补充提交&#xff0c;而且这一般来说不是一个很迅速的过程&#xff0c;此时我们可能会先往后进行开发。我一般会把项目分模块逐步建立分支&#xff0c;当前一个pr合…...

【rpg像素角色】俯视角-行走动画

制作像素角色的俯视角行走动画并不像看上去那么复杂&#xff0c;尤其是在你已经完成了角色的4个方向站立姿势之后&#xff08;其中左右方向可以通过水平翻转实现&#xff09;。接下来&#xff0c;我会一步步为你讲解如何制作行走动画。 1. 理解行走规律 在制作行走动画之前&am…...

Python时间序列分析新技能,轻松掌握时间索引

大家好&#xff0c;在数据分析领域&#xff0c;时间序列数据分析是一项非常重要的技能。Pandas作为Python中强大的数据处理库&#xff0c;在处理时间序列数据时提供了丰富的功能&#xff0c;其中时间索引的应用是时间序列分析中的关键。本文将介绍如何在Pandas中使用时间索引进…...

sklearn-逻辑回归-特征工程示例

sklearn-逻辑回归-特征工程示例 在实际应用场景中&#xff0c;有时候特征的数量会很多&#xff0c;我们出于业务考虑&#xff0c;也出于计算量的考虑&#xff0c;希望对逻辑回归进行特征选择来降维。比如在判断一个人是否会患乳腺癌的时候&#xff0c;医生如果看58个指标来确诊…...

RTMP播放器延迟最低可以做到多少?

技术背景 RTMP播放器的延迟可以受到多种因素的影响&#xff0c;包括网络状况、推流设置、播放器配置以及CDN分发等。因此&#xff0c;RTMP播放器的延迟并不是一个固定的数值&#xff0c;而是可以在一定范围内变化的。 正常情况下&#xff0c;网上大多看到的&#xff0c;针对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 项目&#xff08;虚拟线程&#xff09; Java 项目 Loom 是 Oracle 在 JVM 上的一项重大变革&#xff0c;旨在引入 虚拟线程&#xff08;Virtual Threads&#xff09;&#xff0c;以简化并发编程。传统的 Java 线程是重量级的&#xff0c;由操作系统管理&…...

Windows下使用MinGW编译安装zmq的步骤

背景&#xff1a; 在开发过程中&#xff0c;需要使用zmq库进行数据交互&#xff0c;因此需要编译zmq库。 安装步骤 软件下载 https://github.com/zeromq/libzmq.git 下载&#xff0c;将代码切换到git checkout 4c6cff6391分支 软件编译 cd .\libzmq\ mkdir build cd .\bu…...

电商云账户分账系统:打造高效资金流转体系

在当今的电子商务时代&#xff0c;随着消费者购物习惯的转变和在线交易量的激增&#xff0c;电商平台的运营模式也日趋复杂。为了满足多商家共存、利益共享的需求&#xff0c;电商分账成为了一个至关重要的环节。 电商分账是指电商平台在销售商品或服务后&#xff0c;根据事先…...

设计模式 -- 单例设计模式

1.1 单例 创建一个单例对象 SingleModel , SingleModel 类有它的私有构造函数和本身的一个静态实例。 SingleModel 类提供了一个静态方法&#xff0c;供外界获取它的静态实例。 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) 单元测试是对软件中最小可测试单元&#xff08;通常是函数或方法&#xff09;进行验证的过程。它的目的是确保每个单元在设计时的功能能够正常运行。单元测试通常由…...

【高级编程】synchronized 解决并发问题 类的线程安全类型

文章目录 并发问题同步方法同步代码块 线程安全类型ArrayListHashtableHashMapVector 多线程共享数据引发的问题 模拟 “A” “B” “C” 三人抢票&#xff0c;总票数10张&#xff0c;打印抢票情况以及剩余票数。 public class Site implements Runnable {int count 10; // …...

Speculative RAG:为知识密集型数据服务的RAG

论文链接 RAG的一个棘手问题是不知道该召回多少chunk&#xff0c;少了可能丢信息&#xff0c;多了会引入噪声信息。虽然有self-reasoning等自我反思的解决办法&#xff0c;但是整体链路太长&#xff0c;延迟高&#xff0c;不利于工业落地。 虽然无法面对整个服务场景&#xff…...

[Go]-抢购类业务方案

文章目录 要点&#xff1a;1. 抢购/秒杀业务的关键挑战2. 技术方案3.关键实现点4.性能优化建议5.其他考虑因素 细节拆分&#xff1a;1. **高并发处理**2.**限流与防护**3.**库存控制**4. **异步处理**5. **数据一致性**6. **常用架构设计**7. **代码示例**8. 进一步优化9. 注意…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...