PR

SNMP エージェント セットアップ パート1

FreeBSD
記事内に広告が含まれています。

SNMP versions

前回は個別データベースを共有サーバに移動させるところをご紹介しました。今回はモニタリングの目玉である SNMP を少しだけ書いてみたいと思います。SNMP はクライアントサーバの方式で使用できるプロトコルで、クライアント側を SNMP エージェント、サーバ側を SNMP マネージャと呼ぶことが一般的です。普通のクライアント/サーバではなく、サーバからクライアントに対して問い合わせを行い、極端な例だと、SNMP マネージャで SNMP エージェントも動いていて、SNMP マネージャが自身の状況を自身の SNMP エージェントから取得することもできます。SNMP とは ( Simple Network Management Protocol ) の略です。Network Management となっていますが、別にネットワーク機器に限ったことはなく、サーバーでも構いません。何なら、プリンタなどでも基本的な使い方は同じです。ですので、ネットワーク越しにというイメージであっていると思います。SNMP のバージョンは大きく3種類あり、ご多分に漏れず、RFC となっています。それぞれ、SNMP V1SNMP V2cSNMP V3 などとなっています。それぞれの大きな特徴として、SNMP V1 と SNMP V2c は基本的には同じです。V1 は 32bit カウンタしかサポートされないのですが、V2c は 64bit カウンタがサポートされています。これによって高速なネットワークインターフェースの情報が正確になります。この辺りの RFC に問題点が書かれています。一番面白いところだけを抜き出すと、10Mbps イーサネットインターフェースで最大のトラフィックを送受信していると、32bit カウンタは 57 分で 0 に戻ってきます。16 Mbps の Token Ring で 36 分、T3 回線で 12 分、FDDI で 5.7 分 など。この RFC 自身が 1997 年のものなので、現在だとどこでも見る 1Gbps イーサネットや 10G 回線などだと1回の測定サイクル ( 通常 5 分 ) で何回 0 に戻ったかわからなくなります。では、SNMP V2c と V3 の違いはというと、基本的には同じなのですが、 V2c に加えて認証と暗号化、正当性確認を行うことができます。例えばこんな場面を想像してください。リモートのオフィスに ISP から 1G インターネット回線用にルータが置かれています。このルータの状況を SNMP でモニタリングしたい場合はどうでしょう?回線速度が 1G なので、32bit カウンタしかサポートされていない SNMP V1 は使うことができません。できても正確とは言えません。では SNMP V2 はどうか?丸裸の SNMP トラフィックがインターネットを流れてゆきます。インターネット上の誰かにトラフィックを覗かれる可能性があります。そうなると、SNMP V3 が必要となります。

とまぁ、ざっと SNMP に関して書いてみましたが、SNMP の ‘S’ は Simple から来ているのですが、実際は簡単どころか複雑で奥が深いプロトコルなので、ネット検索していただくと山のように情報を得ることができます。今回ご紹介したいと思っている Cacti や Zabbix は、この SNMP を使用して、リモートのデバイスから情報を取得し、その状況を把握したり、トラブルをレポートしたり、やろうと思えば自動で問題点を修復させることもできるようにできるツールです。SNMP 自身を論じることはせず、あくまで Cacti や Zabbix を動かすことに主眼を置いて書いてゆきたいと思います。

SNMP マネージャである Cacti や Zabbix を触る前に、SNMP エージェントの準備をしてゆきましょう。手元にある機材で SNMP をしゃべるのは、今この記事を書いている Windows、ESXi で動いている FreeBSD、そして、FreeBSD を動かしている ESXi 自身、常時動いているわけではありませんが、某メーカーさんのインクジェットプリンタ、そして、Cisco 2960G スイッチなどがあります。一番見てみたい ISP ルータは SNMP をサポートしていません 🙁 それぞれ動くようにしていってみましょう。

SNMP agent

まず、FreeBSD ですが、ベース OS では bsnmpd が使用できます。ですので、これを使えるようにすればよいのですが、問題は Zabbix にしろ、Cacti にしろ、インストールするともれなく net-snmp がポーツやパッケージからインストールされます。

ですので、net-snmp をベースにしてお話を進めてゆきたいと思います。とりあえず /usr/ports/net-mgmt ディレクトリで snmp 関係をリストしてみると、こんな感じになります。よく耳にするのは UCD SNMP や NET SNMP です。今回は大人の事情で NET-SNMP を使用します。

インストールが完了すると、こんな感じになります。

少しスクロールアップして出力されたメッセージを確認します。

いくつかの変数を /etc/rc.conf に定義して snmpd を制御します。指示通りに定義するのですが、最初の snmpd_enable 以外は起動スクリプトに定義されています。つまり、変数が定義されていなければ、デフォルトの変数を使用するか、ハードコードの値を使用して起動をかけます。ですので、オプションがデフォルトでよいのであれば snmpd_enable のみの定義で OK です。SNMP traps は今回は使用せず、別の機会に書いてみたいと思います。起動してみます。

プロセスが起動していることと、udp ポート 161 がオープンしていることを確認しましょう。ですが、以前の記事の mariadb が IPv6 で動かない件同様、snmpd もデフォルトは IPv4 しか使用しないようになっています。ですので、まず最初に IPv6 でも動くようにしてみましょう。man snmpd として見てゆくと、LISTENNING ADDRESSES セクションがあります。ここにデフォルトは udp であると書かれています。ですので、デフォルトでないものはどこかで指定して使えるようにしないといけません。それが udp6 ( udpv6 or udpipv6 なども同じ意味 ) となるようです。これを指定して起動してやります。

失礼しました。他の物を指定すると、デフォルトがデフォルトでなくなるようです。ということで、IPv4 と IPv6 両方指定して再起動します。

snmpd.conf

うまくいったようです。IPv4 と IPv6 の UDP 161 がオープンしています。次に設定ファイルを見てゆきましょう。man snmpd.conf を見ると、FILES セクションに /usr/local/etc/snmp/snmpd.conf がデフォルトの設定ファイルロケーションであると書かれています。設定ファイルで使えるオプションに何があるのかは snmpd -H でフルリストが表示されるということです。中には snmpd -H を実行して設定ファイルを作るのをあきらめた人がいるのではないでしょうか 🙂 まぁ、オプションはたくさんありますが、安心してください 🙂 このファイルを作る手助けをしてくれるコマンドも用意されています。”snmpconf -g basic_setup” を実行してみましょう。基本的な snmpd.conf ファイルを作ってくれるそうです。基本ファイルを作って、必要に応じてオプションを調整してゆくことにしましょう。まず snmpd に system MIB の情報を送り返してくれるようにします。ロケーションやコンタクト情報を入力します。

次にアクセスコントロールを設定しますか?はい、してほしいです。

SNMP V3 の read+write ユーザが必要ですか?不要です。read-only ユーザのみが必要です。今回の目的は SNMP を使用してのモニタリングなので、必要なのは read-only のユーザだけです。同じことが SNMP V2c や V1 にも言えます。read-write ユーザやコミュニティは可能な限り作らないようにしましょう。ただし、SNMP を用いてシステム管理を行う場合も少なからずあると思います。そのような場合は何ができるようになっているべきかを明確にして、それ以外は制限されている read-write ユーザやコミュニティとしましょう。

同じことを SNMP V2c/V1 に定義しますか?不要です。read-only のコミュニティ文字列を “VeryStrictSecureString” とします。そして、192.168.0.0/24 からのみアクセスできるようにします。

SNMP トラップを送出するようにしますか?不要です。この SNMP Trap ですが、スイッチなどのインターフェースの up/down が発生したときにスイッチから送出したりするようにすることがあります。例えば、スイッチに NAS がつながっていて、これがダウンすると困るような場合、つながっているポートに trap を送るようにしておき、trap を受け取ったら何の問題なのかを人にわかりやすく変換してメールなどで管理者へ送り付けるようなことができます。一番先頭のスクリーンショットに snmptt とありますが、これなどはそのいい例です。trap を受け取って、受け取った trap により何を行うかを定義できます。

カレントディレクトリに snmpd.conf ファイルができているはずです。しかも、カレントディレクトリは /usr/local/etc/snmp なので、そのまま snmpd のオプションに変更なくこの設定ファイルを使用してくれます。では、snmpd を再起動してみましょう。

snmpwalk

そして、この snmpd に対して問い合わせをしてみます。コマンドラインから問い合わせをするコマンドに snmpwalk があります。これを使います。ネットワーク越しが明確になるように pokemon さんでも net-snmp をコンパイル、インストールしておきましたので、そちらから試してみます。

ん?何か間違った?ログを見てみます。

アドレスかホスト名の指定をチョンボしているようです。snmpd.conf を眺めてみます。

ありました 🙁 修正して、再起動してみます。

さて、期待通りに動くでしょうか?

よさげです 🙂 あくまで基本的な部分が動いたということなので、何をモニタしたいかにより追加の設定は必要になると思います。ということで、他の FreeBSD でも net-snmp をコンパイルして、今作った snmpd.conf をコピーして snmpd を起動します。ここで1つ実験していて行き詰まったことを書きます。SNMP V3 では read-write できるユーザが少なくとも一人必要になります。例えば SNMP V3 のユーザを作るのは、snmpd.conf にユーザを作成するコマンドを記述して snmpd を再起動すれば OK なのですが、削除は read-write できるユーザを使用して行う必要があります。ですので、通常使用するのは read-only のユーザで、ユーザ削除など snmpd.conf の編集でできない設定変更を行う場合は read-write ユーザを使用して行います。実験の結果、このようにするのがお勧めと思われます。ユーザの権限として2種類あります。rouser と rwuser で、それぞれ読み出しのみのユーザと、読み書き可能なユーザです。それぞれに3種類のユーザの種類があります。認証と暗号化のいずれも不要なユーザ。認証のみ必要なユーザ、認証も暗号化も必要なユーザ。

snmp v3 consideration

noAuthNoPriv の SNMP V3 ユーザはイマイチ使用する価値は見当たりません。SNMP V2c のコミュニティをユーザ名にしたら全く同じ動きをします。それなら設定が簡単な SNMP V2c を使った方がよいと思います。AuthNoPriv の SNMP V3 ユーザもユーザ名を余分に指定するだけで基本的には SNMP V2c と同程度ようです。ただ、パスワードは一方向のハッシュ関数で変換されて送られるので、V2c のコミュニティの様に同じテキストがネットワーク上を飛び交うことはありません。ですので、AuthPriv の rouser で通常使用して、設定を変えるなどの管理を行うときに AuthPriv の rwuser で行うというのが全て暗号化されるのでセキュリティ上最もよさそうです。ですので、それぞれのユーザを作ります。まず、それらのユーザを /usr/local/etc/snmp/snmpd.conf に定義して snmpd を再起動します。実験のためにユーザごとに md5 や sha また des や aes を使っています。どれも一方向のハッシュ関数なのですが、より強力な sha と aes の組み合わせがお勧めとなっています。

そして、もう一つの snmpd.conf ファイルを編集して、変わったところを見てみます。このファイルは snmpd が勝手に作成するファイルです。消しても勝手に作られます。

createuser コマンドで指定したユーザが作られています。

隠しファイルの方には素のテキストを使わずにユーザが作成されています。特に rwuser はユーザ名もわかりません。それだけ危険なのでしょうか。最後に、/var/net-snmp/snmpd.conf にユーザが作成されたら、/usr/local/etc/snmp/snmpd.conf の createuser 文は削除しておきましょう。何のために隠しファイルにわからないようにユーザが作られたのか分からなくなります 🙂 この状態で snmpd を再起動しても隠しファイルのユーザが消えることはありません。何なら、隠しファイルを削除して再起動しても同じファイルが湧いて出てきます 🙂 最後に IPv6 に関して少しだけ追記しておきます。net-snmp を IPv6 で使用するとすると、/etc/rc.conf にオプションの追加が必要でした。マニュアルを読み進めると、snmpd.conf 内で設定できることがわかりました。udp:161 と udp6:161 を /etc/rc.conf から削除して /usr/local/etc/snmp/snmpd.conf に記述します。加えて IPv4 と同様 IP アドレスによるアクセスコントロールも追加しておきました。こんな感じです。agentAddress と rocommunity6 で IPv6 アドレスの制限を加えます。そして、snmpd_flags を /etc/rc.conf から削除して snmpd を再起動します。

これで全ての FreeBSD で基本的な SNMP 問い合わせに応じるようになったと思います。他の機材の snmp エージェントセットアップも一気に書こうと思ったのですが、記事のボリュームが大きくなりすぎそうなので、今回は FreeBSD の net-snmp のみの記事とします。

以下広告


コメント