当前位置: 代码网 > 服务器>服务器>Linux > Linux防火墙之SNAT和DNAT详解

Linux防火墙之SNAT和DNAT详解

2025年09月27日 Linux 我要评论
1.snat是什么snat又称源地址转换。源地址转换是内网地址向外访问时,发起访问的内网ip地址转换为指定的ip地址(可指定具体的服务以及相应的端口或端口范围),这可以使内网中使用保留ip地址的主机访

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 分为以下几个区域

  • trusted :信任区,所有流量都可以传入
  • public :公共区域,允许ssh或者dhcpv6-client的流量可以传入,其他的全部拒绝,也是firewalld的默认区域。
  • external:外部区域,允许ssh或者dhcpv6-client的流量可以传入,其他的全部拒绝,默认通过此区域转发的ipv4流量地址,可以进行伪装
  • home 家庭区域:允许ssh或者dhcpv6-client的流量可以传入,其他的全部拒绝
  • internal:内部区域,默认值与home区域的作用相同
  • work 工作区域,允许ssh或者dhcpv6-client的流量可以传入,其他的全部拒绝
  • dmz 隔离区 非军事区:允许ssh,其他的预定义好配置,其他的全部拒绝
  • block:限制区,拒绝所有流量
  • 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 查看

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com