【Linux】CentOSでSNMP(ポーリング)を実施する方法

Linux

はじめに

LinuxでSNMPエージェント設定し、Cisco機器から実施からMIB情報を取得する方法を紹介します。

検証環境

【localhost】

今回SNMPマネージャーの設定を入れる機器です。

IPアドレス:192.168.68.250

OS:CentOS8

【rt01】

今回SNMPエージェントして監視したいルーターです。

IPアドレス:192.168.68.51

機器名:Cisco1921/K9 

設定手順

SNMPエージェントのインストール

SNMPマネージャーにnet-snmpとnet-snmp-utilsをインストールします。

dnf(RHEL7ではyum)コマンドでパッケージインストールをします。

[root@localhost ~]# dnf install -y net-snmp net-snmp-utils

設定ファイル(snmpd.conf)の編集

インストールが完了したら、設定ファイルを編集します。

SNMPマネージャーの設定ファイルは/etc/snmp/snmpd.confにあります。中身を見ると割と膨大にデータが入っていますが、コメントアウト・空白が大半です。

以下は、コメントアウトと空白を除いたものだけを出力した結果です。

[root@localhost snmp]# grep -v -e "^#" /etc/snmp/snmpd.conf_20200806 |grep -v -e "^\s*$"
com2sec notConfigUser  default       public
group   notConfigGroup v1           notConfigUser
group   notConfigGroup v2c           notConfigUser
view    systemview    included   .1.3.6.1.2.1.1
view    systemview    included   .1.3.6.1.2.1.25.1.1
access  notConfigGroup ""      any       noauth    exact  systemview none none
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
dontLogTCPWrappersConnects yes

上記の中で不要な部分を削除し、以下のように書き換えます。細かい部分は次のセクションで説明します。

com2sec omotiNetwork 192.168.68.250 omotiComname
group omotiGroup v1 omotiNetwork
group omotiGroup v2c omotiNetwork
view omotiViewName included .1 80
access OMOTIgroup "" any noauth exact omotiViewName none none
disk /10000
syslocation LocalLab
syscontact Root orangetea <orange0227jas☆ricecake24book.com> 
dontLogTCPWrappersConnects yes

設定ファイルの書式について

書き換えた設定について、1つ1つみていきましょう。

com2sec omotiNetwork 192.168.68.250 omotiComName

【com2sec】この行が「コミュニティ名とセキュリティを指定する行」という意味になります。

【omotiNetwork】セキュリティ名を定義します。名前は任意に設定可能です。

【192.168.68.250】SNMPマネージャーのIPを定義します。

【omotiComName】コミュニティ名を定義します。名前は任意に設定可能です。

group omotiGroup v1 omotiNetwork

【group】この行が「グループを設する行」という意味になります。

【omotiGroup】グループ名を定義します。名前は任意に設定可能です。

【v1】セキュリティモデルを指定します。バージョン1で設定しています。

【omotiNetwork】セキュリティ名を指定します。名前は任意に設定可能です。

group omotiGroup v2c omotiNetwork

【group】この行が「グループを設定する行」という意味になります。

【omotiGroup】グループ名を定義します。名前は任意に設定可能です。

【v2c】セキュリティモデルを指定します。バージョン2でも対応できるように設定しています。

【omotiNetwork】セキュリティ名を指定します。名前は任意に設定可能です。

view omotiViewName included .1 80

【view】この行が「viewを設定するの行」という意味になります。

【omotiViewName】view名を定義します。名前は任意に設定可能です。

【included】「include」または「exclude」を指定します。includedは許可、excludeは拒否となります。

【.1】MIBの範囲を指定します。「.1」は、マスク値と連携することで意味をなします。

【80】マスク値を指定します。「80」は16進数表記です。これを2進数に変換すると「1000 0000」となります。

  OIDの形式は、「.1*」となるので、マスク値と合わせるとすべてのOIDが該当します。

  ゆえに、omotiViewNameは、すべてを許可することになります。

access omotiGroup “” any noauth exact omotiViewName none none

【access】この行が「アクセス許可設定を行う」という意味になります。

【omotiGroup 】グループ名の指定します。上記で設定したグループ名を指定します。

【”” 】contextの指定します。v1またはv2の場合は、空白で指定します。(””)

【any】sec.modelを指定します。セキュリティモデルを指定します。

【noauth】levelを指定します。v1またはv2の場合は「noauth」を指定します。

【exact】prefixを指定します。「exact」または、「prefix」のいずれかを指定します。

【omotiViewName】readの指定します。ここでviewで指定した名前を使います。

【none】writeを指定します。viewで指定した名前を使います。なければ「none」とします。

【none】notifyを指定します。viewで指定した名前を使います。なければ「none」とします。

disk /10000

disk:ディスクに関する設定行であることを表します。

/10000:ディレクトリの空き容量が10000K bB以下(10MB)になった場合、エラーとします。

syslocation LocalLab

syslocation:マシンの場所などを記載できます。

syscontact orangetea <orange0227jas☆ricecake24book.com>

syscontact:管理者の名前を登録できます。

dontLogTCPWrappersConnects yes

SNMPの問い合わせがあったときに、ログに書き込まない設定です。

【参考】

http://changineer.info/server/monitoring/monitoring_snmpd.html

https://qiita.com/toshiro3/items/e8f87da88cd383a6421d

上記の通り、編集した結果が以下です。

[root@localhost ~]# cat /etc/snmp/snmpd.conf
com2sec omotiNetwork 192.168.68.250 omotiComName
group omotiGroup v1 omotiNetwork
group omotiGroup v2c omotiNetwork
view omotiViewName included .1 80
access OMOTIgroup "" any noauth exact omotiViewName none none
disk /10000
syslocation LocalLab
syscontact Root orangetea <orange0227jas@ricecake24book.com>
dontLogTCPWrappersConnects yes

firewallの設定

SNMPマネージャーがSNMPエージェントから受け取った情報を取得できるように許可設定を入れます。

SNMPポーリングのポート番号は161(UDP)番が使用されます。

[root@localhost ~]# firewall-cmd --add-service=snmp --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost snmp]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources:
  services: cockpit dhcpv6-client http snmp ssh syslog syslog-tls
  ports: 10051/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

「service」内に「snmp」が追加されていることがわかります。

snmpd.serviceの起動

systemctlコマンドで、snmpd.serviceを起動します。

[root@localhost ~]# systemctl start snmpd
[root@localhost ~]# systemctl is-active snmpd.service
active
[root@localhost ~]# systemctl status snmpd.service
● snmpd.service - Simple Network Management Protocol (SNMP) Daemon.
   Loaded: loaded (/usr/lib/systemd/system/snmpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-11-11 07:21:41 JST; 22s ago

ポート、プロセスの確認

lsofコマンド、netstatコマンドでポートの状態とプロセスの状態を確認します。

[root@localhost ~]# lsof -i:161
COMMAND    PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
snmpd   113732 root    9u  IPv4 2023779      0t0  UDP *:snmp
[root@localhost ~]# netstat -na |grep 161
udp        0      0 0.0.0.0:161             0.0.0.0:*
unix  3      [ ]         STREAM     CONNECTED     144161
unix  3      [ ]         STREAM     CONNECTED     143161

161番ポートでsnmpdが起動していることが確認できました。

rt01(監視対象)のSNMPエージェント設定

rt01にSNMPエージェントの設定を行います。※今回はCiscoのルータですが、監視対象に応じて設定をします。

Ciscoの場合、簡単に設定できます。以下の通り、IPの指定がないためコミュニティ名を変更しなければSNMPマネージャーのIPは変更できます。また、新たにSNMPマネージャーを追加する場合も、コミュニティ名を合わせれば複数のSNMPマネージャーからMIB情報を取得することもできます。

rt01#conf terminal
rt01(config)#snmp-server community omotiComName RO
rt01#copy running-config startup-config

※Ciscoの場合、SNMPマネージャーの設定の確認するには「show running-config」「show snmp」コマンドを使用することで確認できます。

設定の確認について

設定が正確にできているかどうかを確認する方法があります。SNMPマネージャーで「snmpwalkコマンド」を使用します。

OIDを指定し、対象の機器からMIB情報を取得できるかをテストしてみます。

[root@localhost ~]# snmpwalk -v1 -c omotiComname 192.168.68.51:161 .1.3.6.1.2.1.1.1
SNMPv2-MIB::sysDescr.0 = STRING: Cisco IOS Software, C1900 Software (C1900-UNIVERSALK9-M), Version 15.5(3)M7, RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2018 by Cisco Systems, Inc.
Compiled Mon 05-Feb-18 09:21 by prod_rel_team

SNMPエージェントの状態を取得することができました。コマンドが成功すれば、SNMPマネージャーとして機能できる最低限の設定ができていることになります。

snmpwalkコマンド

実行している「snmpwalk -v1 -c omotiComname 192.168.68.51:161 .1.3.6.1.2.1.1.1」について簡単に説明します。

-v1 … バージョンを指定します。

-c omotiComname … コミュニティ名を指定します。

192.168.68.51:161 … IPが192.168.68.51で、ポート番号を161番で指定しています。

.1.3.6.1.2.1.1.1 … MIBのOIDを指定しています。OIDについての詳しい説明はここでは割愛します。

以下、OIDを変えて情報を取得している例を記載しておきます。

[root@localhost ~]# snmpwalk -v1 -c omotiComname 192.168.68.51:161 .1.3.6.1.2.1.1.2
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.9.1.1191
[root@localhost ~]# snmpwalk -v1 -c omotiComname 192.168.68.51:161 .1.3.6.1.2.1.1.3
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (18049781) 2 days, 2:08:17.81
[root@localhost ~]# snmpwalk -v1 -c omotiComname 192.168.68.51:161 .1.3.6.1.2.1.1.4
SNMPv2-MIB::sysContact.0 = STRING:
[root@localhost ~]# snmpwalk -v1 -c omotiComname 192.168.68.51:161 .1.3.6.1.2.1.1.5
SNMPv2-MIB::sysName.0 = STRING: rt01
[root@localhost ~]# snmpwalk -v1 -c omotiComname 192.168.68.51:161 .1.3.6.1.2.1.1.6
SNMPv2-MIB::sysLocation.0 = STRING:
[root@localhost ~]# snmpwalk -v1 -c omotiComname 192.168.68.51:161 .1.3.6.1.2.1.1.7
SNMPv2-MIB::sysServices.0 = INTEGER: 78
[root@localhost ~]# snmpwalk -v1 -c omotiComname 192.168.68.51:161 .1.3.6.1.2.1.1.8
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (0) 0:00:00.00

まとめ

CentOS8をSNMPマネージャーとして機能させる手順を紹介しました。

SNMPの設定をするだけということは、実際にはあまりないかもしれません。以下の記事でZabbixをSNMPマネージャーとして機能させる記事を載せておりますので、興味のある方は是非どうぞ!