IKEは、通信する2つのエンドポイント間の認証を管理します。また、エンドポイントが、IPsecトンネルのセットアップに使用するアルゴリズムについてネゴシエートできるようにします。
以前のガイドでは、Ubuntu18.04でStrongSwanを使用してIPSecVPNをインストールおよび構成する方法について説明しました。以下のリンクを参照してください;
Ubuntu18.04でStrongSwanを使用してIPSECVPNを構成する
CentOS8でLibreswanを使用してIPSecVPNサーバーをセットアップする
LibreswanにはさまざまなVPNサーバークライアント実装があります。このガイドでは、モバイルクライアント(ラップトップなどの動的に割り当てられたIPを持つクライアント)用にIPSecVPNサーバーをセットアップする方法を学習します。ここではroad warriors
と呼ばれます。 、どこからでもローカルLANに接続できるようにします。モバイルクライアントは証明書を使用して認証されるため、IKEv2プロトコルを使用します。
IKEv2 (インターネットキー交換バージョン2)は、要求および応答アクションを処理するVPN暗号化プロトコルです。 IKEは、2者間で相互認証を実行し、セキュリティペイロード(ESP)または認証ヘッダー(AH)をカプセル化するためのSAと暗号化アルゴリズムのセットを効率的に確立するために使用できる共有秘密情報を含むIKEセキュリティアソシエーション(SA)を確立します。 SAが伝送するトラフィックを保護するためにSAによって使用されます。
システムアップデートの実行
サーバー上のシステムパッケージを更新して、LibreswanVPNサーバーとして使用します。
dnf update
CentOS8にLibreswanをインストールする
更新が完了したら、Libreswanをインストールします。 LibreswanはCentOS8AppStreamリポジトリで利用できるため、次のようにパッケージマネージャーを使用して簡単にインストールできます。
dnf install libreswan
Libreswanの実行
インストールが完了したら、Libreswan ipsec
システムブートで実行するサービス。
systemctl enable --now ipsec
IPSecNSSデータベースを初期化する
次に、Network Security Services(NSS)データベースを初期化する必要があります。 NSSデータベースは、認証キーとID証明書を格納するために使用されます。
ipsec initnss
以前のデータベースがある場合は、それを削除して、新しいデータベースを作成できます。 NSSデータベースは/etc/ipsec.d
に保存されています 。
古いデータベースを削除するには、実行中の場合はIPsecを停止し、以下のコマンドを実行してNSSデータベースを削除します。
systemctl stop ipsec
rm -rf /etc/ipsec.d/*db
その後、NSSデータベースを再初期化できます。
ipsec initnss
次に、IPSecを開始します;
systemctl start ipsec
ファイアウォールでLibreswanポートとプロトコルを開く
IKE
プロトコルはUDP port 500
を使用します および 4500
IPsecプロトコルの場合、Encapsulated Security Payload
(ESP)およびAuthenticated Header
(AH)はprotocol number 50 and 51
を使用します それぞれ。
したがって、 VPN(左エンドポイント)サーバーのアクティブなファイアウォールゾーンでこれらのポートとプロトコルを開きます。 このガイドの内容。
firewall-cmd --get-active-zone
デフォルトのfirewalldゾーンでポートとファイアウォールを開くには;
firewall-cmd --add-port={4500,500}/udp --permanent
firewall-cmd --add-protocol={50,51} --permanent
または、IPSecサービスを使用することもできます;
firewall-cmd --add-service=ipsec --permanent
FirewallDをリロード
firewall-cmd --reload
Libreswanを使用してIPSecVPNサーバーを構成する
Libreswanはクライアントサーバーモデルを使用しません。ただし、left
という用語を使用します およびright
特定の接続に関係するエンドポイントを参照します。左/右の用語は、接続の構成中に用語の使用に一貫性を維持する限り、各システムを指すために任意に使用できます。
IP転送を有効にする
両方のVPN server
、IP転送を有効にする必要があります。
以下のコマンドを実行して、IP転送が有効になっているかどうかを確認します;
sysctl net.ipv4.ip_forward
出力がnet.ipv4.ip_forward = 0
、次にIP転送が無効になり、以下のコマンドのいずれかを実行して有効にする必要があります。
IP転送は、firewalldでIPマスカレードを有効にするだけで有効にできます。
firewall-cmd --add-masquerade --permanent firewall-cmd --reload
IP転送を確認できます;
cat /proc/sys/net/ipv4/ip_forward 1
値1は、IP転送が有効になっていることを意味します。
同様に。以下のコマンドを実行して、IP転送を有効にできます;
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
新しい構成でsysctl.confで更新します。
sysctl -p
また、リダイレクトが無効になっていることを確認してください。
less /etc/sysctl.d/50-libreswan.conf
# We disable redirects for XFRM/IPsec net.ipv6.conf.default.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.rp_filter = 0
VPNサーバーとクライアントの証明書を生成する
次に、認証に使用するVPNサーバーとクライアントの証明書を生成する必要があります。
証明書生成データベースの作成
以下のコマンドを実行して、ホスト証明書の生成に使用する秘密鍵とCA証明書の保存を生成するために使用できるデータベースを作成します。 certutil
証明書を生成するコマンド。
mkdir /etc/ipsec.d/certsdb
certutil -N -d sql:/etc/ipsec.d/certsdb
このコマンドは、キーを暗号化するためのパスワードの入力を求めるプロンプトを表示します。
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: StRONgPassw0Rd Re-enter password: StRONgPassw0Rd
CA証明書の生成
このチュートリアルでは自己署名証明書を使用するため、ローカルCA証明書を生成する方法は次のとおりです。
certutil -S -x -n "Kifarunix-demo CA" -s "O=Kifarunix-demo,CN=Kifarunix-demo CA" -k rsa -g 4096 -v 12 -d sql:/etc/ipsec.d/certsdb -t "CT,," -2
man certutil
を参照してください 使用されるオプションについて学ぶため。
コマンドを実行すると、最初に、上記で設定したキーを暗号化するためのパスワードを入力するように求められます。パスワードを入力して続行します。
次に、進行状況メーターがいっぱいになるまでキーボードの任意のキーを入力して、キーの作成に使用するランダムシードを生成する必要があります。いっぱいになったら、Enterキーを押して続行します。
... Continue typing until the progress meter is full: |************************************************************| Finished. Press enter to continue: ENTER
- 次に、 yと入力します これが生成されているCA証明書であることを指定します。
- パスの長さを入力するにはEnterキーを押します
- nと入力します これが重要な拡張機能ではないことを指定します。
Generating key. This may take a few moments... Is this a CA certificate [y/N]? y Enter the path length constraint, enter to skip [<0 for unlimited path]: > ENTER Is this a critical extension [y/N]? n
VPNサーバー証明書を生成する
次に、上記で作成したCAを使用して署名されたサーバー証明書を生成し、それに拡張子を割り当てます。
certutil -S -c "Kifarunix-demo CA" -n "vpn.kifarunix-demo.com" -s "O=Kifarunix-demo,CN=vpn.kifarunix-demo.com" -k rsa -g 4096 -v 12 -d sql:/etc/ipsec.d/certsdb -t ",," -1 -6 -8 "vpn.kifarunix-demo.com"
同様に、キー暗号化パスワードを入力し、キーボードからシードを生成し、Enterキーを押して続行します。
キーとキー拡張の使用法を定義します。
Generating key. This may take a few moments... 0 - Digital Signature 1 - Non-repudiation 2 - Key encipherment 3 - Data encipherment 4 - Key agreement 5 - Cert signing key 6 - CRL signing key Other to finish > 0 0 - Digital Signature 1 - Non-repudiation 2 - Key encipherment 3 - Data encipherment 4 - Key agreement 5 - Cert signing key 6 - CRL signing key Other to finish > 2 0 - Digital Signature 1 - Non-repudiation 2 - Key encipherment 3 - Data encipherment 4 - Key agreement 5 - Cert signing key 6 - CRL signing key Other to finish > 8
Is this a critical extension [y/N]? n 0 - Server Auth 1 - Client Auth 2 - Code Signing 3 - Email Protection 4 - Timestamp 5 - OCSP Responder 6 - Step-up 7 - Microsoft Trust List Signing Other to finish > 0 0 - Server Auth 1 - Client Auth 2 - Code Signing 3 - Email Protection 4 - Timestamp 5 - OCSP Responder 6 - Step-up 7 - Microsoft Trust List Signing Other to finish > 8 Is this a critical extension [y/N]? N
VPNクライアント証明書を生成する
以下のコマンドを実行して、VPNクライアント証明書を生成します。証明書の名前(ここで使用されているホスト名)を、クライアント証明書を生成しているホストの名前に置き換えます。
certutil -S -c "Kifarunix-demo CA" -n "janedoe.kifarunix-demo.com" -s "O=Kifarunix-demo,CN=janedoe.kifarunix-demo.com" -k rsa -g 4096 -v 12 -d sql:/etc/ipsec.d/certsdb -t ",," -1 -6 -8 "janedoe.kifarunix-demo.com"
同様に、上記と同じオプションを入力します。
データベースで利用可能な証明書を一覧表示する
certutil -L -d sql:/etc/ipsec.d/certsdb
Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI Kifarunix-demo CA CTu,u,u vpn.kifarunix-demo.com u,u,u janedoe.kifarunix-demo.com u,u,u johndoe.kifarunix-demo.com u,u,u
ゲートウェイ証明書をplutoDBにエクスポートおよびインポートします。
pk12util -o vpn.kifarunix-demo.com.p12 -n "vpn.kifarunix-demo.com" -d sql:/etc/ipsec.d/certsdb
PKCS12パスワードはスキップできます。
ls
vpn.kifarunix-demo.com.p12
エクスポートしたら、VPNサーバー証明書をDBにインポートします。
ipsec import vpn.kifarunix-demo.com.p12
クライアントホスト証明書、秘密鍵、およびCA証明書をエクスポートします。これらはすべて、以下のコマンドで指定された出力ファイルとして.p12ファイルに保存されます。
pk12util -o janedoe.kifarunix-demo.com.p12 -n "janedoe.kifarunix-demo.com" -d sql:/etc/ipsec.d/certsdb
同様に、PKCS12パスワードをスキップします。
ls
janedoe.kifarunix-demo.com.p12 vpn.kifarunix-demo.com.p12
他のクライアントホストの証明書を生成した場合は、それらをエクスポートすることもできます。
IPSecVPNエンドポイント構成ファイルを作成する
IPSec VPNホストで、 /etc/ipsec.d
に構成ファイルを作成します モバイルクライアントのディレクトリ。 /etc/ipsec.conf
はLibreswanのデフォルトの構成ファイルであり、 /etc/ipsec.d
で定義された他の構成を含めるように指示されています。 directory。
vim /etc/ipsec.d/mobile-clients.conf
上記のファイルに次の構成を追加します。
conn roadwarriors left=vpn.kifarunix-demo.com leftsubnet=0.0.0.0/0 leftcert=vpn.kifarunix-demo.com leftid=%fromcert leftrsasigkey=%cert leftsendcert=always right=%any rightaddresspool=10.0.8.10-10.0.8.254 rightca=%same rightrsasigkey=%cert modecfgdns="8.8.8.8,10.0.8.1" authby=rsasig auto=start dpddelay=60 dpdtimeout=300 dpdaction=clear mobike=yes ikev2=insist fragmentation=yes type=tunnel
man ipsec.conf
を参照してください 上記で使用したオプションの包括的な説明については、
エラーがないか構成ファイルを確認します。
/usr/libexec/ipsec/addconn --config /etc/ipsec.conf --checkconfig
エラーがない場合は、ステータスが0のコマンドを終了します。
echo $?
それ以外の場合は、エラーが標準出力に表示されます。続行する前にエラーを修正してください。
#logfile=/var/log/pluto.log
、/etc/ipsec.conf
configuration。
config setup # Normally, pluto logs via syslog. logfile=/var/log/pluto.log ...
IPsecを再起動します;
systemctl restart ipsec
ステータスを確認します;
systemctl status ipsec
ipsecの起動に失敗した場合は、構成構文エラーが発生している必要があります。以下のコマンドを実行して、エラーを特定します。
journalctl -xe
Libreswanのrp_filterを無効にし、すべてのカーネル構成をリロードします。
echo "net.ipv4.conf.all.rp_filter = 0" >> /etc/sysctl.d/50-libreswan.conf
sysctl --system
IPsec構成の確認
IPsec構成が正常であることを確認するには、以下のコマンドを実行するだけです。
ipsec verify
Verifying installed system and configuration files Version check and ipsec on-path [OK] Libreswan 3.29 (netkey) on 4.18.0-193.6.3.el8_2.x86_64 Checking for IPsec support in kernel [OK] NETKEY: Testing XFRM related proc values ICMP default/send_redirects [OK] ICMP default/accept_redirects [OK] XFRM larval drop [OK] Pluto ipsec.conf syntax [OK] Checking rp_filter [OK] Checking that pluto is running [OK] Pluto listening for IKE on udp 500 [OK] Pluto listening for IKE/NAT-T on udp 4500 [OK] Pluto ipsec.secret syntax [OK] Checking 'ip' command [OK] Checking 'iptables' command [OK] Checking 'prelink' command does not interfere with FIPS [OK] Checking for obsolete ipsec.conf options [OK]
VPNクライアント証明書をモバイルクライアントにコピーする
これで、クライアント証明書をリモートクライアントにコピーできます VPNサーバーに接続します。
このチュートリアルでは、Ubuntu20.04およびUbuntu18.04システムをリモートクライアントとして使用しています。
janedoe.kifarunix-demo.com
という2つのホストの証明書を生成しました およびjohndoe.kifarunix-demo.com
それぞれUbuntu20.04およびUbuntu18.04クライアントホスト用。
Libreswanクライアントの構成
Ubuntuシステムに、libreswanパッケージをインストールします。
apt update
apt install libreswan
LibreswanクライアントVPN接続構成ファイルを作成します
vim /etc/ipsec.d/johndoe.conf
以下の内容を入力してください;
conn vpn.kifarunix-demo.com left=%defaultroute leftcert=johndoe.kifarunix-demo.com leftid=%fromcert leftrsasigkey=%cert leftsubnet=0.0.0.0/0 leftmodecfgclient=yes right=vpn.kifarunix-demo.com rightsubnet=0.0.0.0/0 [email protected] rightrsasigkey=%cert narrowing=yes ikev2=insist rekey=yes fragmentation=yes mobike=no auto=start
ホスト名を使用している場合は、それらが解決可能であることを確認してください。
同様に、2番目のホストで;
vim /etc/ipsec.d/janedoe.conf
conn vpn.kifarunix-demo.com left=%defaultroute leftcert=janedoe.kifarunix-demo.com leftid=%fromcert leftrsasigkey=%cert leftsubnet=0.0.0.0/0 leftmodecfgclient=yes right=vpn.kifarunix-demo.com rightsubnet=0.0.0.0/0 [email protected] rightrsasigkey=%cert narrowing=yes ikev2=insist rekey=yes fragmentation=yes mobike=no auto=start
構成構文を確認してください;
/usr/lib/ipsec/addconn --config /etc/ipsec.conf --checkconfig
NSSデータベースを初期化します;
sudo ipsec checknss
PKCS#12X.509証明書ファイルをNSSデータベースにインポートします;
sudo ipsec import janedoe.kifarunix-demo.com.p12
他のクライアントホストでも同じことを行います。 ENTERを押して、PCKS12パスワードをスキップします。
Enter password for PKCS12 file: ENTER pk12util: PKCS12 IMPORT SUCCESSFUL correcting trust bits for Kifarunix-demo CA
クライアントホストで利用可能な証明書を一覧表示できます;
certutil -L -d sql:/var/lib/ipsec/nss
IPsecを起動し、システムブートで実行できるようにします。
sudo ipsec setup start
ステータスを確認してください;
systemctl status ipsec
● ipsec.service - Internet Key Exchange (IKE) Protocol Daemon for IPsec Loaded: loaded (/lib/systemd/system/ipsec.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2020-06-21 12:28:02 EAT; 7min ago Docs: man:ipsec(8) man:pluto(8) man:ipsec.conf(5) Process: 11251 ExecStartPre=/usr/lib/ipsec/addconn --config /etc/ipsec.conf --checkconfig (code=exited, status=0/SUCCESS) Process: 11266 ExecStartPre=/usr/lib/ipsec/_stackmanager start (code=exited, status=0/SUCCESS) Process: 11742 ExecStartPre=/usr/sbin/ipsec --checknss (code=exited, status=0/SUCCESS) Process: 11743 ExecStartPre=/usr/sbin/ipsec --checknflog (code=exited, status=0/SUCCESS) Main PID: 11757 (pluto) Status: "Startup completed." Tasks: 2 (limit: 2319) Memory: 10.3M CGroup: /system.slice/ipsec.service └─11757 /usr/lib/ipsec/pluto --leak-detective --config /etc/ipsec.conf --nofork Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: certificate verified OK: O=Kifarunix-demo,CN=vpn.kifarunix-demo> Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: IKEv2 mode peer ID is ID_DER_ASN1_DN: 'CN=vpn.kifarunix-demo.co> Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: Authenticated using RSA Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: received INTERNAL_IP4_ADDRESS 10.0.8.10 Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: received INTERNAL_IP4_DNS 8.8.8.8 Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: received INTERNAL_IP4_DNS 10.0.8.1 Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: up-client output: updating resolvconf Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: negotiated connection [10.0.8.10-10.0.8.10:0-65535 0] -> [0.0.0> Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: STATE_V2_IPSEC_I: IPsec SA established tunnel mode {ESP/NAT=
他のリモートホストのステータスを確認してください。
ステータス出力から、割り当てられたIPアドレス INTERNAL_IP4_ADDRESS 10.0.8.10を確認できます。 。他のクライアントホストでは、 INTERNAL_IP4_ADDRESS 10.0.8.11 。
各クライアントホストに接続をロードします;
sudo ipsec auto --add vpn.kifarunix-demo.com
各ホストで接続を確立してトンネルを確立します。
sudo ipsec auto --up vpn.kifarunix-demo.com
各ホストから、他のホストのVPN割り当てIPアドレスにpingを実行します。
ping 10.0.8.11 -c 4
PING 10.0.8.11 (10.0.8.11) 56(84) bytes of data. 64 bytes from 10.0.8.11: icmp_seq=1 ttl=63 time=2.82 ms 64 bytes from 10.0.8.11: icmp_seq=2 ttl=63 time=2.84 ms 64 bytes from 10.0.8.11: icmp_seq=3 ttl=63 time=3.06 ms 64 bytes from 10.0.8.11: icmp_seq=4 ttl=63 time=2.83 ms --- 10.0.8.11 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3010ms rtt min/avg/max/mdev = 2.820/2.888/3.060/0.099 ms
他のホスト上;
ping 10.0.8.10 -c 4
PING 10.0.8.10 (10.0.8.10) 56(84) bytes of data. 64 bytes from 10.0.8.10: icmp_seq=1 ttl=63 time=1.63 ms 64 bytes from 10.0.8.10: icmp_seq=2 ttl=63 time=2.38 ms 64 bytes from 10.0.8.10: icmp_seq=3 ttl=63 time=3.18 ms 64 bytes from 10.0.8.10: icmp_seq=4 ttl=63 time=2.86 ms --- 10.0.8.10 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3005ms rtt min/avg/max/mdev = 1.631/2.516/3.187/0.588 ms
これで、2つのリモートホストがIPsecVPNサーバーを介して通信できるようになります。これで、CentOS8でLibreswanを使用してIPSecVPNサーバーをセットアップする方法に関するチュートリアルは終了です。
参考資料/参考資料
Libreswanの構成例
関連チュートリアル
Ubuntu20.04にOpenVPNサーバーをインストールしてセットアップする
OpenVPNLDAPベースの認証を構成する
Ubuntu 18.04 /CentOS8でstrongSwanVPNクライアントを構成する
Debian10でStrongSwanを使用してIPSECVPNをセットアップする
UbuntuでPCFファイルを使用してCiscoVPNに接続する