はじめに
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)コマンドでパッケージインストールをします。
1 |
[root@localhost ~]# dnf install -y net-snmp net-snmp-utils |
設定ファイル(snmpd.conf)の編集
インストールが完了したら、設定ファイルを編集します。
SNMPマネージャーの設定ファイルは/etc/snmp/snmpd.confにあります。中身を見ると割と膨大にデータが入っていますが、コメントアウト・空白が大半です。
以下は、コメントアウトと空白を除いたものだけを出力した結果です。
1 2 3 4 5 6 7 8 9 10 |
[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 |
上記の中で不要な部分を削除し、以下のように書き換えます。細かい部分は次のセクションで説明します。
1 2 3 4 5 6 7 8 9 |
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
上記の通り、編集した結果が以下です。
1 2 3 4 5 6 7 8 9 10 |
[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)番が使用されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[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を起動します。
1 2 3 4 5 6 7 |
[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コマンドでポートの状態とプロセスの状態を確認します。
1 2 3 4 5 6 7 |
[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情報を取得することもできます。
1 2 3 |
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情報を取得できるかをテストしてみます。
1 2 3 4 5 |
[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を変えて情報を取得している例を記載しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[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マネージャーとして機能させる記事を載せておりますので、興味のある方は是非どうぞ!