6.4. raw RSA 鍵認証を使用した IPsec サイト間 VPN の手動設定
サイト間 VPN は、2 つの異なるネットワーク間にセキュアな暗号化トンネルを確立し、インターネットなどのセキュアでないパブリックネットワークを介してそれらをシームレスにリンクします。たとえば、これにより、支社のデバイスがすべて同じローカルネットワークの一部であるかのように、企業本社のリソースにアクセスできるようになります。
ゲートウェイデバイスの認証に関しては、RSA 鍵は事前共有鍵 (PSK) よりもセキュアです。非対称暗号化によって秘密情報共有のリスクが排除されるためです。また、RSA 鍵を使用すると、強力なピアツーピア認証を提供しつつも、認証局 (CA) が不要になるため、デプロイが容易になります。
両方のゲートウェイデバイスで次の手順を実行してください。
前提条件
- 両方のネットワークのルートにより、リモートネットワークへのトラフィックがローカル VPN ゲートウェイデバイスを介して送信されるようになっている。
手順
Libreswan がまだインストールされていない場合は、次の手順を実行します。
libreswan
パッケージをインストールします。dnf install libreswan
# dnf install libreswan
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ネットワークセキュリティーサービス (NSS) データベースを初期化します。
ipsec initnss
# ipsec initnss
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドにより、
/var/lib/ipsec/nss/
ディレクトリーにデータベースが作成されます。ipsec
サービスを有効にして起動します。systemctl enable --now ipsec
# systemctl enable --now ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ファイアウォールで IPsec ポートとプロトコルを開きます。
firewall-cmd --permanent --add-service="ipsec" firewall-cmd --reload
# firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
RSA 鍵ペアを作成します。
ipsec newhostkey
# ipsec newhostkey
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipsec
ユーティリティーにより、鍵ペアが NSS データベースに保存されます。- ピアを指定します。IPsec トンネルでは、一方のホストを left に、もう一方のホストを right に指定する必要があります。これは任意に選択できます。一般的には、ローカルホストを left、リモートホストを right と呼びます。
left と right 両方のピアの Certificate Key Attribute ID (CKAID) を表示します。
ipsec showhostkey --list
# ipsec showhostkey --list < 1> RSA keyid: <key_id> ckaid: <ckaid>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以降のステップで、両方のピアの CKAID が必要になります。
公開鍵を表示します。
left ピアで次のように入力します。
ipsec showhostkey --left --ckaid <ckaid_of_left_peer>
# ipsec showhostkey --left --ckaid <ckaid_of_left_peer> # rsakey AwEAAdKCx leftrsasigkey=0sAwEAAdKCxpc9db48cehzQiQD...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow right ピアで次のように入力します。
ipsec showhostkey --right --ckaid <ckaid_of_right_peer>
# ipsec showhostkey --right --ckaid <ckaid_of_right_peer> # rsakey AwEAAcNWC rightrsasigkey=0sAwEAAcNWCzZO+PR1j8WbO8X...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
これらのコマンドにより、設定ファイルで使用する必要がある対応するパラメーターとともに、公開鍵が表示されます。
/etc/ipsec.d/
ディレクトリーに接続用の.conf
ファイルを作成します。たとえば、次の設定で/etc/ipsec.d/site-to-site.conf
ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記両方のゲートウェイデバイスで同じ設定ファイルを使用できます。Libreswan は内部情報を使用して、自身が left ホストで動作しているか、right ホストで動作しているかを識別します。ただし、
left*
パラメーターのすべての値が一方のピアに属し、right*
パラメーターの値がもう一方のピアに属することが重要です。この例で指定されている設定は次のとおりです。
conn <connection_name>
- 接続名を定義します。名前は任意であり、Libreswan はこれを使用して接続を識別します。この接続のパラメーターは、少なくとも 1 つのスペースまたはタブでインデントする必要があります。
auto=<type>
-
接続の開始方法を制御します。値を
start
に設定すると、Libreswan はサービスの起動時に自動的に接続をアクティブ化します。 authby=rsasig
- この接続に対して RSA 署名認証を有効にします。
left=<ip_address_or_fqdn_of_left_peer>
およびright=<ip_address_or_fqdn_of_right_peer>
- ピアの IP アドレスまたは DNS 名を定義します。
leftid=<id>
およびrightid=<id>
-
Internet Key Exchange (IKE) ネゴシエーションプロセス中に各ピアを識別する方法を定義します。これには、完全修飾ドメイン名 (FQDN)、IP アドレス、またはリテラル文字列を使用できます。後者の場合、文字列の前に
@
記号を付けます。 leftrsasigkey=<public_key>
およびrightrsasigkey=<public_key>
-
ピアの公開鍵を指定します。前のステップで
ipsec showhostkey
コマンドによって表示された値を使用します。 leftsubnet=<subnet>
およびrightsubnet=<subnet>
- トンネルを介して接続されるサブネットを Classless Inter-Domain Routing (CIDR) 形式で定義します。片側で複数のサブネットをトンネリングする場合は、それらを中括弧で囲み、コンマで区切って指定します。
パケット転送を有効にします。
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipsec
サービスを再起動します。systemctl restart ipsec
# systemctl restart ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 設定ファイルで
auto=start
を使用すると、接続が自動的にアクティブになります。他の方法の場合、接続をアクティブ化するために追加の手順が必要です。詳細は、システム上のipsec.conf(5)
man ページを参照してください。
検証
IPsec ステータスを表示します。
ipsec status
# ipsec status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続が正常に確立されていれば、出力に次の行が含まれています。
Internet Key Exchange バージョン 2 (IKEv2) ネゴシエーションのフェーズ 1 が正常に完了しています。
#2: "<connection_name>":500 ESTABLISHED_IKE_SA (established IKE SA); REKEY in 28523s; REPLACE in 28793s; newest; idle;
#2: "<connection_name>":500 ESTABLISHED_IKE_SA (established IKE SA); REKEY in 28523s; REPLACE in 28793s; newest; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これで、セキュリティーアソシエーション (SA) が、実際のデータ暗号化トンネル (子 SA またはフェーズ 2 SA と呼ばれる) をネゴシエートする準備が整いました。
子 SA が確立されています。
#3: "<connection_name>":500 ESTABLISHED_CHILD_SA (established Child SA); REKEY in 28523s; REPLACE in 28793s; newest; eroute owner; IKE SA #2; idle;
#3: "<connection_name>":500 ESTABLISHED_CHILD_SA (established Child SA); REKEY in 28523s; REPLACE in 28793s; newest; eroute owner; IKE SA #2; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これは、データトラフィックが通過する実際のトンネルです。
- ローカルサブネット内のクライアントから、リモートサブネット内のクライアントに ping を実行します。
次のステップ
- DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策は、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。