Solaris のシステム管理 (第 3 巻)

IPsec の管理

この節では、IPsec の初期化構成ファイルと、ネットワーク内で IPsec の管理を行うためのさまざまなコマンドについて説明します。IPsec の管理手順については、第 19 章「IPsec の実装」を参照してください。

IPsec 初期化構成ファイル

Solaris オペレーティング環境を起動したときに IPsec セキュリティポリシーを呼び出すには、個々の IPsec エントリを利用して IPsec 初期化構成ファイルを作成する必要があります。ファイルの名前は、/etc/inet/ipsecinit.conf とします。ポリシーエントリとその形式については、ipsecconf(1M) のマニュアルページを参照してください。

例 - ipsecinit.conf ファイル

Solaris ソフトウェアには、サンプルの ipsecinit.conf ファイルが組み込まれており、自分で ipsecinit.conf ファイルを作成するときのテンプレートとして利用できます。このサンプルの名前は、ipsecinit.sample であり、次のエントリを含みます。


#
#ident	"@(#)ipsecinit.sample	1.4	99/04/28 SMI"
#
# Copyright (c) 1999 by Sun Microsystems, Inc.
# All rights reserved.
#
# This file should be copied to /etc/inet/ipsecinit.conf to enable IPsec.
# 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,
#
#	 {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 to/from the host with ESP using DES and
# MD5.  Also:
#
#	 {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.
#
#
# 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 on-subnet (i.e. reachable without a default route).
#
#		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.
#

グローバルポリシーの設定

ホストの IPsec ポリシーを設定するには、ipsecconf(1M) コマンドを使用します。ポリシーを設定すると、IPsec は、ホストに出入りするときにすべての出力データグラムと入力データグラムに対してポリシー検査を適用します。エントリが見つからない場合、ポリシー検査は行われず、すべてのトラフィックが通過します。送信されたデータグラムは、このコマンドで追加されたポリシー検査の対象外になります。送信パケットを保護する方法については、iconfig(1M)tun(7M) のマニュアルページを参照してください。iconfig コマンドは、/etc/inet/ipsecpolicy.conf ファイルからポリシーエントリを削除するときや、既存の設定を終了するときに使用します。

このコマンドはスーパーユーザーでないと呼び出せません。エントリごとに保護されるトラフィックは 1 方向、すなわち出力か入力のどちらかです。そのため、両方向のトラフィックを保護するには、各方向ごとにエントリを設定する必要があります。

システムに設定されたポリシーを確認するには、引数なしでこのコマンドを実行します。このコマンドによって番号があとについたインデックスとともにエントリが表示されます。インデックスに -d オプションを指定すると、システム内の指定ポリシーが削除されます。このコマンドで表示されるエントリの順序は追加された順であり、必ずしもトラフィックを照合する順序ではありません。トラフィックの照合が行われる順序を確認するには、-l オプションを使用します。

IPsec では、リブートするとポリシーエントリが削除されます。そのため、システムのリブートのたびにポリシーエントリを追加する必要があります。起動プロセスの初期にポリシーを設定するには、/etc/inet/ipsecinit.conf ファイルでポリシーをセットアップし、inetinit 起動スクリプトで読み取らせます。

セキュリティについて

たとえば、/etc/inet/ipsecpolicy.conf ファイルを、NFS マウントファイルシステムから送信すると、ファイル内のデータが不正に変更され、設定ポリシーも変更される可能性があります。そのため、/etc/inet/ipsecpolicy.conf ファイルのコピーをネットワークで送信してはいけません。

ポリシーは connect(3N) または accept(3N) を発行した TCP/UDP ソケットにラッチされます。新しいポリシーエントリを追加しても、これらは変更されません。このラッチ機能は将来変更される可能性があるので、この機能に依存してはいけません。

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

ネットワークで参照できるホストがソースアドレスで、指定システム自体の安全性に問題がある場合、使用される名前は信頼できません。

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

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

IPsec セキュリティサービスのキー情報は、セキュリティアソシエーションデータベース (SADB) に保存されます。セキュリティアソシエーションでは、入力パケットと出力パケットを保護します。ユーザープロセス (場合によってはマルチ連携プロセス) では、特殊なソケットからのメッセージを送信することで SADB を管理します。これは、route(7P) のマニュアルページで説明した方法に類似しています。SADB にアクセスできるのはスーパーユーザーだけです。

出力データグラムの新しい SA に対する要求などの外部イベントに対する応答として、あるいは既存の SA の期限切れを報告するために、オペレーティングシステムからメッセージが自動的に発信されることがあります。先に説明したソケットコールを使用して、SADB 制御メッセージを伝えるためのチャンネルを開いてください。システムごとに複数のキーソケットを開くことができます。

メッセージには、小さいベースヘッダーがあり、そのあとに多くの (0 以上) 拡張メッセージが続きます。メッセージの中には、追加データが必要なものもあります。ベースメッセージと拡張メッセージのいずれも 8 バイト配列である必要があります。たとえば GET メッセージの場合、ベースメッセージ、SA 拡張メッセージ、ADDRESS_DST 拡張メッセージが必要です。詳細については、pf_key(7P) を参照してください。

マニュアルキープログラム

ipsecesp(7P) ネットワークセキュリティサービスと ipsecah(7P) ネットワークセキュリティサービスでセキュリティアソシエーションデータベースを手動で操作するには、ipseckey(1M) コマンドを使用します。また、自動キー管理が無効な場合に、通信パーティ間のセキュリティアソシエーションをセットアップするときも、ipseckey コマンドを使用します。

ipseckey コマンドには少数の一般オプションしかありませんが、多くのコマンド言語をサポートしています。マニュアルキー操作に固有のプログラムインタフェースで要求を配信するように指定することもできます。詳細については、pf_key(7P) のマニュアルページを参照してください。引数なしで ipseckey を呼び出すと、対話モードになり、エントリを入力できるプロンプトが表示されます。コマンドによっては、明示的なセキュリティアソシエーション (SA) タイプが必要ですが、それ以外は、ユーザーが SA を指定すれば、すべての SA タイプで動作します。

セキュリティについて

ipseckey コマンドでは、微妙な暗号キー情報を扱います。特権ユーザーは暗号キー情報を入力できます。場合によっては、不正にこの情報をアクセスして IPsec トラフィックを損なうことも可能です。ipseckey コマンドを使用するときは、次のことに注意してください。

  1. TTY がネットワークに接続されているか (対話モードになっているか)。

    • 接続されている場合は、キー情報のセキュリティは、TTY のトラフィックに対応するネットワークパスのセキュリティになります。clear-text telnet や rlogin セッションでは、ipseckey(1M) を使用しないでください。

    • ローカルウィンドウでも、ウィンドウを読み取ることのできる隠密プログラムからの侵害には無防備です。

  2. ファイルがネットワーク経由でアクセス状態にあるか、または外部から読み取り可能な状態になっているか (-f オプション)。

    • ネットワークマウントファイルの読み取り時に、不正に読み取ることができます。外部から読み取れるファイルにキー情報を保存して使用しないでください。

    • ネットワークで参照できるホストがソースアドレスで、指定システム自体の安全性に問題がある場合、使用される名前は信用できません。

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

既存のユーティリティに対する IPsec 拡張機能

ifconfig

IPsec をサポートするため、ifconfig(1M) に次のオプションが追加されました。

auth_algs

このオプションを設定すると、指定したアルゴリズムで、トンネルに IPsec AH を使用できます。フォーマットは次のとおりです。


auth_algs authentication_algorithm

アルゴリズムは番号かアルゴリズム名です。パラメータ any も使用できます。その場合、特定のアルゴリズム設定は指定されません。IPsec トンネル属性は、すべての同じコマンド行で指定してください。トンネルセキュリティを無効にするには、次のオプションを指定します。


auth_alg none

encr_auth_algs

このオプションでは、認証アルゴリズムを指定して トンネルの IPsec ESP を有効にします。フォーマットは次のとおりです。


encr_auth_algs authentication_algorithm

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

encr_algs

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


encr_auth_algs encryption_algorithm

このアルゴリズムの場合、番号かアルゴリズム名を指定できます。IPsec トンネル属性は、すべて同じコマンド行に指定します。トンネルセキュリティを無効にするには、次のオプションを指定します。


encr_alg none

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

snoop(1M)

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