Solaris のシステム管理 (IP サービス)

第 21 章 IP セキュリティーアーキテクチャー (リファレンス)

この章では、次の内容について説明します。

使用しているネットワークに IPsec を実装する方法については、第 20 章IPsec の構成 (手順)を参照してください。IPsec の概要については、第 19 章IP セキュリティーアーキテクチャー (概要)を参照してください。

IPsec サービス管理機能

サービス管理機能 (SMF) は、次の IPsec サービスを提供します。

SMF の詳細については、『Solaris のシステム管理 (基本編)』の第 18 章「サービスの管理 (概要)」を参照してください。smf(5)svcadm(1M)、および svccfg(1M) のマニュアルページも参照してください。

ipsecconf コマンド

ホストの IPsec ポリシーを構成するには、ipsecconf コマンドを使用します。このコマンドを実行してポリシーを設定すると、IPsec ポリシーのエントリがカーネル内に作成されます。システムは、これらのエントリを使用して、インバウンドおよびアウトバウンドの IP データグラムすべてがポリシーに沿っているかどうかを検査します。転送されたデータグラムは、このコマンドで追加されたポリシー検査の対象外になります。また、ipsecconf コマンドはセキュリティーポリシーデータベース (SPD) を構成します。

ipsecconf コマンドを呼び出すには、スーパーユーザーになるか、同等の役割を引き受ける必要があります。このコマンドは、両方向のトラフィックを保護するエントリを受け入れます。このコマンドは、片方向だけのトラフィックを保護するエントリも受け入れます。

ローカルアドレスとリモートアドレスというパターンのポリシーエントリは、1 つのポリシーエントリで両方向のトラフィックを保護します。たとえば、指定されたホストに対して方向が指定されていない場合、laddr host1raddr host2 というパターンを含むエントリは、両方向のトラフィックを保護します。そのため、各ホストにポリシーエントリを 1 つだけ設定すれば済みます。

ソースアドレスから宛先アドレスへというパターンのポリシーエントリは、1 方向のみのトラフィックを保護します。たとえば、saddr host1 daddr host2 というパターンのポリシーエントリは、インバウンドかアウトバウンドのどちらかのトラフィックのみを保護します。両方向ともは保護しません。したがって、両方向のトラフィックを保護するには、saddr host2 daddr host1 とという先ほどとは逆方向のエントリを ipsecconf コマンドに渡す必要があります。

マシンがブートするときに IPsec ポリシーが確実にアクティブになるようにするには、IPsec ポリシーファイル /etc/inet/ipsecinit.conf を作成します。このファイルは、ネットワークサービスが起動するときに読み取られます。IPsec ポリシーファイルを作成する方法については、「IPsec によるトラフィックの保護 (作業マップ)」を参照してください。

Solaris 10 4/09 リリース以降では、-c オプションを指定して ipsecconf コマンドを実行すると、引数として指定した IPsec ポリシーファイルの構文がチェックされます。

ipsecconf コマンドで追加されたポリシーエントリには持続性がなく、システムのリブート時に失われます。システムの起動時に IPsec ポリシーが確実にアクティブになるようにするには、/etc/inet/ipsecinit.conf ファイルにポリシーエントリを追加します。現在のリリースでは、policy サービスを更新するか有効にします。Solaris 10 4/09 リリースより前のリリースでは、リブートするか ipsecconf コマンドを使用します。例については、「IPsec によるトラフィックの保護 (作業マップ)」を参照してください。

ipsecinit.conf ファイル

Solaris オペレーティングシステム (Solaris OS) を起動したときに IPsec セキュリティーポリシーを呼び出すには、特定の IPsec ポリシーエントリを利用して構成ファイルを作成し IPsec を初期化します。このファイルのデフォルトの名前は /etc/inet/ipsecinit.conf です。ポリシーエントリとその形式の詳細については、ipsecconf(1M) のマニュアルページを参照してください。ポリシーの構成後、ipsecconf コマンドを使用すると、既存の構成を表示または変更できます。Solaris 10 4/09 リリース以降では、policy サービスを更新することによって、既存の構成を変更します。

サンプルの ipsecinit.conf ファイル

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.
#
# If you are using IPv6, it may be useful to bypass neighbor discovery
# to allow in.iked to work properly with on-link neighbors. To do that,
# add the following lines:
#
#        {ulp ipv6-icmp type 133-137 dir both } pass { }
#
# This will allow neighbor discovery to work normally.

ipsecinit.confipsecconf のセキュリティーについて

ipsecinit.conf ファイルをネットワーク経由で転送するときには、特に注意する必要があります。ネットワークマウントファイルが読み取られている場合、不正に読み取られる可能性があります。たとえば、NFS マウントされたファイルシステムから /etc/inet/ipsecinit.conf ファイルをアクセスまたはコピーしようとした場合、このファイルに含まれるポリシーは不正に変更される可能性があります。

IPsec ポリシーは通信を開始する前に設定してください。新しいポリシーエントリを追加すると既存の接続が影響を受けることがあるためです。同じ理由から、通信の途中ではポリシーを変更しないでください。

特に、SCTP ソケット、TCP ソケット、または UDP ソケットに対して、connect() または accept() 関数呼び出しが行われた場合、これらのソケットの IPsec ポリシーは変更できません。ポリシーの変更ができないソケットを、「ラッチされたソケット」と呼びます。新しいポリシーエントリは、すでにラッチされたソケットを保護しません。詳細については、connect(3SOCKET)accept(3SOCKET) のマニュアルページを参照してください。

ネーミングシステムを保護してください。次の 2 つの条件に該当する場合、そのホスト名は信頼できません。

セキュリティーの弱点の多くは、実際のツールではなく、ツールの使用方法にあります。ipsecconf コマンドを使用するときは注意が必要です。各操作の最も安全なモードでコンソールを使用するか、ハード接続の TTY を使用してください。

ipsecalgs コマンド

Solaris 暗号化フレームワークは、認証と暗号化のアルゴリズムを IPsec に提供します。ipsecalgs コマンドを使用すると、各 IPsec プロトコルでサポートされているアルゴリズムを一覧表示できます。ipsecalgs の構成は /etc/inet/ipsecalgs ファイルに保存されます。通常、このファイルを変更する必要はありません。ただし、このファイルを変更する必要がある場合は、ipsecalgs コマンドを使用します。決して直接には編集しないでください。現在のリリースでは、サポートされるアルゴリズムは、システムの起動時に svc:/network/ipsec/ipsecalgs:default サービスによってカーネルと同期されます。

有効な IPsec プロトコルおよびアルゴリズムは、RFC 2407 に記載されている ISAKMP 解釈ドメイン (DOI) によって記述されます。一般的な意味では、DOI は、データ形式、ネットワークトラフィック交換タイプ、およびセキュリティー関連情報の命名規約を定義します。セキュリティー関連情報の例としては、セキュリティーポリシーや、暗号化アルゴリズム、暗号化モードなどがあります。

特に、ISAKMP DOI は、有効な IPsec アルゴリズム PROTO_IPSEC_AH とそのプロトコルの PROTO_IPSEC_ESP の命名規約や番号付け規約を定義します。1 つのアルゴリズムは 1 つのプロトコルだけに関連します。このような ISAKMP DOI 定義は、/etc/inet/ipsecalgs ファイルにあります。アルゴリズム番号とプロトコル番号は、Internet Assigned Numbers Authority (IANA) によって定義されます。ipsecalgs コマンドは、IPsec アルゴリズムのリストを拡張します。

アルゴリズムの詳細については、ipsecalgs(1M) のマニュアルページを参照してください。Solaris 暗号化フレームワークの詳細については、『Solaris のシステム管理 (セキュリティサービス)』の第 13 章「Solaris の暗号化フレームワーク (概要)」を参照してください。

IPsec のセキュリティーアソシエーションデータベース

IPsec セキュリティーサービスの鍵情報は、セキュリティーアソシエーションデータベース (SADB) に保存されます。セキュリティーアソシエーション (SA) は、インバウンドパケットとアウトバウンドパケットを保護します。SADB の保守は、1 つまたは複数の (そしておそらくは協力する) ユーザープロセスがメッセージを特殊なソケット経由で送信することによって行われます。SADB を保守するこの方法は、 route(7P) のマニュアルページで説明している方法に類似しています。SADB にアクセスできるのは、スーパーユーザーか、同等の役割を引き受けたユーザーだけです。

in.iked デーモンと ipseckey コマンドは PF_KEY ソケットインタフェースを使用して SADB を保守します。SADB が要求やメッセージを処理する方法の詳細については、pf_key(7P) のマニュアルページを参照してください。

IPsec キー生成ユーティリティー

IKE プロトコルは、IPv4 アドレスおよび IPv6 アドレスのキーを自動的に管理します。IKEを設定する方法については、第 23 章IKE の設定 (手順)を参照してください。手動キーユーティリティーは ipseckey コマンドです (ipseckey(1M) のマニュアルページを参照)。

セキュリティーアソシエーションデータベース (SADB) を手動で生成するには、ipseckey コマンドを使用します。通常、手動での SA 生成は、何らかの理由で IKE を使用できない場合に使用します。ただし、SPI の値が一意であれば、手動での SA 生成と IKE を同時に使用することができます。

ipseckey コマンドを使用すると、システムで認識されているすべての SA を表示できます。このような SA には、手動または IKE によって鍵が追加されています。Solaris 10 4/09 リリース以降では、-c オプションを指定して ipseckey コマンドを実行すると、引数として指定した鍵ファイルの構文がチェックされます。

ipseckey コマンドで追加された IPsec SA には持続性がなく、システムのリブート時に失われます。現在のリリースでは、手動で追加した SA をシステムの起動時に有効にするには、/etc/inet/secret/ipseckeys ファイルにエントリを追加してから、svc:/network/ipsec/manual-key:default サービスを有効にします。手順については、「IPsec セキュリティーアソシエーションを手動で作成する方法」を参照してください。

ipseckey コマンドには少数の一般オプションしかありませんが、多くのコマンド言語をサポートしています。マニュアルキー操作に固有のプログラムインタフェースで要求を配信するように指定することもできます。詳細については、pf_key(7P) のマニュアルページを参照してください。

ipseckey におけるセキュリティーについて

ipseckey コマンドを使用すると、スーパーユーザーまたは Network Security または Network IPsec Management 権利プロファイルの役割を引き受けたユーザーは、暗号鍵に関する機密情報を入力できます。場合によっては、不正にこの情報にアクセスして IPsec トラフィックのセキュリティーを損なうことも可能です。

鍵情報を扱う場合および ipseckey コマンドを使用する場合には、次のことに注意してください。

セキュリティーの弱点の多くは、実際のツールではなく、ツールの使用方法にあります。ipseckey コマンドを使用するときには注意が必要です。各操作の最も安全なモードでコンソールを使用するか、ハード接続の TTY を使用してください。

その他のユーティリティーに対する IPsec 拡張機能

ifconfig コマンドには、トンネルインタフェースで IPsec ポリシーを管理するオプションがあります。snoop コマンドは、AH ヘッダーと ESP ヘッダーを構文解析できます。

ifconfig コマンドと IPsec

Solaris 10、Solaris 10 7/05、Solaris 10 1/06、および Solaris 10 11/06 リリースの場合: IPsec をサポートするため、ifconfig では次のオプションを利用できます。Solaris 10 7/07 リリースでは、これらのセキュリティーオプションは ipsecconf コマンドで処理されます。

すべての IPsec セキュリティーオプションは 1 度の呼び出しでトンネルに指定する必要があります。たとえば、ESP だけを使ってトラフィックを保護する場合、次のように両方のセキュリティーオプションを指定して、トンネル ip.tun0 を設定します。


# ifconfig ip.tun0 encr_algs aes encr_auth_algs md5

同様に、ipsecinit.conf エントリは、次のように 1 度に両方のセキュリティーオプションを指定して、トンネルを構成します。


# WAN traffic uses ESP with AES and MD5.
   {} ipsec {encr_algs aes encr_auth_algs md5}

auth_algsセキュリティーオプション

このオプションは、指定した認証アルゴリズムで、トンネルの IPsec AH を有効にできます。auth_algs オプションの書式は次のとおりです。


auth_algs authentication-algorithm

アルゴリズムには、番号またはアルゴリズム名を指定できます。特定のアルゴリズムが指定されないようにするパラメータ any も使用できます。トンネルセキュリティーを無効にするには、次のオプションを指定します。


auth_algs none

利用できる認証アルゴリズムのリストについては、ipsecalgs コマンドを実行してください。


注 –

auth_algs オプションは NAT-Traversal と一緒には機能しません。詳細は、「IPsec と NAT 越え」を参照してください。


encr_auth_algs セキュリティーオプション

このオプションは、指定した認証アルゴリズムで、トンネルの IPsec ESP を有効にできます。encr_auth_algs オプションの書式は次のとおりです。


encr_auth_algs authentication-algorithm

アルゴリズムには、番号またはアルゴリズム名を指定できます。特定のアルゴリズムが指定されないようにするパラメータ any も使用できます。ESP 暗号化アルゴリズムを指定し、認証アルゴリズムを指定しない場合、ESP 認証アルゴリズム値はデフォルトのパラメータ any になります。

利用できる認証アルゴリズムのリストについては、ipsecalgs コマンドを実行してください。

encr_algs セキュリティーオプション

このオプションは、指定した暗号化アルゴリズムで、トンネルの IPsec ESP を有効にできます。encr_algs オプションの書式は次のとおりです。


encr_algs encryption-algorithm

このアルゴリズムの場合、番号またはアルゴリズム名を指定できます。トンネルセキュリティーを無効にするには、次のオプションを指定します。


encr_algs none

ESP 認証アルゴリズムを指定し、暗号化アルゴリズムを指定しない場合、ESP 暗号化アルゴリズム値はデフォルトのパラメータ null になります。

利用できる暗号化アルゴリズムのリストについては、ipsecalgs コマンドを実行してください。

snoop コマンドと IPsec

snoop コマンドは、AH ヘッダーと ESP ヘッダーを構文解析できます。ESP はそのデータを暗号化するため、ESP で暗号化および保護されたヘッダーは snoop コマンドでは読み取ることができません。しかし、AH はデータを暗号化しません。したがって、AH で保護されたトラフィックは snoop コマンドで読み取ることができます。このコマンドに -V オプションを指定すると、いつ AH がパケットに使用されているかを表示できます。詳細は、snoop(1m) のマニュアルページを参照してください。

保護されたパケットに snoop コマンドを実行した場合の詳細な出力については、「IPsec によってパケットが保護されていることを確認する方法」を参照してください。