著者は、 Write for DOnations プログラムの一環として、 InternetArchiveを選択して寄付を受け取りました。

序章

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

SNMPは、簡易ネットワーク管理プロトコルの略です。 これは、サーバーが現在の状態に関する情報を共有できる方法であり、管理者が事前定義された値を変更できるチャネルでもあります。 プロトコル自体は軽量ですが、SNMPを実装するプログラムの構造は急速に複雑になる可能性があります。 SNMPプロトコルの基本の詳細については、SNMPの概要の記事を参照してください。

このガイドでは、SNMPを使用して通信するためのツールを設定します。 デモには2台のUbuntu18.04サーバーを使用します。 1つにはSNMPマネージャーが含まれ、エージェントと通信してネットワークデバイスを実装します。 これをマネージャーサーバーと呼びます。 もう一方のサーバーにはSNMPエージェントがあり、マネージャーサーバーからの注文に対応します。 これをエージェントサーバーと呼びます。 エージェントをマネージャーマシンにインストールすることもできますが、エージェントを分離しておくと、各コンポーネントが提供する機能を簡単に示すことができます。

前提条件

このチュートリアルに従うには、次のものが必要です。

  • Ubuntu 18.04[X96Xの初期サーバーセットアップガイド]に従ってセットアップされた2つのUbuntu18.04サーバー。これには、sudo権限を持つroot以外のユーザーと、ufwで構成されたファイアウォールが含まれます。

ステップ1—SNMPデーモンとユーティリティのインストール

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

ローカルマシンから、root以外のユーザーとしてマネージャーサーバーにログインします。

  1. ssh your_username@manager_server_ip_address

APTパッケージマネージャーのパッケージインデックスを更新します。

sudo apt update

次に、SNMPソフトウェアをインストールします。

  1. sudo apt install snmp snmp-mibs-downloader

The snmp パッケージは、エージェントにSNMP要求を発行するためのコマンドラインツールのコレクションを提供します。 The snmp-mibs-downloader パッケージは、ネットワークオブジェクトを追跡する管理情報ベース(MIB)ファイルのインストールと管理に役立ちます。

次に、ローカルマシンで新しい端末を開き、エージェントサーバーにログインします。

  1. ssh your_username@agent_server_ip_address

エージェントサーバーで、パッケージインデックスを更新します。

  1. sudo apt update

次に、SNMPデーモンをインストールします

  1. sudo apt install snmpd

あなたは必要ないことに注意してください snmp-mibs-downloader エージェントサーバーはMIBファイルを管理しないため、パッケージ。

これらのコンポーネントをインストールしたので、マネージャーサーバーを構成します。

ステップ2—SNMPManagerサーバーの構成

前述のように、作業の大部分はエージェントサーバーで行われるため、マネージャーサーバーでの構成はそれほど複雑ではありません。 1つのファイルを変更するだけで、SNMPツールがインストールした追加のMIBデータを使用できるようになります。

マネージャーサーバーで、 /etc/snmp/snmp.conf sudo権限を持つテキストエディタのファイル。 このチュートリアルでは、 nano:

  1. sudo nano /etc/snmp/snmp.conf

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

/etc/snmp/snmp.conf
# As the snmp packages come without MIB files due to license reasons, loading
# of MIBs is disabled by default. If you added the MIBs you can reenable
# loading them by commenting out the following line.
#mibs :

保存して閉じます snmp.conf を押すことによって CTRL+X、 に続く Y、 その後 ENTER 使用している場合 nano.

これでマネージャーサーバーの構成は完了ですが、次の手順で行うエージェントサーバーの構成には、このサーバーを使用する必要があります。

ステップ3—SNMPエージェントサーバーの構成

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

このチュートリアルでは、SNMPプロトコルのバージョン3を使用します。 SNMPv1およびv2とは異なり、SNMPv3では、各メッセージにエンコードされたセキュリティパラメータが含まれています。 このステップでは、SNMPv3認証とアクセス制御ルールを構成します。

開始するには、エージェントサーバーで、sudo権限を使用してデーモンの構成ファイルを開きます。

  1. sudo nano /etc/snmp/snmpd.conf

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

まず、変更する必要があります agentAddress 指令。 現在、ローカルコンピューターからの接続のみを許可するように設定されています。 現在の行をコメントアウトし、下の行のコメントを解除する必要があります。これにより、すべての接続が可能になります。

/etc/snmp/snmpd.conf
#  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 ファイルの最後までの行:

/etc/snmp/snmpd.conf
...
createUser bootstrap MD5 temp_password DES

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

また、指定して暗号化の使用を強制します priv あなたのユーザーの後。 ユーザーをMIBの特定の部分に制限する場合は、ユーザーが行末でアクセスできる最高レベルのオブジェクト識別子(OID)を指定できます。

このチュートリアルの目的のために、両方の行は次のようになります。

/etc/snmp/snmpd.conf
...
rwuser bootstrap priv
rwuser demo priv

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

これらの変更を実装するには、 snmpd エージェントサーバーのサービス:

  1. sudo systemctl restart snmpd

SNMPデーモンはポートで接続をリッスンします :161. マネージャーサーバーからこのポートへの接続を許可するようにUFWを構成します。

  1. sudo ufw allow from manager_server_ip_address to any port 161

UFWの詳細については、 Ubuntu18.04でUFWを使用してファイアウォールを設定する方法をご覧ください。

エージェントサーバーが構成されたので、マネージャーサーバーからエージェントサーバーに接続して、接続を確認できます。

ステップ4—エージェントサーバーへの認証を確認する

このステップでは、bootstrapアカウントでエージェントサーバーに接続できることをテストします。 ただし、その前に、このチュートリアルでは、SNMPコマンドを送信する一般的な構造について少し説明します。

に含まれているツールスイートを使用する場合 snmp パッケージ( net-snmp ソフトウェアスイート)、コマンドを呼び出さなければならない方法にはいくつかのパターンがあります。 最初に行うことは、通信したいSNMPデーモンで認証することです。 これには通常、いくつかの情報を提供することが含まれます。 一般的なものは次のとおりです。

  • -v:このフラグは、使用するSNMPプロトコルのバージョンを指定するために使用されます。 このチュートリアルではv3を使用します。
  • -c:このフラグは、認証にSNMPv1またはv2スタイルのコミュニティストリングを使用している場合に使用されます。 v3スタイルのユーザーベースの認証を使用しているため、これを行う必要はありません。
  • -u:このパラメーターは、認証するユーザー名を指定するために使用されます。 SNMPを使用して何かを読み取ったり変更したりするには、既知のユーザー名で認証する必要があります。
  • -l:これは、接続しているセキュリティレベルを指定するために使用されます。 可能な値は次のとおりです。 noAuthNoPriv 認証も暗号化もなしの場合、 authNoPriv 認証用ですが暗号化なし、および authPriv 認証と暗号化用。 使用しているユーザー名は、指定したセキュリティレベルで動作するように構成する必要があります。そうしないと、認証が成功しません。
  • -a:このパラメータは、使用する認証プロトコルを指定するために使用されます。 可能な値は次のとおりです。 MD5 また SHA. これは、ユーザーの作成時に指定された情報と一致する必要があります。
  • -x:このパラメータは、使用する暗号化プロトコルを指定するために使用されます。 可能な値は次のとおりです。 DES また AES. これは、ユーザーの作成時に指定された情報と一致する必要があります。 これは、ユーザーの特権仕様に priv その後、暗号化を必須にします。
  • -A:これは、ユーザーの作成時に指定された認証パスフレーズを与えるために使用されます。
  • -X:これは、ユーザーの作成時に指定された暗号化パスフレーズです。 何も指定されていないが暗号化アルゴリズムが指定されている場合は、認証パスフレーズが使用されます。 これは、 -x パラメータが指定されているか、ユーザーの特権仕様に priv その後、暗号化が必要です。

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

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

マネージャーサーバーから、ブートストラップアカウントが使用可能であることを確認するためにテストします。 次のように入力して、エージェントサーバーのシステム情報を表示します。

  1. snmpget -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password agent_server_ip_address 1.3.6.1.2.1.1.1.0

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

これにより、次の出力が得られます。

Output
SNMPv2-MIB::sysDescr.0 = STRING: Linux agent 4.15.0-66-generic #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 x86_64

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

ステップ5—通常のユーザーアカウントを設定する

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

マネージャーサーバーでは、テンプレートからユーザーを作成できます。 snmpusm ツールと次の一般的な構文:

snmpusm authentication_info agent_server_ip_address create new_user existing_user

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

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

  1. snmpusm -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password agent_server_ip_address create demo bootstrap

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

Output
User successfully created.

これで、エージェントサーバーdemoという完全に機能するユーザーができました。 ただし、bootstrapアカウントと同じ認証情報を引き続き使用しています。 セキュリティを強化するために、パスワードを別のものに変更できます。 今回は、demoアカウントを使用して認証します。 パスワードは8文字以上にする必要があります。

  1. snmpusm -u demo -l authPriv -a MD5 -x DES -A temp_password -X temp_password agent_server_ip_address passwd temp_password new_password

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

Output
SNMPv3 Key(s) successfully changed.

エージェントサーバーにSNMPサービスの実行時間を尋ねることで、新しい資格情報とパスワードをテストできます。 を使用します snmpget エージェントサーバーから単一の値を取得するコマンド。

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

  1. snmpget -u demo -l authPriv -a MD5 -x DES -A new_password -X new_password agent_server_ip_address sysUpTime.0

リモートSNMPデーモンが最後に再起動された時刻を表す値が返されます。

Output
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (53309) 0:08:53.09

これで、demoという名前の有効なユーザーアカウントが作成されました。 次のステップでは、クライアントを構成することにより、SNMPコマンドの操作を簡素化します。

ステップ6—クライアント構成ファイルの作成

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

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

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

  1. sudo nano /etc/snmp/snmp.conf

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

  1. mkdir ~/.snmp
  2. nano ~/.snmp/snmp.conf

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

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

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

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

snmp.conf
defSecurityName demo
defSecurityLevel authPriv
defAuthType MD5
defPrivType DES
defAuthPassphrase new_password
defPrivPassphrase new_password

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

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

入力する代わりに:

  1. snmpget -u demo -l authPriv -a MD5 -x DES -A new_password -X new_password agent_server_ip_address sysUpTime.0

次のように入力できます。

  1. snmpget agent_server_ip_address sysUpTime.0

ご覧のとおり、これにより、各リクエストで提供する必要のある情報の量が大幅に削減されます。 次に、 bootstrap アカウントを削除して、ネットワークセキュリティを強化します。

ステップ7—ブートストラップアカウントを削除する

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

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

  1. sudo nano /etc/snmp/snmpd.conf

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

/etc/snmp/snmpd.conf
...
#createUser bootstrap MD5 temp_password DES
#rwuser bootstrap priv
...

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

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

  1. [environment second]
  2. sudo systemctl restart snmpd

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

bootstrapユーザーを完全に削除する場合 usmUserTableマネージャーサーバーから次のコマンドを発行することでこれを行うことができます。

  1. snmpusm agent_server_ip_address delete bootstrap

次の応答が返されます。

Output
User successfully deleted.

結論

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

詳細については、 Net-SNMPツールスイートを使用してサーバーを管理および監視する方法チュートリアルを使用して、SNMPツールと、それらを使用して値を1つずつまたは一括で取得する方法を学ぶことができます。とデータを変更する方法。