当前位置: 首页 > 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. 注意…...

Android 源码多个Launcher设置默认Launcher

目录 第一部分、android10之前 一.多个launcher 启动设置默认launcher的核心类 二 在自定义服务里面设置默认Launcher 第二部分、android10之后 一、Launcher应用内置并设置为默认Launcher 1.通过ResolverActivity.java设置为默认Launcher 改法一&#xff1a; 改法二&am…...

计算机毕业设计 网上体育商城系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…...

深度学习中实验、观察与思考的方法与技巧

在深度学习中&#xff0c;实验、观察与思考是理解和改进模型性能的关键环节。以下是一些有效的方法与技巧&#xff0c;可以帮助你在深度学习实践中系统性地开展实验、分析结果并进行深入思考&#xff1a; 1. 明确实验目标 在开始实验前&#xff0c;确保对实验的目标有清晰的定…...

记一次 FastDFS 存储节点迁移:基于 scp 的实践与经验分享

一、背景 某某项目&#xff0c;机房到期&#xff0c;需要迁移至其他机房&#xff1b; 此项目已经运行了3年多&#xff0c;fastdfs累计数据大概在250G 左右&#xff0c;现需要把旧的fastdfs数据迁移到新的fastdfs上&#xff1b; 采用scp物理迁移数据的方式&#xff0c;停机迁移…...

http连接github远程仓库密码问题解决办法

目录 一、问题&#xff1a;使用http连接失败 二、解决办法&#xff1a;使用个人访问令牌。 1、生成访问令牌&#xff1a; 步骤 1: 登录 GitHub 步骤 2: 进入设置页面 步骤 3: 生成新的访问令牌 步骤 4: 配置访问令牌 步骤 5: 复制令牌 2. 使用访问令牌 一、问题&#…...

LAMP环境下项目部署

目录 目录 1、创建一台虚拟机 centos 源的配置 备份源 修改源 重新加载缓存 安装软件 2、关闭防火墙和selinux 查看防火墙状态 关闭防火墙 查看SELinux的状态 临时关闭SELinux 永久关闭SELinux&#xff1a;编辑SELinux的配置文件 配置文件的修改内容 3、检查系统…...

Visual Studio 2022从外部引入dll导致的问题

这里以我学MapGIS二次开发的一个小demo为例 一、如何引入dll 1、在解决方案资源管理器中&#xff0c;有个引用的选项 2、然后右键点击添加引用 点击之后会出现如下&#xff1a; 3、点击浏览选项&#xff0c;选择想要引入dll的路径&#xff0c;这里我选择下载MapGIS 10的路径 …...

大模型从失败中学习 —— 微调大模型以提升Agent性能

人工智能咨询培训老师叶梓 转载标明出处 以往的研究在微调LLMs作为Agent时&#xff0c;通常只使用成功的交互轨迹&#xff0c;而丢弃了未完成任务的轨迹。这不仅造成了数据和资源的浪费&#xff0c;也可能限制了微调过程中可能的优化路径。论文《Learning From Failure: Integ…...

10.web应用体系以及windows网络常见操作应用

一、Dos命令 1.启动方式&#xff1a;winR&#xff0c;输入cmd 2.切换盘符/路径&#xff1a;盘符名称&#xff1a; &#xff08;C:) cd 目录 &#xff08;cd B111&#xff09;&#xff08;目录名按table键自动补全&#xff09; 3.查看目录&#xff1a;dir dir /p 分页展示目录及…...

【数据结构与算法 | 灵神题单 | 前后指针(链表)篇】力扣19, 61,1721

1. 力扣19&#xff1a;删除链表的倒数第N个节点 1.1 题目&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; …...