Show Table of Contents
このページには機械翻訳が使用されている場合があります (詳細はこちら)。
4.6. Libreswan を使用した仮想プライベートネットワーク (VPN) のセキュリティー保護
Red Hat Enterprise Linux 7 では、仮想プライベートネットワーク (VPN) は、Libreswan アプリケーションがサポートしている
IPsec
プロトコルを使用して設定できます。Libreswan は、Openswan アプリケーションの延長で、Openswan ドキュメント内の多くの例は Libreswan と交換可能なものです。NetworkManager IPsec
プラグインは、NetworkManager-libreswan と呼ばれます。GNOME Shell のユーザーは、NetworkManager-libreswan-gnome パッケージをインストールしてください。これには、依存関係として NetworkManager-libreswan が含まれています。NetworkManager-libreswan-gnome パッケージは、Optional チャンネルからのみ入手可能です。『Enabling Supplementary and Optional Repositories』 を参照してください。
VPN の
IPsec
プロトコルは、Internet Key Exchange (IKE) プロトコルを使用して設定されます。IPsec および IKE は交換可能です。IPsec VPN は、IKE VPN、IKEv2 VPN、XAUTH VPN、Cisco VPN、または IKE/IPsec VPN とも呼ばれます。Level 2 Tunneling Protocol (L2TP) も使用する IPsec VPN のバリアントは、通常 L2TP/IPsec VPN と呼ばれます。これは、Optional チャンネルの xl2tpd アプリケーションを必要とします。
Libreswan は、Red Hat Enterprise Linux 7 で利用可能なオープンソースでユーザースペースの
IKE
実装です。IKE
バージョン 1 および 2 は、ユーザーレベルデーモンとして実装されます。IKE プロトコルそのものは暗号化されています。IPsec
プロトコルは Linux カーネルにより実装されており、Libreswan は、VPN トンネル設定の追加または削除を行うようにカーネルを設定します。
IKE
プロトコルは、UDP ポート 500 および 4500 を使用します。IPsec
プロトコルは、プロトコル番号 50 の Encapsulated Security Payload (ESP) とプロトコル番号 51 の Authenticated Header (AH) の、2 つの異なるプロトコルから構成されます。AH
プロトコルの使用は推奨されません。AH
を使用している場合は、null 暗号化を使用して ESP
に移動することが推奨されます。
IPsec
プロトコルには、動作のモードが 2 つ (トンネルモード
(デフォルト) および トランスポートモード
) があります。カーネルを、IKE がない IPsec を持つカーネルを設定することができます。これは、Manual Keying
と呼ばれます。ただし、ip xfrm
コマンドは、セキュリティー上の理由から使用しないことが強く推奨されます。netlink を使用して Linux カーネルを使用する Libreswan インターフェースにおいては、パケットの暗号化および複号は Linux カーネルで発生します。
Libreswan は、ネットワークセキュリティーサービス (NSS) 暗号化ライブラリーを使用します。米連邦情報処理規格 (FIPS) 公開文書 140-2 で、libreswan および NSS の両方の使用が認証されます。
重要
Libreswan および Linux カーネルが実装する
IKE
/IPsec
VPN は、Red Hat Enterprise Linux 7 で使用することが推奨される唯一の VPN テクノロジーです。その他の VPN テクノロジーを使用するリスクを理解せずに使用しないでください。
4.6.1. Libreswan のインストール
Libreswan をインストールするには、
root
で以下のコマンドを実行します。
~]# yum install libreswan
Libreswan がインストールされていることを確認するには、以下を行います。
~]$ yum info libreswan
Libreswan を新規にインストールしたあと、NSS データベースはインストールプロセスの一部として初期化する必要があります。新しいデータベースを開始する前に、以下のように古いデータベースを削除します。
~]#systemctl stop ipsec
~]#rm /etc/ipsec.d/*db
次に、新しい NSS データベースを初期化するには、
root
で以下のコマンドを実行します。
~]# ipsec initnss
Initializing NSS database
FIPS モードで動作する場合に限り、NSS データベースをパスワードで保護する必要があります。FIPS モードでデータベースを初期化するには、上のコマンドの代わりに、次のコマンドを使用します。
~]# certutil -N -d sql:/etc/ipsec.d
Enter a password which will be used to encrypt your keys.
The password should be at least 8 characters long,
and should contain at least one non-alphabetic character.
Enter new password:
Re-enter password:
Libreswan が提供する
ipsec
デーモンを起動するには、root
で以下のコマンドを実行します。
~]# systemctl start ipsec
デーモンが稼働していることを確認します。
~]$ systemctl status ipsec
* ipsec.service - Internet Key Exchange (IKE) Protocol Daemon for IPsec
Loaded: loaded (/usr/lib/systemd/system/ipsec.service; disabled; vendor preset: disabled)
Active: active (running) since Sun 2018-03-18 18:44:43 EDT; 3s ago
Docs: man:ipsec(8)
man:pluto(8)
man:ipsec.conf(5)
Process: 20358 ExecStopPost=/usr/sbin/ipsec --stopnflog (code=exited, status=0/SUCCESS)
Process: 20355 ExecStopPost=/sbin/ip xfrm state flush (code=exited, status=0/SUCCESS)
Process: 20352 ExecStopPost=/sbin/ip xfrm policy flush (code=exited, status=0/SUCCESS)
Process: 20347 ExecStop=/usr/libexec/ipsec/whack --shutdown (code=exited, status=0/SUCCESS)
Process: 20634 ExecStartPre=/usr/sbin/ipsec --checknflog (code=exited, status=0/SUCCESS)
Process: 20631 ExecStartPre=/usr/sbin/ipsec --checknss (code=exited, status=0/SUCCESS)
Process: 20369 ExecStartPre=/usr/libexec/ipsec/_stackmanager start (code=exited, status=0/SUCCESS)
Process: 20366 ExecStartPre=/usr/libexec/ipsec/addconn --config /etc/ipsec.conf --checkconfig (code=exited, status=0/SUCCESS)
Main PID: 20646 (pluto)
Status: "Startup completed."
CGroup: /system.slice/ipsec.service
└─20646 /usr/libexec/ipsec/pluto --leak-detective --config /etc/ipsec.conf --nofork
システム起動時に Libreswan が起動するようにするには、
root
で以下のコマンドを実行します。
~]# systemctl enable ipsec
中間およびホストベースのファイアウォールが
ipsec
サービスを許可するように設定します。ファイアウォールおよび特定サービスの通過を許可することに関する詳細情報は、5章ファイアウォールの使用 を参照してください。Libreswan の使用には、以下のパケットがファイアウォールを通過できるようにしておく必要があります。
Internet Key Exchange
(IKE) プロトコルに対するUDP
ポート 500 および 4500Encapsulated Security Payload
(ESP)IPsec
パケット用に プロトコル 50Authenticated Header
(AH)IPsec
パケット用にプロトコル 51 (一般的でない)
Libreswan を使用して
IPsec
VPN を設定する例を 3 つ紹介します。1 つ目は、2 つのホストを接続してセキュアな通信ができるようにします。2 つ目は、2 つのサイトを接続して 1 つのネットワークを形成します。3 つ目は、このコンテキストでは ロードウォリアー と呼ばれるリモートユーザーをサポートします。
4.6.2. Libreswan を使用して VPN 設定の作成
IKE/IPsec は、ピアツーピアプロトコルであるため、Libreswan は、「ソース」 および 「宛先」、または 「サーバー」 および 「クライアント」 を使用しません。代わりに、エンドポイント (ホスト) を参照するのに、「左」 および 「右」 という用語を使用します。これにより、多くの場合、両方のエンドポイントで同じ設定を使用できます。ただし、多くの管理者は、常に、ローカルホストに 「左」 を使用し、リモートホストには 「右」 を使用するようにします。
エンドポイントの認証には、一般的に使用される方法が 4 つあります。
- Pre-Shared Keys (PSK) は、最も簡単な認証メソッドです。PSK は、20 文字以上のランダムな文字からなります。FIPS モードで、PSK が、使用するインテグリティーアルゴリズムによる最低強化要件に従う必要があります。ランダムな 64 文字より短い PSK を使用しないことが推奨されます。
- 生 RSA 鍵は、静的なホスト間またはサブネット間で一般的に使用される
IPsec
設定です。ホストは、それぞれの公開 RSA 鍵で手動で設定されます。この方法は、12 以上のホストで相互にIPsec
トンネルを設定する必要がある場合には、うまく拡張できません。 - X.509 証明書は、共通の
IPsec
ゲートウェイに接続する必要のあるホストが多数ある大型の導入案件でよく使用されます。ホストまたはユーザーの RSA 証明書の署名には、中央の 認証機関 (CA) が使用されます。この中央 CA は、個別ホストまたはユーザーの取り消しを含む信頼の中継を担当します。 - NULL 認証は、認証なしでメッシュ暗号を取得するために使用されます。受動的攻撃は保護しますが、能動的攻撃は保護しません。ただし、
IKEv2
は、非対称の認証方法を許可しますが、NULL 認証をインターネット規模の日和見 IPsec に対しても使用できます。ここでは、クライアントはサーバーを認証しますが、サーバーはクライアントを認証しません。このモデルは、TLS
を使用して Web サイトを保護する (https:// websites としても知られています) のに似ています。
この認証方式に加え、追加の認証は、量子コンピューターによる可能な攻撃に対して保護するために追加認証を追加できます。この追加認証方法は Postquantum Preshared Keys (PPK) と呼ばれています。個々のクライアント、またはクライアントのグループは、帯域幅を設定した事前共有鍵に対応する (PPKID) を指定することで、独自の PPK を使用できます。「量子コンピューターに対する保護の使用」 を参照してください。
4.6.3. Libreswan を使用したホスト間の VPN の作成
Libreswan が 「左」 および 「右」 と呼ばれる 2 台のホスト間で
IPsec
VPN を作成するように設定するには、両方のホスト上 (「左」 および 「右」) で root
として以下のコマンドを実行し、新たな生 RSA 鍵のペアを作成します。
~]# ipsec newhostkey --output /etc/ipsec.d/hostkey.secrets
Generated RSA key pair with CKAID 14936e48e756eb107fa1438e25a345b46d80433f was stored in the NSS database
これでホストの RSA 鍵のペアが生成されます。エントロピーが低い仮想マシンでは特に、RSA 鍵の生成プロセスは時間が長くかかる場合があります。
ホストの公開鍵を表示するには、「左」 サイドの設定に指定できるため、「newhostkey」 コマンドが返した CKAID を使用して、新しいホストキーが追加されるホストに
root
で以下のコマンドを実行します。
~]# ipsec showhostkey --left --ckaid 14936e48e756eb107fa1438e25a345b46d80433f
# rsakey AQPFKElpV
leftrsasigkey=0sAQPFKElpV2GdCF0Ux9Kqhcap53Kaa+uCgduoT2I3x6LkRK8N+GiVGkRH4Xg+WMrzRb94kDDD8m/BO/Md+A30u0NjDk724jWuUU215rnpwvbdAob8pxYc4ReSgjQ/DkqQvsemoeF4kimMU1OBPNU7lBw4hTBFzu+iVUYMELwQSXpremLXHBNIamUbe5R1+ibgxO19l/PAbZwxyGX/ueBMBvSQ+H0UqdGKbq7UgSEQTFa4/gqdYZDDzx55tpZk2Z3es+EWdURwJOgGiiiIFuBagasHFpeu9Teb1VzRyytnyNiJCBVhWVqsB4h6eaQ9RpAMmqBdBeNHfXwb6/hg+JIKJgjidXvGtgWBYNDpG40fEFh9USaFlSdiHO+dmGyZQ74Rg9sWLtiVdlH1YEBUtQb8f8FVry9wSn6AZqPlpGgUdtkTYUCaaifsYH4hoIA0nku4Fy/Ugej89ZdrSN7Lt+igns4FysMmBOl9Wi9+LWnfl+dm4Nc6UNgLE8kZc+8vMJGkLi4SYjk2/MFYgqGX/COxSCPBFUZFiNK7Wda0kWea/FqE1heem7rvKAPIiqMymjSmytZI9hhkCD16pCdgrO3fJXsfAUChYYSPyPQClkavvBL/wNK9zlaOwssTaKTj4Xn90SrZaxTEjpqUeQ==
以下に示すように、両方のホストで設定ファイルを追加するためにこの鍵が必要です。CKAID が分からない場合は、以下のコマンドを使用してホストキーの一覧を取得できます。
~]# ipsec showhostkey --list
< 1 > RSA keyid: AQPFKElpV ckaid: 14936e48e756eb107fa1438e25a345b46d80433f
鍵ペアの秘密部分は、
/etc/ipsec.d/*.db
に置かれた 「NSS database」 に保存されます。
このホスト間のトンネルに対して設定ファイルを作成するには、上記の
leftrsasigkey=
行および rightrsasigkey=
行を、/etc/ipsec.d/
ディレクトリーに保存されているカスタムの設定ファイルに追加されます。
root
でエディターを使用して以下の形式で適切な名前のファイルを作成します。
/etc/ipsec.d/my_host-to-host.conf
以下のようにファイルを編集します。
conn mytunnel leftid=@west.example.com left=192.1.2.23 leftrsasigkey=0sAQOrlo+hOafUZDlCQmXFrje/oZm [...] W2n417C/4urYHQkCvuIQ== rightid=@east.example.com right=192.1.2.45 rightrsasigkey=0sAQO3fwC6nSSGgt64DWiYZzuHbc4 [...] D/v8t5YTQ== authby=rsasig # load and initiate automatically auto=start
また、公開鍵は、RSAID の代わりに CKAID を設定できます。この場合、「leftrsasigkey=」 の代わりに 「leftckaid=」 を使用します。
左右両方のホストに同じ設定ファイルを使用できます。Libreswan は、指定した IP アドレスまたはホスト名に基づいて、「左」 または 「右」 である場合は自動的に検出します。ホストのいずれかがモバイルホストであり、
IP
アドレスが事前に分からない場合は、モバイルクライアントで %defaultroute
を IP
アドレスとして使用します。これにより、自動的に動的 IP
アドレスを選択します。モバイルホストから接続を受け付ける静的サーバーホストの場合は、%any
をその IP
アドレスに対して使用してモバイルホストを指定します。
leftrsasigkey
の値は 「left」 ホストから、そして rightrsasigkey
値は 「right」 ホストから取得していることを確認します。leftckaid
および rightckaid
を使用する場合も同様です。
ipsec
を再起動し、新しい設定を読み込んでいることを確認します。システムの起動時に設定している場合は、トンネルが確立されていることを確認するには、以下のコマンドを実行します。
~]# systemctl restart ipsec
auto=start
オプションを使用している場合は、数秒以内に IPsec
トンネルを確立する必要があります。root
で以下のコマンドを実行して、トンネルを手動でロードおよび起動できます。
~]#ipsec auto --add mytunnel
~]#ipsec auto --up mytunnel
4.6.3.1. Libreswan を使用したホスト間の VPN の検証
IKE
ネゴシエーションが、UDP
ポート 500 および 4500 で行われます。IPsec
パケットは、Encapsulated Security Payload
(ESP) パケットとして現れます。ESP
プロトコルにはポートがありません。VPN 接続が NAT ルーターを通過する必要がある場合に、ESP
パケットは、ポート 4500 の UDP
パケットにカプセル化されます。
パケットが VPN トンネル経由で送信されていることを確認するには、
root
で以下の形式のコマンドを実行します。
~]# tcpdump -n -i interface esp or udp port 500 or udp port 4500
00:32:32.632165 IP 192.1.2.45 > 192.1.2.23: ESP(spi=0x63ad7e17,seq=0x1a), length 132
00:32:32.632592 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x4841b647,seq=0x1a), length 132
00:32:32.632592 IP 192.0.2.254 > 192.0.1.254: ICMP echo reply, id 2489, seq 7, length 64
00:32:33.632221 IP 192.1.2.45 > 192.1.2.23: ESP(spi=0x63ad7e17,seq=0x1b), length 132
00:32:33.632731 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x4841b647,seq=0x1b), length 132
00:32:33.632731 IP 192.0.2.254 > 192.0.1.254: ICMP echo reply, id 2489, seq 8, length 64
00:32:34.632183 IP 192.1.2.45 > 192.1.2.23: ESP(spi=0x63ad7e17,seq=0x1c), length 132
00:32:34.632607 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x4841b647,seq=0x1c), length 132
00:32:34.632607 IP 192.0.2.254 > 192.0.1.254: ICMP echo reply, id 2489, seq 9, length 64
00:32:35.632233 IP 192.1.2.45 > 192.1.2.23: ESP(spi=0x63ad7e17,seq=0x1d), length 132
00:32:35.632685 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x4841b647,seq=0x1d), length 132
00:32:35.632685 IP 192.0.2.254 > 192.0.1.254: ICMP echo reply, id 2489, seq 10, length 64
ここでの interface は、トラフィックを監視するインターフェースになります。tcpdump での表示を終了するには、Ctrl+C を押します。
注記
tcpdump コマンドと
IPsec
のインタラクションはやや予想外のものになります。見えるのは暗号化された送信パケットのみで、プレーンテキストの送信パケットは見えません。受信パケットは、暗号化および暗号解読された両方を表示します。可能であれば、tcpdump コマンドはどちらかのエンドポイント上ではなく、2 台のマシン間にあるルーター上で実行してください。VTI (Virtual Tunnel Interface) を使用している場合は、物理インターフェースの tcpdump が ESP
パケットを表示しますが、VTI インターフェースの tcpdump はクリアテキストトラフィックを表示します。
トンネルが正常に確立されていることを確認して、さらにトンネルを通過したトラフィック量を確認するには、
root
として以下のコマンドを実行します。
~]# ipsec whack --trafficstatus
006 #2: "mytunnel", type=ESP, add_time=1234567890, inBytes=336, outBytes=336, id='@east'
4.6.4. Libreswan を使用したサイト間の VPN の設定
Libreswan が 2 つのネットワークを結合させるサイト間の
IPsec
VPN を作成するようにするには、エンドポイントとなる 2 つのホスト間に IPsec
トンネルを作成します。これらのホストは、1 つ以上のサブネットからのトラフィック通過を許可するよう設定します。このため、これらはネットワークのリモート部分にはゲートウェイのように見えます。サイト間 VPN とホスト間 VPN の唯一の違いは、前者では 1 つ以上のネットワークまたはサブネットを設定ファイルで指定する必要があるという点です。
サイト間の
IPsec
VPN を作成するように Libreswan を設定するには、まず 「Libreswan を使用したホスト間の VPN の作成」 にあるようにホスト間の IPsec
VPN を設定し、その設定ファイルを /etc/ipsec.d/my_site-to-site.conf
などの適切なファイル名にコピーまたは移動します。root
権限でエディターを使用して、カスタム設定ファイルである /etc/ipsec.d/my_site-to-site.conf
を以下のように編集します。
conn mysubnet also=mytunnel leftsubnet=192.0.1.0/24 rightsubnet=192.0.2.0/24 auto=start conn mysubnet6 also=mytunnel connaddrfamily=ipv6 leftsubnet=2001:db8:0:1::/64 rightsubnet=2001:db8:0:2::/64 auto=start conn mytunnel leftid=@west.example.com left=192.1.2.23 leftrsasigkey=0sAQOrlo+hOafUZDlCQmXFrje/oZm [...] W2n417C/4urYHQkCvuIQ== rightid=@east.example.com right=192.1.2.45 rightrsasigkey=0sAQO3fwC6nSSGgt64DWiYZzuHbc4 [...] D/v8t5YTQ== authby=rsasig
トンネルを表示するには、Libreswan を再起動するか、
root
で以下のコマンドを実行して手動ですべての接続を読み込み、開始します。
~]# ipsec auto --add mysubnet
~]# ipsec auto --add mysubnet6
~]# ipsec auto --up mysubnet
104 "mysubnet" #1: STATE_MAIN_I1: initiate
003 "mysubnet" #1: received Vendor ID payload [Dead Peer Detection]
003 "mytunnel" #1: received Vendor ID payload [FRAGMENTATION]
106 "mysubnet" #1: STATE_MAIN_I2: sent MI2, expecting MR2
108 "mysubnet" #1: STATE_MAIN_I3: sent MI3, expecting MR3
003 "mysubnet" #1: received Vendor ID payload [CAN-IKEv2]
004 "mysubnet" #1: STATE_MAIN_I4: ISAKMP SA established {auth=OAKLEY_RSA_SIG cipher=aes_128 prf=oakley_sha group=modp2048}
117 "mysubnet" #2: STATE_QUICK_I1: initiate
004 "mysubnet" #2: STATE_QUICK_I2: sent QI2, IPsec SA established tunnel mode {ESP=>0x9414a615 <0x1a8eb4ef xfrm=AES_128-HMAC_SHA1 NATOA=none NATD=none DPD=none}
~]# ipsec auto --up mysubnet6
003 "mytunnel" #1: received Vendor ID payload [FRAGMENTATION]
117 "mysubnet" #2: STATE_QUICK_I1: initiate
004 "mysubnet" #2: STATE_QUICK_I2: sent QI2, IPsec SA established tunnel mode {ESP=>0x06fe2099 <0x75eaa862 xfrm=AES_128-HMAC_SHA1 NATOA=none NATD=none DPD=none}
4.6.4.1. Libreswan を使用するサイト間の VPN の検証
VPN トンネル経由でパケットが送られたことを検証する手順は、「Libreswan を使用したホスト間の VPN の検証」 と同じです。
4.6.5. Libreswan を使用するサイト間のシングルトンネル VPN の設定
サイト間のトンネルを構築する際に、ゲートウェイは公開
IP
アドレスではなく、内部の IP
アドレスを使用して相互に通信する必要が多くあります。これは、1 つのトンネルを使用することで実行できます。ホスト名が west
の左のホストの内部 IP
アドレスが 192.0.1.254
で、ホスト名が east
の右のホストの IP
アドレスが 192.0.2.254
の場合、以下の設定を、1 つのトンネルを使用して両方のサーバーで /etc/ipsec.d/myvpn.conf
ファイルに保存できます。
conn mysubnet leftid=@west.example.com leftrsasigkey=0sAQOrlo+hOafUZDlCQmXFrje/oZm [...] W2n417C/4urYHQkCvuIQ== left=192.1.2.23 leftsourceip=192.0.1.254 leftsubnet=192.0.1.0/24 rightid=@east.example.com rightrsasigkey=0sAQO3fwC6nSSGgt64DWiYZzuHbc4 [...] D/v8t5YTQ== right=192.1.2.45 rightsourceip=192.0.2.254 rightsubnet=192.0.2.0/24 auto=start authby=rsasig
4.6.6. Libreswan を使用したサブネット押し出しの設定
IPsec
は、ハブおよびスポークのアーキテクチャーにデプロイされることがよくあります。各リーフノードは、広い範囲の一部である IP
範囲があります。ハブを通して互いに通信します。これは サブネットの押出 と呼ばれます。
例4.2 サブネット押出の簡易設定
以下の例では、本社に
10.0.0.0/8
を設定し、より小さい /24
サブネットを使用する支店を 2 つ設定します。
本社では以下のようになります。
conn branch1 left=1.2.3.4 leftid=@headoffice leftsubnet=0.0.0.0/0 leftrsasigkey=0sA[...] # right=5.6.7.8 rightid=@branch1 rightsubnet=10.0.1.0/24 rightrsasigkey=0sAXXXX[...] # auto=start authby=rsasig conn branch2 left=1.2.3.4 leftid=@headoffice leftsubnet=0.0.0.0/0 leftrsasigkey=0sA[...] # right=10.11.12.13 rightid=@branch2 rightsubnet=10.0.2.0/24 rightrsasigkey=0sAYYYY[...] # auto=start authby=rsasig
「branch1」 オフィスでは、同一の接続を使用します。さらに、パススルー (pass-through) 接続を使用して、ローカル LAN トラフィックをトンネル経由の送信から除外します。
conn branch1 left=1.2.3.4 leftid=@headoffice leftsubnet=0.0.0.0/0 leftrsasigkey=0sA[...] # right=10.11.12.13 rightid=@branch2 rightsubnet=10.0.1.0/24 rightrsasigkey=0sAYYYY[...] # auto=start authby=rsasig conn passthrough left=1.2.3.4 right=0.0.0.0 leftsubnet=10.0.1.0/24 rightsubnet=10.0.1.0/24 authby=never type=passthrough auto=route
4.6.7. IKEv2 リモートアクセスの VPN Libreswan の設定
ロードウォーリアーとは、ノート PC など、
IP
アドレスを動的に割り当てられるモバイルクライアントを持ち運ぶユーザーのことで、認証は、証明書を使用して行います。以前の IKEv1 XAUTH プロトコルを使用する必要がないように、以下の例では IKEv2 が使用されています。
サーバー上では以下の設定になります。
conn roadwarriors ikev2=insist # Support (roaming) MOBIKE clients (RFC 4555) mobike=yes fragmentation=yes left=1.2.3.4 # if access to the LAN is given, enable this, otherwise use 0.0.0.0/0 # leftsubnet=10.10.0.0/16 leftsubnet=0.0.0.0/0 leftcert=vpn-server.example.com leftid=%fromcert leftxauthserver=yes leftmodecfgserver=yes right=%any # trust our own Certificate Agency rightca=%same # pick an IP address pool to assign to remote users # 100.64.0.0/16 prevents RFC1918 clashes when remote users are behind NAT rightaddresspool=100.64.13.100-100.64.13.254 # if you want remote clients to use some local DNS zones and servers modecfgdns="1.2.3.4, 5.6.7.8" modecfgdomains="internal.company.com, corp" rightxauthclient=yes rightmodecfgclient=yes authby=rsasig # optionally, run the client X.509 ID through pam to allow/deny client # pam-authorize=yes # load connection, don't initiate auto=add # kill vanished roadwarriors dpddelay=1m dpdtimeout=5m dpdaction=%clear
ここで、
leftcert=vpn-server.example.com
- このオプションは、証明書のインポートに使用された平易な名前またはニックネームを参照する証明書を指定します。通常、名前は
.p12
ファイルの形式で PKCS #12 証明書バンドルの一部として生成されます。詳細は、pkcs12(1)
およびpk12util(1)
の man ページを参照してください。
ロードウォーリアーのデバイスであるモバイルクライアントでは、上記の設定に多少変更を加えて使用します。
conn to-vpn-server ikev2=insist # pick up our dynamic IP left=%defaultroute leftsubnet=0.0.0.0/0 leftcert=myname.example.com leftid=%fromcert leftmodecfgclient=yes # right can also be a DNS hostname right=1.2.3.4 # if access to the remote LAN is required, enable this, otherwise use 0.0.0.0/0 # rightsubnet=10.10.0.0/16 rightsubnet=0.0.0.0/0 # trust our own Certificate Agency rightca=%same authby=rsasig # allow narrowing to the server’s suggested assigned IP and remote subnet narrowing=yes # Support (roaming) MOBIKE clients (RFC 4555) mobike=yes # Initiate connection auto=start
ここで、
auto=start
- このオプションを使用すると、ユーザーが
ipsec
システムサービスを起動するたびに VPN に接続できます。後で接続を確立する場合は、これをauto=add
に置き換えてください。
4.6.8. X.509 を使用した IKEv1 リモートアクセスの VPN Libreswan および XAUTH の設定
Libreswan は、接続確立の際に XAUTH
IPsec
拡張機能を使用して、ローミング VPN クライアントに対してネイティブに IP
アドレスと DNS 情報を割り当てる方法を提供します。拡張アプリケーション (XAUTH) は、PSK または X.509 証明書を使用してデプロイできます。X.509 を使用してデプロイの方がより安全です。クライアントの証明書は、証明書失効リストまたは Online Certificate Status Protocol (OCSP) で失効させることができます。X.509 証明書を使用すると、個別のクライアントはサーバーを偽装することができません。グループパスワードとも呼ばれる PSK を使用すると、これは理論上は可能になります。
XAUTH は、それ自体とユーザー名およびパスワードを新たに確認するために、VPN クライアントを必要とします。Google 認証システムや RSA SecureID トークンなどのワンタイムパスワード (OTP) では、ユーザーパスワードにワンタイムトークンが付けられます。
XAUTH に可能なバックエンドは 3 つあります。
xauthby=pam
- これにより、
/etc/pam.d/pluto
の設定を使用してユーザーを認証します。プラグ可能な認証モジュール (PAM) は、それ自体でさまざまなバックエンドを使用するように設定できます。システムアカウントの user-password スキーム、LDAP ディレクトリー、RADIUS サーバー、またはカスタムパスワード認証モジュールを使用できます。詳細は、PAM (プラグ可能な認証モジュール) の使用 の章を参照してください。 xauthby=file
- これは、設定ファイル
/etc/ipsec.d/passwd
(/etc/ipsec.d/nsspassword
と混同しないこと) を使用します。このファイルの形式は Apache.htpasswd
ファイルと同様のもので、Apachehtpasswd
コマンドはこのファイルのエントリー作成に使用できます。ただし、ユーザー名とパスワードの後に、使用するIPsec
接続の接続名が 3 番目のコラムに必要になります。たとえば、conn remoteusers
を使用してリモートユーザーに VPN を提供する場合、パスワードファイルのエントリーは以下のようになります。user1:$apr1$MIwQ3DHb$1I69LzTnZhnCT2DPQmAOK.:remoteusers
注記
htpasswd
コマンドを使用している場合に、各行で user:password 部分の後に手動で追加する必要があります。 xauthby=alwaysok
- サーバーは常に、XAUTH ユーザーとパスワードの組み合わせが適切であるように装います。サーバーはユーザー名とパスワードを無視しますが、クライアントはこれらを指定する必要があります。これは、ユーザーが X.509 証明書で既に特定されている場合、もしくは XAUTH バックエンドが不要な VPN をテストしている場合にのみ使用します。
X.509 証明書を使用したサーバー設定例を以下に示します。
conn xauth-rsa ikev2=never auto=add authby=rsasig pfs=no rekey=no left=ServerIP leftcert=vpn.example.com #leftid=%fromcert leftid=vpn.example.com leftsendcert=always leftsubnet=0.0.0.0/0 rightaddresspool=10.234.123.2-10.234.123.254 right=%any rightrsasigkey=%cert modecfgdns=1.2.3.4,8.8.8.8 modecfgdomains=example.com modecfgbanner="Authorized access is allowed" leftxauthserver=yes rightxauthclient=yes leftmodecfgserver=yes rightmodecfgclient=yes modecfgpull=yes xauthby=pam dpddelay=30 dpdtimeout=120 dpdaction=clear ike_frag=yes # for walled-garden on xauth failure # xauthfail=soft # leftupdown=/custom/_updown
xauthfail
を hard ではなく soft に設定すると認証失敗は無視され、VPN はユーザーが適切に認証したかのように設定されます。カスタムのアップダウンスクリプトを使用すると、環境変数 XAUTH_FAILED
をチェックできます。このようなユーザーは、たとえば iptables DNAT を使用して 「walled garden」 にリダイレクトすることが可能です。リダイレクト先では管理者への問い合わせ、サービスの有料サブスクリプションの更新などができます。
VPN クライアントは、
modecfgdomain
値および DNS エントリーを使用して、指定したネームサーバーに指定したドメインに対するクエリーをリダイレクトします。これにより、ローミングユーザーが、内部 DNS 名を使用し内部のみのリソースにアクセスできます。IKEv2 は、modecfgdomains
および modecfgdns
を使用してドメイン名およびネームサーバー IP アドレスのコンマ区切りリストをサポートしますが、IKEv1 プロトコルは 1 つのドメイン名だけをサポートし、libreswan はネームサーバーの IP アドレスを 2 つまでしかサポートしません。オプションで、VPM クライアントにバナーテキストを送信するには、modecfgbanner
オプションを使用します。
leftsubnet
が 0.0.0.0/0
でない場合は、分割トンネリング設定要求が自動的にクライアントに送信されます。たとえば、leftsubnet=10.0.0.0/8
を使用すると、VPN クライアントは 10.0.0.0/8
のトラフィックのみを VPN 経由で送信します。
クライアントでは、ユーザーは使用するバックエンドに依存するユーザーパスワードを入力する必要があります。
xauthby=file
- 管理者はパスワードを生成し、
/etc/ipsec.d/passwd
ファイルに保存します。 xauthby=pam
- パスワードは、
/etc/pam.d/pluto
ファイルの PAM 設定で指定された場所で取得されます。 xauthby=alwaysok
- パスワードはチェックされず、常に受け入れられます。テスト目的や、xauth のみのクライアントの互換性を確保する場合は、このオプションを使用します。
関連情報
XAUTH の詳細は、Extended Authentication within ISAKMP/Oakley (XAUTH) を参照してください。
4.6.9. 量子コンピューターに対する保護の使用
事前共有鍵を持つ IKEv1 を使用すると、量子攻撃者に対する保護が可能になります。IKEv2 の再設計により、この保護はネイティブに提供されなくなりました。Libreswan は、Postquantum Preshared Keys (PPK) を使用して、量子攻撃に対する IKEv2 接続を保護します。
任意の PPK サポートを有効にするには、接続定義に
ppk=yes
を追加します。PPK を要求するには、ppk=insist
を追加します。次に、各クライアントには、帯域幅 (および望ましくは量子安全) に通信する秘密値を持つ PPK ID が付与されます。PPK はランダム性で非常に強く、辞書の用語は選択されません。PPK ID および PPK データそのものは、以下のように ipsec.secrets
に保存されています。
@west @east : PPKS "user1" "thestringismeanttobearandomstr"
PPKS
オプションは、静的 PPK を参照します。動的 PPK に基づいてワンタイムパットを使用する実験的機能です。各接続で、ワンタイムパッドの新しい部分を PPK として使用します。これを使用すると、ファイル内の動的 PPK では、再利用しないようにゼロで上書きされます。ワンタイムパットマテリアルが残っていないと、接続に失敗します。詳細は man ページの ipsec.secrets(5)
を参照してください。
警告
動的 PPK の実装はテクノロジープレビューとして提供されており、この機能は注意して使用する必要があります。詳細は 『Red Hat Enterprise Linux 7.5 リリースノート』 を参照してください。
4.6.10. 関連情報
以下のドキュメントは、Libreswan および
ipsec
デーモンに関する追加リソースを提供します。
4.6.10.1. インストールされているドキュメント
ipsec(8)
の man ページ -ipsec
のコマンドオプションを説明しています。ipsec.conf(5)
の man ページ -ipsec
の設定情報が含まれています。ipsec.secrets(5)
の man ページ -ipsec.secrets
ファイルの形式を説明しています。ipsec_auto(8)
の man ページ - 鍵の自動交換を使用して確立された LibreswanIPsec
接続を操作する auto コマンドラインクライアントの使用方法を説明しています。ipsec_rsasigkey(8)
man ページ - RSA 署名鍵の生成に使用するツールを説明しています。/usr/share/doc/libreswan-version/
4.6.10.2. オンラインのドキュメント
- https://libreswan.org
- アップストリームプロジェクトの Web サイトです。
- https://libreswan.org/wiki
- Libreswan プロジェクトの Wiki です。
- https://libreswan.org/man/
- Libreswan に関する全 man ページ
- NIST Special Publication 800-77: Guide to IPsec VPNs
- IPsec に基づくセキュリティーサービスの実装に関する組織への実用的なガイダンス。
このページには機械翻訳が使用されている場合があります (詳細はこちら)。