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

Linux防火墙之--SNAT和DNAT

1.SNAT是什么

SNAT又称源地址转换。源地址转换是内网地址向外访问时,发起访问的内网ip地址转换为指定的ip地址(可指定具体的服务以及相应的端口或端口范围),这可以使内网中使用保留ip地址的主机访问外部网络,即内网的多部主机可以通过一个有效的公网ip地址访问外部网络。

真实环境运用中私网可以通过路由转发,将数据包传送给公网IP地址的服务器,而公网地址无法将相应的数据包回还给私网地址的用户。此时二者之间需要一个媒介,就是一个建立在私网和公网之间的网关服务器,对其之间的数据包进行相应的处理。来完成私网IP与公网IP之间的建立联系 
 

2.DNAT是什么

 DNAT:目的地址转换的作用是将一组本地内部的地址映射到一组全球地址。通常来说,合法地址的数量比起本地内部的地址数量来要少得多。

私网地址只能作为源地址来访问公网IP,而无法作为目标地址被其他主机访问

所以DNAT将私网中web服务器映射到公网IP,使其公网IP作为目标地址被公网中主机进行访问

简单来说:

SNAT是对源地址转换

DNAT是对目的地址转换

SNAT的典型应用场景

SNAT策略的工作原理

SNAT源地址转换过程:

数据包从内网发送到公网时,SNAT会把数据包的源地址由私网IP转换成公网IP。
当相应的数据包从公网发送到内网时,会把数据包的目的地址由公网IP转换为私网IP。
当内网有多台主机访问外网时,SNAT在转换时会自动分配端口,不同内网主机会通过端口号进行区分。

 

如何用iptables实现地址转换

准备任务:

1.准备三台虚拟机

2.给网关服务器添加一张虚拟网卡

3.拓扑:

test1:20.0.0.10 内网

test2:ens33: 20.0.0.254

ens36:12.0.0.254

做SNAT的地址转换

test3:12.0.0.100 外网

过程

关闭防火墙

编辑网卡信息

首先ifconfig查看网卡名称(我这里是ens36)

cd /etc/sysconfig/network-scripts
#进入该路径
cp ifcfg-ens33 ifcfg-ens36
#创建新网卡信息

TYPE=Ethernet
DEVICE=ens36
ONBOOT=yes
BOOTPROTO=static
IPADDR=12.0.0.254
NETMASK=255.255.255.0
#GATEWAY=20.0.0.2
#DNS1=8.8.8.8

此处不用设置网关,因为要充当内网网关

TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=20.0.0.254
NETMASK=255.255.255.0
#GATEWAY=20.0.0.2
#DNS1=8.8.8.8

客户机配置

TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=20.0.0.10
NETMASK=255.255.255.0
GATEWAY=20.0.0.254
#DNS1=218.2.135.1

web配置

TYPE=Ethernet
DEIVCE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=12.0.0.100
NETMASK=255.255.255.0
GATEWAY=12.0.0.254
#DNS1=8.8.8.8

网卡配置结束后,要通过iptables命令添加

iptables -t nat -A POSTROUTING -s 20.0.0.0/24 -o ens36 -j SNAT --to 10.0.0.10

-t:指定表名

nat:地址转换的表名

-A:添加一条规则,在行尾追加

POSTROUTING:在出本机的时候添加一个地址转换的规则

-s:192.168.233.0/24 指定源IP地址

-j SNAT:指定控制类型

--to 10.0.0.10 所有源IP属于233.0这个网段,只要你是从ens36出来,都会把它们IP地址转换为10.0.0.10

完成之后,  iptables -t nat -vnL查看

最后,网关服务器要同意转发

vim /etc/sysctl.conf

sysctl -p

立即启动

客户端链接web端(内网链接外网)测试

DNAT地址转换

iptables -t nat -A PREROUTING -d 11.0.0.11 -i ens36 -p tcp --dport 80 -j DNAT --to 20.0.0.10:80

web端连接客户端测试

实验结束

Linux抓包技术--tcpdump

tcpdump为Linux自带的抓包工具

wireshark只适用于Windows

抓包方式:

1.指定抓包数量

2.动态抓包,一致会获取包,除非人工停止

tcpdump tcp -i ens33 -t -s0 -c 10 and dst port 80 and net 20.0.0.0/24 -w ./target.cap

tcpdump:抓包命令,固定开头

tcp:抓包的协议

-i:经过,只抓经过ens33的数据包

-t:不显示时间戳

-s0:抓完整的数据包

-c:指定抓包的个数

dst port:80 访问的是httpd的80端口

src net:192.168.233.0/24

-w:抓包的数据,保存位置。

firewalld技术

firewalld:centos7自带的,和iptables一样,也是包过滤防火墙

firewalld过滤,通过区域来进行配置

iptables 静态防火墙

firewalld 动态防火墙

firewalld 分为以下几个区域:

  1. trusted :信任区,所有流量都可以传入

  2. public :公共区域,允许ssh或者dhcpv6-client的流量可以传入,其他的全部拒绝,也是firewalld的默认区域。

  3. external:外部区域,允许ssh或者dhcpv6-client的流量可以传入,其他的全部拒绝,默认通过此区域转发的ipv4流量地址,可以进行伪装

  4. home 家庭区域:允许ssh或者dhcpv6-client的流量可以传入,其他的全部拒绝

  5. internal:内部区域,默认值与home区域的作用相同

  6. work 工作区域,允许ssh或者dhcpv6-client的流量可以传入,其他的全部拒绝

  7. DMZ 隔离区 非军事区:允许ssh,其他的预定义好配置,其他的全部拒绝

  8. block:限制区,拒绝所有流量

  9. drop:丢弃区域,所有流量都会丢弃

firewalld相关命令

firewall-cmd --list-service

查看区域内允许通过的服务

firewall-cmd --add-service=http --zone=public

添加,浏览器20.0.0.10即可看到是否成功

firewall-cmd --remove-service=http --zone=public

删除

firewall-cmd --add-service=http --add-service=ftp --zone=pubilc

添加多个服务

firewall-cmd --list-services

查看

firewall-cmd --add-service={ftp,http}

添加多个的不同方法

firewall-cmd --add-service={ftp,http} --zone=public --permanent

永久生效

firewall-cmd --remove-service=http --zone=public --permanent

删除永久生效的项

firewall-cmd --zone=public --add-port=80/tcp

根据端口添加

firewall-cmd --zone=public --remove-port=80/tcp

移除

firewall-cmd --zone=指定区域

firewall-cmd --zone=public -add-port={3306,80,21}/tcp

添加多个端口

firewall-cmd --zone=public -add-port=30-35/tcp

添加端口的范围

firewall-cmd --list-all 查看

http://www.lryc.cn/news/185659.html

相关文章:

  • Bean注入方式:@Autowired、@Resource的区别
  • 软件设计原则 1小时系列 (C++版)
  • 数据结构--》解锁数据结构中树与二叉树的奥秘(一)
  • 23.4 Bootstrap 框架5
  • Spring源码解析——IOC属性填充
  • 寒露到了,冬天还会远吗?
  • 科普②| 大数据有什么用?大数据技术的应用领域有哪些?
  • golang的切片使用总结二
  • tailscale自建headscale和derp中继
  • 布隆过滤器的使用
  • Web开发-单例模式
  • MySQL:温备份和恢复-mysqldump (4)
  • 【力扣每日一题】2023.10.8 股票价格波动
  • Linux隐藏文件或文件夹
  • leetcode - 365周赛
  • 为什么mac上有的软件删除不掉?
  • 【vue3】wacth监听,监听ref定义的数据,监听reactive定义的数据,详解踩坑点
  • 跨境电商如何通过软文建立品牌形象?
  • 我做了一个简易P图(参数图)分析软件
  • 209.Flink(四):状态,按键分区,算子状态,状态后端。容错机制,检查点,保存点。状态一致性。flink与kafka整合
  • rabbitmq查看节点信息命令失败
  • c语言动态内存分布
  • 1.3.2有理数减法(第一课时)作业设计
  • vue3 -- ts封装 Turf.js地图常用方法
  • Qt之实现圆形进度条
  • C# 图解教程 第5版 —— 第1章 C# 和 .NET 框架
  • electronjs入门-聊天应用程序,与Electron.js通信
  • 【自用】ubuntu 18.04 LTS安装opencv 3.4.16 + opencv_contrib 3.4.16
  • 递归解析Json,实现生成可视化Tree+快速获取JsonPath | 京东云技术团队
  • GraceUI相关的 知识