pfSense book之NAT(一)

NAT(一)

  • 端口转发
  • 1:1 NAT
  • NAT和防火墙处理的顺序
  • NAT回流

在其最常见的用法中,网络地址转换(NAT)允许使用IPv4的多台计算机使用单个公用IPv4地址连接到Internet。 pfSense可以实现这些简单的部署,但也可以容纳具有多个公共IP地址的网络所需的更高级和复杂的NAT配置。

NAT配置有两个方向:入站和出站。 出站NAT将离开本地网络的的流量转换到远程网络(例如Internet)。 入站NAT是指从远程网络进入本地网络的流量。 最常见的入站NAT类型是端口转发,这也是许多管理员最熟悉的类型。

注意:一般来说,除网络前缀转换(NPt)外,pfSense不支持IPv6上的NAT。 有关IPv6和NAT的主题还有进一步的讨论。 除非另有说明,本章只讨论使用IPv4的NAT。

默认的NAT配置

本节介绍pfSense上的默认NAT配置。 自动生成可以确定的最合适的NAT配置。 在某些环境中,此配置可能不适用,并且pfSense完全可以从Web界面更改它。 这与许多其他开源防火墙发行版形成了鲜明对比,这些发行版不支持所有通常只有小型简单网络所需的功能。

默认出站NAT配置

在具有LAN和WAN的典型双接口pfSense设置中,默认NAT配置会自动将互联网绑定流量转换为WAN IP地址。 当配置多个WAN接口时,离开任何WAN接口的流量将自动转换为正在使用的WAN接口的地址。

为IKE(IPsec的一部分)自动配置静态端口。

为了检测用于NAT的WAN类型接口,如果pfSense具有静态IP地址,pfSense会查找在接口配置中选择的网关,或者如果pfSense是动态类型(如PPPoE),则假定接口是WAN DHCP。

默认入站NAT配置

默认情况下,在WAN接口上从互联网上不允许任何内容进入。如果必须允许在Internet上启动的流量到达内部网络中的主机,则需要端口转发或1:1 NAT。这在接下来的部分中有介绍。

端口转发

端口转发允许访问内部网络设备上的特定端口、端口范围或协议。 之所以选择“端口转发”这个名称,是因为它是大多数人所理解的。 在其他产品中也称为“目标NAT”。 然而,“端口转发”是一个误导,因为除了TCP和UDP端口之外,端口转发规则还可以重定向GRE和ESP协议,并且可用于各种类型的流量重定向以及传统的端口转发。 这在托管服务器或使用需要来自Internet的入站连接的应用程序时最为常用。

端口转发风险

在默认配置中,pfSense不允许从互联网上的主机发起的任何流量。 这为任何扫描Internet寻找系统攻击的人提供了保护。 当存在端口转发规则时,pfSense将允许任何匹配相应防火墙规则的流量。 它不知道具有恶意有效载荷的数据包与良性数据包之间的区别。 如果连接符合防火墙规则,则允许进入。 目标系统必须使用基于主机的控件来保护通过防火墙允许的任何服务。

端口转发和本地服务

端口转发优先于防火墙本地运行的任何服务,例如Web界面,SSH等。 例如,这意味着如果允许使用TCP端口443上的HTTPS从WAN进行远程Web接口访问,则TCP 443的WAN端口将优先转发,并且Web接口将不再可以从WAN进行访问。 这不会影响其他接口上的访问,只会影响包含端口转发的接口。

端口转发和1:1 NAT

端口转发优先于1:1 NAT。 如果在一个外部IP地址上定义端口转发到主机,并且1:1 NAT条目也定义在相同的外部IP地址上,并将所有内容转发到不同的主机,则端口转发将保持活动状态并继续转发到原来的主机。

添加端口转发

端口转发在防火墙> NAT,端口转发选项卡上进行管理。此页面上的规则跟防火墙规则相同的方式进行管理。要开始添加端口转发条目,请单击添加按钮进入端口转发编辑页面。包括以下选项:

  • Disable:  可选择禁用此NAT端口转发。要取消激活规则,请选中此框。
  • No RDR (NOT):  否定此端口的含义,表示如果此规则匹配,则不应执行重定向。 大多数配置不会使用该字段。 这将用于覆盖转发操作,在某些情况下可能需要转发操作,以允许访问用于1:1 NAT的IP上的防火墙上的服务或其他类似的高级方案。
  • Interface:  端口转发的接口将处于活动状态。 在大多数情况下,这将是广域网。 对于其他广域网链接或本地重定向,这可能是不同的接口。 接口是防火墙上此端口转发流量进入的位置。
  • Protocol:  匹配传入流量的协议。 这必须设置为匹配正在转发的服务类型,无论是TCP、UDP还是其他可用选项。 正在转发的大多数常见服务将是TCP或UDP。 TCP / UDP选项通过单一规则将TCP和UDP一起转发。
  • Source:  这些选项默认隐藏在“高级”按钮后面,并设置为任何源。 源选项限制哪些源IP地址和端口可以访问此端口转发条目。 这些通常不是必需的。 如果必须可以从Internet上的任何位置访问端口转发,则源必须为任何位置。 对于受限访问服务,请在此处使用别名,以便只有有限的一组IP地址可以访问端口。 除非服务绝对需要特定的源端口,否则源端口范围必须保留,因为几乎所有客户端都将使用随机源端口。
  • Destination: 要转发的流量的IP地址最初是指定的。对于WAN上的端口转发,在大多数情况下,这是WAN地址。在有多个公有IP地址的情况下,它可能是WAN上的虚拟IP。
  • Destination port range: 流量的原始目标端口,在它被重定向到指定的目标主机之前从Internet进入。 如果转发单个端口,请在“From port”框中输入它,并将“To port ”端口框留为空白。 在这个组的下拉框中可以选择共同服务列表。 端口别名也可以用于转发一组服务。 如果在此使用别名,则必须使用相同的别名作为重定向目标端口。
  • Redirect target IP: 流量将被转发的IP地址,或技术上重定向的IP地址。 这里是别名,但别名只能包含一个地址。 如果别名包含多个地址,端口将交替地转发给每个主机,这不是大多数人想要的。 要将一个端口的负载平衡设置为多个内部服务器,请参阅服务器负载平衡。
  • Redirect target port: 转发端口范围的起始端口号。如果一系列端口被转发,例如19000-19100,因为端口数量必须一对一匹配,所以只指定本地起点。
  • 此字段允许在外部打开一个不同于内部主机正在侦听的端口。 例如,外部端口8888可以在内部服务器上转发到本地端口80以获取HTTP。 通用服务列表可从下拉框中选择。
  • 端口别名也可以用于转发一组服务。如果在此使用别名,则必须使用相同的别名作为目标端口范围。
  • Description: 与pfSense的其他部分一样,该字段可用于简短介绍端口转发的内容或存在原因。
  • No XML-RPC Sync:此选项仅在正在使用HA群集配置时才相关,否则应该跳过此选项。 在使用具有配置同步的HA群集时,选中此框将阻止将规则同步到群集的其他成员(请参阅高可用性)。 但是,通常所有规则都应该同步。 此选项仅在主节点上有效,它不会阻止规则在从节点上被覆盖。
  • NAT Reflection: 本章后面将更详细地介绍这个主题(NAT回流)。 此选项允许启用或禁用每个规则的回流来覆盖全局默认值。 NAT回流中将更详细地解释此字段中的选项。
  • Filter Rule Association: 这最后的选择是非常重要的。 端口转发条目仅定义哪些流量将被重定向,需要防火墙规则来通过该重定向传递任何流量。 默认情况下,选择添加关联的过滤器规则。 可用的选择是:
  •  None:如果选择此项,则不会创建防火墙规则。
  • Add associated filter rule:此选项创建一个链接到此NAT端口转发规则的防火墙规则。 对NAT规则所做的更改会自动更新到防火墙规则中。 这是大多数用例的最佳选择。 如果选择了此选项,则在保存规则后,会在此处放置一个链接,这会引导到相关的防火墙规则。
  • Add unassociated filter rule:此选项创建一个与此NAT端口分开的防火墙规则。 对NAT规则所做的更改必须在防火墙规则中手动更改。 如果必须在防火墙规则上设置其他选项或限制,而不是NAT规则,则这很有用。
  • Pass:此选项在NAT端口转发规则上使用特殊的pf关键字,使流量无需防火墙规则即可通过。 由于不存在单独的防火墙规则,因此符合此规则的任何流量都会转发到目标系统。注意:使用Pass规则只能在包含防火墙默认网关的接口上工作,因此它们无法与多WAN一起使用。
  • 点击保存
  • 点击应用更改

下图端口转发示例包含一个正确设置的端口转发编辑页面示例,用于将WAN上指定为WAN IP地址的HTTP入站转发到10.3.0.15的内部系统。

端口转发示例

点击保存后,端口转发列表再次显示,新创建的条目将出现在列表中,如下图所示。

端口转发列表

仔细检查防火墙规则, 如下图所示,该规则将显示允许流量进入正确端口的内部IP地址。

端口转发防火墙规则

自动生成的规则的来源应尽可能限制。 对于通常需要广泛访问的邮件和Web服务器等内容来说,这是不切实际的,但对于远程管理服务(例如SSH,RDP等),可能只有少数主机通过互联网访问这些服务器。 安全的做法是创建授权主机的别名,然后将源从任意更改为别名。 否则,服务器对整个互联网都是开放的。

如果一切看起来都正确,那么当从网络外部进行测试时,端口将会工作。如果出现问题,请参阅本章后面的端口转发故障排除。

跟踪端口转发的变化

防火墙时间戳会在创建或上次编辑时添加到端口转发条目中,以显示哪个用户创建了规则,以及编辑规则的最后一个人。 由关联的NAT规则自动创建的防火墙规则也会在关联的防火墙规则的创建时间戳上进行标记。

端口转发限制

每个可用的公共IP地址只能转发到一个内部主机。 例如,如果只有一个公共IP地址可用,则可以配置一个使用TCP端口80来提供Web流量的内部Web服务器。 任何其他服务器都必须使用备用端口(如8080)。如果五个可用公有IP地址配置为虚拟IP地址,则可以配置五个使用端口80的内部Web服务器。

这条规则有一个罕见但有时适用的例外情况。 如果某个特定的端口只能被转发到某个特定的内部主机,并且该端口可以被转发到另一个主机以获得其他源IP地址,这可以通过在端口转发条目中指定源地址来实现, 例如下图所示。

端口转发包含不同的来源示例

为了使WAN地址上的端口转发可以通过使用来自内部接口的各自的WAN IP地址访问,必须启用NAT回流,在后面的NAT回流章节中将对此进行介绍。 始终在不同的互联网连接上测试来自系统的端口转发,而不是从网络内部转发。 从3G / 4G移动设备进行测试是确认外部连接性的一种快捷方式。

使用UPnP或NAT-PMP服务进行自我配置

某些程序支持通用即插即用(UPnP)或NAT端口映射协议(NAT-PMP)自动配置NAT端口转发和防火墙规则。 但也会存在更多的安全问题,但在家庭网络中,好处通常超过任何潜在的问题。

带端口转发的流量重定向

端口转发的另一个用途是透明地重定向来自内部网络的流量。 指定LAN接口或其他内部接口的端口转发会将匹配转发的流量重定向到指定的目的地。 这通常用于将HTTP流量透明地代理到代理服务器,或将所有出站DNS重定向到一台服务器。

下图是一个配置示例,该配置会将所有进入LAN接口的HTTP流量重定向到主机10.3.0.10上的Squid(端口3128),但不会重定向来自实际的流量Squid代理本身。 它们必须在端口转发列表中按照正确的顺序排列:首先是否定规则,然后是重定向。

重定向端口转发(否定)示例

重定向端口转发示例

1:1NAT

参见pfSense book之1:1 NAT

NAT和防火墙处理的顺序

在配置NAT和防火墙规则时,了解防火墙和NAT的处理顺序非常重要。 基本的逻辑顺序见下图。 该图还描述了tcpdump绑定的位置,因为其作为故障排除工具的用途将在本书后面的数据包捕获中进行介绍。

NAT和防火墙处理的顺序

每个图层在典型配置中并不总是被击中,但是使用浮动规则或手动出站NAT或其他更复杂的配置可以在两个方向上击中每个图层。 该图仅涵盖入站和出站流量的基本情况。

从LAN到WAN的流量按照以下更详细的列表中的描述进行处理。 如果某种类型的规则不存在或不匹配,则会跳过它们。

  • 端口转发或LAN接口上的1:1 NAT(例如代理或DNS重定向)
  • 局域网接口的防火墙规则:LAN上的入站浮动规则,接口组规则包括局域网接口,局域网选项卡规则。
  • WAN上的1:1 NAT或出站NAT规则
  • 与WAN上出站匹配的浮动规则

在这种情况下,WAN和WAN选项卡防火墙规则中的端口转发不适用。

对于在WAN上启动的流量,顺序相同,但方向相反:

WAN接口上的端口转发或1:1 NAT(例如公共服务)

  • WAN接口的防火墙规则:WAN上的浮动规则入站,接口组的规则包括WAN接口,然后是WAN选项卡规则。
  • LAN上的1:1 NAT或出站NAT规则
  • 浮动规则,匹配LAN上出站

根据方向的不同,tcpdump始终是查看流量的第一件也是最后一件事。首先,在进行任何NAT和防火墙处理之前的传入接口上,并在出站接口上保留。它显示了传输线路上的内容。 (请参阅数据包捕获)

注意

有关防火墙规则处理顺序的更多信息,请参阅规则处理顺序。

推断到其他接口

上图和列表仅说明了基本的两个接口局域网和广域网部署。 在使用其他接口时,适用相同的规则。 两个内部接口之间的流量的行为与LAN到WAN流量的行为相同,但默认NAT规则不会在内部接口之间转换流量,所以NAT层在这些情况下不会执行任何操作。 如果存在与内部接口之间的流量相匹配的出站NAT规则,则它将如图所示应用。

NAT规则

在进入接口的路上,NAT在防火墙规则之前应用,因此如果目的地在途中被转换(例如,WAN上的端口转发或1:1 NAT),则防火墙规则必须匹配转换后的目的地。 在WAN上的端口转发典型情况下,这意味着该规则必须与LAN上目标私有IP地址的目标匹配。

例如,如果端口在WAN上向TCP端口80转发并带有自动添加的防火墙规则,则图端口转发至LAN主机的防火墙规则会显示WAN上生成的防火墙规则。 端口转发的内部IP地址为10.3.0.15。 无论是使用端口转发还是1:1 NAT,所有WAN接口上的防火墙规则都必须使用内部IP地址作为目的地。

端口转发到LAN主机的防火墙规则

出站接口的出站NAT在防火墙规则之前应用,因此在出站NAT或1:1 NAT转换后,接口上出站匹配的所有浮动规则必须与源匹配。

NAT 回流

NAT回流是指使用外部(通常为公共)IP地址从内部网络访问外部服务的能力,就像客户端在互联网上一样。 许多商业和开源防火墙根本不支持此功能。 在可能的情况下,拆分DNS是访问资源的首选方式,以便防火墙不涉及内部访问内部服务。 pfSense对NAT回流有很好的支持,虽然有些环境需要分离DNS基础结构来适应这种功能。在本部分的末尾介绍了分离DNS。

配置NAT回流

要启用全局NAT回流:

  • 导航到系统>高级设置,防火墙&NAT选项卡
  • 找到页面的网络地址转换部分,配置如下NAT回流选项:
  • 端口转发的NAT回流模式:对于端口转发,有三种可用的NAT回流模式选项,它们是:
  • Disable: NAT回流将不会执行,但它可以在每个规则上手动启用。
  • NAT + Proxy: 使用代理程序启用NAT回流将数据包发送到端口转发的目标。 这在用于与目标进行通信的接口和/或网关IP地址在加载规则时无法准确确定的设置中很有用。 与代理一起使用的回流规则不会针对大于500个端口的范围创建,并且不会用于所有端口转发之间总共1000个以上的端口。 此模式不适用于UDP,仅适用于TCP。 因为这是一个代理服务器,所以服务器所看到的流量的源地址就是最接近服务器的防火墙IP地址。
  • Pure NAT: 启用NAT回流只使用pf中的NAT规则将数据包定向到端口转发的目标。 它具有更好的可扩展性,但必须能够在加载规则时准确确定用于与目标进行通信的接口和网关IP地址。 对协议限制以外的端口数量没有固有的限制。 支持所有可用于端口转发的协议。 如果服务器与客户端位于同一子网上,则启用“自动出站NAT回流”选项将屏蔽流量来源,使其正确流回防火墙。
  • 回流超时: 此选项仅与NAT + Proxy模式相关,并控制NAT代理守护程序在关闭连接之前等待的时间。以秒为单位。
  • 为1:1 NAT启用NAT回流: 此选项允许内部网络上的客户端通过连接到1:1 NAT条目的外部IP地址来访问本地托管服务。 要完全激活该功能,请同时选中启用NAT回流1:1 NAT和启用自动出站NAT回流。 只有客户端和服务器位于同一子网时,后一选项才是必需的。
  • 为回流启用自动出站NAT:当启用时,此选项为1:1 NAT回流和Pure NAT模式NAT回流激活用于端口转发的额外NAT规则。 这些附加规则会掩盖客户端的源地址,以确保回复流量通过防火墙回流。 否则,客户端和服务器之间的连接将失败,因为服务器将使用其内部IP地址直接回复给客户端。 客户端将断开连接,因为它期望从公共IP地址得到应答。
  • 单击保存将激活新的NAT回流选项

NAT回流安全警告

NAT回流是一种***技术,因为它在没有必要时会通过防火墙循环流量。 由于pf允许适应这些场景的选项有限,因此pfSense的NAT + Proxy回流实施中存在一些限制。 端口范围大于500端口在NAT +Proxy模式下不能启用NAT回流,并且该模式也被有效地限制为仅与TCP一起工作。 如果客户端和服务器连接到防火墙的相同接口,则其他模式需要额外的NAT。 这个额外的NAT隐藏了客户端的源地址,使得流量似乎源自防火墙,因此可以正确建立连接。

分离DNS是适应大型端口范围和1:1 NAT的最佳方式。许多商业防火墙甚至需要维护分离DNS基础设施,并且通常不是问题。

分离DNS

NAT回流的一个优选替代方案是部署分离DNS基础架构。 分离DNS指的是DNS配置,其中对于给定主机名,公共Internet DNS解析为公共IP地址,并且内部网络上的DNS解析为内部私有IP地址。 解决这个问题的方法取决于组织的DNS基础设施的具体情况,但最终结果是一样的。 NAT回流不是必需的,因为主机名解析为网络内部的私有IP地址,客户端可以直接访问服务器。

分离DNS允许服务器查看真实的客户端IP地址,并且服务器和同一子网中的客户端之间的连接将直接进行,而不会不必要地涉及防火墙。唯一不能正确使用分离DNS的情况是外部和内部端口号不同。 使用分离DNS时,两个地方的端口号必须相同。

DNS解析器/转发器覆盖

如果pfSense充当内部主机的DNS服务器,则DNS解析器或DNS转发器中的主机覆盖可以提供分离DNS功能。

要将覆盖添加到DNS解析器:

  • 导航至服务> DNS解析器
  • 进入主机覆盖选项页面在主机覆盖下面点击图标添加。
  • 根据需要使用服务器的内部IP地址配置主机覆盖。下图显示了www.example.com的DNS分离示例。
  • 点击保存
  • 点击应用更改

为example.com添加DNS解析器覆盖

DNS转发器在这方面的功能完全相同。 如果启用DNS转发器而不是DNS解析器,请在其中添加覆盖。每个在防火墙后使用的主机名都需要覆盖。

内部DNS服务器

在内部网络(如Microsoft Active Directory)上使用单独的DNS服务器时,必须由DNS服务器管理员为网络内托管的所有域创建区域,以及这些域的所有其他记录(A,CNAME,MX等))。

在运行BIND DNS服务器的环境中,公共DNS与私有DNS位于同一台服务器上,BIND的视图功能用于内部主机的DNS解析不同于外部主机。 其他DNS服务器也可能支持类似的功能。

此条目发表在pfSense分类目录。将固定链接加入收藏夹。