防火牆ACL配置自動化 - 配置采集


本篇目的是說明防火牆配置的采集方案,實際上適用於所有網絡設備,並且具體舉例時,也可能會用其他設備說明。

采集通過paramiko,采用invoke_shell模式

 

1,SSH登錄設備采集數據場景分類

通過SSH登錄設備,執行命令時,根據設備表現情況不同,分為“需要交互”和“無需交互”兩類。

“無需交互”:采集機單向推送命令后,監聽並接收對端設備發回的內容即可

“需要交互”:采集機推送命令后,需要等待對端設備發回的內容,收到特定內容后,再次發送其他命令

 

2,無需交互

所有思科設備,新版本華為防火牆,junper防火牆等均屬於“無需交互”

即采集配置命令時,只需要單向無腦推送。

對於常見的“More”確認,可以通過“取消分屏” 的命令,避免交互。

例如:華為(screen-length 0),思科IOS交換機/路由器(terminal length 0),思科防火牆(terminal pager 0),天融信防火牆(show nostop),juniper防火牆(set cli screen-length 0 )

以思科設備為例,采集機單向推送如下命令(假設enable密碼為cisco789),同時另起一個線程接收防火牆發回的信息,即可完成配置收集:

enable

cisco789

conf t

terminal pager 0

show run

exit

 

3,需要交互

需要交互的設備,根據交互的情況,又可以分為“簡單交互”和“復雜交互”

“簡單交互”: 推送某條命令后,需要等到對端回送某些特定字符串后,才能繼續推送下一條命令,這個”特定字符串“是肯定會出現的

”復雜交互“: 推送某條命令后,需要等到對端回送某些特定字符串后,返回的字符串出現次數,和出現情況是不可預估的

 

3.1,簡單交互

典型的“簡單交互”場景,是有些設備在退出時,需要有個確認

例如老版本的天融信防火牆,輸入exit后,需要等待如下字符串后再次輸入y:

Save system config?[Y/N]: 

新版本的天融信防火牆,輸入exit后,需要等待如下字符串后再次輸入y:

Save system config?[y/n]:

還有些設備,再保存save時,同樣會有回顯進行確認

 

3.2,復雜交互

復雜交互的典型場景,如:

1)不支持取消分屏的設備

老版本的華為防火牆,以及新版本的trx防火牆(沒看錯,trx牆更新后居然不支持show nostop)等

這些設備在采集時,會回送"---More----"之類的字符串,要求確認后,再回送后續配置,代碼中發送一個"\n"即可,但是這個“---More---”出現的次數是不可預估的

2)輸入命令后,回顯的內容不確定

例如思科光纖交換機,enhance模式,做完配置,需要等待幾秒再commit,如果等待時間不夠,可能會出現"...in progress"(大致)字符串,commit失敗

此時需要過幾秒再次發起commit

 

4,采集腳本設計

腳本采用paramiko

主線程負責發送命令

子線程負責接收設備回收的內容,回收內容保存在全局變量中(有交互的場景,需要主線程去讀取回收內容)

 

發送命令設計為字典列表,每個字典包含的key-value說明如下:

key:"cmd", value:需要推送的一組命令,多條命令以"\n"分割

key: "expect",  value:需要等待對端設備回送的內容,如果等不到就不執行后續的命令

key: "sleep", value:等待時間,發送完本組命令后,sleep x秒后,再發送后一組命令

 

對於簡單交互的場景,比如思科防火牆,不需要指定"expect"和“sleep”,直接無腦單向推送配置即可完成采集,例如

[{"cmd": "enable\ncisco789\nterminal pager 0\nshow run\nexit\n"}]

 

簡單交互的場景,比如天融信防火牆,退出時需要指定expect:

[

    {"cmd": "show nostop\nexit\n", "expect": "Save system config?[Y/N]: "},

    {"cmd": "y\n"}

]

 

用到sleep參數的,即發送完命令后需要等待幾秒再發下一條,映像中目前只有天融信防火牆(保存還是同步時),光交commit時

 

復雜交互的場景,單靠目前三個參數cmd, expect, sleep無法解決,只能在采集代碼中根據實際情況定制

例如可以在發送的一組命令中添加"special_handle"標志,主線程中根據標志進行定制開發,以新版本天融信防火牆為例,由於不支持分屏的防火牆,發送一組命令時:

{"cmd": "show\n", "special_handle": "trx_more"}

主線程可以設置獲取到"trx_more"時,去監聽接收內容,收到"---More---"后發送"\n"

保存配置時,可以去掉"---More---"

 

5,其他

有些設備回送的內容會自動換行,表現為在不該換行的地方插入換行\n,例如一條acl策略被自動分割,這樣做會影響后續解析。可以在invoke_shell中設置width避免。

但是新版本trx防火牆,不支持寬度設置(老版本支持),只能拿到配置后進行二次處理。

有時遇到過手動ssh登錄正常,腳本登錄報認證失敗,通過在connect()中,設置allow_agent=False, look_for_keys=False,問題解決。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM