Date: Sat, 19 Nov 2016 15:37:03 +0000 (UTC) From: Ryusuke SUZUKI <ryusuke@FreeBSD.org> To: doc-committers@freebsd.org, svn-doc-all@freebsd.org, svn-doc-head@freebsd.org Subject: svn commit: r49685 - head/ja_JP.eucJP/books/handbook/security Message-ID: <201611191537.uAJFb3cG026597@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: ryusuke Date: Sat Nov 19 15:37:03 2016 New Revision: 49685 URL: https://svnweb.freebsd.org/changeset/doc/49685 Log: - Merge the following from the English version: r17170 -> r17645 head/ja_JP.eucJP/books/handbook/security/chapter.xml Modified: head/ja_JP.eucJP/books/handbook/security/chapter.xml Modified: head/ja_JP.eucJP/books/handbook/security/chapter.xml ============================================================================== --- head/ja_JP.eucJP/books/handbook/security/chapter.xml Thu Nov 17 22:03:05 2016 (r49684) +++ head/ja_JP.eucJP/books/handbook/security/chapter.xml Sat Nov 19 15:37:03 2016 (r49685) @@ -3,7 +3,7 @@ The FreeBSD Documentation Project The FreeBSD Japanese Documentation Project - Original revision: r17170 + Original revision: r17645 $FreeBSD$ --> <chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="security"> @@ -62,7 +62,8 @@ </listitem> <listitem> - <para>IPsec の設定方法</para> + <para>IPsec および FreeBSD/Windows コンピュータの間で VPN + の設定方法</para> </listitem> <listitem> @@ -1124,9 +1125,10 @@ <para>新規パスワードがどちらのパスワード形式になるかは、 <filename>/etc/login.conf</filename> の中の - <quote>passwd_format</quote> ログインケーパビリティによって制御されます。 - その値としては、<quote>des</quote>、 - <quote>md5</quote> または <quote>blf</quote> を設定することができます。 + <literal>passwd_format</literal> + ログインケーパビリティによって制御されます。 + その値としては、<literal>des</literal>, <literal>md5</literal> + または <literal>blf</literal> を設定することができます。 ログインケーパビリティに関するより詳細な情報は、 &man.login.conf.5; マニュアルページをご覧ください。</para> @@ -3151,7 +3153,7 @@ FreeBSD BUILT-19950429 (GR386) #0: Sat A FreeBSD の OpenSSL 配布に含まれていますが、デフォルトではコンパ イルされません。もし IDEA を使いたいなら、そしてあなたがそのライ センス条項に合致するなら、<filename>/etc/make.conf</filename> - の中の <literal>MAKE_IDEA</literal> スイッチを有効にして、 + の中の MAKE_IDEA スイッチを有効にして、 <command>make world</command> でソースをリビルドしてください。</para> <para>現在は RSA アルゴリズムはアメリカとその他の国で自由に利用で @@ -3166,7 +3168,8 @@ FreeBSD BUILT-19950429 (GR386) #0: Sat A <title>ソースコードのインストール</title> <para>OpenSSL は <literal>src-crypto</literal> と - <literal>src-secure</literal> cvsup コレクションの一部です。 + <literal>src-secure</literal> + <application>CVSup</application> コレクションの一部です。 FreeBSD のソースコードの取得と更新の詳細は、 <link linkend="mirrors">FreeBSD の入手</link>の項を参照して下さい。</para> @@ -3174,351 +3177,968 @@ FreeBSD BUILT-19950429 (GR386) #0: Sat A </sect1> <sect1 xml:id="ipsec"> - <info><title>IPsec</title> + <info><title>VPN over IPsec</title> <authorgroup> - <author><personname><firstname>Yoshinobu</firstname><surname>Inoue</surname></personname><contrib>寄稿: </contrib></author> - <!-- 5 Mar 2000 --> + <author> + <personname> + <firstname>Nik</firstname> + <surname>Clayton</surname> + </personname> + <affiliation> + <address><email>nik@FreeBSD.org</email></address> + </affiliation> + <contrib>執筆: </contrib> + </author> </authorgroup> </info> - - <indexterm><primary>IPsec</primary></indexterm> - <indexterm> - <primary>セキュリティ</primary> - <secondary>IPsec</secondary> - </indexterm> - - <para><emphasis>訳: &a.jp.hino;, 14 March - 2001.</emphasis></para> - - <note> - <title>終端文字</title> - <para>この節の、また他の節を通して、末尾に <quote>^D</quote> - が置かれている例があることに気づかれるでしょう。 - これは、<keycap>Control</keycap> キーを押しながら - <keycap>D</keycap> キーを押すことを意味しています。 - ほかによく使われる文字は <quote>^C</quote> - で、<keycap>Control</keycap> キーを押しながら - <keycap>C</keycap> を押すことを意味しています。</para> - </note> - - <tip> - <para>FreeBSD の IPsec 実装について説明した HOWTO は、他に - <uri xlink:href="http://www.daemonnews.org/200101/ipsec-howto.html">http://www.daemonnews.org/200101/ipsec-howto.html</uri> - と <uri xlink:href="http://www.freebsddiary.org/ipsec.php">http://www.freebsddiary.org/ipsec.php</uri> - があります。</para> - </tip> - - <para>IPsec 機構は、IP 層とソケット層に対して安全な通信を提供します。 - この節ではその使い方を説明します。実装の詳細に関しては <link xlink:href="../../../en_US.ISO8859-1/books/developers-handbook/ipv6.html">The - Developers' Handbook</link> を参照してください。 - <!-- si006:2001/08/11 - developers handbook is not translated yet. --> - </para> - - <para>現在の IPsec の実装は、 - トランスポートモードとトンネルモードの両方に対応しています。 - しかし、トンネルモードにはいくつかの制限事項があります。 - <link xlink:href="http://www.kame.net/newsletter/"></link> - にはより総合的な例が載っています。</para> - - <para>ここで述べる機能を利用するには、以下のオプションをカーネルコ - ンパイル時に指定する必要があることにご注意ください。</para> - - <programlisting>options IPSEC #IP security -options IPSEC_ESP #IP security (crypto; define w/IPSEC)</programlisting> + <para>この章では、FreeBSD ゲートウェイを使って、 + インターネットによって分けられた、二つのネットワーク間に + VPN を作成します。</para> <sect2> - <title>IPv4 におけるトランスポートモードの例</title> - - <para>ホスト A (<systemitem class="ipaddress">10.2.3.4</systemitem>) - とホスト B (<systemitem class="ipaddress">10.6.7.8</systemitem>) - との間に安全なチャネルを配置するために、 - セキュリティアソシエーションを設定しましょう。 - ここでは、少し込み入った例を示します。ホスト A からホストB - へは old AH のみを使います。ホスト B からホスト A へは - new AH と new ESP を組み合わせます。</para> - - <para>ここで <quote>AH</quote>/<quote>new AH</quote>/<quote>ESP</quote>/<quote>new ESP</quote> - に対応するアルゴリズムを決めないといけません。 - アルゴリズムの名前を知るには、 - &man.setkey.8; マニュアルページをご覧ください。ここでは、AH に - MD5 を、new AH には new-HMAC-SHA1 を、new ESP には 8 バイト IV - の new-DES-expIV を選びました。</para> - - <para>鍵長はそれぞれのアルゴリズムに大きく依存します。たとえば、 - MD5 では鍵長は 16 バイトでなければなりませんし、new-HMAC-SHA1 - では 20 バイトでなければなりませんし、new-DES-expIV では - 8 バイトでなければなりません。ここではそれぞれ - <quote>MYSECRETMYSECRET</quote>, - <quote>KAMEKAMEKAMEKAMEKAME</quote>, - <quote>PASSWORD</quote> とします。</para> - - <para>次に、それぞれのプロトコルに対して SPI - (セキュリティパラメータインデックス: Security Parameter Index) - を割り当てます。3 種類のセキュリティヘッダ - (ホスト A からホスト B に 1 つ、ホスト B から ホスト A に 2 つ) - を生成するので、この安全なチャネルには 3 つの SPI - が必要になることに注意してください。さらに、SPI は - 256 以上でなければならないことにも注意してください。 - ここではそれぞれ 1000, 2000, 3000 を割り当てます。</para> - - <screen> - (1) - ホスト A ------> ホスト B - - (1)PROTO=AH - ALG=MD5(RFC1826) - KEY=MYSECRETMYSECRET - SPI=1000 - - (2.1) - ホスト A <------ ホスト B - <------ - (2.2) - - (2.1) - PROTO=AH - ALG=new-HMAC-SHA1(new AH) - KEY=KAMEKAMEKAMEKAMEKAME - SPI=2000 - - (2.2) - PROTO=ESP - ALG=new-DES-expIV(new ESP) - IV length = 8 - KEY=PASSWORD - SPI=3000 -</screen> + <info><title>IPsec を理解する</title> + <authorgroup> + <author> + <personname> + <firstname>Hiten M.</firstname> + <surname>Pandya</surname> + </personname> + <affiliation> + <address><email>hmp@FreeBSD.org</email></address> + </affiliation> + <contrib>執筆: </contrib> + </author> + </authorgroup> + </info> + + <para>この節では、FreeBSD と + <application>Microsoft Windows 2000/XP</application> + からなる環境において、IPsec を設定し、利用する過程を通じて、 + IPsec を使った安全な通信の実現方法について解説します。 + IPsec を設定するためには、 + カスタムカーネルの構築方法をよく知っている必要があります + (<xref linkend="kernelconfig"/> をご覧ください)。</para> + + <para><emphasis>IPsec</emphasis> は、インターネットプロトコル (IP) + レイヤのトップにあるプロトコルです。 + 二つもしくはそれ以上のホスト間で安全に通信することを可能にします + (そのため、名前に sec が含まれています)。 + FreeBSD の IPsec <quote>ネットワークスタック</quote> は、 + IPv4 および IPv6 の両方のプロトコルファミリに対応している + <link xlink:href="http://www.kame.net/">KAME</link> + 実装をベースとしています。</para> - <para>次に、セキュリティアソシエーションを設定しましょう。ホスト - A とホスト B の両方で、&man.setkey.8; を実行します。</para> + <note> + <para>FreeBSD 5.0 では <quote>hardware + accelerated</quote> IPsec スタックが追加されました。 + これは、<quote>Fast IPsec</quote> として知られているもので、 + OpenBSD から移植されました。 + IPsec のパフォーマンスを最適化するために、(利用できる場合には) + &man.crypto.4; サブシステムを経由して、 + 暗号ハードウェアを使用します。 + このサブシステムは新しいので、まだ IPsec の KAME + 版で利用可能な機能のすべてに対応しているわけではありません。 + しかしながら、hardware-accelerated IPsec を有効にするためには、 + カーネルコンフィグレーションファイルに以下のカーネルオプションを追加する必要があります。</para> + + <screen> +options FAST_IPSEC # new IPsec (cannot define w/ IPSEC) + </screen> + + <para>現在の時点では、<quote>Fast IPsec</quote> + サブシステムを IPsec の KAME 実装のかわりに使うことはできません。 + より多くの情報については、&man.fast.ipsec.4; + を参照してください。</para> + </note> - <screen>&prompt.root; <userinput>setkey -c - add 10.2.3.4 10.6.7.8 ah-old 1000 -m transport -A keyed-md5 "MYSECRETMYSECRET" ; - add 10.6.7.8 10.2.3.4 ah 2000 -m transport -A hmac-sha1 "KAMEKAMEKAMEKAMEKAME" ; - add 10.6.7.8 10.2.3.4 esp 3000 -m transport -E des-cbc "PASSWORD" ; - ^D</userinput></screen> - - <para>実際には、セキュリティポリシのエントリが定義されるまでは - IPsec による通信は行われません。 - この例の場合、両方のホストを設定する必要があります。</para> + <para>IPsec は二つのサブプロトコルから構成されます。</para> + <itemizedlist> + <listitem> + <para><emphasis>Encapsulated Security Payload + (ESP)</emphasis> は、(Blowfish, 3DES のような) + 対称暗号アルゴリズムを使ってデータを暗号化することで、 + サードパーティのインタフェースから + IP パケットデータを保護します。</para> + </listitem> + <listitem> + <para><emphasis>Authentication Header (AH)</emphasis>, + は、暗号チェックサムを計算し、IP + パケットのヘッドフィールドを安全なハッシュ関数でハッシュ化することで、 + IP パケットヘッダをサードパーティのインタフェースやなりすましから守ります。 + ハッシュを含む追加のヘッダが追加され、 + パケット情報の検証が可能になります。</para> + </listitem> + </itemizedlist> + + <para><acronym>ESP</acronym> および <acronym>AH</acronym> + は、使用する環境に合わせて、 + 一緒に使うことも別々に使うこともできます。</para> + + <para>IPsec は、直接二つのホスト間のトラフィックを暗号化する + <emphasis>Transport Mode</emphasis>、もしくは、 + 2 つの共同するネットワーク間で安全に通信することを可能にするように、 + 2 つのサブネット間に <quote>virtual tunnels</quote> を構築する + <emphasis>Tunnel Mode</emphasis> のどちらでも用いることができます。 + 後者はより一般的には、 + <emphasis>Virtual Private Network (VPN)</emphasis> + として知られています。 + FreeBSD での IPsec サブシステムに関するより詳細な情報については、 + &man.ipsec.4; マニュアルページを参照してください。</para> + + <para>カーネルに IPsec のサポートを追加するには、 + カーネルコンフィグレーションファイルに以下のオプションを追加してください。</para> + <screen> -A で: +options IPSEC #IP security +options IPSEC_ESP #IP security (crypto; define w/ IPSEC) + </screen> -&prompt.root; <userinput>setkey -c - spdadd 10.2.3.4 10.6.7.8 any -P out ipsec - ah/transport/10.2.3.4-10.6.7.8/require ; - ^D</userinput> - -B で: - -&prompt.root; <userinput>setkey -c - spdadd 10.6.7.8 10.2.3.4 any -P out ipsec - esp/transport/10.6.7.8-10.2.3.4/require ; - spdadd 10.6.7.8 10.2.3.4 any -P out ipsec - ah/transport/10.6.7.8-10.2.3.4/require ; - ^D</userinput> - - - ホスト A -------------------------------------> ホスト B - 10.2.3.4 10.6.7.8 - | | - ========== old AH keyed-md5 ==========> + <para>IPsec のデバッグサポートが必要であれば、 + 以下のカーネルオプションを追加してください。</para> - <========= new AH hmac-sha1 =========== - <========= new ESP des-cbc ============ -</screen> + <screen> +options IPSEC_DEBUG #debug for IP security + </screen> </sect2> <sect2> - <title>IPv6 におけるトランスポートモードの例</title> - - <para>IPv6 を使ったもう一つの例。</para> + <title>問題点</title> + + <para>VPN の構成についての標準はありません。 + VPN は、数多くの技術と共に実装することが可能です。 + その各技術には、それ自身の長所と短所があります。 + この文書では、多くのシナリオについて示し、 + 各シナリオに対して、VPN を実装する戦略について説明します。</para> + </sect2> - <para>ホスト-A とホスト-B 間の TCP ポート番号 110 番の通信には、 - ESP トランスポートモードが推奨されます。</para> + <sect2> + <title>シナリオ #1: + インターネットに接続している 2 つのネットワークが + 1 つのネットワークとして振る舞う</title> + + <para>これは、私が最初に VPN を調べ始める原因となったシナリオです。 + 前提は以下の通りです。</para> + + <itemizedlist> + <listitem> + <para>少なくとも 2 つのサイトを持っています。</para> + </listitem> + <listitem> + <para>どちらの際とも内部で IP を使っています。</para> + </listitem> + <listitem> + <para>2 つのサイトは、FreeBSD で運用されているゲートウェイを通して、 + インターネットに接続しています。</para> + </listitem> + <listitem> + <para>それぞれのネットワークのゲートウェイは、 + 少なくとも一つのパブリック IP アドレスを持っています。</para> + </listitem> + <listitem> + <para>2 つのネットワークの内部アドレスは、 + パブリックでもプライベート IP アドレスでも構いません。 + 必要であれば、ゲートウェイコンピュータで + NAT を走らせることもできます。</para> + </listitem> + <listitem> + <para>2 つのネットワークの内部 IP アドレスは、 + <emphasis>衝突してはいけません</emphasis>。 + VPN 技術と NAT を用いることで、理論的には、 + そのようなことは可能と考えますが、 + その設定は悪夢でしょう。</para> + </listitem> + </itemizedlist> + + <para>2 つのネットワークに接続を試みた際に、 + 両方のネットワークで同じ範囲の内部 IP + アドレスが使われていることに気づいたら + (たとえば、両方で + <systemitem class="ipaddress">192.168.1.x</systemitem> + を使用している場合)、 + どちらかの番号を振りなおす必要があります。</para> + + <para>VPN の文書では、同じ ASCII + アートを使うことがルールになっているので、 + この文書でも例外ではなく同様にアスキーアートを用います。</para> + + <para>ネットワークのトポロジは以下のようになります。</para> <screen> - ============ ESP ============ - | | - ホスト-A ホスト-B - fec0::10 -------------------- fec0::11 -</screen> +Network #1 [ Internal Hosts ] Private Net, 192.168.1.2-254 + [ Win9x/NT/2K ] + [ Unix ] + | + | + .---[fxp1]---. Private IP, 192.168.1.1 + | FreeBSD | + `---[fxp0]---' Public IP, A.B.C.D + | + | + -=-=- Internet -=-=- + | + | + .---[fxp0]---. Public IP, W.X.Y.Z + | FreeBSD | + `---[fxp1]---' Private IP, 192.168.2.1 + | + | +Network #2 [ Internal Hosts ] + [ Win9x/NT/2K ] Private Net, 192.168.2.2-254 + [ Unix ] + </screen> + + <para>ふたつのパブリック IP アドレスに注目してください。 + この文書では、これらの IP アドレスを参照する際には、 + これらの文字を用います。 + この文書の中で、これらの文字を見たら、 + あなた自身のパブリック IP アドレスに置き換えてください。 + 内部では、2 つのゲートウェイコンピュータは、両方とも .1 + IP アドレスを持っています。そして、2 つのネットワークは、 + 異なるプライベート IP アドレスを使っています + (それぞれ <systemitem class="ipaddress">192.168.1.x</systemitem> + および <systemitem class="ipaddress">192.168.2.x</systemitem>)。 + プライベートネットワークにあるすべてのコンピュータは、 + デフォルトゲートウェイとして、 + <systemitem class="ipaddress">.1</systemitem> + コンピュータを使うように設定されています。</para> + + <para>意図していることは、ネットワークの観点から、 + 各ネットワークは他のネットワークにあるコンピュータを、 + (時折パケットをドロップするようなややゆっくりなルータではありますが) + 同じルータに直接接続しているようにすることです。</para> + + <para>これは、たとえば、<systemitem + class="ipaddress">192.168.1.20</systemitem> というコンピュータは、 + 以下を実行できるということです。</para> + + <programlisting>ping 192.168.2.34</programlisting> + + <para>透過的にこれは動くはずです。 + Windows コンピュータは、他のネットワークのコンピュータを、 + ローカルネットワークのコンピュータを見るのとまったく同じように、 + 見ることができ、共有ファイルを見たりできます。</para> + + <para>すべてのことが安全に行われなければなりません。 + これは、2 つのネットワークの通信が暗号化されていなければならないことを意味しています。</para> + + <para>これらの 2 つのネットワーク間に VPN + を構築するには複数のプロセスが必要となります。 + 各ステージは以下のようになります。</para> - <para>暗号化アルゴリズムは blowfish-cbc で、その鍵は <quote>kamekame</quote>、 - 認証アルゴリズムは hmac-sha1 で、その鍵は <quote>this is the test - key</quote> とします。ホスト-A の設定は次のようになります。</para> - - <screen>&prompt.root; <userinput>setkey -c <<EOF - spdadd fec0::10[any] fec0::11[110] tcp -P out ipsec - esp/transport/fec0::10-fec0::11/use ; - spdadd fec0::11[110] fec0::10[any] tcp -P in ipsec - esp/transport/fec0::11-fec0::10/use ; - add fec0::10 fec0::11 esp 0x10001 - -m transport - -E blowfish-cbc "kamekame" - -A hmac-sha1 "this is the test key" ; - add fec0::11 fec0::10 esp 0x10002 - -m transport - -E blowfish-cbc "kamekame" - -A hmac-sha1 "this is the test key" ; - EOF</userinput></screen> - - <para>そしてホスト-B の設定は次のようになります。</para> - - <screen>&prompt.root; <userinput>setkey -c <<EOF - spdadd fec0::11[110] fec0::10[any] tcp -P out ipsec - esp/transport/fec0::11-fec0::10/use ; - spdadd fec0::10[any] fec0::11[110] tcp -P in ipsec - esp/transport/fec0::10-fec0::11/use ; - add fec0::10 fec0::11 esp 0x10001 -m transport - -E blowfish-cbc "kamekame" - -A hmac-sha1 "this is the test key" ; - add fec0::11 fec0::10 esp 0x10002 -m transport - -E blowfish-cbc "kamekame" - -A hmac-sha1 "this is the test key" ; - EOF</userinput></screen> - - <para>SP の方向に注意してください。</para> + <orderedlist> + <listitem> + <para>2 つのネットワーク間にインターネットを経由して、"virtual" + ネットワークのリンクを作成します。 + それが適切に動いていることを &man.ping.8; + のようなツールを使って、試験を行います。</para> + </listitem> + + <listitem> + <para>2 つのネットワーク間で、 + 必要に応じて透過的に暗号化、 + 復号化を保証するようにセキュリティポリシを適用します。 + &man.tcpdump.1; のようなツールを使って、 + 通信が暗号化されていることを確認します。</para> + </listitem> + <listitem> + <para>FreeBSD ゲートウェイにて、Windows のコンピュータが VPN + を通して他のコンピュータを見ることができるように追加のソフトウェアを設定します。</para> + </listitem> + </orderedlist> </sect2> <sect2> - <title>IPv4 におけるトンネルモードの例</title> - - <para>2 台のセキュリティゲートウェイ間のトンネルモード</para> - - <para>セキュリティプロトコルは old AH トンネルモード、すなわち - RFC1826 で指定されるものです。認証アルゴリズムは <quote>this is the - test</quote> を鍵とする keyed-md5 です。</para> + <title>ステップ 1: <quote>virtual</quote> + ネットワークリンクの作成</title> - <screen> - ======= AH ======= - | | - ネットワーク-A ゲートウェイ-A ゲートウェイ-B ネットワーク-B - 10.0.1.0/24 ---- 172.16.0.1 ----- 172.16.0.2 ---- 10.0.2.0/24 -</screen> + <para>ネットワーク #1 + のゲートウェイコンピュータにログインしているとします。 + このコンピュータのパブリック IP アドレスは + <systemitem class="ipaddress">A.B.C.D</systemitem>、 + プライベート IP アドレスは + <systemitem class="ipaddress">192.168.1.1</systemitem> です。 + <systemitem class="ipaddress">W.X.Y.Z</systemitem> + の IP アドレスのコンピュータのプライベートアドレスに対し + <command>ping 192.168.2.1</command> + を実行したとします。 + このコマンドが成功するには何が必要でしょうか?</para> - <para>ゲートウェイ-A における設定は次のようになります。</para> + <orderedlist> + <listitem> + <para>ゲートウェイコンピュータは、どのように + <systemitem class="ipaddress">192.168.2.1</systemitem> + に達するかを知っていなければなりません。 + 言い換えると、 + <systemitem class="ipaddress">192.168.2.1</systemitem> + への経路を知っている必要があります。</para> + </listitem> + <listitem> + <para> + <systemitem class="ipaddress">192.168.x</systemitem> + のような範囲のプライベート IP アドレスは広いインターネットでは、 + 使われることは想定されていません。 + そのかわり、 + <systemitem class="ipaddress">192.168.2.1</systemitem> + に送信した各パケットは、他のパケットに包れている必要があります。 + このパケットは <systemitem class="ipaddress">A.B.C.D</systemitem> + から、 + <systemitem class="ipaddress">W.X.Y.Z</systemitem> + へと送られる必要があります。 + このプロセスは、 + <systemitem class="ipaddress">カプセル化</systemitem> + と呼ばれます。</para> + </listitem> + <listitem> + <para>このパケットが + <systemitem class="ipaddress">W.X.Y.Z</systemitem> に届くと、 + <quote>非カプセル化</quote> され、 + <systemitem class="ipaddress">192.168.2.1</systemitem> + に送信されます。</para> + </listitem> + </orderedlist> - <screen>&prompt.root; <userinput>setkey -c <<EOF - spdadd 10.0.1.0/24 10.0.2.0/24 any -P out ipsec - ah/tunnel/172.16.0.1-172.16.0.2/require ; - spdadd 10.0.2.0/24 10.0.1.0/24 any -P in ipsec - ah/tunnel/172.16.0.2-172.16.0.1/require ; - add 172.16.0.1 172.16.0.2 ah-old 0x10003 -m any - -A keyed-md5 "this is the test" ; - add 172.16.0.2 172.16.0.1 ah-old 0x10004 -m any - -A keyed-md5 "this is the test" ; - -EOF</userinput></screen> - - <para>上記の例のように、もしポート番号フィールドを書かないと、 - <literal>[any]</literal> と同じ意味になります。<literal>-m</literal> は使用される SA - のモードを指定します。<literal>-m any</literal> - はセキュリティプロトコルのモードのワイルドカードを意味します。 - この SA をトンネルモードとトランスポートモードの両方で使用できます。</para> - - <para>そしてゲートウェイ-B では次のようになります。</para> - - <screen>&prompt.root; <userinput>setkey -c <<EOF - spdadd 10.0.2.0/24 10.0.1.0/24 any -P out ipsec - ah/tunnel/172.16.0.2-172.16.0.1/require ; - spdadd 10.0.1.0/24 10.0.2.0/24 any -P in ipsec - ah/tunnel/172.16.0.1-172.16.0.2/require ; - add 172.16.0.1 172.16.0.2 ah-old 0x10003 -m any - -A keyed-md5 "this is the test" ; - add 172.16.0.2 172.16.0.1 ah-old 0x10004 -m any - -A keyed-md5 "this is the test" ; - -EOF</userinput></screen> - - <para>二台のセキュリティゲートウェイ間の SA の束の作成</para> - - <para>ゲートウェイ-A とゲートウェイ-B の間では、 - AH トランスポートモードと ESP トンネルモードが要求されます。 - この例では、まず ESP トンネルモードが適用され、次に - AH トランスポートモードが適用されます。</para> + <para>これは、2 つのネットワーク間で、 <quote>tunnel</quote> + が必要ということを示しています。二つの "トンネルマウス" は、 + IP アドレス + <systemitem class="ipaddress">A.B.C.D</systemitem> と + <systemitem class="ipaddress">W.X.Y.Z</systemitem> + です。 + そして、トンネルは、これをパススルーすることを許容するプライベート + IP アドレスのアドレスが指定されている必要があります。 + トンネルは、パブリックインターネットを経由して、 + プライベート IP アドレスで送信する時に使われます。</para> + + <para>このトンネルは、一般的なインタフェースもしくは、FreeBSD では + gif デバイスで作成されます。 + 想像通り、各ゲートウェイホストの gif + インタフェースは、4 つの IP アドレスで設定されなくてはなりません。 + 2 つはパブリック IP アドレスで、 + 2 つはプライベートの IP アドレスです。</para> + + <para>両方の FreeBSD カーネルで + gif デバイスのサポートを組み入れてコンパイルする必要があります。 + 以下の行を加えることで設定できます。</para> + + <programlisting>pseudo-device gif</programlisting> + + <para>両方のコンピュータのカーネルコンフィグレーションファイルに上記の行を加え、 + コンパイル、インストールし、通常通り再起動してください。</para> + + <para>トンネルの設定は 2 つのプロセスで行います。 + 最初は、&man.gifconfig.8; を使って、 + 外部 (パブリック) IP アドレスを設定するします。 + その後、プライベート IP アドレスを + &man.ifconfig.8; を使って設定します。</para> + + <para>ネットワーク #1 にあるゲートウェイコンピュータで以下の + 2 つのコマンドを実行してトンネルを作成します。</para> + + <programlisting>gifconfig gif0 A.B.C.D W.X.Y.Z +ifconfig gif0 inet 192.168.1.1 192.168.2.1 netmask 0xffffffff + </programlisting> + + <para>もう片方のゲートウェイコンピュータで、 + IP アドレスの順を逆にして同じコマンドを実行します。</para> + + <programlisting>gifconfig gif0 W.X.Y.Z A.B.C.D +ifconfig gif0 inet 192.168.2.1 192.168.1.1 netmask 0xffffffff + </programlisting> + + <para>以下を実行して、設定を確認をしてください。</para> + + <programlisting>gifconfig gif0</programlisting> + + <para>たとえば、ネットワーク #1 のゲートウェイにおいては、 + 以下のように確認できます。</para> + + <screen>&prompt.root; gifconfig gif0 +gif0: flags=8011<UP,POINTTOPOINT,MULTICAST> mtu 1280 +inet 192.168.1.1 --> 192.168.2.1 netmask 0xffffffff +physical address inet A.B.C.D --> W.X.Y.Z + </screen> + + <para>出力からわかるように、 + 物理アドレス + <systemitem class="ipaddress">A.B.C.D</systemitem> と + <systemitem class="ipaddress">W.X.Y.Z</systemitem> + の間にトンネルが作成され、 + <systemitem class="ipaddress">192.168.1.1</systemitem> と + <systemitem class="ipaddress">192.168.2.1</systemitem> + の間の通信がトンネルで許可されています。</para> + + <para>両方のコンピュータのルーティングテーブルにエントリが追加されました。 + "netstat -rn" で確認できます。 + ネットワーク #1 + のゲートウェイホストでの出力は以下のようになります。</para> + + <screen>&prompt.root; netstat -rn +Routing tables + +Internet: +Destination Gateway Flags Refs Use Netif Expire +... +192.168.2.1 192.168.1.1 UH 0 0 gif0 +... + </screen> + + <para><quote>Flags</quote> の値が示すように、 + これはホストのルートで、 + 各ゲートウェイは他のゲートウェイとどのように通信すれば良いかを知っていますが、 + 他の関連するネットワークへの通信を知らないことを意味しています。 + この問題は、すぐに解決されます。</para> + + <para>両方のコンピュータでファイアウォールを設定していることがあります。 + VPN トラフィックのためには、ファイアウォールを迂回する必要があります。 + 両方のネットワーク間のすべてのトラフィックを許可するか、VPN + の末端をお互い保護するようなファイアウォールのルールを追加したいと思うでしょう。</para> + + <para>すべての VPN + を経由するトラフィックを許容するようなファイアウォールを設定すると、 + テストを大きく簡略化できます。 + 後でいつでも、セキュリティを強化できます。 + もし、ゲートウェイコンピュータで ipfw (8) を用いているのであれば、 + 以下のようなコマンドで、 + 他のファイアウォールのルールに影響することなく、 + VPN の末端の間のトラフィックを許可します。</para> + + <programlisting>ipfw add 1 allow ip from any to any via gif0</programlisting> + + <para>両方のゲートウェイコンピュータでこのコマンドを実行する必要があります。</para> + + <para>各ゲートウェイコンピュータで他のゲートウェイコンピュータに対して、 + ping を実行することができれば十分です。 + <systemitem class="ipaddress">192.168.1.1</systemitem> + において、以下を実行が可能で</para> + + <programlisting>ping 192.168.2.1</programlisting> + + <para>そして、レスポンスを受け取れる必要があります。 + 同じことを他のゲートウェイコンピュータで実行できる必要があります。</para> + + <para>しかしながら、各ネットワークの内部のコンピュータにアクセスはまだできません。 + これは、 + ゲートウェイコンピュータがお互いにアクセスする方法を知っているが、 + 各ゲートウェイの奥にあるネットワークにアクセスする方法を知らないという、 + ルーティングに起因しています。</para> + + <para>この問題を解決するには、 + 静的ルートを各ゲートウェイコンピュータに追加する必要があります。 + このために最初のゲートウェイで行うコマンドは以下のようになります。</para> + + <programlisting>route add 192.168.2.0 192.168.2.1 netmask 0xffffff00 + </programlisting> + + <para>このコマンドの意味は、ネットワーク + <quote><systemitem class="ipaddress">192.168.2.0</systemitem> + のホストにアクセスするには、パケットを + <systemitem class="ipaddress">192.168.2.1</systemitem> + のホストに送る</quote> ことを意味しています。 + もう片方のゲートウェイでは、同様のコマンドを実行する必要があります。 + その場合には、かわりに、 + <systemitem class="ipaddress">192.168.1.x</systemitem> + アドレスを使う必要があります。</para> + + <para>これで、片方のネットワーク上のホストからの IP トラフィックは、 + もう片方のネットワーク上のホストに届くようになります。</para> + + <para>2 つのネットワーク間の + <quote>virtual</quote> および + <quote>network</quote> について構築できたので、 + VPN について、2/3 が構築されました。残りは private です。 + &man.ping.8; および &man.tcpdump.1; を使って試験できます。 + ゲートウェイホストにログインして以下を実行してください。</para> + + <programlisting>tcpdump dst host 192.168.2.1</programlisting> + + <para>同じホストの他のログインセッションで、 + 以下を実行してください。</para> + + <programlisting>ping 192.168.2.1</programlisting> + + <para>以下のような出力が表示されます。</para> + + <programlisting> +16:10:24.018080 192.168.1.1 > 192.168.2.1: icmp: echo request +16:10:24.018109 192.168.1.1 > 192.168.2.1: icmp: echo reply +16:10:25.018814 192.168.1.1 > 192.168.2.1: icmp: echo request +16:10:25.018847 192.168.1.1 > 192.168.2.1: icmp: echo reply +16:10:26.028896 192.168.1.1 > 192.168.2.1: icmp: echo request +16:10:26.029112 192.168.1.1 > 192.168.2.1: icmp: echo reply + </programlisting> + + <para>この出力からわかるように、ICMP メッセージが戻り、 + 復号化されます。 + &man.tcpdump.1; に <option>-s</option> パラメータを用いると、 + パケットから多くのデータを捕え、 + より多くの情報を得ることができます。</para> + + <para>明らかにこれは、受け入れられるものではありません。 + 次の節では、2 つのネットワーク間のリンクについて、 + すべての通信が自動的に暗号化されるように安全にする方法について説明します。</para> - <screen> - ========== AH ========= - | ======= ESP ===== | - | | | | - ネットワーク-A ゲートウェイ-A ゲートウェイ-B ネットワーク-B - fec0:0:0:1::/64 --- fec0:0:0:1::1 ---- fec0:0:0:2::1 --- fec0:0:0:2::/64 -</screen> + <itemizedlist> + <title>まとめ</title> + <listitem> + <para>両方のカーネルを <quote>pseudo-device + gif</quote> で構築します。</para> + </listitem> + <listitem> + <para>ゲートウェイホスト #1 の <filename>/etc/rc.conf</filename> + を編集して、以下の行を (必要に応じて IP アドレスを変更して) + 追加します。</para> + <programlisting>gifconfig_gif0="A.B.C.D W.X.Y.Z" +ifconfig_gif0="inet 192.168.1.1 192.168.2.1 netmask 0xffffffff" +static_routes="vpn" +route_vpn="192.168.2.0 192.168.2.1 netmask 0xffffff00" + </programlisting> + </listitem> + <listitem> + <para>両方のホストのファイアウォールスクリプト + (<filename>/etc/rc.firewall</filename> など) + を編集して以下を追加します。</para> + + <programlisting>ipfw add 1 allow ip from any to any via gif0</programlisting> + </listitem> + <listitem> + <para>同様の変更を、ゲートウェイホスト #2 の + <filename>/etc/rc.conf</filename> + においても行います。 + ここで、IP アドレスの順番は逆にします。</para> + </listitem> + </itemizedlist> </sect2> <sect2> - <title>IPv6 におけるトンネルモードの例</title> - - <para>暗号化アルゴリズムは 3des-cbc, ESP の認証アルゴリズムは - hmac-sha1 とします。AH の認証アルゴリズムは hmac-md5 とします。 - ゲートウェイ-A での設定は次のようになります。</para> - - <screen>&prompt.root; <userinput>setkey -c <<EOF - spdadd fec0:0:0:1::/64 fec0:0:0:2::/64 any -P out ipsec - esp/tunnel/fec0:0:0:1::1-fec0:0:0:2::1/require - ah/transport/fec0:0:0:1::1-fec0:0:0:2::1/require ; - spdadd fec0:0:0:2::/64 fec0:0:0:1::/64 any -P in ipsec - esp/tunnel/fec0:0:0:2::1-fec0:0:0:1::1/require - ah/transport/fec0:0:0:2::1-fec0:0:0:1::1/require ; - add fec0:0:0:1::1 fec0:0:0:2::1 esp 0x10001 -m tunnel - -E 3des-cbc "kamekame12341234kame1234" - -A hmac-sha1 "this is the test key" ; - add fec0:0:0:1::1 fec0:0:0:2::1 ah 0x10001 -m transport - -A hmac-md5 "this is the test" ; - add fec0:0:0:2::1 fec0:0:0:1::1 esp 0x10001 -m tunnel - -E 3des-cbc "kamekame12341234kame1234" - -A hmac-sha1 "this is the test key" ; - add fec0:0:0:2::1 fec0:0:0:1::1 ah 0x10001 -m transport - -A hmac-md5 "this is the test" ; - - EOF</userinput></screen> - - <para>異なる通信端での SA の作成</para> - - <para>ホスト-A とゲートウェイ-A の間では - ESP トンネルモードが要求されています。暗号化アルゴリズムは - cast128-cbc で、ESP の認証アルゴリズムは hmac-sha1 - です。ホスト-A とホスト-B との間では - ESP トランスポートモードが推奨されています。 - 暗号化アルゴリズムは rc5-cbc で、ESP - の認証アルゴリズムは hmac-md5 です。</para> + <title>ステップ 2: リンクを安全にする。</title> - <screen> - ================== ESP ================= - | ======= ESP ======= | - | | | | - ホスト-A ゲートウェイ-A ホスト-B - fec0:0:0:1::1 ---- fec0:0:0:2::1 ---- fec0:0:0:2::2 -</screen> + <para>リンクを安全にするために、IPSec を用います。 + IPSec は、2 つのホストが暗号鍵に合意し、 + その鍵を 2 + つのホストの間でデータを暗号化するのに用いるメカニズムを提供します。</para> - <para>ホスト-A での設定は次のようになります。</para> + <para>ここでは、設定を行う上で考慮すべき領域が 2 つあります。</para> - <screen>&prompt.root; <userinput>setkey -c <<EOF - spdadd fec0:0:0:1::1[any] fec0:0:0:2::2[80] tcp -P out ipsec - esp/transport/fec0:0:0:1::1-fec0:0:0:2::2/use - esp/tunnel/fec0:0:0:1::1-fec0:0:0:2::1/require ; - spdadd fec0:0:0:2::1[80] fec0:0:0:1::1[any] tcp -P in ipsec - esp/transport/fec0:0:0:2::2-fec0:0:0:l::1/use - esp/tunnel/fec0:0:0:2::1-fec0:0:0:1::1/require ; - add fec0:0:0:1::1 fec0:0:0:2::2 esp 0x10001 - -m transport - -E cast128-cbc "12341234" - -A hmac-sha1 "this is the test key" ; - add fec0:0:0:1::1 fec0:0:0:2::1 esp 0x10002 - -E rc5-cbc "kamekame" - -A hmac-md5 "this is the test" ; - add fec0:0:0:2::2 fec0:0:0:1::1 esp 0x10003 - -m transport - -E cast128-cbc "12341234" - -A hmac-sha1 "this is the test key" ; - add fec0:0:0:2::1 fec0:0:0:1::1 esp 0x10004 - -E rc5-cbc "kamekame" - -A hmac-md5 "this is the test" ; + <orderedlist> + <listitem> + <para>2 つのホストで、 + 用いる暗号メカニズムに合意するメカニズムが必要です。 + 2 つのホストが一度このメカニズムに合意したら、 + これらの間で "セキュリティアソシエーション" + が確立されたことになります。</para> + </listitem> + <listitem> + <para>どのトラフィックを暗号化するかを特定するメカニズムが必要となります。 + 外向きのトラフィックのすべてを暗号化する必要はないのは明らかです。 + -- VPN に関係するトラフィックのみを暗号化することが望まれます。 + どのトラフィックを暗号すべきかを決めるために導入されるルールを + <quote>セキュリティポリシ</quote> と呼びます。</para> + </listitem> + </orderedlist> + + <para>セキュリティアソシエーションおよびセキュリティポリシの両方は、 + カーネルにより管理されています。そして、ユーザランドプログラムにより、 + 変更することができます。 + しかしながら、これを行う前に、カーネルを IPSec および + Encapsulated Security Payload (ESP) プロトコルに対応するように、 + 設定する必要があります。 + これは、カーネルを以下のように設定することで可能です。</para> + + <programlisting>options IPSEC +options IPSEC_ESP + </programlisting> + + <para>そして再構築し、再インストールを行って、再起動してください。 + これは両方のゲートウェイホストのカーネルで行う必要があります。</para> + + <para>セキュリティアソシエーションの設定に関していうと、 + 2 つの選択肢があります。 + 1 つ目は、2 つのホスト間の設定を手動で設定する方法で、 + 暗号アルゴリズム、暗号鍵などを選択する必要があります。 + もう 1 つは、これらをあなたに代わり行う + Internet Key Exchange protocol (IKE) + を実装しているデーモンを用いることです。</para> + + <para>後者が推奨されます。とにかく、設定がより簡単です。</para> + + <para>&man.setkey.8; を用い得ることでセキュリティポリシを設定したり、 + 表示できます。 + &man.route.8; がカーネルルーティングテーブルに関しているのと同様に、 + <command>setkey</command> + は、カーネルセキュリティポリシテーブルに関連しています。 + <command>setkey</command> は、 + 現在のセキュリティアソシエーションも表示でき、 + 類推をさらに進めると、その点において、 + <command>netstat -r</command> と同種です。</para> + + <para>FreeBSD + でセキュリティアソシエーションを管理するデーモンは数多くあります。 + この文書では、その中の一つの racoon の使い方について説明します。 + racoom は、FreeBSD Ports Collection の security カテゴリにあります。 + 通常の方法でインストールができます。</para> + + <para>racoon は、両方のゲートウェイホストで実行される必要があります。 + それぞれのホストで、もう一つの VPN の端の IP アドレスおよび + (あなたが選択したもので、両方のゲートウェイで同じ必要のある) + 秘密鍵で設定する必要があります。</para> + + <para>2 つのデーモンは、互いにコンタクトし、 + (設定した秘密鍵を用いて) だれが相手であるかを確認します。 + デーモンはその後、新しい秘密鍵を生成し、 + VPN 上のトラフィックの暗号化のために用います。 + 攻撃者がこれらの鍵の (理論的には、不可能ですが) + 1 つをクラックしても、それ以上できないように、 + この秘密鍵を定期的に変更します。 + -- 彼らがカギをクラックしたときには、 + 2 つのデーモンは他の鍵を選択していることでしょう。</para> + + <para>racoon's の設定は、 + <filename>${PREFIX}/etc/racoon</filename> で行われます。 + ここには、設定ファイルが置かれていますが、 + それほど多く変更する必要はありません。 + おそらくあなたが変更すべき racoon の設定の他の部分は、 + 'pre-shared key' です。</para> + + <para>デフォルトの racoon の設定では、これは、 + ${PREFIX}/etc/racoon/psk.txt ファイルにあると仮定されています。 + pre-shared key は、VPN リンクを経由するトラフィックの暗号化には、 + *用いられません*。 + 鍵管理デーモンがお互いを信頼するためのトークンです。</para> + + <para><filename>psk.txt</filename> は、 + あなたが取り扱う各リモートのサイトに関連する行を含んでいます。 *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201611191537.uAJFb3cG026597>