iptables中的SNAT、DNAT与Firewalld

目录

引言

一、SNAT与DNAT简介

(一)SNAT

1.SNAT的工作原理

2.SNAT的应用

(二)DNAT

1.DNAT的工作原理

2.DNAT的应用

二、实现NAT转换

(一)实现SNAT

1.配置网关服务器

2.修改网关

3.设置SNAT规则

(二)实现DNAT

三、Firewalld

(一)基本理论

1. 动态防火墙管理

2. 区域概念

(二)文本管理基础操作

1. 查看当前状态

2. 设置默认区域

3. 添加永久防火墙规则

4. 查看与修改区域规则

5. 配置接口与区域关联

(三)图形化工具


引言

在网络世界中,IP地址就如同现实世界中的门牌号码,它为数据包指明了方向。然而,在某些情况下,出于安全、资源优化或网络拓扑的需要,我们必须对这些“门牌号码”进行变换。这就涉及到了网络地址转换(Network Address Translation, NAT)技术,而在Linux环境中,实现NAT功能的主要工具就是iptables。本文将深入探讨iptables中的两种核心NAT类型——源网络地址转换(Source Network Address Translation, SNAT)和目标网络地址转换(Destination Network Address Translation, DNAT)。

一、SNAT与DNAT简介

在Linux内核的Netfilter框架中,iptables的SNAT(源网络地址转换)和DNAT(目标网络地址转换)是两种不同的NAT类型,它们分别用于修改数据包中的源IP地址和目标IP地址。

(一)SNAT

1.SNAT的工作原理

在私有网络内部的主机试图访问外部网络时,由于它们使用的通常是未被全球路由表识别的私有IP地址,因此需要通过SNAT来伪装其源地址。SNAT发生在数据包离开本地网络边界,即将进入公网的过程中,通常是在POSTROUTING链上执行。

1.私网用户发送数据包经过网关服务器

2.网关服务器通过NAT转换,将私网IP地址转化为公网IP

3.由网关服务器将数据包发送给公网IP

4.公网地址接收到数据包后,将回包发送到网关服务器

5.网关服务器将公网IP转化为私网IP发送给客户端

2.SNAT的应用

节省公网IP资源:多个内网主机可以共享同一个公网IP地址上网。

隐藏内部网络结构:对外部网络而言,所有流量看起来都来自同一公网IP,从而增强了内网的安全性

(二)DNAT

1.DNAT的工作原理

DNAT则发生在数据包从公网向私有网络内部转发的过程中,主要作用是改变目标IP地址,使得外部请求能正确到达内部网络中提供服务的服务器。DNAT操作一般在PREROUTING链上执行。

1.1.外网服务器访问网关服务器的公网IP

1.2.网关服务将通过DNAT转换,将目的地址转换为私网地址

1.3.网关服务器发送数据包到私网地址,实现访问

2.DNAT的应用

服务发布:将公网IP映射到内网服务器,用于对外提供诸如网站、邮件等服务。

负载均衡:结合其他iptables规则和软件,可以实现简单的负载均衡,将不同类型的请求分配给不同的内部服务器处理。

二、实现NAT转换

(一)实现SNAT

网关服务器192.168.83.40;12.0.0.254
私网客户端192.168.83.30
公网服务端12.0.0.1

私网客户端访问公网服务端,通过网关服务器将私网IP地址转换为公网IP,实现访问

1.配置网关服务器

添加网卡,配置网关

开启路由转发功能

临时打开

将/proc/sys/net/ipv4/ip_forward中的数字0改为1:echo 1 > /proc/sys/net/ipv4/ip_forward

或直接执行命令:sysctl -W net.ipv4.ip_forward=1

永久打开

在/etc/sysctl.conf文件中添加net.ipv4.ip_forward = 1

2.修改网关

私网客户端的网关设置为网关服务器的地址

修改完毕之后systemctl  restart  network 使配置生效

这个时候,ping网关服务器的两个地址都可以ping通

将公网服务器的网络模式也设置为仅主机

公网服务端的网关设置为网关服务器的地址

需要注意,在实际环境中是无法设置服务端的网关的,只能通过路由一次次转发,最后到达服务端

公网也可以ping两个地址

3.设置SNAT规则

配置网关服务器的SNAT规则

iptables -t nat -A POSTROUTING  -s  192.168.83.0/24  -o ens36 -p tcp --dport 80 -j SNAT --to 12.0.0.254

-t nat:指定nat表

-A POSTROUTING:添加在POSTROUTING链

-s  192.168.83.0/24:所有来自192.168.83.0/24网段的数据包

 -o ens36:从ens36网卡出去的数据

-p tcp --dport 80:匹配tcp协议80端口的数据

-j SNAT:执行SNAT动作,即改变数据包的源IP地址

--to 12.0.0.254:将满足上述条件的数据包的源IP地址更改为此特定IP地址(12.0.0.254)

#总结起来,这条规则的效果是:所有来自192.168.83.0/24子网、通过ens36接口发送到外部且目标端口为80的TCP数据包,在离开本地主机之前,其源IP地址都会被转换成12.0.0.254。这通常用于私有网络中的主机通过公网访问互联网时隐藏内部网络结构或共享公网IP地址的情况。

使用私网地址去访问公网的web服务

这个时候,在公网的web服务器的日志中,看到的访问地址,都是经过SNAT转换后的地址

(二)实现DNAT

网关服务器192.168.83.40;12.0.0.254
私网客户端192.168.83.30
公网服务端12.0.0.1

公网服务端访问网关服务器,通过网关服务器将IP地址转换为私网IP,实现访问私网客户端

目前访问网关服务器,只能访问网关服务器的内容,通过访问12.0.0.254,访问到192.168.83.30

基本配置与SNAT不变,唯一需要的就是修改网关服务器的iptables规则

首先情况原先的规则,再建立新的规则

iptables -t nat  -A PREROUTING -i ens36 -d 12.0.0.254 -p tcp --dport 80 -j DNAT --to  192.168.83.30

iptables -t nat:指定操作在NAT表上

-A PREROUTING:在PREROUTING链中追加一条新规则。数据包在进入本机并进行路由                                     决策之前,PREROUTING链上的规则会被执行

-i ens36:仅针对从名为ens36的网络接口进入的数据包应用此规则。

-d 12.0.0.254:匹配目标IP地址为12.0.0.254的数据包

-p tcp --dport 80:进一步限定仅当数据包是TCP协议且目标端口号为80时才进行转换

-j DNAT:执行DNAT动作,即改变数据包的目标IP地址

--to  192.168.83.30:将满足上述条件的数据包的目标IP地址更改为此特定IP地址(192.168.83.30)

#总结起来,这条规则的效果是:所有发往公网IP地址12.0.0.254且目标端口为80的TCP数据包,在到达本地主机并准备转发到内部网络之前,其目标IP地址都会被转换成192.168.83.30。这通常用于对外发布服务,使得外部用户可以通过公网IP访问位于私有网络内的服务器提供的服务。

这使,使用公网去访问网关服务器的公网IP就可以看到私网服务器的内容了

DNTA改变的是目的地址,所以访问的IP地址不会改变

三、Firewalld

Firewalld 服务是红帽 RHEL7 系统中默认的防火墙管理工具,特点是拥有运行时配置与永久配置选项且能够支持动态更新以及“zone”的区域功能概念,使用图形化工具 firewall-config 或文本管理工具firewall-cmd

(一)基本理论

1. 动态防火墙管理

Firewalld支持动态更改规则,这意味着无需重启服务或重载配置文件,即可即时生效新的防火墙策略。这对于需要频繁调整防火墙规则的环境来说极为便捷。

2. 区域概念

Firewalld引入了“区域”(Zone)的概念,每个区域具有不同的信任级别和预设规则。常见的区域有:

trusted:所有连接都被允许。
public:只允许基本的网络连接。
internal:适用于内部网络,允许较多的服务连接。
dmz:非军事区,允许部分外部连接。
work 和 home:针对工作和家庭网络环境的安全设置。
block:拒绝所有入站连接。

(二)文本管理基础操作

使用firewall-cmd工具

-get-default-zone  作用 查询默认的区域名称
-set-default-zone=<区域名称>设置默认的区域,永久生效。
-get-zones显示可用的区域。
-get-services显示预先定义的服务。
-get-active-zones显示当前正在使用的区域与网卡名称。
-add-source=将来源于此IP或子网的流量导向指定的区域。
--remove-Source=不再将此IP或子网的流量导向某个指定区域
-add-interface=<网卡名称>将来自于该网卡的所有流量都导向某个指定区域。
-change-interface=<网卡名称>将某个网卡与区域做关联。
-list-all显示当前区域的网卡配置参数,资源,端口以及服务等信息。
-list-all-zones显示所有区域的网卡配置参数,资源,端口以及服务等信息。
-addservice=<服务名>设置默认区域允许该服务的流量。
--add-port=<端口号/协议>允许默认区域允许该端口的流量。
--remove-service=<服务名>设置默认区域不再允许该服务的流量。
--remove-port=<端口号/协议>允许默认区域不再允许该端口的流量。
--reload让“永久生效”的配置规则立即生效,覆盖当前的

1. 查看当前状态

查看Firewalld服务是否运行:systemctl status firewalld


查询当前默认区域:firewall-cmd --get-default-zone

2. 设置默认区域

例如,将默认区域设置为trusted:firewall-cmd --set-default-zone=trusted

出现success表示成功

3. 添加永久防火墙规则

允许80端口HTTP访问:firewall-cmd --permanent --add-service=http

重新加载防火墙以应用更改:firewall-cmd --reload

4. 查看与修改区域规则

查看特定区域的所有服务:firewall-cmd --list-services --zone=public

临时打开一个端口(如443):firewall-cmd --zone=public --add-port=443/tcp


5. 配置接口与区域关联

将网络接口(ens33)关联到指定区域

firewall-cmd --permanent --zone=public --change-interface=ens33

(三)图形化工具

执行firewall-config命令调出图形工具,或者从图形界面打开

1:选择”立即生效“或”重启后依然生效“配置。 

2:区域列表。

3:服务列表。

4:当前选中的区域。

5:被选中区域的服务。

6:被选中区域的端口。

7.被选中区域的协议。

8.被选中区域的source proxys

9:被选中区域的伪装。

10:被选中区域的端口转发

11:被选中区域的ICMP 包。

12:被选中区域的富规则。

13:被选中区域的网卡设备。

14:被选中区域的服务,前面有V的表示允许。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/721008.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【leetcode】删除链接的倒数第N个节点

/*** Definition for singly-linked list.* function ListNode(val, next) {* this.val (valundefined ? 0 : val)* this.next (nextundefined ? null : next)* }*/ /*** param {ListNode} head* param {number} n* return {ListNode}*/ var removeNthFromEnd fun…

Java面试题总结8:springboot

Spring Boot自动配置原理 importConfigurationSpring spi 自动配置类由各个starter提供&#xff0c;使用ConfigurationBean定义配置类&#xff0c;放到META-INF/spring.factories下 使用Spring spi扫描META-INF/Spring.factories下的配置类 如何理解Spring Boot中Starter …

04-JNI函数

上一篇&#xff1a;03-JNI 类型和数据结构 本章是 JNI 函数的参考章节。它提供了所有 JNI 函数的完整列表。它还介绍了 JNI 函数表的具体布局。 注意&#xff1a;使用 "必须 "一词来描述对 JNI 程序员的限制。例如&#xff0c;当你看到某个 JNI 函数必须接收一个非 N…

7款炫酷的前端动画特效分享(三)(附效果图及在线演示)

分享7款好玩的前端动画特效 其中有CSS动画、SVG动画、js小游戏等等 下方效果图可能不是特别的生动 那么你可以点击在线预览进行查看相应的动画特效 同时也是可以下载该资源的 CSS3模仿四季交替动画 基于HTML5CSS3实现的卡通风格一年四季交替动画特效 以下效果图只能体现框架的…

超全Chat GPT论文修改指令

文献综述指令润色修改指令论文选题指令论文大指令研究理论指令论文致谢指令参考文献指令论文润色整体逻辑论文整体优化提问指令 1&#xff0e;文献综述指令 请你帮我写一份关于&#xff08;研究主题&#xff09;的文献综述。我的论文选题方向是 XXXX &#xff0c;我已经找到了…

Shell编程——条件测试(五)

在shell编程中&#xff0c;if语句本身不执行任何判断&#xff0c;它实际上接受一个程序作为参数&#xff0c;然后执行这个程序&#xff0c;并依据这个程序的返回值来判断是否执行相应的语句。 程序的返回值是0&#xff0c;则为真&#xff0c;反之则为假。 目录 test命令&…

YOLOv8-Openvino-ByteTrack【CPU】

YOLOv5-Openvino和ONNXRuntime推理【CPU】 YOLOv6-Openvino和ONNXRuntime推理【CPU】 YOLOv8-Openvino和ONNXRuntime推理【CPU】 YOLOv9-Openvino和ONNXRuntime推理【CPU】 注&#xff1a;YOLOv8和YOLOv9代码内容基本一致&#xff01; 全部代码Github&#xff1a;https://gith…

对于网络IO的理解

网络IO理解 首先服务端将本机地址和端口bind在listensock上&#xff0c;再用listen()去将listensock套接字设置为listen状态&#xff0c;然后调用accept&#xff0c;进入阻塞状态。如果此时有客户端请求连接&#xff0c;就是第一次握手的开始。 客户端会先调用connect来申请连…

BUUCTF crypto做题记录(13)新手向

一、[MRCTF2020]vigenere 这是一道维吉尼亚密码&#xff0c;但由于不知道密钥&#xff0c;所以我们需要采用爆破的方式。Vigenere Solver | guballa.de 答案&#xff1a;flag{vigenere_crypto_crack_man} 二、[MRCTF2020]keyboard 之前做过一个类似的题目&#xff0c;用九宫格…

97 spring 中的泛型类型注入

前言 呵呵 同样是 最近同事碰到的一个问题 他不太懂 英语, 看到的说明是 缺少一个 RedisTemplate 的实例, 但是找到了一个 RedisTemplate 的实例 呵呵 和我这里 spring 版本似乎是不太一样, 错误信息 有一些差异 以下环境基于 jdk8 spring-5.0.4-RELEASE 测试用例 BeanCon…

高效备考一级数据分析师考试《CDA Level I 实操训练营》3月30日开课!

曾经报名了考试&#xff0c;买了教程辅导书&#xff0c;却因为各种原因没有坚持学习&#xff0c;这样的经历可能让你感到沮丧和失望。但是&#xff0c;失败并不代表终结&#xff0c;而是迈向成功的必经之路。为了帮助大家能够快速学习考试相关知识&#xff0c;特别为CDA LEVEL …

transformer--解码器

在编码器中实现了编码器的各种组件&#xff0c;其实解码器中使用的也是这些组件&#xff0c;如下图&#xff1a; 解码器组成部分: 由N个解码器层堆叠而成每个解码器层由三个子层连接结构组成第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接第二个子层连…

小巧且强大,一键批量操作谁不爱?

软件简介&#xff1a; 软件【下载地址】获取方式见文末。注&#xff1a;推荐使用&#xff0c;更贴合此安装方法&#xff01; 两款Office批量打印工具展现了优秀的人性化设计&#xff1a;其界面清晰、操作简便。这些工具支持Word、Excel、PPT等多种文档格式进行批量打印&#…

VMware虚拟机安装linux教程

CentOS7下载 下载 (centos.org)https://www.centos.org/download/新建虚拟机 选择自定义安装 这里要注意兼容性&#xff0c;如果是VMware12创建的虚拟机复制到VM11、10或者更低的版本会出现一不兼容的现象。如果是用VMware10创建的虚拟机在VMware12中打开则不会出现兼容性问题…

vue中使用echarts实现人体动态图

最近一直处于开发大屏的项目&#xff0c;在开发中遇到了一个小知识点&#xff0c;在大屏中如何实现人体动态图。然后看了下echarts官方文档&#xff0c;根据文档中的示例调整出来自己想要的效果。 根据文档上发现 series 中 type 类型设置为 象形柱形图&#xff0c;象形柱图是…

SpringCloud之Nacos入门与实战系列

目录 一、Nacos介绍 1.1、配置中心和注册中心的概念 1.2 Nacos 优点 二、Nacos的使用 2.1 以单机模式启动Nacos 2.2 Nacos部署方式介绍 2.3 配置数据源 2.4 开启控制台权限登录 三、配置中心的使用 3.1 创建配置信息 3.2 SpringBoot使用配置中心 四、注册中心的使用 4…

图书推荐|Word文稿之美

让你的文档从平凡到出众&#xff01; 本书内容 《Word文稿之美》是一本全面介绍Word排版技巧和应用的实用指南。从初步认识数字排版到高效利用模板、图文配置和表格与图表的排版技巧&#xff0c;再到快速修正错误和保护文件&#xff0c;全面系统地讲解数字排版的技术和能力&…

基于Docker部署本地ChatGPT环境

基于Docker部署本地ChatGPT环境 一、拉取镜像 docker pull pengzhile/pandora二、运行镜像 docker run -e PANDORA_CLOUDcloud -e PANDORA_SERVER0.0.0.0:8899 -p 8899:8899 -d pengzhile/pandora三、查看容器是否启动成功 docker ps四、登录 http://IP:8899 这里有两种方…

ssm+springboot音乐播放器网站mybatis+jsp

测试流程 &#xff08;1&#xff09; 登录系统、填写用户名、密码选择角色&#xff0c;主要内容&#xff1a;进行权限控制。 &#xff08;2&#xff09; 用户查看音乐信息、音乐资讯功能&#xff0c;主要是测试系统实用性、方便性。 &#xff08;3&#xff09; 信息修…

【C++】类和对象之初始化列表与static成员

个人主页 &#xff1a; zxctscl 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 前言2. 再谈构造函数2.1 构造函数体赋值2.2 初始化列表2.3 explicit关键字 3. static成员3.1 概念3.2 特性 1. 前言 在前面的博客中已经分享有关构造函数 【C】构造函数和…