本课将介绍如何配置NAT,并使用NAT对经过FortiGate的流量进行源NAT和目的NAT的转换。
本课你将学习上图显示的主题。
通过展示理解NAT和PAT如何工作的能力,以及可用的NAT配置模式,你将有一个很好的开始来规划在你的网络中实现NAT。
NAT是一个使单个设备(如防火墙或路由器)在internet(公共网络)和本地或私有网络之间充当代理的过程。
NAT的实现通常有以下一个或多个原因:
● 提高安全性:NAT设备背后的地址实际上是隐藏的。
● 地址放大:数百台计算机可以使用一个公共IP地址。
● 内部地址稳定性:即使互联网服务提供商(ISP)改变,地址也可以保持不变。
NAT和PAT,也被称为NAPT,将内部的(通常是私有的)IP地址转换为外部的(通常是公共的)互联网IP地址。在FortiOS中,NAT和流量转发应用于同一条防火墙策略。但是,诊断清楚地显示NAT和转发是两个独立的动作。
● 对于出方向的连接:可以在中央SNAT、IP池和中央SNAT表中使用NAT选项,即源NAT。
● 对于入方向的连接:可以使用虚拟IP(VIP)和DNAT,既目的NAT。
NAT64和NAT46是两个术语,用来表示允许IPv6地址主机与IPv4地址主机通信的机制。如果没有这种机制,网络上的IPv6节点,比如公司局域网,将无法与仅使用IPv4环境的网站通信,而IPv4环境将无法连接到IPv6网络。
NAT66是两个IPv6网络之间的NAT转换。
当采用防火墙策略NAT方式时,必须为每条防火墙策略配置SNAT和DNAT。
中央NAT的配置是每个虚拟域进行的,即SNAT和DNAT的配置会自动应用到多个防火墙策略上。这是根据你指定的SNAT和DNAT规则,而不是每条防火墙策略中的防火墙策略NAT。
作为一个最佳实践,当你使用中央NAT时,你应该配置特定的SNAT和DNAT规则,以便它们只匹配你的配置中所需的防火墙策略。
防火墙策略NAT和中央NAT都产生相同的结果;然而,有些部署场景最适合防火墙策略NAT,有些最适合中央NAT。
防火墙策略NAT建议用于包含相对较少NAT IP地址,且每个NAT IP地址有单独的策略和安全配置文件的部署。对于多个NAT IP地址具有相同的策略和安全配置文件的复杂场景,或者在下一代防火墙(NGFW)的策略模式下,可能无法在第一个数据包中确定相应的策略,建议使用中央NAT。
答案:A
答案:A
现在你了解了NAT。接下来,你将了解防火墙策略NAT。
通过展示这些领域的能力,你将能够配置防火墙策略,应用适当的SNAT和DNAT,并理解如何将其应用于通过FortiGate的流量。
配置防火墙策略SNAT有两种方式:
● 使用流出接口地址
● 动态IP池
当防火墙策略启用NAT功能时,源NAT选项使用出接口地址。这是一种多对一NAT。换句话说,使用PAT,使用原始源地址和源端口组合来跟踪连接,以及分配的源端口。这与重载IP池类型的行为相同,你也将了解重载IP池类型。
你可以选择一个固定端口,在这种情况下,源端口转换是禁用的。对于固定端口,如果有两个或多个连接对同一个IP地址使用同一个源端口,则只能建立一个连接。
在本例中,创建了一条从internal到wan1 (IP地址为203.0.113.10)的防火墙策略,用户从源地址10.10.10.10:1025发起流量,目的地址为192.168.10.10:80。由于防火墙策略中启用了NAT功能,源IP地址会转换为带端口转换的出接口IP地址。
IP池是一种允许会话使用NAT离开FortiGate防火墙的机制。IP池定义了一个或一组IP地址作为会话期间的源地址。使用这些分配的地址,而不是分配给FortiGate接口的IP地址。
IP池通常配置在接口IP地址的范围内。
当你配置将用于NAT的IP池时,你必须考虑一个限制。如果IP池的IP地址是不同的IP地址分配给接口,如果路由配置不当,基于这些IP地址的通迅可能会失败。例如,如果172.16.100.1/24 IP地址分配给一个接口,除非配置了合适的路由,否则IP池不能选择10.10.10.1 ~ 10.10.10.50。
在FortiGate防火墙上可以配置四种类型的IP池:
● Overload
● 一对一
● 固定端口范围
● 端口块分配
如果使用IP地址池,源地址将转换为该IP地址池中的地址,而不是出接口地址。地址池中的地址越多,可以支持的连接数就越多。例如,在需要大量连接的企业网络中,或者在希望一个子网使用一个特定的公网IP而不是另一个公网IP以基于源IP地址限制访问的网络中。
缺省情况下,IP池类型为过载。在过载IP池类型中,使用多对一或多对少关系和端口转换。
在上图示例中,源IP 10.10.10.10被转换为IP池中的一个IP地址(203.0.113.2 ~ 203.0.113.5)。
在一对一的池类型中,内部IP地址以先到先服务的方式与外部地址映射。
内部地址到外部地址只有一个映射。映射不是固定的,如果没有更多可用的地址,连接将被拒绝。
此外,在一对一的情况下,PAT不是必需的。在上图的例子中,你可以看到入口地址和出口地址都显示了相同的源端口。
对于过载和一对一IP池类型,不需要定义内部IP范围。对于IP池的固定端口范围类型,可以定义内部IP范围和外部IP范围。
因为每个外部IP地址和可用端口号的数量是一个特定的数字,如果内部IP地址的数量也被确定,你可以计算每个地址转换组合的端口范围。这种类型的IP池称为固定端口范围,是端口地址转换(PAT)的一种。
固定端口范围允许内部开始IP或内部结束IP范围与外部开始IP或外部结束IP范围之间的固定映射。
上图例子显示了一个固定端口范围的IP池。内部地址10.0.1.10 ~ 10.0.1.11对应外部地址10.200.1.7 ~ 10.200.1.8。
IP池类型的端口块分配也是PAT的一种类型。它为用户提供了更灵活的方式来控制外部IP和端口的分配方式。
用户需要定义块大小和和每块用户数量以及外部IP范围。块大小表示每个块包含多少个端口。每块用户数量是指每个主机或(内部IP)可以使用多少块。
上图显示的两个CLI输出说明了端口块分配IP池类型和默认的过载IP池类型之间的行为差异。
通过使用hping,一个非法客户端每秒会生成很多SYN包。在第一个示例中,端口块分配类型将该IP池的客户端限制为64个连接。其他用户不会受到恶意客户端的影响。
端口块分配超时时间可通过FortiGate CLI进行配置。
VIP是DNAT对象。对于匹配VIP的会话,目标地址被转换;通常一个公网地址被转换为服务器的私网地址。在防火墙策略的目标地址字段中选择VIP。
默认的VIP类型是静态NAT。这是一个一对一的映射,适用于进出连接;也就是说,启用NAT的出接口策略会使用VIP地址而不是出接口地址。但是,你可以使用IP池重写此行为。
可以限制静态NAT VIP只转发特定的端口。例如,连接到外部IP 8080端口映射到内部IP 80端口。
在CLI中,可以选择NAT类型为load-balance和server-load-balance。纯负载均衡将一个外部IP地址的连接分配给多个内部IP地址。服务器负载均衡建立在该机制的基础上,使用虚拟服务器和真实服务器,并提供会话持久性和服务器可用性检查机制。
VIP应该与外部接口路由可达。FortiOS响应VIP和IP池对象的ARP请求。ARP响应可配置。
在上图的示例中,源IP地址192.168.10.10试图通过TCP 80端口访问目的IP地址203.0.113.22。
到VIP 203.0.113.22的连接被NAT到内部主机10.10.10.10。
因为这是一个静态NAT,所有从10.10.10.10发出的NAT连接将使用包的IP源字段中的VIP地址203.0.113.22,而不是出接口IP地址203.0.113.10。
在FortiOS中,VIP和防火墙地址对象是完全不同的。它们是分开存储的,没有重叠。缺省情况下,防火墙地址不匹配VIP。在上图的例子中,在第一个策略中作为目的地址的所有地址对象不包括任何VIP,所以去往Web_server VIP的流量跳过第一个策略,并匹配第二个Allow_access。第一条策略需要在CLI中编辑该策略,set match-VIP enable,允许地址对象匹配VIP地址,或者修改第一条策略的目的地址为该VIP地址。
流量被允许失败到下一个策略;然而,当你使用VIP防火墙策略时,可能会有一些例外。
当配置VIP时,对于进入(WAN到LAN)连接,它将首先与VIP表匹配。
在示例中,一条从WAN到LAN的防火墙策略配置了一个特定的源,动作为Deny。还有第二个防火墙策略允许访问VIP(目的地址)。即使拒绝防火墙策略在列表的顶部,被拒绝的源仍然被第二个防火墙策略允许访问VIP。
当需要阻断被拒绝源的流量时,你必须在deny防火墙策略启用set match-vip enable,即不检查VIP ID。也可以将目的地址配置为deny策略中的虚拟IP地址,而不是all。
需要注意的是,set match-vip enable I disable仅在防火墙策略的动作设置为拒绝时有效。
答案:B
答案:A
现在你了解了防火墙策略NAT。接下来你将了解中央NAT。
完成本节后,你应该能够实现上图显示的目标。
通过展示配置中央NAT来执行SNAT和DNAT的能力,你将能够在更细粒度的级别上使用NAT来控制IP地址、协议和端口转换。
默认情况下,中央NAT功能处于关闭状态。只能在CLI下启用。启用中央NAT后,在GUI界面上可以配置以下两种选项:
● 中央SNAT
● DNAT和虚拟IP
如果你尝试启用中央NAT,但仍然在防火墙中配置了IP池或VIP,会发生什么?
CLI不允许这样做,并显示一条消息引用了防火墙策略ID和VIP或IP池。为了启用中央NAT,你必须从现有的防火墙策略中删除VIP或IP池引用。
NGFW基于策略模式必须配置Central SNAT。这意味着SNAT只根据单击策略与对象>中央SNAT找到的NAT设置来运行。
你可以基于中央SNAT策略中的源接口和目的接口,对通过防火墙策略的流量进行更细粒度的控制。
你现在可以在中央SNAT策略中定义匹配条件,基于:
● 源接口
● 目的接口
● 源地址
● 目的地址
● 协议号
● 原始端口
所有防火墙策略都必须匹配中央SNAT策略。如果没有匹配到SNAT策略,则不会进行NAT转换,而是使用原源IP地址创建会话。
如果中央SNAT策略匹配了多个防火墙策略的流量,则会应用该中央SNAT策略。
与防火墙策略类似,中央SNAT策略从上到下进行处理,如果匹配到,则根据中央SNAT策略对源地址和源端口进行转换。
在上图所示的示例中,中央SNAT策略将源IP地址转换为定义的IP池地址(203.0.113.5)。但是,只有当流量匹配中央SNAT策略中定义的所有变量时,转换才会发生。即从源IP地址经过内部源接口到FortiGate的流量必须经过目的接口wan1到达目的IP地址(192.168.10.10),协议必须为TCP。为了便于演示,只有一个IP地址用于目标,并且IP池类型设置为使用单个IP地址过载。
创建从internal到wan1的防火墙策略。防火墙策略中没有NAT选项,必须匹配SNAT策略才能通过流量。如果没有匹配到中央SNAT策略,则不会进行NAT转换,使用原源IP地址创建会话。
当用户尝试到目的IP地址192.168.10.10进行基于TCP的会话(如HTTP、HTTPS)时,源IP地址会被转换为IP池地址或中央NAT策略中定义的地址。
如果用户试图向192.168.10.10发送任何ICMP或基于UDP的流量,该怎么办?源地址是否会转换为中央NAT策略中定义的IP池?
由于中央SNAT策略不匹配,FortiGate不应用NAT。如果用户尝试将基于TCP的流量转移到另一个目的IP地址192.168.10.20,该怎么办?源地址是否转换为中央SNAT策略中定义的IP池?
同样,目的IP地址192.168.10.20不匹配中央NAT策略,因此FortiGate不应用NAT,使用原源IP创建防火墙会话。
在FortiGate上,通常选择防火墙策略中的VIP作为目的地址。
在FortiGate,你可以配置对于DNAT的DNAT和VIP。一旦配置了VIP,FortiGate就会在内核中自动创建一条规则,以允许发生DNAT。你不需要做任何额外的配置。
你是否失去了为特定VIP和服务定义防火墙策略的粒度?
不,你没有。如果有多个WAN-to-internal策略和多个VIP,并且希望允许特定的VIP使用特定的服务,可以使用VIP映射IP的目的地址来定义每个防火墙策略,并选择允许或拒绝相应的服务。
当启用中央NAT时,VIP创建后立即生效,如果需要排除VIP,可以通过命令行将VIP的状态改为disable,方便在启用中央NAT时对VIP进行管理。
需要注意的是,如果同时配置了中央SNAT和中央DNAT (VIP),根据匹配中央SNAT策略的配置,出(内网到广域网)的流量将进行源NAT转换,如果没有匹配中央SNAT策略,则不会对出流量进行NAT转换。
在上图的示例中,创建了一条DNAT和VIP规则,将外部IP地址203.0.113.22映射到内部IP地址10.10.10.10。请记住,一旦你创建了一个VIP,就会在内核中创建一条规则来允许发生DNAT。
创建目的地址为all或映射IP地址/范围为10.10.10.10的wan1到internal防火墙策略。
源IP地址192.168.10.10试图通过TCP 80端口访问目的IP地址203.0.113.22。到VIP 203.0.113.22的连接被NAT到内部主机10.10.10.10,不需要任何额外的配置。
执行命令set central- NAT disable,可以在命令行中关闭中央NAT功能。如果中央NAT被关闭,使用中央SNAT和DNAT规则的防火墙策略会发生什么?
对于新的防火墙会话,传入到传出的防火墙策略不再执行SNAT。你必须手动编辑防火墙策略来启用NAT,并选择合适的IP池地址,这些IP池地址以前都绑定在中央SNAT策略上。
使用DNAT和VIP的出/入防火墙策略将不再执行DNAT。在中央NAT中,防火墙策略中的目的地址只是一个地址对象,而不是一个真正的VIP。如果DNAT表中没有配置中央NAT钩子,该地址对象将导致转发策略检查失败——流量被策略ID 0拒绝。
你必须编辑出入防火墙策略,并选择VIP作为目的地址。
答案:A
答案:B
现在你了解了中央NAT。接下来,你将了解会话助手。
通过展示理解会话助手如何工作的能力,你将能够使用会话助手来分析某些协议数据包中的数据,并允许这些协议通过FortiGate来传递流量。
一些应用层协议并不是完全独立于较低的层,如网络或传输层。例如,这些地址可能在应用层中重复。如果会话助手检测到这样的模式,它可能会更改应用程序头,或创建所需的辅助连接。
这方面的一个很好的例子是,一个应用程序同时拥有一个控制通道和一个数据或媒体通道,比如FTP。防火墙通常允许控制通道,并依赖会话助手来处理动态l数据或媒体传输连接。
当需要更高级的应用程序跟踪和控制时,可以使用ALG。VOIP配置文件是ALG的一个例子。
在上图显示的示例中,SIP SDP负载中的媒体接收地址被修改为反映转换后的IP地址。
注意,由于防火墙策略是有状态的,针孔是打开的,以允许应答流量,即使你没有显式地创建允许传入流量的防火墙策略。这个概念也用于其他一些协议,如IPsec的NAT-T。
答案:B
答案:B
现在你了解会话助手了。接下来,你将了解会话。
通过展示理解会话表如何跟踪会话信息的能力,你将能够有效地使用该信息来理解应用于流量的操作,如SNAT、DNAT和路由。
在GUl中可以查看会话页面,CLI界面的会话表中会显示更多的会话信息。
每个会话的防火墙连接性能和最大连接数由会话表表示。但是,如果FortiGate设备包含旨在在不加载CPU的情况下加速处理的安全处理器,那么会话表信息可能不是完全准确的,因为会话表反映了CPU已知和处理的内容。
FortiGate上的每个会话可以空闲一段有限的时间,这是由TTL定义的。当FortiGate检测到会话闲置一段时间后,达到TTL时,会话将从会话表中删除。
因为会话表可以在FortiGate上使用的RAM数量是有限的,所以调整会话TTL可以提高性能。有全局缺省计时器、会话状态计时器和防火墙对象中可配置的计时器。
diagnostic sys session命令树提供了会话列表的过滤、清除和显示选项。get system session list命令也用于查询会话的简要信息。
在查看会话表之前,首先构建一个过滤器。
要查看我们的测试连接,你可以过滤src 172.16.188.250和dport 443。
在上图显示的示例中,你可以看到会话TTL,它反映了FortiGate在不接收此会话的任何数据包的情况下,在从其表中删除该会话之前可以运行多长时间。
在这里,你可以看到应用于流量的路由和NAT动作。防火墙策略ID也会被跟踪。
TCP的porto_state是从它的状态机中获取的,你将在本课的稍后部分了解它。
在本课的前面,你了解了会话表包含一个数字,该数字表示连接的当前TCP状态。这些是TCP状态机的状态。它们是一位数的值,但proto_state总是显示为两位数。这是因为FortiGate是一个有状态防火墙,可以跟踪原始方向(客户端状态)和应答方向(服务器端状态)。如果长时间有太多的连接处于SYN状态,这表示SYN flood,可以使用DoS策略来缓解。
这个表和流图将第二个数字值与不同的TCP会话状态关联起来。例如,FortiGate接收到SYN报文时,第二位数字为2。如果收到SYN/ACK报文,则为3。三次握手后,状态值变为1。
当一个会话被双方关闭时,FortiGate会将它在会话表中多保存几秒钟,以允许任何无序的报文在FIN/ACK报文之后到达。这是状态值5。
虽然UDP是一种面向消息的、无状态的协议,但它本身并不需要像TCP那样确认双向连接,因此没有连接状态。然而,FortiGate会话表使用proto state=字段跟踪单向UDP作为状态0,双向UDP作为状态1。
当FortiGate接收到第一个数据包时,它创建该表项并将状态设置为0。如果目的地应答,FortiGate将状态标志更新为1,以完成余下的会话。
值得注意的是,ICMP(如ping和traceroute)没有协议状态,它将始终显示proto_state = 00。
答案:A
现在你了解会话了,接下来,你将了解最佳实践和NAT故障排除。
通过展示使用流量日志、诊断命令、VIP过滤器和NAT实现最佳实践的能力,你应该能够监视和排除常见的NAT问题,并成功地在你的网络中实现NAT。
由于没有可用的端口,FortiGate无法为新建会话分配进行NAT转换的端口,导致NAT端口耗尽。当NAT端口耗尽发生时,FortiGate会通过上图显示的日志通知管理员,并且是严重的。
为了解决NAT端口耗尽的问题,你必须采取以下措施之一:
● 创建一个IP池,它有一个以上的外部IP绑定到它(因此它在它们之间负载平衡)
● 减少需要NAT的会话数量
要接收像这样重要的日志,你必须确保启用了必要的日志记录。在FortiGate GUI上,单击日志&报告 > 日志设置,检查默认设置,即日志记录到磁盘或内存,是否被激活。
NAT端口耗尽也被diagnose system session stat命令的冲突计数器的增加所强调。
你可以通过每IP整形器中的连接配额来控制并发的TCP和UDP连接。整形器允许并发的TCP和UDP会话的最大数目是0 ~ 2097000。零意味着没有限制。只能在流量整形器的CLI配置中选择0。
也可以对固定端口范围IP池的端口配额进行控制。为每个用户分配的端口数量从32到60416,其中0表示默认。
你可以使用diagnose firewall ippool-all list命令,列出所有已配置的NAT IP池及其NAT IP范围和类型。
diagnose firewall ippool-all stats 显示所有IP池的统计信息。
stats命令提供如下数据和信息:
● 每个IP池的NAT会话
● 每个IP池的TCP会话总数
● 每个IP池的UDP会话总数
● 每个IP池的其他会话(非TCP和非UDP)总数
你还可以使用IP池的名称筛选特定IP池的输出。
服务选项已添加到VIP对象。带服务的虚拟IP是一种更灵活的虚拟IP模式。该模式允许用户将服务定义为单个端口号的映射关系。
这种配置允许多个流量源使用多个服务连接到一台计算机的复杂场景,同时需要源NAT和目的NAT的组合,而不需要将大量的VIP捆绑到VIP组中。
在上图所示的例子中,TCP端口8090、8091和8092被映射到一个内部的web服务器,TCP端口80。这允许远程连接与防火墙后面的服务器通信。
一旦你将上图显示的虚拟IP配置应用到防火墙策略,如果用户从外部网络访问203.0.113.10:8090,FortiGate将其映射到内部网络的10.0.1.10:80。类似地,用户通过外部网络访问203.0.113.10:8091或203.0.113.10:8092,FortiGate也将其映射到内部网络的10.0.1.10:80。
具有不同服务的VIP被认为是不重叠的。
在实现NAT时,请使用以下最佳实践:
避免配置错误的IP池范围:
● 请仔细检查每个IP池的起始IP和结束IP。
● 请确保该IP池不能与FortiGate接口或直连网络中的任何主机的IP地址重叠。
● 如果你有内部和外部用户访问相同的服务器,使用分割DNS为内部用户提供内部IP,这样他们就不必使用面向外部的VIP。
除非应用程序需要,否则不要为入站流量配置NAT规则。例如,如果对入站SMTP流量有匹配的NAT规则,则SMTP服务器可能充当一个开放中继。
从中央NAT模式切换到防火墙策略NAT模式或从防火墙策略NAT模式切换到中央NAT模式时,需要规划一个维护窗口。NAT模式之间的切换可能会导致网络中断。
答案:A
恭喜你!你已经学完了这一课。现在你将回顾你在这一课中涉及的目标。
上图展示了你在这节课中涉及的目标。
通过掌握本课所涉及的目标,你了解了如何理解和配置NAT,以便能够在你的网络中使用它。