この節では、IPsec の初期化構成ファイルと、ネットワーク内で IPsec の管理を行うためのさまざまなコマンドについて説明します。ネットワーク内で IPsec を実装する方法については、IPsec の実装 (作業マップ)を参照してください。
表 19–3 選択される IPsec ファイルと IPsec コマンドのリスト
IPsec ファイルまたは IPsec コマンド |
説明 |
---|---|
/etc/inet/ipsecinit.conf ファイル |
IPsec ポリシーファイル。このファイルがある場合、IPsec はブート時に起動する |
ipsecconf コマンド |
IPsec 起動コマンド。 引数として ipsecinit.conf ファイルで ipsecconf を呼び出すと、IPsec ポリシーが起動します。現在の IPsec ポリシーの表示および変更や、テストを行うときに役立ちます。 |
pf_key() インタフェース |
SA データベースのインタフェース。 手動キー管理および自動キー管理を処理する |
ipseckey コマンド |
IPsec SA で使用するキーの起動コマンド。 ipseckey を指定すると、IPsec SA のキー情報が表示されます。 |
/etc/inet/secret/ipseckeysファイル |
IPsec SA のキー。ipsecinit.conf ファイルがある場合、このファイルはブート時に自動的に読み込まれます。 |
/etc/inet/ike/config ファイル |
IKE 構成およびポリシーファイル。このファイルがある場合、IKE デーモン により、/etc/inet/ike/config ファイルが開始およびロードされます。IKE ユーティリティおよび IKE ファイルを参照してください。 |
ipsecconf(1M) コマンドを使用して、ホストの IPsec ポリシーを構成します。 このコマンドを実行してポリシーを構成すると、IPsec ポリシーエントリを保存する ipsecpolicy.conf という名前の一時ファイルが作成されます。そのファイルを使用して、すべての外方向および内方向の IP データグラムがポリシーに沿っているかが検査されます。転送されたデータグラムは、このコマンドで追加されたポリシー検査の対象外になります。転送されたパケットを保護する方法については、ifconfig(1M) と tun(7M) のマニュアルページを参照してください。
ipsecconf コマンドは、スーパーユーザーとして実行する必要があります。このコマンドは、両方向のトラフィックを保護するエントリ、および 1 方向のみのトラフィックを保護するエントリを受け入れます。
方向を指定しないポリシーエントリに laddr host1 (ローカルアドレス) と raddr host2 (リモートアドレス) というパターンが含まれていると、指定されたホストに対して両方向のトラフィックが保護されます。そのため、各ホストにエントリを 1 つだけ設定すれば済みます。saddr host1 daddr host2 (ソースアドレスから宛先アドレスへ) というパターンのポリシーエントリは、1 方向のみのトラフィックを保護します。つまり、外方向または内方向のどちらかです。したがって、両方向のトラフィックを保護するには、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 ソフトウェアには、サンプルの ipsecinit.conf ファイルが組み込まれており、自分で ipsecinit.conf ファイルを作成するときのテンプレートとして利用できます。このサンプルの名前は、ipsecinit.sample であり、次のエントリを含みます。
# #ident "@(#)ipsecinit.sample 1.6 01/10/18 SMI" # # Copyright (c) 1999,2001 by Sun Microsystems, Inc. # All rights reserved. # # This file should be copied to /etc/inet/ipsecinit.conf to enable IPsec # systemwide policy (and as a side-effect, load IPsec kernel modules). # Even if this file has no entries, IPsec will be loaded if # /etc/inet/ipsecinit.conf exists. # # Add entries to protect the traffic using IPsec. The entries in this # file are currently configured using ipsecconf from inetinit script # after /usr is mounted. # # For example, # # {rport 23} ipsec {encr_algs des encr_auth_algs md5} # # Or, in the older (but still usable) syntax # # {dport 23} apply {encr_algs des encr_auth_algs md5 sa shared} # {sport 23} permit {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} # # Or, in the older (but still usable) syntax # # {daddr 10.5.5.0/24} apply {auth_algs any sa shared} # {saddr 10.5.5.0/24} permit {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. # # # WARNING: This file is read before default routes are established, and # before any naming services have been started. The # ipsecconf(1M) command attempts to resolve names, but it will # fail unless the machine uses files, or DNS and the DNS server # is reachable via routing information before ipsecconf(1M) # invocation. (that is, the DNS server is on-subnet, or DHCP # has loaded up the default router already.) # # It is suggested that for this file, use hostnames only if # they are in /etc/hosts, or use numeric IP addresses. # # If DNS gets used, the DNS server is implicitly trusted, which # could lead to compromise of this machine if the DNS server # has been compromised. # |
たとえば、/etc/inet/ipsecpolicy.conf ファイルを、NFS マウントファイルシステムから送信すると、ファイル内のデータが不正に変更される可能性があります。また、設定ポリシーも変更される可能性があります。そのため、ipsecinit.conf ファイルのコピーをネットワークで送信しないでください。
ポリシーは、connect(3SOCKET) または accept(3SOCKET) を実行した TCP/UDP ソケットに対して変更することはできません (“ラッチ”されます)。 新しいポリシーエントリを追加しても、ラッチされたソケットは変更されません。 このラッチ機能は将来変更される可能性があるので、この機能に依存するような設定をしないでください。
ポリシーは通信を開始する前にセットアップしてください。新しいポリシーエントリを追加すると既存の接続が影響を受けることがあるためです。同じ理由から、通信の途中ではポリシーを変更しないでください。
ネットワークで参照できるホストがソースアドレスで、指定システム自体の安全性に問題がある場合、使用される名前は信頼できません。
セキュリティの弱点は、ツール自体ではなく、ツールの使用方法にあります。ipsecconf コマンドを使用するときは注意が必要です。各操作の最も安全なモードでコンソールを使用するか、ハード接続の TTY を使用してください。
IPsec セキュリティサービスのキー情報は、セキュリティアソシエーションデータベース (SADB) に保存されます。 セキュリティアソシエーションは、入力パケットと出力パケットを保護します。ユーザープロセス (場合によってはマルチ連携プロセス) では、特殊なソケットからのメッセージを送信することで SADB を管理します。これは、route(7P) のマニュアルページで説明した方法に類似しています。SADB にアクセスできるのはスーパーユーザーだけです。
出力データグラムの新しい SA に対する要求などの外部イベントに対する応答として、あるいは既存の SA の期限切れを報告するために、オペレーティングシステムからメッセージが自動的に発信されることがあります。先に説明したソケットコールを使用して、SADB 制御メッセージを伝えるためのチャンネルを開いてください。システムごとに複数のキーソケットを開くことができます。
メッセージには、小さいベースヘッダー、その後に続いて多くの (0 以上) 拡張メッセージが含まれています。メッセージの中には、追加データが必要なものもあります。ベースメッセージと拡張メッセージのいずれも 8 バイト配列である必要があります。たとえば GET メッセージの場合、ベースヘッダー、SA 拡張メッセージ、ADDRESS_DST 拡張メッセージが必要です。詳細については、pf_key(7P) を参照してください。
IKE プロトコルは、IPv4 アドレスの自動キーユーティリティです。IKE の設定方法については、第 21 章「インターネットキー交換」 を参照してください。 手動でキーを操作するユーティリティには、ipseckey(1M) コマンドがあります。
ipseckey コマンドを使用して、ipsecah(7P) と ipsecesp(7P) の保護機構で SA データベースを手動で操作できます。 また、自動キー管理が無効な場合に、通信パーティ間の SA をセットアップするときも、ipseckey コマンドを使用します。例としては、IPv6 アドレスを持つ通信パーティ間が挙げられます。
ipseckey コマンドには少数の一般オプションしかありませんが、多くのコマンド言語をサポートしています。マニュアルキー操作に固有のプログラムインタフェースで要求を配信するように指定することもできます。詳細については、pf_key(7P) のマニュアルページを参照してください。引数なしで ipseckey を呼び出すと、対話モードになり、エントリを入力できるプロンプトが表示されます。コマンドによっては、明示的なセキュリティアソシエーション (SA) タイプが必要ですが、それ以外は、ユーザーが SA を指定すれば、すべての SA タイプで動作します。
ipseckey コマンド使用すると、特権ユーザーは微妙な暗号キー情報を入力できます。 場合によっては、不正にこの情報にアクセスして IPsec トラフィックのセキュリティを損なうことも可能です。キー情報を扱う場合および ipseckey コマンドを使用する場合には、次のことに注意してください。
キー情報を更新しているかどうか。定期的にキーを更新することが、セキュリティの基本作業となります。キーを変更することで、アルゴリズムとキーの脆弱性が暴かれないように保護し、公開されたキーの侵害を制限します。
TTY がネットワークに接続されているか (対話モードになっているか)。
TTY が対話モードの場合、キー情報のセキュリティは、TTY のトラフィックに対応するネットワークパスのセキュリティになります。 clear-text telnet や rlogin セッションでは、ipseckey コマンドを使用しないでください。
ローカルウィンドウでも、ウィンドウを読み取ることのできる隠密プログラムからの攻撃には無防備です。
ファイルがネットワーク経由でアクセス状態にあるか、または外部から読み取り可能な状態になっているか (-f オプション)。
ネットワークマウントファイルの読み取り時に、不正に読み取ることができます。外部から読み取れるファイルにキー情報を保存して使用しないでください。
ネットワークで参照できるホストがソースアドレスで、指定システム自体の安全性に問題がある場合、使用される名前は信用できません。
セキュリティの弱点は、ツール自体ではなく、ツールの使用方法にあります。ipseckey コマンドを使用するときには注意が必要です。各操作の最も安全なモードでコンソールを使用するか、ハード接続の TTY を使用してください。
ifconfig コマンドには、トンネルインタフェースで IPsec ポリシーを管理するオプションがあります。また、snoop コマンドを使用して AH ヘッダーと ESP ヘッダーを構文解析できます。
IPsec をサポートするため、ifconfig(1M) に次のオプションが追加されました。
このオプションを設定すると、指定した認証アルゴリズムで、トンネルにIPsec AH を使用できます。auth_algs オプションの書式は次のとおりです。
auth_algs authentication_algorithm |
アルゴリズムは番号またはアルゴリズム名です。特定のアルゴリズムが指定されないようにするパラメータ any も使用できます。IPsec トンネル属性は、すべて同じコマンド行に指定します。トンネルセキュリティを無効にするには、次のオプションを指定します。
auth_alg none |
サポートされる認証アルゴリズムとその詳細を説明したマニュアルページのリストについては、表 19–1 を参照してください。
このオプションでは、認証アルゴリズムを指定してトンネルの IPsec ESP を有効にします。encr_auth_algs オプションの書式は次のとおりです。
encr_auth_algs authentication_algorithm |
アルゴリズムには、番号またはアルゴリズム名を指定できます。特定のアルゴリズムが指定されないようにするパラメータ any も使用できます。ESP 暗号化アルゴリズムを指定し、認証アルゴリズムを指定しない場合、ESP 認証アルゴリズム値はデフォルトのパラメータ any になります。
サポートされる認証アルゴリズムとそのアルゴリズムの詳細を説明したマニュアルページのリストについては、表 19–1 を参照してください。
このオプションでは、暗号化アルゴリズムを指定したトンネルで IPsec ESP を有効にできます。オプションの書式は次のとおりです。
encr_algs encryption_algorithm |
このアルゴリズムの場合、番号またはアルゴリズム名を指定できます。IPsec トンネル属性は、すべて同じコマンド行に指定します。トンネルセキュリティを無効にするには、次のオプションを指定します。
encr_alg none |
ESP 認証アルゴリズムを指定し、暗号化アルゴリズムを指定しない場合、ESP 暗号化アルゴリズム値はデフォルトのパラメータ null になります。
サポートされる暗号化アルゴリズムとその詳細を説明したマニュアルページのリストについては、ipsecesp(7P) のマニュアルページまたは表 19–2 を参照してください。
snoop コマンドでも、AH ヘッダーと ESP ヘッダーを構文解析できるようになりました。ESP はそのデータを暗号化するので、snoop は ESP で暗号化されて保護されたヘッダーを読み取ることができませんが、AH ではデータは暗号化されないので、snoop でトラフィックを確認できます。パケットに AH が使用されている場合、snoop -V オプションで表示できます。詳細については、snoop(1M) のマニュアルページを参照してください。