SNMPを使って監視をする場合、現在でもv1やv2cを使うことが多い。SNMP v1やv2cは、ほとんどの機器で対応がされていることや、コミュニティ名のみ設定が完了するといったシンプルな面で現在も根強く使われているものと想定される。
しかし、SNMP v2c以前のバージョンでは通信が暗号化されないなどの脆弱な要素もある。SNMP v3を使えば、ユーザ名、認証パスワード、暗号化パスワードを設定することができるようになっており、ユーザ単位での認証と通信暗号化ができるようになっている。
※なお、SNMP v3では通信暗号化の機能を「プライバシー」と呼ぶ。
今回、ZabbixのSNMP Trap受信時に使用する「snmptrapd」にて、SNMP v3のTrap受信設定を行うための手順を記載する。SNMP v3 Trap送信側としては、ESXiを利用することにする。
なお、Zabbixではsnmptrapdで受信したTrapをsnmpttにて変換を行い監視する仕組みとなるが、snmpttやZabbix本体の設定変更は特に不要であることを確認している。
環境
- SNMP v3 Trap受信側: Zabbix 5.0 / snmptrapd
- SNMP v3 Trap送信側 : ESXi 6,7
SNMP v3 Trap送信設定 (ESXi)
1. Engine IDの設定
SNMP v3を利用する場合、Trap送信元を一意に識別するためのEngine IDを指定する。機器によっては自動生成されるIDとなり、手動での設定は不要となる場合が多い。ESXiの場合も自動生成がされるが、私の環境ではEngine IDが重複したことから、手動で設定することにした。
ESXiのSNMP v3 Trapの設定は、すべてCLIにて行う。ESXiにSSHでログインしたのち、以下コマンドでEngine IDを設定する。Engine IDは5~32 文字の16進文字列であれば、任意で設定して問題ない。
# esxcli system snmp set --engineid 800000000000192168001001
2. SNMP v3の認証・暗号化プロトコルを指定
SNMP v3では認証に使用するプロトコルと、暗号化に使用するプロトコルをそれぞれ設定することができる。
認証プロトコルはMD5またはSHAを選択することができるが、具体的には以下プロトコルとなる。
※RFC 3414やRFC3826より確認。
- HMAC-MD5-96
- HMAC-SHA-96
暗号化プロトコルは当初CBC-DESのみ使用可能だったようだが、機能拡張がされており、AESによる暗号化にも対応している。
- CBC-DES
- CFB128-AES-128
なお、RFCとしては上記2種類がサポートされる状況はあるが、暗号化強度が弱いことから、独自にAES256などに対応するパターンもあるようだ。当然だが、SNMP v3 Trap送信側と受信側双方で同じ暗号化方式に対応している必要がある。
ESXiの場合は、RFC準拠のSHA1とAES128の一択となるため、以下の通り設定を行う。
# esxcli system snmp set --authentication SHA1
# esxcli system snmp set --privacy AES128
3. SNMP v3のユーザ、パスワード設定
認証パスワードと暗号化パスワードを以下の通り設定する。
- 認証パスワード : v3authPass
- 暗号化パスワード : v3privPass
ESXiの場合パスワードをそのまま指定ができないため、以下コマンドでハッシュ化した文字列を取得する。
# esxcli system snmp hash --auth-hash v3authPass --priv-hash v3privPass --raw-secret
Authhash: af248a5ff20f816a70121031ba4e9fd69a44b6e5
Privhash: fcec9a30a5454d50755efeee8f171cceaa9db702
ハッシュ値を確認したら、以下の構文で設定を行う。
esxcli system snmp set -u [ユーザ名]/[認証パスワードのハッシュ]/[暗号化パスワードのハッシュ]/priv
設定例は以下となる。
# esxcli system snmp set -u trapuser/ce534f0992ccea99c435360c52f25c3ea550a933/6fa4e7b290552b6c7c88112fdf3fc1e56e54948b/priv
4. SNMP v3 Trapの送信設定
Trap送信先を指定する。構文は以下の通り
esxcli system snmp set --v3targets [Trap送信先]@162/[ユーザ名]/priv/trap
設定例は以下となる。
# esxcli system snmp set --v3targets 192.168.1.2@162/trapuser/priv/trap
5. SNMP有効化と設定確認
最後にSNMP有効化と設定確認を行う。
# esxcli system snmp set --enable true
# esxcli system snmp get
Authentication: SHA1
Communities: public
Enable: true ←★trueであること
Engineid: 800000000000192168001001
Hwsrc: indications
Largestorage: true
Loglevel: info
Notraps:
Port: 161
Privacy: AES128
Remoteusers:
Syscontact:
Syslocation:
Targets:
Users: trapuser/ce534f0992ccea99c435360c52f25c3ea550a933/6fa4e7b290552b6c7c88112fdf3fc1e56e54948b/priv
V3targets: 192.168.11.24@162 trapuser priv trap
以上でESXiにおけるSNMP v3 Trapの送信設定は完了となる。
SNMP v3 Trap受信設定 (snmptrapd)
1. snmptrapd.confを設定
snmptrapdの設定はSNMP v2と同様、/etc/snmp/snmptrapd.conf
に設定追加を行う。
createUser -e 0x[Engine ID] [ユーザ名] SHA [認証パスワード] AES [暗号化パスワード]
authUser log,execute,net [ユーザ名]
設定例は以下の通り。先ほど設定したESXiと同一のEngine ID、ユーザ名、認証パスワード、暗号化パスワードを設定する。
# cat /etc/snmp/snmptrapd.conf
/usr/bin/bin/my_great_script cold
createUser -e 0x800000000000192168001001 trapuser SHA v3authPass AES v3privPass
authUser log,execute,net trapuser
authCommunity log,execute,net public
traphandle default /usr/sbin/snmptthandler
2. snmptrapdを再起動
設定反映のためsnmptrapdを再起動する。注意事項として、設定反映のためにはなぜか2回再起動が必要となるので注意する。
# systemctl restart snmptrapd
# systemctl restart snmptrapd
実際の設定は/var/lib/net-snmp/snmptrapd.conf
に記載される。念のため、設定が反映されていることを確認しておこう。usmUser
から始まる行が追加されていれば問題ない。
# cat /var/lib/net-snmp/snmptrapd.conf | grep usmUser
usmUser 1 3 0x800000000000192168001001 "trapuser" "trapuser" NULL .1.3.6.1.6.3.10.1.1.3 0xaf248a5ff20f816a70121031ba4e9fd69a44b6e5 .1.3.6.1.6.3.10.1.2.4 0xfcec9a30a5454d50755efeee8f171cce 0x
3. SNMP v3 Trap受信確認
最後にSNMP v3 Trapを受信できることを確認する。ESXiからは以下コマンドにてテストTrapの送信が可能となる。
# esxcli system snmp test
Comments: There is 1 target configured, send warmStart requested, test completed normally.
snmptrapdでログが受信したかどうかは/var/log/messages
を確認すればよい。
# tail -1 /var/log/messages
Sep 4 17:26:17 localhost snmptrapd[29984]: 2021-09-04 17:26:17 <UNKNOWN> [UDP: [192.168.1.1]:26522->[192.168.1.2]:162]:#012.1.3.6.1.2.1.1.3.0 = Timeticks: (120893100) 13 days, 23:48:51.00#011.1.3.6.1.6.3.1.1.4.1.0 = OID: .1.3.6.1.6.3.1.1.5.2
参考までにZabbixの管理画面でも監視状況を確認したところ、問題なくSNMP v3のテストTrapの監視ができていることが確認できた。
【参考】snmptrapdの設定削除
snmptrapdの設定追加後、不要になったTrap受信設定を削除したい場合、/etc/snmp/snmptrapd.conf
の設定を削除するだけでは、設定削除されない。したがって、直接/var/lib/net-snmp/snmptrapd.conf
から不要な設定を削除する。
なお、サービスを停止してから設定削除を行う必要があるので注意すること。もしサービス起動状態で設定削除を行っても、サービス再起動をすると設定が戻ってしまう。
# vi /etc/snmp/snmptrapd.conf ←★事前に設定を削除
# systemctl stop snmptrapd ←★サービスを停止
# sed -ie '/^usmUser.*/d' /var/lib/net-snmp/snmptrapd.conf ←★usmUserで始まる行をすべて削除
# systemctl start snmptrapd ←★サービス起動
# systemctl restart snmptrapd ←★設定反映のためサービス再起動
0 件のコメント:
コメントを投稿