正直なところ、SNMP はサーバーやネットワーク機器から情報を取得するだけの簡単そうに聞こえるプロトコルの 1 つです。しかし、Linux、特に CentOS、RHEL、Fedora での設定は少々面倒です。すべてをセットアップして を実行しても、タイムアウトになったり、応答がなかったりすることがあります。すべてをsnmpwalk正しく行ったと確信しているのに、サービスが応答しないという感覚で生活している場合は特にイライラします。ファイアウォールの問題、構成エラー、権限の問題かもしれません。誰にもわかりません。このガイドは、特に最初に SNMP v2c を動作させようとしていて、その後、暗号化されたおしゃれな SNMPv3 を試そうとしている場合に、そうした煩雑な作業を省くことを目的としています。
Linux でよくある SNMP の問題を解決する方法
SNMPエージェントのインストールと設定
まず、SNMPがまだインストールされていない場合はちょっと変ですが、ネットワークツールはあらかじめ設定されていないので、とりあえず実行してみるのがdnf update -y良いでしょう(あるいは、yum update -yそれがお好みであれば)。その後、必要なパッケージをインストールしてください。
# dnf install net-snmp net-snmp-utils -y
これにより、SNMP デーモンと のようなコマンドラインツールが呼び出されますsnmpwalk。ディストリビューションによっては、マシンによっては代わりに を使用する必要がある場合がありますyum。
SNMPエージェントの設定 — よくある失敗
万が一の事態に備えて、まずはデフォルト設定をバックアップしておきましょう。以下のコマンドを使用します。
# mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.orig
次に、設定ファイルを編集します。
# nano /etc/snmp/snmpd.conf
さて、ここで奇妙な点があります。適切なコミュニティ文字列と情報を追加する必要があるのです。例えば、次のようなものです。
rocommunity public syslocation GE-DC2 syscontact [email protected]
なぜこれらの行が必要なのでしょうか?rocommunity publicコミュニティ文字列を「public」と推測した人なら誰でも読み取り専用でアクセスできてしまうからです。安全とは言えませんが、テストには十分です。他の2行は単なるメタデータですが、一部のSNMPツールやダッシュボードではこれらの情報を参照するようです。本番環境でテストする場合は、コミュニティ文字列を安全なものに変更することを忘れないでください。とにかく、編集が終わったらファイルを保存してください。
snmpdを起動して有効にする
次に、デーモンを起動します。
# systemctl enable snmpd.service # systemctl start snmpd
起動しない場合は、 でステータスを確認してくださいsystemctl status snmpd。ファイアウォールに問題がある場合もありますので、ポートを開く必要があるかもしれません。
ファイアウォール設定 – この部分を忘れないでください
ここが厄介なところです。LinuxのファイアウォールはデフォルトでSNMPをブロックすることがあります。TCP/UDPポート161と162を開くには、次のコマンドを実行します。
# firewall-cmd --zone=public --add-port=161/udp --permanent # firewall-cmd --zone=public --add-port=161/tcp --permanent # firewall-cmd --zone=public --add-port=162/udp --permanent # firewall-cmd --zone=public --add-port=162/tcp --permanent # firewall-cmd --reload
設定によっては、ファイアウォールが実行されているかどうかを確認しfirewall-cmd --state、それに応じて調整する必要がある場合があります。
snmpwalkでテストしてトラブルシューティングする
さて、ここが難しいところです。以下を実行すると、
# snmpwalk -v 2c -c public -O e 127.0.0.1
タイムアウトしたり、「タイムアウト: localhost からの応答がありません」と表示されたりした場合は、設定ファイルに問題があるか、ファイアウォールがトラフィックをブロックしているかのどちらかです。原因の多くは、間違ったコミュニティ文字列を使用しようとしているか、設定にタイプミスがあることです。/etc/snmp/snmpd.conf正しいコミュニティ文字列(この場合は「public」)が設定されていること、そしてデーモンが実際に実行されていることを確認してください。snmpd が適切にリロードされない場合があります。その場合は、次のコマンドで再起動しsystemctl restart snmpd、ステータスを再度確認してください。
確かに、設定によっては、サービスがエラーなく起動しても通信が拒否されることがあります。そのような場合は、カスタム設定を削除してデフォルト設定を維持し、その後徐々に変更を元に戻していくことで、問題を特定できる場合があります。
リモートアクセスを確認する
ローカルテストが成功したら、別のマシンから試してください。
# snmpwalk -v 2c -c public 192.168.x.x system
データが表示されれば問題ありません。表示されない場合は、ファイアウォールのルール、IPホワイトリスト、またはネットワークの到達可能性を再確認してください。不思議なことに、ファイアウォールの設定が、実際の設定ミスよりも問題を引き起こすことが多いのです。
SNMPv3 — 高度なセキュリティバージョン
より高度なSNMPv3認証と暗号化をご希望の場合は、設定が複雑になることを覚えておいてください。 でユーザーを作成する必要がありますnet-snmp-create-v3-user。例:
# net-snmp-create-v3-user -ro -A o2ps2w0dD -a SHA -X r30svV33 -x AES snmpuser
このコマンドは、認証パスワードo2ps2w0dD(SHA暗号化)、プライバシーパスワードr30svV33 (AES暗号化)を持つ読み取り専用ユーザーsnmpuserを作成します。その後、サービスを再起動します。
# systemctl start snmpd
以下でテストします:
# snmpwalk -v3 -a SHA -A o2ps2w0dD -x AES -X r30svV33 -l authPriv -u snmpuser 192.168.1.100
正直に言うと、SNMPは面倒な存在として知られています。特に、せっかく苦労して設定してもうまくいかない時はなおさらです。たいていは、ファイアウォールの問題か設定ミスが原因だと判明します。でも、一度うまく動作し始めると、大量のメトリクスが流れ込んでくるのがわかるのは、なかなか嬉しいものです。