textfsm 案例分享

颜天高佑發表於2024-04-20

由於安全需要,需要定期對接入層交換機配置進行合規檢查,避免不規範配置存在的漏洞給公司網路帶來安全風險。

如下案例是透過textfsm 提取交換機介面的配置資訊,進一步進行檢查准入配置是否開啟:

1、首先看介面下的配置

interface GigabitEthernet1/0/7
 description user_0001
 switchport access vlan 192
 switchport mode access
 authentication event server dead action reinitialize vlan 192
 authentication event server alive action reinitialize
 authentication port-control auto
 authentication periodic
 authentication timer reauthenticate server
 authentication timer restart 36000
 mab eap
 dot1x pae authenticator
 dot1x timeout tx-period 5
 dot1x max-req 1
 dot1x max-reauth-req 1
 spanning-tree portfast edge
!

需要提取的資訊已經用藍色背景標註了,其中有介面名稱,介面描述(可選),介面接入VLAN,介面模式,准入配置,埠生成樹模式;其中介面名稱,在交換機的配置檔案中會有多種介面,比如vlan/vlanif,loopback,null 和鏈路聚合等情況,需要透過正規表示式的關鍵字進行過濾。

2、注意配置格式:

介面資料應該類似:{介面:(介面描述,介面接入VLAN,介面模式,准入配置,埠生成樹模式)},向下查詢的內容均屬於該介面,直到發現有“!”。

重點在於提前記錄這個介面,待查詢完資料後,再進行下一個介面的資料匹配。

3、配置模板

這個模板正常地開始提取資料的點是在檢測到

IntfaceName加介面名稱的行時,然後進入Interface狀態進行具體屬性的匹配和提取。在Start狀態下使用變數${IntfaceName}正確地設定了進入Interface狀態的條件。
 1 Value IntfaceName (\S+Ethernet+\S+)
 2 Value Interface_mode (\S+)
 3 Value VLAN_id (\d+)
 4 Value STPmode (\S+)
 5 Value Desc (\S+)
 6 Value dot1x_cfg (\S+)
 7 Value AdminState (shut+\S+)
 8 
 9 Start
10  ^interface ${IntfaceName} -> IntfaceName
11 
12 IntfaceName
13  ^\sdescription ${Desc} 
14  ^\sswitchport access vlan ${VLAN_id}
15  ^\sswitchport mode ${Interface_mode} 
16  ^\s+${AdminState}
17  ^\sdot1x pae ${dot1x_cfg} 
18  ^\sspanning-tree ${STPmode} 
19  ^! -> Record Start
20  #發現“!”後,記錄以上匹配到的內容,並開始進行下一個查詢。

相關文章