DEVOPS 运维开发系列七:防火墙NAT配置信息的集中式管理与展示

背景说明

在工作中我们经常会需要使用防火墙设备配置各种的NAT映射,比如一对一NAT、端口转发NAT,用于满足各种产品应用不同的互联网IP地址和端口使用需求。如果是使用了公有云或私有云,同样也需要使用到类似NAT网关或云路由器的服务,结果一样是会有很多的IP地址映射和端口转发关系的配置数据。
起初我们是使用一个Excel表格来记录并维护这些NAT配置数据,在业务量较小时确实是简单、有效的解决办法。只是随着业务发展扩大到了十几处数据中心后,面对几十个防火墙设备上的成百上千条配置数据,使用Excel的办法已经变得难以为继了。因为每天都有一些配置在发生变化,还经常需要查询一下现有配置记录,以前制订的配置变更管理流程和操作规范很给得到严格地执行,表格中的数据记录越来越像是一份不完整且更不准确的“历史记录”了。
面对这些挑战,我们的指导思想是要尽量得让生产环境中的各种资产和配置信息能自动或半自动地填充进来,而不要再依赖于系统管理员或网络管理员的人力劳动实现。即,要想办法通过数据抓取、同步、逻辑关联把大部分、甚至全部的资产与配置信息管理工作都完成掉,不留或尽量少留给管理员必须完成的工作量,最好是只需要对未定配置点击一下确认按钮。
与此同时,也要减少因为查询一个地址或端口的NAT配置详情,就要登录到生产环境网络设备上去的不必要行为。

需求分析

NAT网络设备类型

近年来,使用混合云环境的企业越来越多。在一个企业内部,规模或大或小,可能同时在使用着IDC数据中心、私有云以及公有云的服务,多个环境间有时还要通过专线或vpn实现网络的连通。因此,我们至少会遇到以下几类常见的可以提供NAT功能的网络设备:

  • 硬件防火墙设备,如juniper或华为的防火墙产品
  • 云路由器
  • 云NAT网关

NAT配置需求

由于目前IPv4地址资源的稀缺,大部分的业务还是通过NAT端口转发来对外提供服务的,少量应用服务会因为有特殊的服务要求而配置独占的公网IP地址。

  • 一对一NAT映射,独占一个公网IP地址资源及该地址的全部端口资源
  • NAT端口转发,复用一个公网IP资源,仅占有特定的一个或几个转发端口资源

配置信息管理需求

  • 在面对网络资源、IP资源和端口资源使用量的疯涨,需要有效且高效地管理这些网络配置信息;
  • 需要有信息化的系统来管理这些配置信息;
  • 尽量由程序定时地自动地采集和填充、更新这些配置信息;
  • 需要由管理员对新增或变更的配置信息记录做一个确认的操作,填充必要的备注描述信息;
  • 提供信息查询和分类浏览功能,便于管理员随时检索使用;
  • 我们的业务服务横跨了IDC、公有云以及私有云多个环境,需要提供一个统一的NAT配置信息的管理视图;

功能概要设计

我们这里将会以juniper硬件防火墙设备的NAT配置管理作为举例,对功能逻辑和页面设计进行简要的说明,其他品牌或类型的网络设备配置管理只是细节实现上的差异。

NAT配置管理功能

  • 怎么从网络设备上获取到必要的配置数据,视平台、设备功能各异,一般也会有推、拉、API等不同的方法,这个需要在保证信息安全和通信安全的情况下,选择适用的一种方案。
  • 是采用监控配置变更并采取响应措施的方式,还是被动的定时采集配置信息方式,需要视自己对配置信息管理的要求而定,并不是最实时性地、最主动性的,就一定是你当前的最优解决方案,需要兼顾可靠性、难易程序、成本以及性能等因素。

一段Juniper防火墙的NAT配置样例

set security nat static rule-set untrust-trust rule 123_123_123_115-192_168_20_2 match destination-address 123.123.123.115/32
set security nat static rule-set untrust-trust rule 123_123_123_115-192_168_20_2 then static-nat prefix 192.168.20.2/32
set security nat static rule-set untrust-trust rule 123_123_123_120_10022-192_168_40_2_22 match destination-address 123.123.123.120/32
set security nat static rule-set untrust-trust rule 123_123_123_120_10022-192_168_40_2_22 match destination-port 11122
set security nat static rule-set untrust-trust rule 123_123_123_120_10022-192_168_40_2_22 then static-nat prefix 192.168.40.2/32
set security nat static rule-set untrust-trust rule 123_123_123_120_10022-192_168_40_2_22 then static-nat prefix mapped-port 22

set security policies from-zone untrust to-zone trust policy any_192_168_20_2 match source-address any
set security policies from-zone untrust to-zone trust policy any_192_168_20_2 match destination-address 192.168.20.2
set security policies from-zone untrust to-zone trust policy any_192_168_20_2 match application 192_168_20_2
set security policies from-zone untrust to-zone trust policy any_192_168_20_2 then permit
set security policies from-zone untrust to-zone trust policy any-192_168_40_2 match source-address any
set security policies from-zone untrust to-zone trust policy any-192_168_40_2 match destination-address 192.168.40.2
set security policies from-zone untrust to-zone trust policy any-192_168_40_2 match application 192_168_40_2
set security policies from-zone untrust to-zone trust policy any-192_168_40_2 then permit

set applications application tcp-1801 protocol tcp
set applications application tcp-1801 source-port 0-65535
set applications application tcp-1801 destination-port 1801
set applications application tcp-1000-1024 protocol tcp
set applications application tcp-1000-1024 source-port 0-65535
set applications application tcp-1000-1024 destination-port 1000-1024
set applications application tcp-22 protocol tcp
set applications application tcp-22 source-port 0-65535
set applications application tcp-22 destination-port 22

set applications application-set 192_168_20_2 application tcp-1801
set applications application-set 192_168_20_2 application tcp-1000-1024
set applications application-set 192_168_40_2 application tcp-22
  • 以上是使用到的公网和私网IP地址用于举例,并不是真实系统中的地址,且是从防火墙配置信息中过滤出的一部分NAT配置直接相关的信息,便于大家理解。
  • 第一段为nat rule的规则定义,这里的1-2行定义了一个一对一NAT的IP地址映射关系;3-6行定义了一个NAT端口转发的配置信息,从配置信息中就可以看出每行配置的作用。
  • 第二段为nat policy的安全策略定义,可以看到在使用上两种类型的NAT安全策略配置方法是一致的,均需要指定源、目标、匹配的application以及采取什么样的行为。
  • 第三段为application应用,定义源与目的具体的端口或端口范围、协议类型。
  • 第四段为application-set应用集,当需要为NAT的地址放行多个端口的访问许可时,可以把一组application打包为一个application-set使用。
  • 以上四段的配置内容,是存在关联关系的,它们共同实现了一个最终的安全可控的NAT功能。

库表建模及数据解析

NatRule表

NatRule表设计

  • 属性port_mapping,在一对一NAT类型中该属性中填写的是放行的端口列表信息;在NAT端口转发类型中,该属性中填写的是公网端口->私网端口的映射关系列表信息。

配置文件数据解析分为以下几个步骤

解析配置文件中的基础信息

向NatRule表写入"public_ip, target_ip, type, bakfile_name, confirm"等字段的信息,由(public_ip, target_ip)唯一确定一条数据记录;如果是端口转发NAT类型,则会同时向"port_mapping"中写入端口转发信息。
程序解析nat配置规则并封装成以下的数据格式
一份防火墙配置文件中的NAT规则首先是被解析为一个名为rule_list的列表,以下为部分示例数据:

[{'bakfile_name': u'123.123.123.123-juniper.txt', 'tsnpmp': u'22', 'mda': u'123.123.123.120/32', 'nat_type': 2, 'rule_name': u'123_123_123_120_10022-192_168_40_2_22', 'mdp': u'11122', 'tsnp': u'192.168.40.2/32'}, {'bakfile_name': u'123.123.123.123-juniper.txt', 'mda': u'123.123.123.115/32', 'nat_type': 1, 'rule_name': u'123_123_123_115-192_168_20_2', 'tsnp': u'192.168.20.2/32'},......]
  • 列表中每一项内容都是关于一个NAT配置rule的信息
  • 从中取名为tsnp的变量值可得到NAT中使用到的Target IP地址,一般是一个私网IP
  • mda,即match destination-address,代表公网ip地址
  • mdp,即match destination-port。代表端口映射使用的公网ip的端口号
  • tsnp,即then static-nat prefix,代表映射到的私网ip地址
  • tsnpmp,即then static-nat prefix mapped-port,代表映射到的私网ip的端口号

维护生产环境设备上已经删除的配置记录

对生产环境设备上已经删除的配置记录,在NatRule表中将该记录的"deleted"属性置为True,以保证不会产生垃圾,同时保留被删除的配置记录备查。

解析配置文件中的一对一NAT映射类型的端口放行信息

针对一对一NAT类型的配置,通过NAT规则->安全policy->匹配的application集->包含的子application的关联关系,获取到为其放行的端口信息,更新到NatRule表中相应的记录属性中去。

下面是实现这段处理逻辑的代码示例:
一对一NAT数据入库

web平台NatRule表数据管理逻辑

表记录数据中有一个"deleted"属性,生产环境中删除的配置记录,在该表中只会将数据记录的属性置为True,并不会真的删除,可以留作操作审计用途。平台在web页面上可以浏览到的记录均是该属性值为False的记录。

WEB管理页面效果展示

查看NAT

至此,我们的演示告一段落。

小结

在我们的实际工作中,通过防火墙设备实现的功能远不止一项NAT配置,像VPN的使用,专线的接入,访问策略的配置,都会存在高效地管理配置信息的需求,同时也要避免因为查询一项网络配置信息,就要登录到生产环境的网络设备上去的行为。
如果有必要的话,我们也完全可以把部分频繁发生的标准配置变更工作,直接集成到WEB管理平台中去实现,最大限度地回避因人工登录网络设备,手动修改配置的行为所带来的潜在风险。必竟,不是每一个网络工程师都是一个合格的网络工程师。再者说,即便是一个合格的网络工程师,也有偶尔犯迷糊的时候嘛。

猜你喜欢

转载自blog.csdn.net/watermelonbig/article/details/83187251