GNU/Linux >> Linux の 問題 >  >> Panels >> OpenVPN

CentOS8でLibreswanを使用してIPSecVPNサーバーをセットアップする

CentOS8でLibreswanを使用してIPSecVPNサーバーをセットアップする方法に関する今日のガイドへようこそ。Libreswanは、Linux用のIKE/IPsecの無料実装です。 IPsecは、強力な暗号化を使用して認証サービスと暗号化サービスの両方を提供し、信頼できないネットワークを介して安全なトンネルを構築できるようにするインターネットプロトコルセキュリティです。信頼できないネットワークを通過するものはすべて、ipsecゲートウェイマシンによって暗号化され、トンネルのもう一方の端にあるゲートウェイによって復号化されます。結果として得られるトンネルは、仮想プライベートネットワークまたはVPNです。

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に接続する

OpenVPN
  1. CentOSでSFTPサーバーをセットアップする方法

  2. CentOS 6 /RHEL6でのSysLogサーバーのセットアップ

  3. CentOS 7 /RHEL7でNFSサーバーをセットアップする方法

  1. Ubuntu14.04でのサーバーの初期設定

  2. CentOS 7 /RHEL7でSysLogサーバーをセットアップする方法

  3. CentOSでNTPサーバーをセットアップする方法は?

  1. TLSを使用したCentOS7での安全なProFTPDサーバーのセットアップ

  2. CentOS7で集中型Rsyslogサーバーをセットアップする

  3. CentOS8でOpenVPNサーバーをセットアップする