Linux防火墙之SNAT与DNAT原理

一、SNAT的原理及应用

SNAT应用环境域网:主机共享单个公网IP地址接入Internet(私有IP不能在Internet中正常路由)

SNAT原理:修改数据包的源地址。

1.概述

  • 随着 Internet 网络在全世界范围内的快速发展,IPv4 协议支持的可用IP地址资源
    逐渐变少,资源匮乏使得许多企业难以申请更多的公网 IP 地址,或者只能承受一个或者少数几个公网 IP 地址的费用

  • 而与此同时,大部分企业面临着将局域网内的主机接入 Internet 的需求

  • 通过在网关中应用 SNAT 策略,可以解决局域网共享上网的问题

  • 下面假设一个小型的企业网络为例:Linux 网关服务器通过两块网卡 ens33、ens33:0 分别连接 Internet 和局域网

2.SNAT转换前提条件:

1.局域网各主机已正确设置IP地址、子网掩码、默认网关地址
2. Linux网关开启IP路由转发

临时打开:
echo 1 > /proc/sys/net/ipv4/ip_ forward
或
sysctl -W net. ipv4.ip_ forward=1.
永久打开:
vim /etc/ sysctl. conf
net. ipv4.ip_ forward = 1   	       #将此行写入配置文件
sysctl -P         				       #读取修改后的配置

3.设置SNAT转化

SNAT转换1:固定的公网IP地址:
iptables -t nat -A POSTROUTING -s 192.168.126.0/24 -o ens33 -j SNAT --to 12.0.0.1
或
iptables -t nat -A POSTROUTING -s 192.168.126.0/24 -o ens33 -j SNAT --to-source 12.0.0.1-12.0.0.10
                                    #内网IP       出站 外网网卡                      外网IP或地址池

SNAT转换2:非固定的公网IP地址(共享动态IP地址):
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -0 ens33 -j MASQUERADE

4.应用

  • SNAT 的典型应用是为局域网共享上网提供接入策略,处理数据包的切入时机是在路由选择之后(POSTROUTING)进行

  • 关键操作是将局域网外发数据包的源 IP 地址(私有地址)修改为网关服务器的外网接口 IP 地址(公有地址)

  • SNAT 策略只能用在 nat 表的 POSTROUTING 链,使用 iptables 命令编写 SNAT
    策略时,需要结合“–to-source IP地址”选项来指定修改后的源 IP 地址

5.共享动态IP地址上网

  • 在某些情况下,网关的外网 IP 地址可能并不是固定的,如使用 ADSL 宽带接入时那么在这种网络环境下,应该如何设置 SNAT 策略呢?
  • 针对这种需求,iptables 命令提供了一个名为 MASQUERADE(伪装)的数据包控制类型
    MASQUERADE 相当于 SNAT 的一个特例,同样用来修改(伪装)数据包源 IP 地址,只不过它能够自动获取外网接口的 IP 地址,而无须使用“–to-source”指定固定的 IP 地址
  • 参照上一个 SNAT 案例,若要使用 MASQUERADE 伪装策略,只需去掉 SNAT 策略中的“-to-source IP地址”,然后改用“-j MASQUERADE”指定数据包控制类型
iptables-t nat -A POSTROUTING -s 192.168.126.0/24 -o ens33 -j MASQUERADE

当然,如果网关使用固定的公网 IP 地址,最好选择 SNAT 策略而不是 MASQUERADE 策略,以减少不必要的系统开销

6.共享固定 IP 地址上网

6.1打开网关的路由转发

对于 Linux 服务器,IP 转发是实现路由功能的关键所在,对应为/proc 文件系统
中的 ip_forward 设置,当值为 1 时表示开启,为 0 时表示关闭
若要使用 Linux 主机作为网关设备,必然需要开启路由转发
例如,可以修改 sysctl.conf 配置文件,永久打开路由转发功能

vim /etc/sysctl.conf
...
net.ipv4.ip_forward =1 
#将此行写入配置文件,0改为1


sysctl -p                   #读取修改后的配置


#临时开启路由转发
echo 1> /proc/sys/net/ipv4/ip_forward
或
sysctl -w net.ipv4.ip_forward=1

6.2正确设置 SNAT 策略

通过分析得知,需要针对局域网 PC 访问 Internet 的数据包采取 SNAT 策略,将源地址更改为网关的公网IP地址,参考以下操作在网关中设置防火墙规则
若要保持
SNAT 策略长期有效,应将相关命令写入到 rc.local 配置文件,以便开机后自动设置

iptables -t nat -A POSTROUTING -s 192.168.126.0/24 -o ens33 -j SNAT --to 12.0.0.1
或
iptables -t nat -A POSTROUTING -s 192.168.126.0/24 -o ens33 -j SNAT --to-source 12.0.0.1-12.0.0.10
                                    #内网IP       出站 外网网卡                      外网IP或地址池

6.3 测试 SNAT 共享接入结果

上述操作完成以后,使用局域网中的 PC 就可以正常访问 Internet 中的网站了
对于被访问的网站服务器来说,将会认为是网关主机在访问(可观察 Web日志获知),而并不知道实际上是企业内网的 PC 在访问

二、DNAT的原理及应用

DNAT应用环境:在Internet中 发布位于局域网内的服务器
DNAT原理:修改数据包的目的地址。

1.概述

DNAT 策略与 SNAT 非常相似,只不过应用方向相反
SNAT 用来修改源 IP 地址,而 DNAT 用来修改目标 IP 地址和目标端口
SNAT 只能用在 nat 表的 POSTROUTING 链中,而 DNAT 只能用在 nat 表的 PREROUTING 链和 OUTPUT链(或被其调用的链)中

下面以一个小型企业网络为例,考虑到应用的安全和稳定性,公司将对外的网站服务器架设在一个内部网络中,公司对外只有一个公网 IP 地址,又需要使 Internet 中的客户机能够访问公司的网站在 Internet 环境中,企业所注册的网站域名必须对应合法的公网 IP 地址,在这种情况下,Internet 中的客户机将无法访问公司内网的服务器,除非在网关服务器中正确设置 DNAT 策略使用 DNAT 策略的效果如下:当 Internet 中的客户机提交的 HTTP 请求到达企业的网关服务器时,网关首先判断数据包的目标地址和目标端口,若发现该数据包需要访问本机的 80 端口,则将其目标 IP 地址修改为内网中真正的网站服务器的 IP 地址,然后才发送给内部的网站服务在上述 DNAT 转换地址的过程,网关服务器会根据之前建立的 DNAT 映射,修改返回的 HTTP 应答数据包的源 IP 地址,最后再返回给 Internet 中的客户机Internet 中的客户机并不知道企业网站服务器的真实局域网地址,中间的转换完全由网关主机完成通过设置恰当的 DNAT 策略,企业内部的服务器就可以面向Internet 提供服务了

2.DNAT转换前提条件

1.局域网的服务器能够访问Internet
2.网关的外网地址有正确的DNS解析记录

3.Linux网关开启IP路由转发

Vim /etc/ sysctl. conf
net. ipv4.ip_ forward = 1

三、规则的导出与导入(即备份与恢复)

规则的备份及还原
防火墙规则的批量备份、还原用到两个命令,即 iptables-save 和 iptables-restore
分别用来保存(Save)和恢复(Restore)

1.iptables-save 命令

iptables-save 命令用来批量导出 Linux 防火墙规则
直接执行 iptables-save save 命令时,将显示出当前启用的所有规则
在 iptables-save 命令的输出信息中,以“#”号开头的内容表示注释,“*表名”表示所在的表,”:链名 默认策略”表示相应的链及默认策略,具体的规则部分省略了命令名“iptables”,后面的“COMMIT”表示提交前面的规则设置
由于 iptables-save 命令只是把规则内容输出到屏幕上,因此当需要保存为固定的文件时,还应该结合重定向输出的操作以完成备份
例如,若要将当前已设置的所有防火墙规则备份为opt/ipt.txt 文件,可以执行以下操作

iptables-save > /opt/ipt.txt
#备份所有表的规则

2.iptables-restore 命令

iptables-restore 命令用来批量导入 Linux 防火墙规则,如果已经使用 iptables-save 命令导出备份文件,则恢复规则的过程在一瞬间就能完成
与 iptables–save 命令相对的 iptables-restore 命令也应结合重定向输入来指定备份文件的位置

iptables-restore < /opt/ipt.txt
#从备份文件恢复规则

3.使用 iptables 服务

通过名为 iptables 的系统服务,可以快速启用、清空防火墙规则
iptables 服务使用的规则文件位于 /etc/sysconfig/iptables 文件中,配置格式与 iptables-save 命令输出的一致

3.1自动启用防火墙规则

在服务器中调试好各种 iptables 规则以后,使用 iptables-save 备份为默认的规则配置文件 etc/sysconfig/iptables,然后就可以通过 iptables 服务来调用
例如,执行以下操作将保存当前的防火墙规则,并设置在每次开机后根据已保存的规则内容自动进行重建

iptables-save > /etc/sysconfig/iptables

3.2清空所有防火墙规则

在调试各种防火墙规则的过程中,为了排除其他规则的干扰,有时候需要清空某些表的规则
当需要一次清空所有表的规则时,停用 iptables 服务是最快捷的方法,也是最彻底的方法

systemctl stop iptables   
#停止iptables服务会清空掉所有表的规则

systemctl start iptables  
#启动iptables服务会自动还原/etc/sysconfig/iptables中的规则
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值