配置包过滤防火墙和NAT

配置包过滤防火墙和NAT

防火墙规则

  • 包过滤防火墙, 必须给予一套说明匹配条件的指令来选择丢弃或者转发流量。现在配置一个路由器, 网络管理员通常配置一个或多个ACL,每个ACL包含一个规则列表, 其中每个规则通常包含模式匹配条件( pattern-matching criteria)及其对应的动作( action)。匹配条件通常允许规则表达网络层或传输层中的包字段值(例如, 源和目的地IP地址、端口号、ICMP类型字段等)以及方向(direction)的说明。方向模式采用基于方向的方式来匹配流量, 允许不同的规则集分别应用于传入与传出的流量。
  • 当一个包到达时, 在适当的ACL中按照顺序匹配其中的匹配条件。对于大多数的防火墙而言, 按照第一个匹配的规则采取动作。典型动作包括阻止或加速符合某项规则的流量, 还可以调整计数器或写一个日志条目。
  • 一个非常流行的用于构建防火墙的系统是包含在现代版本Linux中的iptables, 它是使用一个称为NetFilter的网络过滤功能来构建的。
  • iptables包含过滤表格(table)和过滤链(chain)的概念。一个表格包括许多预定义的链, 也可能包含0个或者多个用户自定义的链。三个预先定义的表格为: filter, nat和mangle,默认的filter表格用来处理基本的包过滤, 包括了预先定义的INPUT、 FORWARD和OUTPUT三条链。这些动作分别对应于:目的地是防火墙路由器本身运行程序的流量、路由时通过防火墙的流量,从该防火墙主机发出的流量。
  • 每条过滤链是一个规则列表, 每条规则包含匹配条件及其对应的动作。这个动作(也称为目标(target))可能是执行一条用户自定义的链或者执行如下预定义的动作:ACCEPT, DROP, QUEUE和RETURN,当一个数据包匹配上述之一的规则时, 便立即采取响应的动作, ACCEPT (DROP)是指数据包将被转发(丢弃), QUEUE是指数据包将被提交给一个用户程序处理, RETURN是指处理将在之前触发的一条链中继续, 形成了一种包过滤链子调用。

NAT规则

  • 在多数简单的路由器中, NAT能够配置为和防火墙一起工作。在基本的Windows系统中, NAT被称为互联网连接共享( Intemet Cormection Sharing, ICS), 在Linux中被称为IP伪装(IP masquerading)。

与NAT和防火墙的直接交互: UPnP,NAT-PMP和PCP

  • 在多数情况下, 一个客户系统希望或者需要和防火墙直接交互。例如, 一个防火墙需要为不同的服务配置或者再配置, 以保证针对特定端口的网络流量不会被丢弃(创建一个“小孔”)。
  • 目前已经开发了许多支持客户机和防火墙之间进行通信的协议。其中两个最为流行的是通用即插即用(Universal Plug and Play, UPnP)NAT端口映射协议( NAT Port Mapping Protocol, NAT-PMP)。
  • 通过采用UPnP, 被控制的设备通过第一个DHCP来配置IP地址, 如果DHCP不可用的话, 就采用动态链接——本地地址配置。接着, 简单服务发现协议(Simple Service Discovery Protocol, SSDP) [XIDS]向控制点(例如,客户机)宣布设备的存在, 同时允许控制点来查询设备的其他信息。
  • UPnP是一个包含NAT控制及其他不相关规范的广泛架构, 而NAT-PMP是另外一种方法, 它针对与NAT设备进行程序通信,NAT-PMP并没有采用发现过程, 这是由于被管理的设备通常就是可通过DHCP获取的默认网关,NAT-PMP使用UDP端口5351,NAT-PMP支持一个用于学习NAT外部地址和配置端口映射的请求/响应协议。它也支持一个基本的事件机制, 当NAT外部地址发生改变时能够通知监听者。

IPv4/lPv6共存和过渡中的NAT

  • 功能(例如, 实现完整的IPv4和IPv6协议栈)
  • 前用于支持IPv4和IPv6组合的两种主要方法是隧道和转换。隧道方法包括Teredo、双协议栈精简版(DS-Lite)IPv6快速部署(6rd)

双协议栈精简版

  • DS-Lite ( Dual Stack Lite,双协议栈精简版) 是一种希望在内部运行IPv6的服务提供者更容易过渡到IPv6 (同时支持传统的IPv4用户)的方法。从本质上讲, 它可以让供应商把重点放在部署一个可操作的IPv6核心网上, 还通过使用少数的IPv4地址为客户提供了IPv4和IPv6连接。
  • DS-Lite通过使用一个只有IPv6的架构使服务提供者能够支持IPv4和IPv6客户网络。通过在服务提供者边缘使用SPNAT, 能够最大限度地减少IPv4的使用。
  • 对于IPv4的访问, 每个客户使用一个特殊的“前”网关(在图中标记为“B4”)。一个B4设备提供了基本的IPv4服务(如DHCP服务, DNS代理等), 但也以多点到点的隧道方式封装了客户的IPv4流量, 并在“后”设备(图中标记为“AFTR(地址族转换路由器)”)处终止。
  • 这个AFTR设备为目标是IPv4互联网的流量执行了解封操作, 并为相反方向的流量执行封装操作,AFTR还执行了NAT, 并作为一种形式的SPNAT,更具体地说, AFTR可以利用客户隧道终端的标志信息来消除从IPv4互联网返回到AFTR的流量的二义性。这将允许多个客户使用相同的IPv4地址空间。通过利用DHCPv6中的一个AFTR-Name选项, 一个B4设备能够学习到它所对应的AFTR设备的名称。
  • 鉴于DS-Lite通过一个服务提供者的IPv6网络为客户提供了到IPv4的访问, 6rd的目标是通过一个服务提供者的IPv4网络为客户提供到IPv6的访问。本质上,它们使用类似的框架组件, 但却采取了相反的做法。然而, 6rd中从IPv6地址映射到相应的IPv4隧道端点(反之亦然)的计算,是通过一个无状态的地址映射算法完成的。框架中也使用了无状态地址转换, 用于IPv4和IPv6之间的全协议转换。

已转换的IPv4地址和可转换的IPv4地址

  • 内嵌IPv4的IPv6地址存在两种重要的类型, 称为已转换的IPv4地址(IPv4-converted address)和可转换的IPv4地址( IPv4-tranSlatable address)。可转换的IPv4地址是能够通过有状态的方式来确定一个IPv4地址的IPv6地址。
  • IPv4和IPv6地址之间的算法转换涉及前缀。这个前缀可能是一个知名前缀( WKP) 64:ff9b::/96或者另外一个为服务提供者所有并和转换器一起使用的特定于网络的前缀,WKP只用于表示常规的全局可路由的IPv4地址, 不能表示私有地址。
  • 当一个IPv4地址包含WKP前缀时, 包中作为转换结果(例如, 在IPv4头部中的TCP或者UDP校验和)的相关Internet校验和是不会受影响的。

无状态转换

  • 无状态的IP/ICMP转换( Stateless IP/ICMP Translation, SIIT)是指不采用状态表格进行IPv4和IPv6数据包转换的方法。转换中无须查找表格, 只需要使用一个可转换的IPv4地址及一个预定义的用于转换IP头部的计划。大部分情况下, IPv4选项是不需要转换的(被忽略), IPv6扩展头部也不需要转换(分片头部例外)。唯一的例外是未到期的IPv4源路由选项。如果存在这种选项, 数据包将被丢弃,并产生相应的ICMP差错报文。
  • 范围更广的IPv6地址空间不可能允许一个只有IPv4的主机访问IPv6互联网上的每一台主机。

有状态的转换

  • 在有状态的转换中, NAT64被用于支持只有IPv6的客户机与其他IPv4服务器进行通信。当许多重要的服务继续只用IPv4来提供时, 这将显得非常重要。
  • 由于IPv4地址空间的不足, 在IPv6到IPv4这个方向的转换利用了一个动态管理的IPv4地址池。这需要NAT64支持NAPT的功能, 据此多个不同的IPv6地址可能会映射到一个相同的IPv4地址上。

总结

  • 主要有两种类型的防火墙: 包过滤防火墙和代理防火墙。包过滤防火墙可进一步划分为有状态的和无状态的, 它们通常作为IP路由器。有状态的防火墙更加复杂, 能够支持更广泛的应用层协议(在一个数据包流中能够横跨多个数据包执行更为复杂的登录和过滤操作)。代理防火墙通常作为一种形式的应用层网关。对于这些防火墙, 每个应用层服务在防火墙上必须有自已的代理处理程序, 这些处理程序可以修改通过的流量,甚至是其中的数据部分。如SOCKS这类协议以标准化的方式支持代理防火墙。
  • NAT是一种机制, 使得大量的终端主机可以共享一个或多个全局路由的IP地址, NAT被广泛应用于上述目的, 但也可以和防火墙规则结合形成一个NAT/防火墙组合。在这种流行的配置中,位于NAT “背后”的主机允许发送流量到全球互联网, 但是仅允许针对传出流量的响应流量通过NAT返回。
  • NAT穿越涉及确定一套可用于支持通信的地址和端口号集合, 即使必须使用一个或多个NAT,STUN是确定地址的主力协议, TURN是一个特定的STUN用法, 通过一个通常位于互联网的经过特殊配置的TURN服务器来中继流量。通过使用一整套NAT穿越协议, 如ICE, 可以确定使用了哪些地址或者中继,ICE通过使用本地信息和由STUN和TURN确定的地址来确定一对通信端点之间所有可能的地址。然后为后续的通信选择“最好”的地址。
  • 如果在NAT后面的用户希望提供互联网服务, 就需要在NAT设备上配置端口转发。有些应用程序通过采用UPnP和NATPMP协议与NAT设备直接通信来支持配置。当被支持和启用时, 这将允许应用程序自动配置一个NAT端口转发和数据绑定, 而无须用户干预。
编辑于 2021-06-09 14:53