|
||
|
SNMPを設定するSNMPはその性質上、専門家ならお世話になり、そしてその奥深さに知って物怖じします。SNMPのインストールそのものは簡単ですが、設定が面倒くさいイメージがあります。 どこのページを見ても大体大差のないことが説明してあります。 なにしろconfに書いてある例を採用することが多いので。 ・SNMPの概要 ・インストール ・snmp.confの記述 ・confの読み取り専用化 ・各セクションの意味 SNMPの概要SNMPは少数のマネージャと多数のエージェントに分かれます。マネージャは情報を収集(ポーリング)し、集計し、管理するシステムです。エージェントの設定を書き換えることも出来ます。 エージェントはマネージャに情報を収集され、時に自主的にマネージャへ連絡(トラップ)します。 マネージャの代表格と言えば、通信量やCPU使用率をグラフ化する「MRTG」です。 本項ではCentOSをSNMPエージェントとして設定をします。 エージェントは ・『誰から』なら、どこまで情報収集することを許すか ・緊急時は『誰へ』連絡をするか を設定します。 SNMPは情報を読み取るというその性質上、いつもセキュリティの問題を抱えます。 考える範囲は以下の通りです。 パスワードに相当する「コミュニティ名」 通常は読み取り用コミュニティ名にpublic、書き込み許可コミュニティ名にprivateがデフォルトで用意されています。もちろん、デフォルト値では推測されてしまいます。 そうでなくてもSNMPコミュニティ名は各種システムに共通の平文を入力する必要が多く、完全な隠ぺいが困難です。 許可IPアドレス制限 コミュニティ名に加え、そのコミュニティ名の使用を許可するIPアドレスセグメントを指定します。 マネージャが1台しかないのであれば、そのアドレスを一つだけ指定します。しかし今後、役割の違うマネージャが増えることも想定されます。その場合はアドレスを複数指定するか、セグメントで指定します。 読み取り専用・書き込み権限の設定 SNMPでは遠隔から情報変更(スイッチのポート閉塞、システムのシャットダウン)も可能です。これらを書き込み許可コミュニティと呼び、通常読み取り専用コミュニティ(public)とは別のコミュニティ名(private)を使用します。 設定変更が必要ないのであれば、SNMPは読み取り専用のみで運用します。 これで最悪パスワード等が悟られても、CPU使用率や転送量などステータス情報を「見られる」だけで実害はありません。 閲覧範囲 SNMPではIPアドレスセグメント、コミュニティ名、読み取りモードなどを指定するとき、同時にそのグループがシステムのどこまでを見て良いかを制限します。 これにより、特定システムはたとえばOS情報のみ、特定システムはハードウェア情報のみ、という風に情報を収集します。 マネージャシステムをよほど多層に構築しない限り、通常は全部許可することが多いでしょう。 これらの情報を設定することで「読み取り専用」権限を持った「コミュニティ名」を使用しても良い「IPアドレスセグメント」は「どこまで」見てもよいか、を定義します。 ややこしいですが、考えるのは最初の一回だけです。 一度決めてしまえば、後は同じ設定を使いまわすだけです。 なので、最初の一回に十分に頭をひねりましょう。 インストールSNMPのインストールはyumで簡単です。snmpwalkを使用するので、snmp-utilsも一緒に入れておきましょう。#yum install net-snmp #yum install net-snmp-utils snmpd.confの記述赤字はコメントアウト。青字が追加です。とりあえずセキュリティのための定義が入っているので、各デフォルト行はコメントアウトしておきましょう。 ぱっと見、snmpd.confは長いですがほとんどコメントなので落ち着いてみれば読み切れないほどではありません。 # sec.name source community #com2sec notConfigUser default public com2sec mynetwork1 192.168.1.0/24 public com2sec manager 192.168.2.100 private com2sec local localhost private #group notConfigGroup v1 notConfigUser #group notConfigGroup v2c notConfigUser group mynetwork_grp v1 mynetwork1 group mynetwork_grp v2c mynetwork1 group manager v1 local group manager v2c local group local_group v1 local group local_group v2c local #view systemview included .1.3.6.1.2.1.1 #view systemview included .1.3.6.1.2.1.25.1.1 view all included .1 80 #access notConfigGroup "" any noauth exact systemview none none access mynetwork_grp "" any noauth exact all none none access manager "" any noauth exact all all none access local_group "" any noauth exact all all none 記述したら、最後にsnmpdを再起動します。 #services snmpd restart 再起動後、動作を確認します。 snmpwalkというツールを使用します。 #snmpwalk -v 2c -c private 127.0.0.1 ずらっと情報が出力されれば、とりあえずローカルとしては動作してます。 confの読み取り専用化SNMPの設定ファイルはコミュニティ名が直接記述されているため、パーミッションを600として制限します。# chmod 600 /etc/snmp/snmpd.conf 各セクションの意味デフォルトのsnmpd.confを編集する場合、最低限記述するセクションは四つです。com2sec セキュリティ名。コミュニティ名とそこにアクセスできるアドレス範囲(とその名称)を定義します。 group グループ名。 view 取得を許可する情報の範囲 access グループに対するアクセス権 com2sec SNMPで情報取得する際のパスワードに相当するコミュニティ名と、それを使用しても良いネットワークを定義します。 後のgroup定義で使用します。 com2sec mynetwork1 192.168.1.0/24 public com2sec manager 192.168.2.100 private com2sec local 127.0.0.1 private 192.168.1.0のネットワークとホスト192.168.2.100であれば、コミュニティ名「public」を使用してアクセスすることができます。 ある程度信用できるローカルアドレスは「private」を使用してアクセスできます。 つまりコミュニティ名の使用は、ネットワーク単位に許可されます。 publicは読み取り専用コミュニティ名、privateは読み取り書き込みコミュニティ名のデフォルトの値です。 コミュニティ名はパスワードに相当するのですから、デフォルトの使用は避けるべきです。複雑なものにしましょう。 情報変更するようなマネージャがネットワーク内になければ、コミュニティ名は一種類で良いでしょう。 group 先ほど定義したセキュリティ定義(セグメント、コミュニティ名)にSNMPバージョン(v1、v2、v3)をくくりつけます。 後のaccess定義で使用します。 group mynetwork_grp v1 mynetwork1 group mynetwork_grp v2c mynetwork1 group manager v1 local group manager v2c local group local_group v1 local group local_group v2c local group local_group usm local 前述のセキュリティ定義にSNMPプロトコルバージョンを負荷しています。 v1はもちろんVer1、v2cはVer2を表し、usmはVer3を意味します。 とは言え、SNMPでVer3を実際に運用するのはちょっと専門的あるいは統率されたネットワークでしょう。 サーバ等通常のシステムならVer2、簡単なNW機器程度ならVer1までしょう。 グループ名にはMyRWGroup、MyROGroupのような名前をよく見かけます。RWはReadWrite、ROはReadOnlyの略です。 グループ名でその役割が判別できるので間違いが少ないでしょう。 view viewはセキュリティグループがどこまでSNMP情報(OID)を取得できるかを指定します。 後のaccess定義で使用します。 view all included .1 80 一番気を付けるのは「.1(ドットイチ)」です。 例えばAグループにはOS情報のみ、Bグループにはネットワーク情報のみ、といった風に使います。 このallという定義では、一番上の「.1」以降は全部含む(許可)するという意味です。 普通に構築するシステムなら「全部見せる」がメジャーでしょう。 OIDは「.1.3.6.1.4.1.2021」などのようにドットで区切られた値です。 includedは含む、つまり含む範囲を許可する、という意味です。 excludedは含まない、つまりその範囲を許可しない、という意味です。 最後の謎の80ですが、別にポート番号ではなく16進数のマスクです。 そう、80だから「1000 0000」となります。 サブネットマスクと同じ計算方法で考えれば、一桁目の「.1」以下の値については全て同属と考えます。 もし「.1.3.6.1」以降のみを含む定義をするとします。 OIDが4ケタですからマスクは「1111 0000」となります。なのでマスク値は「F0」となります。 view manage2 included .1.3.6.1 f0 マスクは省略しても動作します。 access accessは今まで定義したものを使用する、最後の定義です。 access mynetwork_grp "" any noauth exact all none none access manager "" any noauth exact all all none access local_group "" any noauth exact all all none なにやらややこしいですが、v1、v2を使用した場合「"" any noauth exact」は鉄板です。覚えておきましょう。 access mynetwork_grp "" any noauth exact all none none 赤字以外の部分で、太字のグループ名とview定義だけです。 エントリの文法は以下のようになっています access グループ コンテキスト モデル セキュリティレベル プレフィックス 読み取り 書き込み 通知 グループ(mynetwork) 定義したグループ名を指定します。つまりcom2secとgroupで設定した、IPアドレス範囲、コミュニティ名、SNMPプロトコルバージョンの定義です。 コンテキスト("") SNMP v3を使用する場合のみ、事前定義したコンテキストを指定します。複数のMIB実装から一意に指定するものです。v1、v2を使用している場合は空文字です。 モデル(any) 使用するSNMPのバージョンです。v1、v2c、usm、もしくは全てを示すanyを記述します。 セキュリティレベル(noauth) v3のときのみ指定できる認証設定です。v1、v2の場合はnoauthを指定します。 プレフィックス(exact) v3のときのみ指定する、コンテキストの一致条件。exactは厳密一致。v1、v2の場合はexactを指定します。 読み取り権限(all) 読み取りに使用する、事前定義したviewです。 書き込み権限(none) 書き込みに使用する、事前定義したview。無ければnoneを指定します。 通知対象(none) トラップ通知に使用する。事前定義したview定義。無ければnoneを指定します。 |
|