🪤

snmp の練習

2022/12/24に公開

本エントリについて

Dynagen、Dynamips、rsyslogd を使って、syslog 設定を練習します。
Dynagen、Dynamips の利用環境はすでに整っているものとします。

環境について

監視サーバから r1 に対してポーリングします。
また r1 から監視サーバに向けてトラップをあげます。

[監視サーバ] .1 (10.2.0.0/24) .254 f0/0 [r1]
Dynagen 設定ファイル抜粋
    [[ETHSW sw1]]
        1 = access 1
        3 = access 1 nio_tap:tap0
    [[ROUTER r1]]
        model = 3725
        f0/0 = sw1 1

関連パッケージインストール

監視サーバ側で、必要となるパッケージをインストールします。
snmpポーリングのテストのため snmp を、snmptrap の受信のテストのため snmptrapd を利用します。

$ sudo apt install -y snmp snmptrapd  

SNMPv1

旧来のコミュニティ名による制限だけのものです。

https://www.infraexpert.com/study/snmpz01.html
https://www.infraexpert.com/study/snmpz02.html

SNMPv2c については(いまのところ)割愛します。

コミュニティ名設定

Cisco デバイス側でコミュニティ名を設定します。

r1(config)#snmp-server community cisco ro

監視サーバ側から snmpget で、設定したコミュニティ名を用いてポーリングしてみます。

$ snmpget -v 1 10.2.0.254 -c cisco 1.3.6.1.2.1.2.1.0
iso.3.6.1.2.1.2.1.0 = INTEGER: 3

$ snmpget -v 1 10.2.0.254 -c cisco 1.3.6.1.2.1.2.2.1.2.1
iso.3.6.1.2.1.2.2.1.2.1 = STRING: "FastEthernet0/0"

同様に snmpwalk でポーリングしてみます。

$ snmpwalk -v 1 10.2.0.254 -c cisco 1.3.6.1.2.1.2.2.1.10
iso.3.6.1.2.1.2.2.1.10.1 = Counter32: 1609
iso.3.6.1.2.1.2.2.1.10.2 = Counter32: 0
iso.3.6.1.2.1.2.2.1.10.4 = Counter32: 0

$ snmpwalk -v 1 10.2.0.254 -c cisco 1.3.6.1.2.1.2.2.1.16
iso.3.6.1.2.1.2.2.1.16.1 = Counter32: 4091
iso.3.6.1.2.1.2.2.1.16.2 = Counter32: 2303
iso.3.6.1.2.1.2.2.1.16.4 = Counter32: 0

https://www.itmedia.co.jp/help/howto/linux/0007master/06/13.html

snmptrap

監視サーバ側でトラップを受信するため、snmptrapd の設定に、コミュニティ名を追加します。
設定変更したら、snmptrapd デーモンを再起動します。

$ sudo cp -pi /etc/snmp/snmptrapd.conf{,.000}
$ sudo vi /etc/snmp/snmptrapd.conf

$ diff -u /etc/snmp/snmptrapd.conf{,.000}
@@ -16,7 +16,6 @@
 #
 #authCommunity log,execute,net private 
 #authCommunity log,execute,net public
-authCommunity log cisco
 #
 ## send mail when get any events
 #traphandle default /usr/bin/traptoemail -s smtp.example.org foobar@example.org

$ sudo systemctl start snmptrapd.service
$ tail -f /var/log/syslog

Cisco デバイス側で snmptrap を送信する設定をします。

r1(config)#snmp-server host 10.2.0.1 traps version 1 cisco
r1(config)#snmp-server enable traps
% Cannot enable both sham-link state-change interface traps.
% New sham link interface trap not enabled.

設定時にメッセージがあがりますが、ここでは無視します。
https://community.cisco.com/t5/routing/snmp/td-p/1166942

Cisco デバイス側でトラップを上げてみます。

r1(config)#int fa0/1
r1(config-if)#shut
r1(config-if)#
Dec 24 05:11:29.139 JST: %LINK-5-CHANGED: Interface FastEthernet0/1, changed state to administratively down
Dec 24 05:11:30.139 JST: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to down

監視サーバのシスログにトラップメッセージが上がることを確認します。

$ tail -f /var/log/syslog | grep snmptrapd

Dec 24 05:11:27 ip-10-0-0-73 snmptrapd[1828]: 2022-12-24 05:11:27 ip-10-2-0-254.ap-northeast-1.compute.internal [10.2.0.254] (via UDP: [10.2.0.254]:61086->[10.2.0.1]:162) TRAP, SNMP v1, community cisco#012#011iso.3.6.1.2.1.14.16.2 Enterprise Specific Trap (16) Uptime: 0:45:10.72#012#011iso.3.6.1.2.1.14.1.1 = IpAddress: 10.2.1.253#011iso.3.6.1.2.1.14.7.1.1 = IpAddress: 10.2.1.253#011iso.3.6.1.2.1.14.7.1.2 = INTEGER: 0#011iso.3.6.1.2.1.14.7.1.12 = INTEGER: 7
Dec 24 05:11:27 ip-10-0-0-73 snmptrapd[1828]: 2022-12-24 05:11:27 ip-10-2-0-254.ap-northeast-1.compute.internal [10.2.0.254] (via UDP: [10.2.0.254]:61086->[10.2.0.1]:162) TRAP, SNMP v1, community cisco#012#011iso.3.6.1.2.1.14.16.2 Enterprise Specific Trap (16) Uptime: 0:45:10.72#012#011iso.3.6.1.2.1.14.1.1 = IpAddress: 10.2.1.253#011iso.3.6.1.2.1.14.7.1.1 = IpAddress: 10.2.1.253#011iso.3.6.1.2.1.14.7.1.2 = INTEGER: 0#011iso.3.6.1.2.1.14.7.1.12 = INTEGER: 1
Dec 24 05:11:27 ip-10-0-0-73 snmptrapd[1828]: 2022-12-24 05:11:27 ip-10-2-0-254.ap-northeast-1.compute.internal [10.2.0.254] (via UDP: [10.2.0.254]:61086->[10.2.0.1]:162) TRAP, SNMP v1, community cisco#012#011iso.3.6.1.2.1.14.16.2 Enterprise Specific Trap (12) Uptime: 0:45:11.22#012#011iso.3.6.1.2.1.14.1.1 = IpAddress: 10.2.1.253#011iso.3.6.1.2.1.14.4.1.1 = IpAddress: 0.0.0.0#011iso.3.6.1.2.1.14.4.1.2 = INTEGER: 1#011iso.3.6.1.2.1.14.4.1.3 = IpAddress: 10.2.1.253#011iso.3.6.1.2.1.14.4.1.4 = IpAddress: 10.2.1.253
Dec 24 05:11:30 ip-10-0-0-73 snmptrapd[1828]: 2022-12-24 05:11:30 ip-10-2-0-254.ap-northeast-1.compute.internal [10.2.0.254] (via UDP: [10.2.0.254]:61086->[10.2.0.1]:162) TRAP, SNMP v1, community cisco#012#011iso.3.6.1.6.3.1.1.5 Link Down Trap (0) Uptime: 0:45:13.69#012#011iso.3.6.1.2.1.2.2.1.1.2 = INTEGER: 2#011iso.3.6.1.2.1.2.2.1.2.2 = STRING: "FastEthernet0/1"#011iso.3.6.1.2.1.2.2.1.3.2 = INTEGER: 6#011iso.3.6.1.4.1.9.2.2.1.1.20.2 = STRING: "administratively down"

SNMPv3

認証と暗号化がサポートされ、セキュリティが向上しています。
noAuthNoPriv、authNoPriv、authPriv の3つのセキュリティレベルがあります。

https://www.infraexpert.com/study/snmpz03.html

noAuthNoPriv

ユーザ名を利用し、暗号化は利用しません。

r1(config)#snmp-server group manager v3 noauth
r1(config)#snmp-server user ccna manager v3
$ snmpget -v3 -l noAuthNoPriv -u ccna 10.2.0.254 1.3.6.1.2.1.2.2.1.2.1
iso.3.6.1.2.1.2.2.1.2.1 = STRING: "FastEthernet0/0"

authNoPriv

ユーザ名とMD5による認証を利用しますが、暗号化は利用しません。

r1(config)#snmp-server group manager v3 auth
r1(config)#snmp-server user ccna manager v3 auth md5 ciscocisco
$ snmpget -v3 -l authNoPriv -u ccna -a md5 -A ciscocisco 10.2.0.254 1.3.6.1.2.1.2.2.1.2.1
iso.3.6.1.2.1.2.2.1.2.1 = STRING: "FastEthernet0/0"

authPriv

ユーザ名とMD5による認証と、暗号化を利用します。

r1(config)#snmp-server group manager v3 priv
r1(config)#snmp-server user ccna manager v3 auth md5 ciscocisco priv des secretsecret
$ snmpget -v3 -l authPriv -u ccna -a md5 -A ciscocisco -x des -X secretsecret 10.2.0.254 1.3.6.1.2.1.2.2.1.2.1
iso.3.6.1.2.1.2.2.1.2.1 = STRING: "FastEthernet0/0"

trap

ここでは authPriv レベルでトラップ送信する設定を実施します。

r1(config)#snmp-server group manager v3 priv
r1(config)#snmp-server user ccna manager v3 auth md5 ciscocisco priv des secretsecret
r1(config)#snmp-server host 10.2.0.1 version 3 priv ccna
r1(config)#snmp-server enable traps
% Cannot enable both sham-link state-change interface traps.
% New sham link interface trap not enabled.

監視サーバ側で必要となる engineID の情報を表示します。

r1(config)#do show snmp engineID
Local SNMP engineID: 800000090300C20004E40000
Remote Engine ID          IP-addr    Port

監視サーバ側で、ユーザ名、認証情報、暗号化情報、engineID を用いて設定変更します。

$ sudo cp -pi /etc/snmp/snmptrapd.conf{,.001}
$ sudo vi /etc/snmp/snmptrapd.conf
$ diff -u /etc/snmp/snmptrapd.conf{,.001}

@@ -16,8 +16,7 @@
 #
 #authCommunity log,execute,net private 
 #authCommunity log,execute,net public
-createUser -e 0x800000090300C20004E40000 ccna MD5 ciscocisco DES secretsecret
-authUser log,execute,net ccna
+authCommunity log cisco
 #
 ## send mail when get any events
 #traphandle default /usr/bin/traptoemail -s smtp.example.org foobar@example.org

設定変更したら snmptrapd を停止・起動します。
すると /var/lib/snmp/snmptrapd.conf ファイルに認証についての情報が保存されます。

$ sudo systemctl stop snmptrapd.service
$ sudo systemctl start snmptrapd.service

$ sudo grep ccna /var/lib/snmp/snmptrapd.conf
usmUser 1 3 0x800000090300c20004e40000 "ccna" "ccna" NULL .1.3.6.1.6.3.10.1.1.2 0x9b8abf9d03e7f97e81faa3dffd09ca09 .1.3.6.1.6.3.10.1.2.2 0xab3bdaedc45323a0de889b17f300b953 0x

インタフェース fa0/1 を shutdown すると下記のようにトラップが送信されます。

$ tail -f /var/log/syslog | grep trap

Dec 24 07:32:48 ip-10-0-0-73 snmptrapd[2537]: 2022-12-24 07:32:48 ip-10-2-0-254.ap-northeast-1.compute.internal [UDP: [10.2.0.254]:61086->[10.2.0.1]:162]:#012iso.3.6.1.2.1.1.3.0 = Timeticks: (1119167) 3:06:31.67#011iso.3.6.1.6.3.1.1.4.1.0 = OID: iso.3.6.1.2.1.14.16.2.16#011iso.3.6.1.2.1.14.1.1 = IpAddress: 10.2.1.253#011iso.3.6.1.2.1.14.7.1.1 = IpAddress: 10.2.1.253#011iso.3.6.1.2.1.14.7.1.2 = INTEGER: 0#011iso.3.6.1.2.1.14.7.1.12 = INTEGER: 7
Dec 24 07:32:48 ip-10-0-0-73 snmptrapd[2537]: 2022-12-24 07:32:48 ip-10-2-0-254.ap-northeast-1.compute.internal [UDP: [10.2.0.254]:61086->[10.2.0.1]:162]:#012iso.3.6.1.2.1.1.3.0 = Timeticks: (1119168) 3:06:31.68#011iso.3.6.1.6.3.1.1.4.1.0 = OID: iso.3.6.1.2.1.14.16.2.16#011iso.3.6.1.2.1.14.1.1 = IpAddress: 10.2.1.253#011iso.3.6.1.2.1.14.7.1.1 = IpAddress: 10.2.1.253#011iso.3.6.1.2.1.14.7.1.2 = INTEGER: 0#011iso.3.6.1.2.1.14.7.1.12 = INTEGER: 1
Dec 24 07:32:49 ip-10-0-0-73 snmptrapd[2537]: 2022-12-24 07:32:49 ip-10-2-0-254.ap-northeast-1.compute.internal [UDP: [10.2.0.254]:61086->[10.2.0.1]:162]:#012iso.3.6.1.2.1.1.3.0 = Timeticks: (1119218) 3:06:32.18#011iso.3.6.1.6.3.1.1.4.1.0 = OID: iso.3.6.1.2.1.14.16.2.12#011iso.3.6.1.2.1.14.1.1 = IpAddress: 10.2.1.253#011iso.3.6.1.2.1.14.4.1.1 = IpAddress: 0.0.0.0#011iso.3.6.1.2.1.14.4.1.2 = INTEGER: 1#011iso.3.6.1.2.1.14.4.1.3 = IpAddress: 10.2.1.253#011iso.3.6.1.2.1.14.4.1.4 = IpAddress: 10.2.1.253
Dec 24 07:32:51 ip-10-0-0-73 snmptrapd[2537]: 2022-12-24 07:32:51 ip-10-2-0-254.ap-northeast-1.compute.internal [UDP: [10.2.0.254]:61086->[10.2.0.1]:162]:#012iso.3.6.1.2.1.1.3.0 = Timeticks: (1119464) 3:06:34.64#011iso.3.6.1.6.3.1.1.4.1.0 = OID: iso.3.6.1.6.3.1.1.5.3#011iso.3.6.1.2.1.2.2.1.1.2 = INTEGER: 2#011iso.3.6.1.2.1.2.2.1.2.2 = STRING: "FastEthernet0/1"#011iso.3.6.1.2.1.2.2.1.3.2 = INTEGER: 6#011iso.3.6.1.4.1.9.2.2.1.1.20.2 = STRING: "administratively down"

トラップの送信テストが成功したら /etc/snmp/snmptrapd.conf から createUser の行を削除することができます。

まとめ

snmp / snmptrapd を使って snmp の練習をしました。
実際に運用する際は各種統合監視ツールを利用した監視になると思いますが、役に立たない知識ではないはずです。

GitHubで編集を提案

Discussion