前書き

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

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

このガイドでは、SNMPプロトコルの基本を紹介します。 その用途、ネットワークでのプロトコルの一般的な使用方法、プロトコルバージョンの違いなどについて説明します。

基本概念

SNMPは、ネットワークスタックのアプリケーションレイヤーに実装されるプロトコルです(https://www.digitalocean.com/community/tutorials/an-introduction-to-networking-terminology-interfaces-and-protocolsについて学ぶには、ここをクリックしてください) #NetworkLayers [ネットワーク層])。 プロトコルは、非常に異なるシステムから一貫した方法で情報を収集する方法として作成されました。 さまざまなシステムに関連して使用できますが、情報を照会する方法と関連情報へのパスは標準化されています。

SNMPプロトコルには複数のバージョンがあり、多くのネットワークハードウェアデバイスは何らかの形式のSNMPアクセスを実装しています。 最も広く使用されているバージョンはSNMPv1ですが、多くの点で安全ではありません。 その人気は、その遍在性と野生での長い時間に大きく起因しています。 特に理由がない限り、より高度なセキュリティ機能を提供するSNMPv3を使用することをお勧めします。

一般に、SNMPによってプロファイルされるネットワークは、主にSNMP * agents *を含むデバイスで構成されます。 エージェントは、ハードウェアに関する情報を収集し、事前定義されたエントリに整理し、SNMPプロトコルを使用してクエリに応答できるプログラムです。

エージェントに情報を照会するこのモデルのコンポーネントは、SNMP *マネージャー*と呼ばれます。 これらのマシンは通常、ネットワーク内のすべてのSNMP対応デバイスに関するデータを保持しており、情報を収集して特定のプロパティを設定する要求を発行できます。

SNMPマネージャー

SNMPマネージャーは、SNMPエージェントで情報をポーリングするように構成されたコンピューターです。 管理コンポーネントは、そのコア機能のみを説明する場合、実際にはクライアント構成ほど複雑ではありません。これは、管理コンポーネントが単にデータを要求するだけだからです。

マネージャーには、正しい資格情報を使用してSNMPエージェントにクエリ要求を送信できる任意のマシンを使用できます。 これは、監視スイートの一部として実装される場合もあれば、簡単なユーティリティを使用して迅速なリクエストを作成する管理者である場合もあります。

SNMPプロトコルで定義されているほとんどすべてのコマンド(後で詳しく説明します)は、マネージャーコンポーネントによって送信されるように設計されています。 これらには、「+ GetRequest 」、「 GetNextRequest 」、「 GetBulkRequest 」、「 SetRequest 」、「 InformRequest 」、および「 Response 」が含まれます。 これらに加えて、マネージャーは、「 Trap」および「+ Response」メッセージに応答するようにも設計されています。

SNMPエージェント

SNMPエージェントが大部分の作業を行います。 彼らは、ローカルシステムに関する情報を収集し、「管理情報ベース」または* MIB *と呼ばれるデータベースを照会、更新できる形式で保存する責任があります。

MIBは、事前に定義された階層構造であり、照会または設定できる情報を保存します。 これは、正しい資格情報(SNMPマネージャー)で認証されたホストから発信された整形式のSNMP要求で利用できます。

エージェントコンピューターは、どのマネージャーがその情報にアクセスする必要があるかを構成します。 また、SNMPトラフィック用に構成されていない接続可能なデバイスに関する情報を報告するための仲介役として機能することもできます。 これにより、コンポーネントをオンラインにしたり、SNMPにアクセスしたりする際の柔軟性が大幅に向上します。

SNMPエージェントは、プロトコルで定義されているほとんどのコマンドに応答します。 これらには、「+ GetRequest 」、「 GetNextRequest 」、「 GetBulkRequest 」、「 SetRequest 」、および「 InformRequest 」が含まれます。 さらに、エージェントは「 Trap +」メッセージを送信するように設計されています。

管理情報ベースについて

SNMPシステムで理解するのが最も難しい部分は、おそらく* MIB *または管理情報ベースです。 MIBは、マネージャとエージェントが順守する標準に従うデータベースです。 これは階層構造であり、多くの分野でグローバルに標準化されていますが、ベンダー固有の追加を可能にするのに十分な柔軟性も備えています。

MIB構造は、トップダウンの階層ツリーとして最もよく理解されています。 分岐する各分岐には、識別番号(1から始まる)と、階層のそのレベルに固有の識別文字列の両方のラベルが付けられます。 文字列と数字は同じ意味で使用できます。

ツリーの特定のノードを参照するには、ツリーの名前のないルートから問題のノードまでのパスをトレースする必要があります。 その親ID(数字または文字列)の系統は、最も一般的なものから始まり、アドレスを形成します。 階層内の各ジャンクションは、この表記ではドットで表されるため、アドレスは、ドットで区切られた一連のID文字列または数字になります。 このアドレス全体は、オブジェクト識別子、または* OID *と呼ばれます。

デバイスにSNMPエージェントを組み込むハードウェアベンダーは、独自のフィールドとデータポイントを持つカスタムブランチを実装する場合があります。 ただし、適切に定義され、任意のデバイスで使用できる標準MIBブランチがあります。

これから説明する標準ブランチは、すべて同じ親ブランチ構造の下にあります。 このブランチは、準拠デバイスの改訂された標準であるMIB-2仕様に準拠する情報を定義します。

このブランチへの基本パスは次のとおりです。

1.3.6.1.2.1

これは、次のような文字列で表すこともできます。

iso.org.dod.internet.mgmt.mib-2

セクション「1.3.6.1」または「+ iso.org.dod.internet 」は、インターネットリソースを定義するOIDです。 ベースパスに続く「+2」または「+ mgmt 」は、管理サブカテゴリ用です。 その下の「+1」または「+ mib-2 +」は、MIB-2仕様を定義します。

これはhttp://www.alvestrand.no/objectid/1.3.6.1.2.1.html[MIBツリーに慣れるための優れたリソース]です。 この特定のページは、これまでに説明したジャンクションの接続ノードを表しています。 「上位」と「子会社」の参照をそれぞれチェックアウトすることで、ツリーの上下にあるものを確認できます。

別の同様のツールは、シスコが提供するhttp://tools.cisco.com/Support/SNMP/do/BrowseOID.do?local=en&substep=2&translate=Translate&tree=NO[SNMP Object Navigator]です。 これは、必要な情報を見つけるために階層にドリルダウンするために使用できます。 SolarWindsからhttps://support.ipmonitor.com/mibs_byoidtree.aspx[similar tree]が提供されています。

基本的に、デバイスに情報を照会する場合、ほとんどのパスは「1.3.6.1.2.1」で始まります。 ツリーインターフェイスを参照して、クエリと設定に使用できる情報の種類を確認できます。

SNMPプロトコルコマンド

SNMPがこのように頻繁に採用されている理由の1つは、使用可能なコマンドの単純さです。 実装または記憶する操作はほとんどありませんが、プロトコルのユーティリティ要件に対応するのに十分な柔軟性があります。

次のPDU、またはプロトコルデータユニットは、プロトコルで許可されている正確なメッセージングタイプを示します。

  • * Get *:Getメッセージは、特定のOIDの値を要求するために、マネージャーからエージェントに送信されます。 この要求には、データとともにマネージャーに返されるResponseメッセージで応答されます。

  • * GetNext *:GetNextメッセージにより、マネージャーはMIB内の次の順次オブジェクトを要求できます。 これは、クエリするOIDを気にせずにMIBの構造を走査できる方法です。

  • * Set *:Setメッセージは、エージェントの変数が保持する値を変更するために、マネージャーからエージェントに送信されます。 これを使用して、構成情報を制御したり、リモートホストの状態を変更したりできます。 これは、プロトコルで定義されている唯一の書き込み操作です。

  • * GetBulk *:このマネージャーからエージェントへの要求は、複数のGetNext要求が行われたかのように機能します。 マネージャーへの返信には、パケットが許可する範囲で可能な限り多くのデータが含まれます(要求によって設定された制約内)。

  • 応答:エージェントによって送信されたこのメッセージは、要求された情報をマネージャーに送信するために使用されます。 要求されたデータのトランスポートとしてだけでなく、要求の受信の確認としても機能します。 要求されたデータを返せない場合、応答にはエラーフィールドが含まれ、詳細情報を設定できます。 応答メッセージは、上記の要求のいずれか、および通知メッセージに対して返される必要があります。

  • トラップ:トラップメッセージは通常、エージェントからマネージャに送信されます。 トラップは、それらを受信するマネージャが要求していないという点で非同期通知です。 これらは主に、管理対象デバイスで発生しているイベントをマネージャに通知するためにエージェントによって使用されます。

  • 通知:トラップの受信を確認するために、マネージャーはエージェントに通知メッセージを送り返します。 エージェントがこのメッセージを受信しない場合、トラップメッセージを再送信し続ける可能性があります。

これらの7つのデータユニットタイプにより、SNMPはネットワークデバイスに関する情報を照会および送信できます。

プロトコルバージョン

SNMPプロトコルは、最初に導入されてから多くの変更が行われました。 最初の仕様は、1988年にRFC 1065、1066、および1067で策定されました。 長い間存在していたという単純な事実により、このバージョンはまだ広くサポートされています。 ただし、プレーンテキストでの認証など、プロトコルには多くのセキュリティ上の問題があるため、特に保護されていないネットワークで使用する場合は、使用をお勧めしません。

プロトコルのバージョン2の作業は1993年に開始され、以前の標準を大幅に改善しています。 このバージョンには、以前のリビジョンに固有のセキュリティ問題に対処するための新しい「パーティベース」セキュリティモデルが含まれていました。 しかし、新しいモデルは理解も実装も難しいため、あまり人気がありませんでした。

このため、バージョン2のいくつかの「スピンオフ」が作成され、それぞれがバージョン2の改善の大部分を保持していましたが、セキュリティモデルは交換されました。 SNMPv2cでは、v1で使用されたのと同じモデルであるコミュニティベースの認証が再導入されました。 これは、v2プロトコルの最も一般的なバージョンでした。 SNMPv2uと呼ばれる別の実装では、ユーザーベースのセキュリティを使用しますが、これはあまり一般的ではありませんでした。 これにより、ユーザーごとの認証設定が可能になりました。

1998年に、SNMPプロトコルの3番目(および現在)のバージョンが仕様提案として入力されました。 ユーザーの観点から、最も関連性の高い変更は、ユーザーベースのセキュリティシステムの採用でした。 次のモデルの1つとして、ユーザーの認証要件を設定できます。

  • * NoAuthNoPriv *:このレベルで接続しているユーザーには認証がなく、送受信するメッセージのプライバシーもありません。

  • * AuthNoPriv *:このモデルを使用する接続は認証する必要がありますが、メッセージは暗号化なしで送信されます。

  • * AuthPriv *:認証が必要であり、メッセージは暗号化されます。

認証に加えて、アクセス制御メカニズムが実装され、ユーザーがアクセスできるブランチをきめ細かく制御できます。 バージョン3には、SSHやTLSなどのトランスポートプロトコルによって提供されるセキュリティを活用する機能もあります。

結論

これで、プロトコルの動作方法を理解できたので、独自のインフラストラクチャにSNMPを実装するために必要な基盤ができました。

https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-an-snmp-daemon-and-client-on-ubuntu-14-04 [次のガイド]では、システムでSNMPを活用するために必要なコンポーネントをインストールおよび構成する方法について説明します。