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配置管理作為舉例,對功能邏輯和頁面設計進行簡要的說明,其他品牌或型別的網路裝置配置管理只是細節實現上的差異。
- 怎麼從網路裝置上獲取到必要的配置資料,視平臺、裝置功能各異,一般也會有推、拉、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表
- 屬性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表中相應的記錄屬性中去。
下面是實現這段處理邏輯的程式碼示例:
web平臺NatRule表資料管理邏輯
表記錄資料中有一個"deleted"屬性,生產環境中刪除的配置記錄,在該表中只會將資料記錄的屬性置為True,並不會真的刪除,可以留作操作審計用途。平臺在web頁面上可以瀏覽到的記錄均是該屬性值為False的記錄。
WEB管理頁面效果展示
至此,我們的演示告一段落。
小結
在我們的實際工作中,通過防火牆裝置實現的功能遠不止一項NAT配置,像VPN的使用,專線的接入,訪問策略的配置,都會存在高效地管理配置資訊的需求,同時也要避免因為查詢一項網路配置資訊,就要登入到生產環境的網路裝置上去的行為。
如果有必要的話,我們也完全可以把部分頻繁發生的標準配置變更工作,直接整合到WEB管理平臺中去實現,最大限度地迴避因人工登入網路裝置,手動修改配置的行為所帶來的潛在風險。必竟,不是每一個網路工程師都是一個合格的網路工程師。再者說,即便是一個合格的網路工程師,也有偶爾犯迷糊的時候嘛。