序章
システム管理者であることの大部分は、サーバーとインフラストラクチャに関する正確な情報を収集することです。 このタイプの情報を収集および処理するためのツールとオプションは多数あります。 それらの多くは、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デーモンで認証することです。 これには通常、かなりの数の情報を提供することが含まれます。 一般的なものは以下のとおりです。
- -v VERSION :このフラグは、使用するSNMPプロトコルのバージョンを指定するために使用されます。 このガイドではv3を使用します。
- -c COMMUNITY :このフラグは、認証にSNMPv1またはv2スタイルのコミュニティストリングを使用している場合に使用されます。 v3スタイルのユーザーベースの認証を使用しているため、これは必要ありません。
- -u USER-NAME :このパラメーターは、認証するユーザー名を指定するために使用されます。 SNMPを使用して何かを読み取ったり変更したりするには、既知のユーザー名で認証する必要があります。
- -l LEVEL :これは接続しているセキュリティレベルを指定するために使用されます。 可能な値は、認証と暗号化なしの場合は
noAuthNoPriv
、認証と暗号化なしの場合はauthNoPriv
、認証と暗号化の場合はauthPriv
です。 使用しているユーザー名は、指定したセキュリティレベルで動作するように構成する必要があります。そうしないと、認証が成功しません。 - -プロトコル:このパラメーターは、使用される認証プロトコルを指定するために使用されます。 可能な値は
MD5
またはSHA
です。 これは、ユーザーの作成時に指定された情報と一致する必要があります。 - -x PROTOCOL :このパラメーターは、使用される暗号化プロトコルを指定するために使用されます。 可能な値は
DES
またはAES
です。 これは、ユーザーの作成時に指定された情報と一致する必要があります。 これは、ユーザーの特権指定の後にpriv
があり、暗号化が必須になる場合に必要です。 - -パスフレーズ:これは、ユーザーの作成時に指定された認証パスフレーズを提供するために使用されます。
- -X PASSPHRASE :これは、ユーザーの作成時に指定された暗号化パスフレーズです。 何も指定されていないが暗号化アルゴリズムが指定されている場合は、認証パスフレーズが使用されます。 これは、
-x
パラメーターが指定されている場合、またはユーザーの特権指定の後にpriv
があり、暗号化が必要な場合に必要です。
この情報を使用して、コマンドの作成を開始できます。 ブートストラップユーザーの設定方法を考えると、そのアカウントで使用するコマンドは次のようになります。
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つずつまたは一括で取得する方法とデータを変更する方法を示します。