引言
Linux 防火墙在很多时候承担着连接企业内、外网的重任,除了提供数据包过滤功能以外,还提供一些基本的网关应用
一、SNAT策略及应用
SNAT 是 Linux 防火墙的一种地址转换操作,也是 iptables 命令中的一种数据包控制类型,其作用是根据指定条件修改数据包的源 IP 地址。
1. SNAT策略概述
- 随着 Internet 网络在全世界范围内的快速发展,IPv4 协议支持的可用IP地址资源逐渐变少,资源匮乏使得许多企业难以申请更多的公网 IP 地址,或者只能承受一个或者少数几个公网 IP 地址的费用
- 大部分企业面临着将局域网内的主机接入 Internet 的需求
- 通过在网关中应用 SNAT 策略,可以解决局域网共享上网的问题
2. SNAT策略工作原理
① 只开启路由转发,未设置地址转换的情况
- 正常情况下,作为网关的 Linux 服务器必须打开路由转发,才能沟通多个网络;
- 未使用地址转换策略时,从局域网 PC 访问 Internet 的数据包经过网关转发后其源 IP 地址保持不变,当 Internet 中的主机收到这样的请求数据包后,响应数据包将无法正确返回(私有地址不能在 Internet 中正常路由),从而导致访问失败。
② 开启路由转发,并设置 SNAT 转发的情况
- 当局域网 PC 访问 Internet 的数据包到达网关服务器时,会先进行路由选择,若发现该数据包需从外网接口向外转发,则将其源 IP 地址修改为网关的外网接口地址,然后才发送给目标主机;
- 相当于从网关服务器的公网 IP 地址提交数据访问请求,目标主机也可以正确返回响应数据包,最终实现局域网 PC 共享同一个公网 IP 地址接入 Internet。
- 上述 SNAT 转换地址的过程中,网关服务器会根据之前建立的 SNAT 映射,将响应数据包正确返回局域网中的源主机。
- 因此,只要连接的第一个包被 SNAT 处理了,那么这个连接及对应数据流的其他包也会自动地被进行 SNAT 处理;
- 另一方面,Internet 中的服务器并不知道局域网 PC 的实际 IP 地址,中间的转换完全由网关主机完成,一定程度上也起到了保护内部网络的作用。
3. SNAT策略的应用
- SNAT 的典型应用是为局域网共享上网提供接入策略,处理数据包的切入时机是在路由选择之后(POSTROUTING)进行,关键操作是将局域网外发数据包的源 IP 地址(私有地址)修改为网关服务器的外网接口 IP 地址(公有地址)
- SNAT策略只能用在nat表的POSTROUTING链,使用iptables命令编写SNAT策略时,需要结合
"- -to-source IP地址"选项来指定修改后的源IP地址
4. SNAT 策略用法
4.1 案例环境说明
4.2 打开网关的路由转发
Linux 系统本身是没有转发功能的,只有路由发送数据
- 临时开启路由转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
或者
sysctl -W net.ipv4.ip_forward=1
- 永久开启路由转发功能
vim /etc/sysctl.conf
...
net.ipv4.ip_forward =1 #将此行写入配置文件,0改为1
sysctl -p #读取修改后的配置
4.3 正确设置SNAT策略
- 通过分析得知,需要针对局域网 PC 访问 Internet 的数据包采取 SNAT 策略,将源地址更改为网关的公网IP地址,参考以下操作在网关中设置防火墙规则。
- 若要保持 SNAT 策略长期有效,应将相关命令写入到 rc.local 配置文件,以便开机后自动设置
iptables -t nat -A POSTROUTING