はじめに
Advent Calendar 3日目に続き、Batfishを使ったネットワーク機器の設定の妥当性確認を行います。
参考:Advent Calendar 3日目 - Batfishを使ったネットワーク設定情報の抽出と妥当性確認
今回は、interfaceProperties
クラスでインターフェース設定を抽出し、コンプライアンスポリシー「使用中のインターフェースでDescriptionが設定されていること」が守られているかチェックしてみたいと思います。
チェック対象のConfigファイル
ノードhqborder2
(Cisco1812J)のRunning Configファイルを対象にチェックを行います。
ご参考までに、インターフェース関連の設定を抜き出したものをアップしておきます。
interface Tunnel1
description << To brborder2 >>
bandwidth 100
ip address 10.1.1.9 255.255.255.252
delay 10
tunnel source Loopback0
tunnel destination 1.1.1.2
!
interface Loopback0
ip address 1.1.1.1 255.255.255.255
!
interface FastEthernet0
description << To PE Router >>
ip address 10.1.1.5 255.255.255.252
duplex auto
speed auto
!
interface FastEthernet1
description << border2 - dist1 Segment >>
ip address 192.168.200.9 255.255.255.252
speed 100
full-duplex
!
interface BRI0
no ip address
encapsulation hdlc
shutdown
!
interface FastEthernet2
description << To hqdist2 Fa0/2 >>
switchport access vlan 203
duplex full
speed 100
!
interface FastEthernet3
shutdown
!
interface FastEthernet4
shutdown
!
interface FastEthernet5
shutdown
!
interface FastEthernet6
shutdown
!
interface FastEthernet7
shutdown
!
interface FastEthernet8
shutdown
!
interface FastEthernet9
shutdown
!
interface Vlan1
no ip address
shutdown
!
interface Vlan203
description << border2 - dist2 Segment >>
ip address 192.168.200.13 255.255.255.252
コンプライアンスチェック(1/2) - インターフェース設定情報の抽出
まず、前回同様Pybatfishのインポート、チェック対象Configの格納先指定と読み込みを行います。
ここで、interfaceProperties
クラスを使い、試しにノードhqborder2
(Cisco1812J)のインターフェースTunnel1
の設定情報を抽出してみます。
出力内容を見ると、例えばActive
プロパティで開放(True)/閉塞(False)、Description
プロパティでDescriptionの内容、Primary_Address
プロパティでIPアドレス設定が表示されています。VLAN、EtherChannel、HSRP、VRRP、OSPF、ACL関連もあります。また、設定されていないプロパティはNoneやFalseといった形で表示されています。
ちなみに、他のインターフェースでも表示されるプロパティ一覧は同じです。
コンプライアンスチェック(2/2) - インターフェースDescription設定の妥当性確認
ノードhqborder2
のインターフェースを一つづつ取り出し、以下2段階の条件分岐で、コンプライアンス判定を行います。
① Active
プロパティがTrue
(開放状態)か
② Description
プロパティがNone
ではないか
問題があるのは、①がTrue
で②がFalse
のパターンなので、この時"NG"が出力されるようにします。それ以外はもともと閉塞状態か、設定が入っている状態ですので"OK"と表示されるようにします。
出力結果を見ると、1番目のインターフェースLoopback0
がNG判定となっています。
上記のRunning Configを見ると、確かにDescriptionが抜けています。そのため以下の通りConfig修正を行います。
interface Loopback0
description << Loopback >>
Configファイルを変更した場合、再度読み込みを行う必要があります。
チェックを実行すると、今度はすべてOKとなりました。めでたしめでたし
今回作成したコードはGistにも置いています。
https://gist.github.com/Tachashi/b4018363b8b66173119a215b84af38b6