snmptrapd 設定方法

スポンサーリンク

snmptrapdは各機器からのアラートであるsnmptrapを受信する常駐プログラム(デーモン)です。主にIMPI, ネットワーク機器などの監視エージェントをインストールできないアラートを検知するのに使います。

混同しやい概念としてsnmpdがありますが、これとは異なる概念です。snmpdは監視サーバ(NMS)からのsnmp requestに対して応答する常駐プログラム(デーモン)です。

インストール

snmpdのインストール

snmpdはnet-snmpというパッケージによって提供されます。yumコマンドでnet-snmpをインストールして下さい。

dnf install net-snmp

インストールが完了したら、次にsnmptrapdを起動させます。

systemctl enable snmptrapd.service --now

snmp-utilsのインストール

必須ではありませんが、net-snmp-utilsも併せてインストールする事をお勧めします。net-snmp-utilsは、snmpget, snmpwalkなどsnmpのデバッグを行うのに有用なツールを多数備えています。

# dnf install net-snmp-utils

snmptrapd.conf トラップ受信許可の設定

snmpdの設定は、/etc/snmp/snmptrapd.confというファイルに記述します。SNMPトラップを受信するためには、以下のいずれかの設定が必要となります。

  • disableauthorizationでコミュニティ名による認証を無効化する
  • authCommunityでコミュニティ名単位の受信許可を設定する

方法1 認証無効化設定

/etc/snmp/snmptrapd.confというファイルを以下のように”disableauthorization yes”という設定を加筆します。

# vi /etc/snmp/snmptrapd.conf

# Example configuration file for snmptrapd
#
# No traps are handled by default, you must edit this file!
#
# authCommunity   log,execute,net public
# traphandle SNMPv2-MIB::coldStart    /usr/bin/bin/my_great_script cold
disableauthorization yes

snmptrapdはデフォルト設定の場合、受信したトラップは/var/log/messagesにログとして出力されます。

snmptrapd再起動により設定を反映さ、ローカルホスト宛にsnmptrapを送信し、確かに/var/log/messagesにログ出力されている事を確認します。

[root@centos82 ~]# systemctl restart snmptrapd.service
[root@centos82 ~]# 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"
[root@centos82 ~]# 
[root@centos82 ~]# 
[root@centos82 ~]# tail -n 3 /var/log/messages 
Sep  5 21:56:50 centos82 snmptrapd[1120]: NET-SNMP version 5.8
Sep  5 21:56:50 centos82 systemd[1]: Started Simple Network Management Protocol (SNMP) Trap Daemon..
Sep  5 21:57:05 centos82 snmptrapd[1120]: 2020-09-05 21:57:05 localhost [UDP: [127.0.0.1]:44421->[127.0.0.1]:162]:#012DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (43002) 0:07:10.02#011SNMPv2-MIB::snmpTrapOID.0 = OID: NET-SNMP-MIB::netSnmp.100#011NET-SNMP-MIB::netSnmp.100.1 = STRING: "hoge"

方法2 コミュニティ名単位の許可

authCommunityと呼ばれるトラップ受信許可の設定を使用する事で、特定のコミュニティ名のみsnmpトラップを受信するようになります。書式は以下の通りとなります。

authCommunity   TYPES COMMUNITY  [SOURCE [OID | -v VIEW ]]

TYPESとはsnmptrapdがどのような処理を行うかの設定です。log, execute, netの3種類が指定可能です。

type 説明
log ログ出力を許可します。ファイル出力、標準出力、エラー出力、syslogなどが該当します。
execute プログラムの実行を許可します。例えば、メール転送を行うtraptoemailなどのperlスクリプト等が該当します。
net 他のsnmptrapdサーバへの転送を許可します。

多くの場合は、特にsnmptrapdの処理を制限する必要はないので、現実問題として運用しやすい設定は以下のようになります。例えば、”public”, “changineer”というコミュニティからのsnmptrapと受信したいならば、/etc/snmp/snmptrapd.confの設定は以下のようになります。

# vi /etc/snmp/snmptrapd.conf

# Example configuration file for snmptrapd
#
# No traps are handled by default, you must edit this file!
#
# authCommunity   log,execute,net public
# traphandle SNMPv2-MIB::coldStart    /usr/bin/bin/my_great_script cold
authCommunity log,execute,net public

snmptrapdはデフォルト設定の場合、受信したトラップは/var/log/messagesにログとして出力されます。

snmptrapd再起動により設定を反映さ、ローカルホスト宛にsnmptrapを送信し、確かに/var/log/messagesにログ出力されている事を確認します。

[root@centos82 ~]# systemctl restart snmptrapd.service 
[root@centos82 ~]# snmptrap -v 2c -c public localhost '' .1.3.6.1.4.1.8072.100 .1.3.6.1.4.1.8072.100.1 s "foo"
[root@centos82 ~]# 
[root@centos82 ~]# 
[root@centos82 ~]# tail -n 3 /var/log/messages 
Sep  5 22:01:22 centos82 snmptrapd[1191]: NET-SNMP version 5.8
Sep  5 22:01:22 centos82 systemd[1]: Started Simple Network Management Protocol (SNMP) Trap Daemon..
Sep  5 22:01:49 centos82 snmptrapd[1191]: 2020-09-05 22:01:49 localhost [UDP: [127.0.0.1]:41478->[127.0.0.1]:162]:#012DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (71432) 0:11:54.32#011SNMPv2-MIB::snmpTrapOID.0 = OID: NET-SNMP-MIB::netSnmp.100#011NET-SNMP-MIB::netSnmp.100.1 = STRING: "foo"

ネットワーク機器を用いた動作確認例

ネットワーク機器にsnmptrapを送信する設定を投入します。ciscoの場合の設定例は以下の通りです。

R182(config)#snmp-server enable traps snmp linkdown linkup 
R182(config)#snmp-server host 192.168.1.180 version 2c public

トラップをテスト送信するため、Loopback interfaceの作成を行います。

R182#terminal monitor
R182#debug snmp packets 
SNMP packet debugging is on
R182#configure terminal 
Enter configuration commands, one per line.  End with CNTL/Z.
R182(config)#interface Loopback 10
R182(config-if)#
*Sep  5 13:24:17.907: %LINK-3-UPDOWN: Interface Loopback10, changed state to up
*Sep  5 13:24:18.908: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback10, changed state to up
*Sep  5 13:24:18.915: SNMP: Queuing packet to 192.168.1.180
*Sep  5 13:24:18.916: SNMP: V2 Trap, reqid 3, errstat 0, erridx 0 
 sysUpTime.0 = 113505 
 snmpTrapOID.0 = snmpTraps.4 
 ifIndex.6 = 6 
 ifDescr.6 = Loopback10 
 ifType.6 = 24 
 lifEntry.20.6 = up
*Sep  5 13:24:19.165: SNMP: Packet sent via UDP to 192.168.1.180
R182(config-if)#

snmptrapdサーバの/var/log/messagesを確認し、確かにsnmptrapが届いている事を確認します。

[root@zabbix180 ~]# tail -n 3 /var/log/messages 
Sep  5 22:24:05 zabbix180 systemd[1]: Started System Logging Service.
Sep  5 22:24:05 zabbix180 rsyslogd[2705]: imjournal: journal files changed, reloading...  [v8.1911.0-3.el8 try https://www.rsyslog.com/e/0 ]
Sep  5 22:24:30 zabbix180 snmptrapd[2681]: 2020-09-05 22:24:30 <UNKNOWN> [UDP: [192.168.1.182]:63928->[192.168.1.180]:162]:#012DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (113505) 0:18:55.05#011SNMPv2-MIB::snmpTrapOID.0 = OID: IF-MIB::linkUp#011IF-MIB::ifIndex.6 = INTEGER: 6#011IF-MIB::ifDescr.6 = STRING: Loopback10#011IF-MIB::ifType.6 = INTEGER: softwareLoopback(24)#011SNMPv2-SMI::enterprises.9.2.2.1.1.20.6 = STRING: "up"

snmptrap メール転送

メール環境の準備

マニュアル上はtraptoemailというツールを使用するように記載されていますが、CentOS 8.0以降ではtraptoemailがリポジトリから消えてしまっています。そこで代替手段を考えなければなりません。

今回は、postfixとmailxによる代替手段の例を紹介します。まずはpostfixとmailxをインストールします。

dnf install postfix mailx

postfixを起動します。

systemctl enable postfix.service --now

以下のようなコマンドでメールが送付可能な事を確かめます。

echo "本文" | mail -s "<メールタイトル>" <宛先メールアドレス>

もしメールが正常に転送できない場合は、/var/log/maillogなどからトラブルシュートしましょう。

tail -f  /var/log/maillog

postfixのデフォルト設定はtcp25でのメール送付を試みますが、多くのインターネットサービスプロバイダはOP25Bの対策をしており、これに抵触する可能性があります。もし、インターネットサービスプロバイダの制約に抵触する場合は、SMTPS-AUTHを使用するかデザリングを使用するか等の回避策を講じましょう。

設定例1 全件転送

snmptrapをメール転送するには、traphandleという構文を使います。traphandleとは、正確にはsnmptrapをプログラムに渡す指定のことで、snmptrapによって受信したメッセージを標準入力としてプログラムに渡します。

traphandleの構文は以下のようになります。

traphandle OID|default PROGRAM [ARGS ...]

全てのOIDをメール転送する設定例は以下の通りです。/etc/snmp/snmptrapd.confを以下のように編集します。この場合ならば、snmptrapdによって受信したメッセージが/usr/bin/mailに標準入力として渡されます。

# vi /etc/snmp/snmptrapd.conf 

# cat /etc/snmp/snmptrapd.conf 
# Example configuration file for snmptrapd
#
# No traps are handled by default, you must edit this file!
#
# authCommunity   log,execute,net public
# traphandle SNMPv2-MIB::coldStart    /usr/bin/bin/my_great_script cold
authCommunity log,execute,net public
traphandle default /usr/bin/mail -s "snmp trap" mXXXXXXXXXXX@lost-corona.com

snmptrapd再起動により設定を反映させ、テスト要のトラップを送信します。

[root@centos82 ~]# systemctl restart snmptrapd.service 
[root@centos82 ~]# snmptrap -v 2c -c public localhost '' .1.3.6.1.4.1.8072.100 .1.3.6.1.4.1.8072.100.1 s "ktkr"

確かにsnmptrapのメールを受領できた事を確認します。

snmptrapdのメール確認

設定例2 ホワイトリスト指定

全てのsnmptrapをメール転送したくない場合は、メール転送したいトラップのみをsnmptrapd.confに記載します。以下は、CiscoルータのOSPF, BGP, linkdown, linkupをメール転送する設定例です。

traphandle .1.3.6.1.2.1.14.* /usr/bin/mail -s "snmp trap" mXXXXXXXX@asa-dea.com
traphandle .1.3.6.1.2.1.15.* /usr/bin/mail -s "snmp trap" mXXXXXXXX@asa-dea.com
traphandle .1.3.6.1.6.3.1.1.5.* /usr/bin/mail -s "snmp trap" mXXXXXXXX@asa-dea.com

設定例3 ブラックリスト指定

traphandleの記述は上の行から順番に処理され、初めて合致したOIDに対して処理が実施されます。この処理順序を意識すると、ブラックリスト形式の指定ができます。

以下は富士通Primergy以外からのsnmptrapをメール転送する設定例です。”.1.3.6.1.4.1.231.*”に合致するSNMPトラップは/bin/trueが実行されるため、メール転送されなくなります。

traphandle .1.3.6.1.4.1.231.* /bin/true
traphandle default /usr/bin/mail -s "snmp trap" mXXXXXXXX@asa-dea.com
タイトルとURLをコピーしました