開発者ドキュメント

Ubuntu14.04にSNMPデーモンとクライアントをインストールして構成する方法

序章

システム管理者であることの大部分は、サーバーとインフラストラクチャに関する正確な情報を収集することです。 このタイプの情報を収集および処理するためのツールとオプションは多数あります。 それらの多くは、SNMPと呼ばれるテクノロジーに基づいて構築されています。

SNMPは、簡易ネットワーク管理プロトコルの略です。 これは、サーバーが現在の状態に関する情報を共有できる方法であり、管理者が事前定義された値を変更できるチャネルでもあります。 プロトコル自体は非常に単純ですが、SNMPを実装するプログラムの構造は非常に複雑になる可能性があります。

前回のガイドでは、SNMPプロトコルの基本について学びました。 このガイドでは、SNMPを使用して通信するためのツールをセットアップする方法のデモンストレーションを開始します。 デモには2台のUbuntu14.04サーバーを使用しますが、他のほとんどのシステムは、いくつかの変更を加えて従うことができるはずです。

SNMPデーモンとユーティリティをインストールします

一部のUbuntuシステムにデーモンとツールをインストールすることで、SNMPをシステムに実装する方法を探り始めることができます。

2つのサーバーを使用します。1つはマネージャー部分を含み、もう1つのサーバーはエージェントを含みます。 エージェントをマネージャーマシンにインストールすることもできますが、エージェントを分離しておくと、各コンポーネントが提供する機能を簡単に示すことができます。

最初のサーバーで、aptデータベースを更新し、マネージャーコンポーネントをインストールします。 これに加えて、snmp-mibs-downloaderという別のパッケージもダウンロードします。このパッケージには、ほとんどのMIBツリーに名前でアクセスできる標準MIBに関する独自の情報が含まれています。

sudo apt-get update
sudo apt-get install snmp snmp-mibs-downloader

2番目のサーバー(デーモンを実行するサーバーと対話するサーバー)では、次のように入力して必要なコンポーネントをインストールできます。

sudo apt-get update
sudo apt-get install snmpd

これらのコンポーネントをインストールしたので、セットアップを構成する必要があります。

SNMPマネージャーの構成

上で述べたように、作業の大部分はエージェントコンポーネントで行われるため、このマシンでの構成は実際には非常に簡単です。 クライアントがインストールした追加のMIBデータを使用できるように、1つのファイルを変更する必要があります。

sudo権限を使用して、テキストエディタで/etc/snmp/snmp.confファイルを開きます。

sudo nano /etc/snmp/snmp.conf

このファイルには、いくつかのコメントとコメントされていない1行があります。 マネージャがMIBファイルをインポートできるようにするには、mibs :行をコメントアウトする必要があります。

#mibs :

終了したら、ファイルを保存して閉じます。

これでマネージャー部分の構成は完了しましたが、エージェントコンピューターの構成を支援するためにこのサーバーを使用する必要があります。

SNMPエージェントマシンの構成

真のクライアントサーバーシステムであるため、エージェントコンピューターには、独自のSNMPセットアップを構成するために必要な外部ツールはありません。 一部の構成ファイルを変更して変更を加えることができますが、必要な変更のほとんどは、管理サーバーからエージェントサーバーに接続することによって行われます。

開始するには、エージェントコンピューターで、sudo特権を使用してデーモンの構成ファイルを開く必要があります。

sudo nano /etc/snmp/snmpd.conf

内部では、いくつかの変更を加える必要があります。 これらは主に、他のサーバーから構成を管理できるように、構成をブートストラップするために使用されます。

まず、agentAddressディレクティブを変更する必要があります。 現在、ローカルコンピューターからの接続のみを許可するように設定されています。 現在の行をコメントアウトし、下の行のコメントを解除する必要があります。これにより、すべての接続が可能になります(これはまもなくロックダウンされます)。

#  Listen for connections from the local system only
#agentAddress  udp:127.0.0.1:161
#  Listen for connections on all interfaces (both IPv4 *and* IPv6)
agentAddress udp:161,udp6:[::1]:161

次に、createUser行を一時的に挿入する必要があります。 これらのディレクティブは通常このファイルに保持されませんが、すぐに再び削除されるので、それほど重要ではありません。

作成するユーザーはbootstrapと呼ばれ、最初の「実際の」ユーザーを作成するためのテンプレートとして使用されます。 SNMPパッケージは、ユーザーのプロパティのクローンを作成するプロセスを通じてこれを実行します。

新しいユーザーを定義するときは、認証タイプ(MD5またはSHA)を指定するとともに、少なくとも8文字である必要があるパスフレーズを指定する必要があります。 私たちのように、転送に暗号化を使用することを計画している場合は、プライバシープロトコル(DESまたはAES)と、オプションでプライバシープロトコルパスフレーズも指定する必要があります。 プライバシープロトコルパスフレーズが提供されていない場合、認証パスフレーズはプライバシープロトコルにも使用されます。

ユーザー作成ラインは次のようになります。

createUser bootstrap MD5 temp_password DES

新しいユーザーを指定したので、このユーザーが持つアクセスのレベルを設定する必要があります。 これは、bootstrapユーザーと、作成するdemoという新しいユーザー用に設定します。 rwuserディレクティブを使用して、読み取りおよび書き込みアクセスを許可します(読み取り専用アクセスの場合はrouserを使用できます)。

ユーザーの後にprivを指定して、暗号化の使用を強制します。 ユーザーをMIBの特定の部分に制限したい場合は、行の最後でユーザーがアクセスできる最高レベルのOIDを指定できます。

私たちの目的のために、私たちの両方の行はかなり単純になります:

rwuser bootstrap priv
rwuser demo priv

これらの変更が終了したら、ファイルを保存して閉じます。

これらの変更を実装するには、snmpdサービスを再起動します。

sudo service snmpd restart

これで、管理ソフトウェアをインストールしたマシンから、エージェントサーバーに接続して通常のユーザーを作成できます。

これは、ユーザー管理に使用されるsnmpusmツールを使用して行います。 これが正しく機能するには、エージェントサーバーのIPアドレスを知っている必要があります。

始める前に、SNMPコマンドを送信する一般的な構造について少し説明します。

SNMPコマンドの一般的な構造

snmpパッケージに含まれているツールスイート(net-snmpソフトウェアスイート)を使用すると、コマンドを呼び出す方法にいくつかのパターンがあります。

最初に行う必要があるのは、通信するSNMPデーモンで認証することです。 これには通常、かなりの数の情報を提供することが含まれます。 一般的なものは以下のとおりです。

この情報を使用して、コマンドの作成を開始できます。 ブートストラップユーザーの設定方法を考えると、そのアカウントで使用するコマンドは次のようになります。

snmp_command -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_host snmp_sub_command_or_options

たとえば、管理サーバーから、次のように入力して、ブートストラップアカウントが使用可能であることを確認できます。

snmpget -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_host 1.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0 = STRING: Linux target 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64

1.3.6.1.2.1.1.1.0文字列は、システム情報の表示を担当するOIDです。 基本的に、リモートシステムのuname -aの出力を返します。

SNMPデーモンを実行しているサーバーに対して正しく認証できることを確認したので、引き続き通常のユーザーアカウントを作成できます。

通常のユーザーアカウントを設定する

snmpd.confファイルでdemoユーザーアカウントの権限を指定しましたが、実際にはまだこのユーザーを作成していません。 bootstrapユーザーを新しいユーザーのテンプレートとして使用します。

管理サーバーでは、snmpusmツールと次の一般的な構文を使用して、テンプレートからユーザーを作成できます。

snmpusm authentication_info remote_host create new_user existing_user

したがって、渡す必要のある認証フラグについてわかっていることを使用し、既に持っているユーザーアカウント(bootstrap)を利用して、定義済みのユーザー特権(demo)。

コマンドは次のようになります。

snmpusm -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_host create demo bootstrap

次のメッセージが表示されます。

User successfully created.

これで、リモートサーバーにdemoという完全に機能するユーザーができました。 ただし、bootstrapアカウントと同じ認証情報を引き続き使用しています。 パスワードを別のものに変更する必要があります。 今回は、demoアカウントを使用して認証します。 パスワードは少なくとも8文字の長さである必要があります

snmpusm -u demo -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_host passwd temp_password my_new_password

次のメッセージが返されます。

SNMPv3 Key(s) successfully changed.

SNMPサービスの実行時間をリモートサーバーに問い合わせることで、新しい資格情報とパスワードをテストできます。 snmpgetコマンドを使用して、他のマシンから単一の値を取得します。

今回は、ダウンロードした追加のMIB定義を利用します。 これらを使用して、OID数値IDの代わりに名前で値を要求できます。

snmpget -u demo -l authPriv -a MD5 -x DES -A my_new_password -X my_new_password remote_host sysUpTime.0

リモートSNMPデーモンが最後に再起動された時刻を表す値を取得する必要があります。

DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (383018) 1:03:50.18

クライアント構成ファイルの作成

この時点で、すべてのSNMPコマンドの認証の詳細が各要求でかなり静的になることに気付いたと思います。 毎回これらを入力するのではなく、接続先の資格情報を含むクライアント側の構成ファイルを作成できます。

クライアント構成ファイルは、共有する範囲に応じて2つの異なる場所に配置できます。

ログイン資格情報を管理マシンの有効なユーザーと共有する場合は、構成の詳細をグローバルsnmp.confファイルに配置できます。 そのファイルをsudo権限で開く必要があります。

sudo nano /etc/snmp/snmp.conf

ただし、ユーザーのみの認証クレデンシャルを定義する場合は、ユーザーのホームディレクトリ内に非表示の.snmpディレクトリを作成し、そこにファイルを作成できます。

mkdir ~/.snmp
cd ~/.snmp
nano snmp.conf

構成を配置する場所の決定に関係なく、内容は同じになります。

認証に使用しているコマンドは、次の表にあります。 右側の列には、snmp.confファイル内でこれらの構成の詳細を設定するために使用する必要があるディレクティブ名が表示されます。

コマンドフラグ 説明 翻訳されたsnmp.confディレクティブ
-uユーザー名 認証するSNMPv3ユーザー名。 defSecurityName USERNAME
-l authPriv 認証に使用するセキュリティレベル。 defSecurityLevel authPriv
-MD5 使用する認証プロトコル。 defAuthType MD5
-x DES 使用するプライバシー(暗号化)プロトコル。 defPrivType DES
パスフレーズ 指定されたユーザー名の認証パスフレーズ。 defAuthPassphrase PASSPHRASE
-X PASSPHRASE 提供されたユーザー名のプライバシーパスフレーズ。 defPrivPassphrase PASSPHRASE

この情報を使用して、適切なsnmp.confファイルを作成できます。 ガイドの場合、これは次のようになります。

defSecurityName demo
defSecurityLevel authPriv
defAuthType MD5
defPrivType DES
defAuthPassphrase my_new_password
defPrivPassphrase my_new_password

終了したら、ファイルを保存して閉じます。

これで、認証の詳細を指定せずにコマンドを発行できます。 必要なのは、SNMPコマンド、ホスト、およびコマンド引数のみです。

入力する代わりに:

snmpget -u demo -l authPriv -a MD5 -x DES -A my_new_password -X my_new_password remote_host sysUpTime.0

簡単に入力できます。

snmpget remote_host sysUpTime.0

ご覧のとおり、これにより、各リクエストで提供する必要のある情報の量が大幅に削減されます。

ブートストラップアカウントの削除

通常のアカウントが正しく構成されたので、bootstrapアカウントはかなり安全ではないため、削除できます。

エージェントサーバーで、sudo権限を使用して/etc/snmp/snmpd.confファイルを再度開きます。

bootstrapユーザーを参照する、以前に追加した両方の行を検索してコメントアウト(または削除)します。

#createUser bootstrap MD5 temp_password DES
#rwuser bootstrap priv

ファイルを保存して閉じます。

ここで、SNMPデーモンを再起動します。

sudo service snmpd restart

これにより、通常のsnmpd.confファイルにcreateUserディレクティブを含めないという推奨事項が満たされます。 また、その一時ユーザーから特権を削除します。

bootstrapユーザーをusmUserTableから完全に削除する場合は、管理サーバーから次のコマンドを発行します。

snmpusm remote_host delete bootstrap

次の応答が返されます。

User successfully deleted.

結論

この時点で、SNMPプロトコルを使用して安全に通信できる完全に構成されたクライアントサーバーセットアップが必要です。 他のホストにデーモンを簡単に追加し、インフラストラクチャ全体でアカウントアクセスを構成できます。

次のガイドでは、これまで使用してきたnet-snmpツールの基本的な使用法について説明します。 値を1つずつまたは一括で取得する方法とデータを変更する方法を示します。

モバイルバージョンを終了