Zabbix4.4 ネットワークディスカバリでFortigate,Ciscoを自動検出する(前編)

zabbixzabbix,自動化

ネットワークディスカバリとは

Zabbixで予めネットワークディスカバリの設定を行うことで、特定のネットワークに接続されたホストをZabbixが自動検出する機能です。検出だけでは何もできないので、実際は「アクション」という機能を併用し、検出+監視ホストへの自動登録や監視設定を自動割り当てをします
※公式の概要は下記から参照いただけます。

■Zabbix公式サイト
https://www.zabbix.com/documentation/2.2/jp/manual/discovery/network_discovery

検出の仕組みは、Zabbixが指定したネットワークに対して任意のプロトコルで定期的にポーリングを行い、そのポーリングに対して予め設定した内容の結果であれば検出完了です。

例えば、ネットワーク機器の場合はZabbixが指定したネットワークセグメントやレンジ内のIPアドレスに対してホスト名を取得するSNMPポーリングを行わせるとします。IPアドレスはインクリメントし続けます。
次に、SNMPポーリングでホスト名を返してきたIPアドレスがあればそれを検出したホストと見なします。なお、厳密にはSNMPポーリングで返ってきた値に対して設定した条件に合致すれば検出したと見なします。様々な条件で検出させることが可能ですが、例えば、ホスト名を取得するSNMPポーリングであれば、「l3sw」という文字がホスト名に入っていたら検出する、と言ったようにすることが可能です。
なお、SNMP以外にエージェント型のZabbix Agentや、HTTP等のプロトコルでにも対応しています。サーバを検出対象とする場合はZabbix Agentやプロトコルを条件にすることが一般的です。

以降で、実際にネットワーク機器を用意しネットワークディスカバリを使い自動的にホストの検知をさせます。
また、アクションを使い、検知からの「ホスト登録」「テンプレートの割り当て」と言った一連の作業までします。

なお、長くなるので、前編を「監視される側のネットワーク機器設定」後編を「監視する側のZabbix設定」の二回に分けます。

検出される側の設定(Cisco,Fortigate)

検出対象機器について

まず、本記事で検出対象とする機器を下記とします。

メーカー機器OS台数
FortinetFortiGate 60Dv6.0.91台
CiscoCSR1000VIOS 15.5(3)S66台

今回はFortigateとCiscoです。Ciscoは6台です。検出するプロトコルにSNMPを使用します。SNMPで取得した情報に基づいてアクションを設定します。なお、アクションというのはZabbixがホストを検出した後に様々な動作を自動で割り当てることができます。例えば、検出→Eメールで管理者に通知、とか、検出→テンプレートを割り当て自動監視させる、などができます。※後編で再度説明します。

SNMPの有効化

まず、各機器でSNMPの有効化を行います。

・Fortinet FortiGate 60D

config system snmp sysinfo
    set status enable
end
config system snmp community
    edit 1
        set name "public"
        config hosts
            edit 1
                set ip 192.168.0.61 255.255.255.0
            next
        end
    next
end

・Cisco CSR1000V

snmp-server community public RO

以上でSNMPの設定が完了しました。なお、いずれもZabbixからのSNMPポーリングに応答できる最低限の設定です。本番環境であればセキュリティの観点からACL設定やSNMPバージョンの指定をすることが一般的です。今回は検証なので割愛します。
次に、ZabbixサーバからSNMP GETを行い、目的の値を取得できるか確認します。確認にはsnmpwalkコマンドを使用します。Zabbixサーバにsnmpwalkがインストールされていない場合はyumでインストールしてください。

# yum -y install net-snmp-utils

Zabbixサーバから、それぞれの機器にsnmpwalkで値を取得します。

 <取得するOID>
  ・sysName = 1.3.6.1.2.1.1.5
  ・entPhysicalDescr.1 = 1.3.6.1.2.1.47.1.1.1.1.2.1 ※Fortigateに使用するOID
  ・sysDescr =1.3.6.1.2.1.1.1 ※Ciscoに使用するOID


 <snmpwalkコマンド>
  # snmpwalk [snmp バージョン] -c [コミュニティ名] [監視対象の管理IPアドレス] [OID]

・「FortiGate 60D (v6.0.9)」に対してsnmpwalk

# snmpwalk -v2c -c public 192.168.0.254 1.3.6.1.2.1.1.5
SNMPv2-MIB::sysName.0 = STRING: FGT60D

# snmpwalk -v2c -c public 192.168.0.254 1.3.6.1.2.1.47.1.1.1.1.2.1
SNMPv2-SMI::mib-2.47.1.1.1.1.2.1 = STRING: "Fortinet FGT_60D, HW Serial#: *****"

※*****はユニークなシリアル番号なので伏せています。

・「Cisco CSR1000V」

# snmpwalk -v2c -c public 192.168.1.101 1.3.6.1.2.1.1.5
SNMPv2-MIB::sysName.0 = STRING: CSR1000v-01.local

# snmpwalk -v2c -c public 192.168.1.101 1.3.6.1.2.1.1.1
SNMPv2-MIB::sysDescr.0 = STRING: Cisco IOS Software, CSR1000V Software (X86_64_LINUX_IOSD-UNIVERSALK9-M), Version 15.5(3)S6, RELEASE SOFTWARE (fc3)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2017 by Cisco Systems, Inc.
Compiled Mon 24-Jul-17 20:01 by mcpre

上記のようにホスト名と機器情報の値が返ってこれば問題なく設定できています。なお、値が返ってこない場合は設定が間違っている可能性のほかに、経路上のACLでDenyされている可能性が考えられます。その場合はUDP162番が許可されているか確認ください。また、ルーティングが設定されているか、Zabbixサーバ側のfirewalldやSELinuxが悪さをしていないか、等も確認ください。

SNMPでホスト名と機器情報を取得する理由

snmpwalkで確認したホスト名と機器情報のOIDは後のZabbix設定で使用するOIDです。なぜホスト名や機器情報を取得するのかというと、それぞれ目的が違います。

まずホスト名を取得するsysNameですが、Zabbixの仕様上、後に設定する「アクション」で自動ホスト登録をすると、表示上のホスト名を、ホストのIPアドレスを逆引きした結果を設定します。逆引きに失敗するとIPアドレスを表示上のホスト名とします(※1)。DNSでPTRレコードを設定していいればよいのですが実際の環境で各ネットワーク機器を登録することは滅多に無いと思います。そこで、SNMPポーリングで直接ホスト名を取得し、その結果を表示上のホスト名にすることを目的にしています。

※1 Zabbix公式サイト 「ホスト作成」項を参照
https://www.zabbix.com/documentation/2.2/jp/manual/discovery/network_discovery

次に機器情報を取得するentPhysicalDescr.1やsysDescrですが、Zabbixではホストグループという複数のホストをグループ化する機能があります。グループ化のメリットは一括適用・確認にあります。
今回、ホストグループをFortigate、CiscoのIOSの二種類とします。
やり方の詳細は後編で説明しますが、それぞれのホストグループを作成し、機器情報のSNMPポーリングで返ってきた値を参照し、Fortigate機器であればFortigateのホストグループに割り当て、IOS機器であればIOSのホストグループに割り当てるようにする設定をします。

以上で、監視されるホスト側の設定が完了です。次回、Zabbix側の設定と動作確認を行います。