3.1 SNAT
策略及应用
Linux
防火墙在很多时候承担着连接企业内、外网的重任,除了提供数据包过滤功能以
外,还提供一些基本的网关应用。本章将学习
Linux
防火墙的
SNAT
和
DNAT
策略,分别
掌握两个典型的应用:局域网共享一个公网
IP
地址接入
Internet
;向
Internet
发布位于内网
的应用服务器。本章还将学习防火墙脚本的使用。首先介绍的是
SNAT
策略及应用。
SNAT
(
Source Network Address Translation
,源地址转换)是
Linux
防火墙的一种地
址转换操作,也是
iptables
命令中的一种数据包控制类型,其作用是根据指定条件修改数据
包的源
IP
地址。
3.1.1 SNAT
策略概述
随着
Internet
网络在全世界范围内的快速发展,
IPv4
协议支持的可用
IP
地址资源逐渐
变少,资源匮乏使得许多企业难以申请更多的公网
IP
地址,或者只能承受一个或者少数几
个公网
IP
地址的费用。而与此同时,大部分企业面临着将局域网内的主机接入
Internet
的
需求。
通过在网关中应用
SNAT
策略,可以解决局域网共享上网的问题。下面以一个小型的
企业网络为例。
Linux
网关服务器通过两块网卡
ens33
、
ens37
分别连接
Internet
和局域网,
如图
3.1
所示,分析局域网主机访问
Internet
的情况。
1
.只开启路由转发,未设置地址转换的情况
正常情况下,作为网关的
Linux
服务器必须打开路由转发,才能沟通多个网络。未使用
地址转换策略时,从局域网
PC
(如
192.168.1.234
)访问
Internet
的数据包经过网关转发
后其源
IP
地址保持不变,当
Internet
中的主机收到这样的请求数据包后,响应数据包将无
法正确返回(私有地址不能在
Internet
中正常路由),从而导致访问失败
3.1.2 SNAT
策略的应用
从上一小节的介绍中,我们大致可以了解,
SNAT
的典型应用是为局域网共享上网提供
接入策略,处理数据包的切入时机是在路由选择之后(
POSTROUTING
)进行。关键操作
是将局域网外发数据包的源
IP
地址(私有地址)修改为网关服务器的外网接口
IP
地址(公
有地址)。
SNAT
策略只能用在
nat
表的
POSTROUTING
链,使用
iptables
命令编写
SNAT
策略
时,需要结合
“--to-source IP
地址
”
选项来指定修改后的源
IP
地址(如
-j SNAT --to-source
218.29.30.31
)。下面通过两个实例来说明
SNAT
策略的具体用法。
在测试过程中,若只希望临时开启路由转发,也可以执行以下操作。
?
?或者
(
2
)正确设置
SNAT
策略。
通过分析得知,需要针对局域网
PC
访问
Internet
的数据包采取
SNAT
策略,将源地址
更改为网关的公网
IP
地址,参考以下操作在网关中设置防火墙规则。若要保持
SNAT
策略
长期有效,应将相关命令写入到
rc.local
配置文件,以便开机后自动设置。
?
2
.共享动态
IP
地址上网
在某些情况下,网关的外网
IP
地址可能并不是固定的,如使用
ADSL
宽带接入时。那
么在这种网络环境下,应该如何设置
SNAT
策略呢?针对这种需求,
iptables
命令提供了一
个名为
MASQUERADE
(伪装)的数据包控制类型,
MASQUERADE
相当于
SNAT
的一个
特例,同样用来修改(伪装)数据包源
IP
地址,只不过它能够自动获取外网接口的
IP
地址,
而无须使用
“--to-source”
指定固定的
IP
地址。
参照上一个
SNAT
案例,若要使用
MASQUERADE
伪装策略,只需去掉
SNAT
策略中
的
“--to-source IP
地址
”
,然后改用
“-j MASQUERADE”
指定数据包控制类型。对于
ADSL
宽
带连接,连接名称通常为
ppp0
、
ppp1
等。
(
2
)正确设置
DNAT
策略。
通过分析得知,需要针对
Internet
中的任意主机访问网关
80
端口的数据包,将目标地
址修改为位于内网的网站服务器的
IP
地址,网关的防火墙参考规则如下所示。
?
(
3
)正确设置
DNAT
策略。
通过分析得知,网关本机的
sshd
服务直接面向
Internet
,因此不需要地址转换,但网
站服务器位于内网,必须通过
DNAT
策略进行发布。在网关中设置防火墙规则,修改访问
外网
IP
地址
2346
端口的数据包,将目标地址改为
192.168.1.6
,将目标端口改为
22
,以
便转发给网站服务器。
1
.
iptables-save
命令
iptables-save
命令用来批量导出
Linux
防火墙规则。直接执行
iptables-save
命令时,
将显示出当前启用的所有规则。
?
在
iptables-save
命令的输出信息中,以
“#”
号开头的内容表示注释,
“*
表名
”
表示所在的
表,
“:
链名 默认策略
”
表示相应的链及默认策略,具体的规则部分省略了命令名
“iptables”
,
后面的
“COMMIT”
表示提交前面的规则设置。
由于
iptables-save
命令只是把规则内容输出到屏幕上,因此当需要保存为固定的文件
时,还应该结合重定向输出的操作以完成备份。例如,若要将当前已设置的所有防火墙规则
备份为
/opt/iprules_all.txt
文件,可以执行以下操作。
?
?
2
.
iptables-restore
命令
iptables-retore
命令用来批量导入
Linux
防火墙规则,如果已经使用
iptables-save
命令
导出的备份文件,则恢复规则的过程在一瞬间就能完成。与
iptables-save
命令相对的
iptables-restore
命令应结合重定向输入来指定备份文件的位置。
3.3.2
使用
iptables
服务
通过名为
iptables
的系统服务,可以快速启用、清空防火墙规则。
iptables
服务使用的
规则文件位于
/etc/sysconfig/iptables
文件中,配置格式与
iptables-save
命令输出的一致。
1
.自动启用防火墙规则
在服务器中调试好各种
iptables
规则以后,使用
iptables-save
备份为默认的规则配置
文件
/etc/sysconfig/iptables
,然后就可以通过
iptables
服务来调用。例如,执行以下操作将
保存当前的防火墙规则,并设置在每次开机后根据已保存的规则内容自动进行重建。
?
?
?