前書き

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

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

最後のガイドでは、https://www.digitalocean.com/community/tutorials/an-introduction-to-snmp-simple-network-management-protocol [SNMPプロトコルの基本]について学びました。 このガイドでは、SNMPを使用して通信するためのツールのセットアップ方法のデモンストレーションを開始します。 2台のUbuntu 14.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 / snmpd.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)

次に、一時的に `+ 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  priv

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

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

sudo service snmpd restart

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

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

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

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

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

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

  • * -v VERSION *:このフラグは、使用するSNMPプロトコルのバージョンを指定するために使用されます。 このガイドではv3を使用します。

  • * -c COMMUNITY *:このフラグは、認証にSNMP v1またはv2スタイルのコミュニティストリングを使用している場合に使用されます。 v3スタイルのユーザーベースの認証を使用しているため、これは必要ありません。

  • * -u USER-NAME *:このパラメーターは、認証するユーザー名を指定するために使用されます。 SNMPを使用して読み取りまたは変更を行うには、既知のユーザー名で認証する必要があります。

  • * -l LEVEL *:これは、接続するセキュリティレベルを指定するために使用されます。 可能な値は、認証なしで暗号化なしの場合は「+ noAuthNoPriv 」、認証なしで暗号化なしの場合は「 authNoPriv 」、認証および暗号化の場合は「 authPriv +」です。 使用しているユーザー名は、指定したセキュリティレベルで動作するように設定する必要があります。そうしないと、認証が成功しません。

  • * -a PROTOCOL *:このパラメーターは、使用される_authentication_プロトコルを指定するために使用されます。 可能な値は、「+ MD5 」または「 SHA +」です。 これは、ユーザーの作成時に指定された情報と一致する必要があります。

  • * -x PROTOCOL *:このパラメーターは、使用される_encryption_プロトコルを指定するために使用されます。 可能な値は、「+ DES 」または「 AES 」です。 これは、ユーザーの作成時に指定された情報と一致する必要があります。 これは、ユーザーの特権仕様の後に「 priv +」が付いている場合に必要であり、暗号化を必須にします。

  • * -A PASSPHRASE *:これは、ユーザーの作成時に指定された認証パスフレーズを提供するために使用されます。

  • * -X PASSPHRASE *:これは、ユーザーの作成時に指定された暗号化パスフレーズです。 何も指定されておらず、暗号化アルゴリズムが指定されている場合、認証パスフレーズが使用されます。 これは、「-x +」パラメーターが指定されている場合、またはユーザーの特権仕様に暗号化が必要な「 priv +」が付いている場合に必要です。

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

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

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

snmpget -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password  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   create

したがって、渡す必要がある認証フラグについて知っていることを使用し、すでに持っているユーザーアカウント( + bootstrap +)を活用して、既に定義したユーザー特権( + demo +)に適合するユーザーを作成できます。 。

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

snmpusm -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password  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  passwd temp_password

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

SNMPv3 Key(s) successfully changed.

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

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

snmpget -u demo -l authPriv -a MD5 -x DES -A  -X   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 +`ファイル内でこれらの設定の詳細を設定するために使用する必要があるディレクティブ名を確認できます。

Command Flag Description Translated snmp.conf directive

-u

The SNMPv3 username to authenticate as.

defSecurityName

-l authPriv

The security level to authenticate with.

defSecurityLevel authPriv

-a MD5

The authentication protocol to use.

defAuthType MD5

-x DES

The privacy (encryption) protocol to use.

defPrivType DES

-A

The authentication passphrase for the supplied username.

defAuthPassphrase

-X

The privacy passphrase fro the supplied username.

defPrivPassphrase

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

defSecurityName demo
defSecurityLevel authPriv
defAuthType MD5
defPrivType DES
defAuthPassphrase
defPrivPassphrase

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

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

入力する代わりに:

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

次のように入力するだけです:

snmpget  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 +`ディレクティブがないという推奨事項を満たします。 また、その一時ユーザーから特権を削除します。

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

snmpusm  delete bootstrap

次の応答が返されます。

User successfully deleted.

結論

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

次のガイドでは、https://www.digitalocean.com/community/tutorials/how-to-use-the-net-snmp-tool-suite-to-manage-and-monitor-の一部について説明します私たちが取り組んできたサーバー[net-snmpツールの基本的な使用法]。 値を1つずつまたは一括で取得する方法と、データを変更する方法を示します。