この節では、IPsec を初期化する構成ファイルについて説明します。また、ネットワーク内で IPsec の管理を行うためのさまざまなコマンドについても説明します。ネットワーク内で IPsec を実装する方法については、IPsec の実装 (作業マップ)を参照してください。
表 1–3 選択される IPsec ファイルと IPsec コマンドのリスト
IPsec ファイルまたは IPsec コマンド |
説明 |
---|---|
/etc/inet/ipsecinit.conf ファイル | |
ipsecconf コマンド |
IPsec ポリシーコマンド。起動スクリプトは、ipsecconf を使って /etc/inet/ipsecinit.conf ファイルを読み込み、IPsec を起動する。現在の IPsec ポリシーの表示および変更や、テストを行うときに役立つ |
PF_KEY ソケットインタフェース | |
ipseckey コマンド |
IPsec SA 保守およびキーコマンド。ipseckey は、PF_KEY インタフェースに対するコマンド行フロントエンド。ipseckey では、セキュリティアソシエーションの作成、削除、または変更ができる |
/etc/inet/secret/ipseckeys ファイル |
IPsec SA のキー。ipsecinit.conf ファイルがある場合、ipseckeys ファイルはブート時に自動的に読み込まれる |
/etc/inet/ike/config ファイル |
IKE 構成およびポリシーファイル。このファイルがある場合、IKE デーモン in.iked は自動キー管理機能を提供する。/etc/inet/ike/config ファイル内の規則およびグローバルパラメータに基づいて管理が行われる。IKE ユーティリティおよび IKE ファイルを参照 |
ipsecconf コマンドを使用して、ホストの IPsec ポリシーを構成します。このコマンドを実行してポリシーを設定すると、ipsecpolicy.conf という名前の一時ファイルが作成されます。このファイルには、ipsecconf コマンドによってカーネルに設定された IPsec ポリシーエントリが格納されます。システムは、カーネル内 IPsec ポリシーエントリを使用して、すべてのアウトバウンドおよびインバウンド IP データグラムがポリシーに沿っているか検査します。転送されたデータグラムは、このコマンドで追加されたポリシー検査の対象外になります。転送されたパケットを保護する方法については、ifconfig(1M) と tun(7M) のマニュアルページを参照してください。IPsec ポリシーオプションについては、ipsecconf(1M) のマニュアルページを参照してください。
ipsecconf コマンドを呼び出すには、スーパーユーザーになるか、同等の役割を引き受ける必要があります。このコマンドは、両方向のトラフィックを保護するエントリ、および 1 方向のみのトラフィックを保護するエントリを受け入れます。
ローカルアドレスとリモートアドレスというパターンのポリシーエントリは、1 つのポリシーエントリで両方向のトラフィックを保護します。たとえば、指定されたホストに対して方向が指定されていない場合、laddr host1 と raddr host2 というパターンをもつエントリは、両方向のトラフィックを保護します。したがって、各ホストにポリシーエントリを 1 つだけ設定すれば済みます。ソースアドレスから宛先アドレスへというパターンのポリシーエントリは、1 方向のみのトラフィックを保護します。たとえば、saddr host1 daddr host2 というパターンのポリシーエントリは、インバウンドかアウトバウンドのどちらかのトラフィックのみを保護します。両方向ともは保護しません。したがって、両方向のトラフィックを保護するには、saddr host2 daddr host1 のようなエントリも ipsecconf コマンドに渡す必要があります。
引数を指定しないで ipsecconf コマンドを実行すると、システムに構成されているポリシーを確認できます。各エントリが、インデックスとその後に番号が付いて表示されます。-d オプションでインデックスを指定すると、システム内の指定されたポリシーが削除されます。このコマンドで表示されるエントリの順序はエントリが追加された順であり、必ずしもトラフィックを照合する順序ではありません。トラフィックの照合が行われる順序を確認するには、-l オプションを使用します。
ipsecpolicy.conf ファイルは、システムのシャットダウン時に削除されます。マシンのブート時に IPsec ポリシーを起動させるには、マシンのブート時に inetinit スクリプトによって読み込まれる IPsec ポリシーファイル /etc/inet/ipsecinit.conf を作成する必要があります。
Solaris オペレーティング環境を起動したときに IPsec セキュリティポリシーを呼び出すには、特定の IPsec ポリシーエントリを利用して、IPsec を初期化する構成ファイルを作成します。ファイルの名前は、/etc/inet/ipsecinit.conf とします。ポリシーエントリとその形式の詳細については、ipsecconf(1M) のマニュアルページを参照してください。ポリシーの構成後、ipsecconf コマンドを使用してポリシーを一時的に削除したり、既存の構成を表示したりすることができます。
Solaris ソフトウェアには、IPsec ポリシーファイルの例が含まれています。このサンプルファイルの名前は ipsecinit.sample です。このファイルをテンプレートとして独自の ipsecinit.conf ファイルを作成することができます。ipsecinit.sample ファイルには、次のエントリが含まれています。
# # For example, # # {rport 23} ipsec {encr_algs des encr_auth_algs md5} # # will protect the telnet traffic originating from the host with ESP using # DES and MD5. Also: # # {raddr 10.5.5.0/24} ipsec {auth_algs any} # # will protect traffic to or from the 10.5.5.0 subnet with AH # using any available algorithm. # # # To do basic filtering, a drop rule may be used. For example: # # {lport 23 dir in} drop {} # {lport 23 dir out} drop {} # # will disallow any remote system from telnetting in. |
たとえば、/etc/inet/ipsecinit.conf ファイルを、NFS マウントファイルシステムから送信すると、ファイル内のデータが不正に変更される可能性があります。また、設定ポリシーも変更される可能性があります。そのため、ipsecinit.conf ファイルのコピーをネットワークで送信しないでください。
TCP ソケットまたは UDP ソケットに対して、connect() または accept() 関数呼び出しが行われた場合、これらのソケットのポリシーを変更することはできません。ポリシーの変更ができないソケットを、ラッチされたソケットと呼びます。新しいポリシーエントリは、すでにラッチされたソケットを保護しません。connect(3SOCKET) と accept(3SOCKET) のマニュアルページを参照してください。
ポリシーは通信を開始する前にセットアップしてください。新しいポリシーエントリを追加すると既存の接続が影響を受けることがあるためです。同じ理由から、通信の途中ではポリシーを変更しないでください。
ネーミングシステムを保護してください。次の 2 つの条件に該当する場合、そのホスト名は信頼できません。
ソースアドレスが、ネットワークを介して参照できるホストである
ネーミングシステムの信頼性に問題がある
セキュリティの弱点の多くは、実際のツールではなく、ツールの使用方法にあります。ipsecconf コマンドを使用するときは注意が必要です。安全に操作するため、コンソールなどの、ハード接続の TTY を使用してください。
IPsec セキュリティサービスのキー情報は、セキュリティアソシエーションデータベース (SADB) に保存されます。 セキュリティアソシエーションは、インバウンドパケットとアウトバウンドパケットを保護します。ユーザープロセス (場合によってはマルチ連携プロセス) では、特殊なソケットからのメッセージを送信することで SADB を管理します。SADB を保守するこの方法は、 route(7P) のマニュアルページで説明している方法に類似しています。SADB にアクセスできるのは、スーパーユーザーか、同等の役割を引き受けた人だけです。
オペレーティングシステムは、外部イベントに対する応答としてメッセージを自動的に発信する場合があります。たとえば、システムがアウトバウンドデータグラムに対する新しい SA を要求したり、既存の SA の期限切れを報告する場合です。先に説明したソケットコールを使用して、SADB 制御メッセージを伝えるためのチャンネルを開いてください。システムごとに複数のキーソケットを開くことができます。
メッセージには、小さいベースヘッダーがあり、そのあとにいくつかの拡張メッセージが続きます。拡張メッセージの数はゼロの場合もあれば、1 以上の場合もあります。メッセージの中には、追加データが必要なものもあります。ベースメッセージと拡張メッセージのいずれも 8 バイト配列である必要があります。たとえば GET メッセージの場合、ベースヘッダー、SA 拡張メッセージ、ADDRESS_DST 拡張メッセージが必要です。詳細については、pf_key(7P) を参照してください。
IKE プロトコルは、IPv4 および IPv6 アドレスの自動キーユーティリティです。IKE の設定方法については、第 4 章「IKE の管理 (手順)」を参照してください。手動でキーを操作するキーユーティリティには、ipseckey コマンドがあります。ipseckey(1M) のマニュアルページを参照してください。
ipseckey コマンドを使用して、ipsecah と ipsecesp の保護機構で SA データベースを手動で操作できます。また、自動キー管理が無効な場合に、通信パーティ間の SA をセットアップするときも、ipseckey コマンドを使用します。
ipseckey コマンドには少数の一般オプションしかありませんが、多くのコマンド言語をサポートしています。マニュアルキー操作に固有のプログラムインタフェースで要求を配信するように指定することもできます。詳細については、pf_key(7P) のマニュアルページを参照してください。引数なしで ipseckey を呼び出すと、対話モードになり、エントリを入力できるプロンプトが表示されます。コマンドによっては、明示的なセキュリティアソシエーション (SA) タイプが必要ですが、それ以外は、ユーザーが SA を指定すれば、すべての SA タイプで動作します。
ipseckey コマンドを使用すると、特権ユーザーは微妙な暗号キー情報を入力できます。場合によっては、不正にこの情報にアクセスして IPsec トラフィックのセキュリティを損なうことも可能です。キー情報を扱う場合および ipseckey コマンドを使用する場合には、次のことに注意してください。
キー情報を更新しているかどうか。定期的にキーを更新することが、セキュリティの基本作業となります。キーを更新することで、アルゴリズムとキーの脆弱性が暴かれないように保護し、公開されたキーの侵害を制限します。
TTY がネットワークに接続されているか。ipseckey コマンドは対話モードで実行されているか。
対話モードの場合には、キー情報のセキュリティは、TTY のトラフィックに対応するネットワークパスのセキュリティになります。clear-text telnet や rlogin セッションでは、ipseckey コマンドを使用しないでください。
ローカルウィンドウでも、ウィンドウを読み取ることのできる隠密プログラムからの攻撃には無防備です。
ファイルはネットワークを介してアクセスされているか。ファイルは外部から読み取り可能か。-f オプションを使用しているか。
セキュリティの弱点の多くは、実際のツールではなく、ツールの使用方法にあります。ipseckey コマンドを使用するときには注意が必要です。安全に操作するため、コンソールなどの、ハード接続の TTY を使用してください。
ifconfig コマンドには、トンネルインタフェースで IPsec ポリシーを管理するオプションがあります。また、snoop コマンドを使用して AH ヘッダーと ESP ヘッダーを構文解析できます。
IPsec をサポートするため、ifconfig に次のオプションが追加されました。
1 回の呼び出しで、1 つのトンネルにすべての IPsec セキュリティオプションを指定する必要があります。たとえば、ESP だけを使ってトラフィックを保護する場合、次のように両方のセキュリティオプションを指定して、トンネル ip.tun0 を設定します。
# ifconfig ip.tun0 … encr_algs 3DES encr_auth_algs MD5 |
同様に、ipsecinit.conf エントリは、次のように両方のセキュリティオプションを指定して、トンネルを設定します。
# WAN トラフィックは 3DES および MD5 とともに ESP を使用します。 {} ipsec {encr_algs 3des encr_auth_algs md5} |
このオプションを設定すると、指定した認証アルゴリズムで、トンネルに IPsec AH を使用できます。auth_algs オプションの書式は次のとおりです。
auth_algs authentication-algorithm |
アルゴリズムには、番号またはアルゴリズム名を指定できます。特定のアルゴリズムが指定されないようにするパラメータ any も使用できます。トンネルセキュリティを無効にするには、次のオプションを指定します。
auth_algs none |
サポートされる認証アルゴリズムとその詳細を説明したマニュアルページのリストについては、表 1–1 を参照してください。
このオプションを設定すると、指定した認証アルゴリズムで、トンネルに IPsec ESP を使用できます。encr_auth_algs オプションの書式は次のとおりです。
encr_auth_algs authentication-algorithm |
アルゴリズムには、番号またはアルゴリズム名を指定できます。特定のアルゴリズムが指定されないようにするパラメータ any も使用できます。ESP 暗号化アルゴリズムを指定し、認証アルゴリズムを指定しない場合、ESP 認証アルゴリズム値はデフォルトのパラメータ any になります。
サポートされる認証アルゴリズムとそのアルゴリズムの詳細を説明したマニュアルページのリストについては、表 1–1 を参照してください。
このオプションを設定すると、指定した暗号化アルゴリズムで、トンネルに IPsec ESP を使用できます。encr_algs オプションの書式は次のとおりです。
encr_algs encryption-algorithm |
アルゴリズムには、番号またはアルゴリズム名を指定できます。トンネルセキュリティを無効にするには、次のオプションを指定します。
encr_algs none |
ESP 認証アルゴリズムを指定し、暗号化アルゴリズムを指定しない場合、ESP 暗号化アルゴリズム値はデフォルトのパラメータ null になります。
使用可能な暗号化アルゴリズムの一覧とアルゴリズムのマニュアルページへのポインタについては、ipsecesp(7P) のマニュアルページまたは 表 1–2 を参照してください。
snoop コマンドでも、AH ヘッダーと ESP ヘッダーを構文解析できるようになりました。ESP はそのデータを暗号化するので、snoop は ESP で暗号化されて保護されたヘッダーを読み取ることができませんが、AH ではデータは暗号化されないので、このコマンドでトラフィックを確認できます。パケットに AH が使用されている場合、snoop -V オプションで表示できます。詳細については、snoop(1M) のマニュアルページを参照してください。
保護されたパケットに対する snoop の冗長出力例については、パケットが保護されていることを確認する方法を参照してください。