amegonの雑なブログ

日常的なものから技術的なものまでメモの雑記

Debian 11 で SNMPトラップを受信できる環境を作成

はじめに

掲題の環境が必要になったので作成する。
まずは Debian 環境がないのでインストールから始める。
ざっとした流れは以下の通り。

今回の流れ

  • Debian 11 のインストール(Hyper-V)
  • Debian 11 のインストール後の設定
  • snmptrapd のインストール
  • snmp をインストール(snmpwalk や snmptrap を使用したい)
  • snmptrapd の起動オプションを修正

Debian 11 のインストール(Hyper-V)

Hyper-V 上に仮想マシンを作成してインストール
以下のサイトを参考にインストール

https://mebee.info/2019/12/01/post-3751/

仮想マシンのセキュリティの設定で セキュリティブートを有効にするのチェックを外す のがわからずはまった。。。

インストールが終わったら GUI も一緒にインストールされていた。
その意図ではなかったのでちょっと驚いた。

Debian 11 のインストール後の設定

ユーザーを sudo グループに追加

  • su コマンドで root になる
<ユーザー名>@<ホスト名>:~$ su -
パスワード:
  • adduser コマンドで指定したユーザーを sudo グループに追加
root@<ホスト名>:~# adduser <ユーザー名> sudo
パスワード:

ここで sudo に追加されるが、一般ユーザーで sudo を使用する場合にはいったんログアウトする必要あり。

snmptrapd のインストール

https://installati.one/debian/11/snmptrapd/

sudo apt-get update
sudo apt-get -y install snmptrapd

snmp をインストール(snmpwalk や snmptrap を使用したい)

sudo apt install snmp

snmptrapd の起動オプションを修正

/lib/systemd/system/snmptrapd.serviceExecStart を修正する。

  • 修正前
[Unit]
Description=Simple Network Management Protocol (SNMP) Trap Daemon.
After=network.target
ConditionPathExists=/etc/snmp/snmptrapd.conf

[Service]
Type=simple
ExecStart=/usr/sbin/snmptrapd -LOw -f -p /run/snmptrapd.pid
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target
  • 修正後
[Unit]
Description=Simple Network Management Protocol (SNMP) Trap Daemon.
After=network.target
ConditionPathExists=/etc/snmp/snmptrapd.conf

[Service]
Type=simple
#ExecStart=/usr/sbin/snmptrapd -LOw -f -p /run/snmptrapd.pid
ExecStart=/usr/sbin/snmptrapd -Lsd -f -p /run/snmptrapd.pid
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

上記の変更後以下のコマンドを順に実行。

sudo systemctl daemon-reload
sudo systemctl restart snmptrapd

トラップ受信確認

以下のコマンドを実行する。

udo snmptrap -v 2c -c public localhost '' .1.3.6.1.4.1.8072.100 .1.3.6.1.4.1.8072.100.1 s "hoge"

snmptrapd で受信したログが /var/log/syslog に書き込まれるようになった。

xxx@debian:~$ sudo tail -f /var/log/syslog
[sudo] xxx のパスワード:

Apr 16 00:50:25 debian snmptrapd[2233]: 2023-04-16 00:50:25 localhost [UDP: [127.0.0.1]:34635->[127.0.0.1]:162]:#012iso.3.6.1.2.1.1.3.0 = Timeticks: (479856) 1:19:58.56#011iso.3.6.1.6.3.1.1.4.1.0 = OID: iso.3.6.1.4.1.8072.100#011iso.3.6.1.4.1.8072.100.1 = STRING: "hoge"

おまけ

使用しているポート番号を確認するコマンド

  • 使用している UDP のポート番号 162(snmp-trap) を翻訳せずに表示する
    • ss -anu | grep 162
xxx@debian:~$ ss -anu | grep 162
UNCONN 0      0                             0.0.0.0:162        0.0.0.0:*
xxx@debian:~$

snmptrap 送信コマンド

snmptrap -v 2c -c public localhost '' .1.3.6.1.4.1.8072.100 .1.3.6.1.4.1.8072.100.1 s "hoge"

他のホストに SNMP トラップを送りたければ、上記の localhost の部分を宛先のホスト名もしくは IP アドレスに変えて。