ウェブサイト検索

Ubuntu 16.04 で証明書と事前共有キーを使用する StrongSwan ベースの IPsec VPN


このページでは

  1. Strongswan のインストール (バイナリとソース コード)
  2. ソースを使用したストロングスワンのコンパイル
  3. サイト間 VPN
  4. 事前共有鍵ベースのトンネル
  5. X.509 証明書ベースのトンネル

序章

この記事では、IPsec プロトコルのオープン ソース実装に焦点を当てます。ネットワーク層のセキュリティは、次の 2 つのコンポーネントで構成される IPsec プロトコルを使用して確保されます。

  • 認証ヘッダー (AH)
  • カプセル化セキュリティ ペイロード (ESP)

パケットの整合性と認証は AH を使用して保証され、ESP コンポーネントは機密性とセキュリティ機能を提供します。 IPsec のオープン ソース実装である StrongSwan (Strong Secure WAN) は、インターネット キー交換 (IKE v1/2) の両方のバージョンをサポートするよく知られたツールです。キー共有またはインターネット キー交換は、IPSec VPN (仮想プライベート ネットワーク) の一部です。 IKE メカニズムは、ESP プロトコルでデータを暗号化するために 2 つの当事者間でキーを共有するために使用されます。 OpenSSL の暗号化と整合性アルゴリズム (AES、SHA など) と暗号化ライブラリは、IKE ステップで使用されます。ただし、セキュリティ アルゴリズムの Linux カーネル実装は、IPSec の主要部分 (ESP & AH) で使用されます。ストロングスワン。

ストロングスワンの特徴

  • 事前共有キー ベースの認証のサポート。
  • 認証には X.509 形式の証明書がサポートされています。
  • IKE v1/v2 の両方をサポートする単一のデーモン。
  • サードパーティのプラグインとライブラリを簡単に統合できます。
  • ハードウェア トークンは、openSC プロジェクトを使用してサポートされています。

ゲートウェイ間およびロード ウォリアー VPN は、strongswan によってサポートされています。ネットワーク トラフィックは、サイト間 VPN の組織のゲートウェイ デバイスで暗号化または復号化されます。ただし、ゲートウェイ デバイスからエンド ユーザー/クライアント マシンへの 2 つ目の安全なチャネルが確立されます。

この記事では、strongSwan ツールが Ubuntu 16.04 (LTS) にインストールされます。ハードウェア トークン用の OpenSC の統合と、最後に事前共有キーと x.509 証明書を使用したゲートウェイ間トンネルの作成について説明します。 .ハードウェア トークンまたはハードウェア セキュリティ モジュール(HSM)(USB やスマート カードなど)を strongswan で使用して、暗号化キー(公開および秘密)と証明書を保存できます。 strongswan でのハードウェア トークンのサポートは、オープンソース プロジェクトである OpenSC(ツールとライブラリのセット)を使用して提供されます。 PKCS#15 ベースのファイル構造と、PKCS#11 API を使用したスマート カードへのアクセスも、OpenSC ツールによって提供されます。次のスマート カードが openSC でサポートされています。

  • WestCOS
  • SetCOS
  • CardO
  • スターコス
  • ASEPCOS

Strongswan のインストール (バイナリとソース コード)

strongswan のバイナリ パッケージ(deb/rpm)は、広く使用されているほぼすべての Linux ディストリビューションで利用できます。バイナリとソースコード (必要な機能を含む) を使用した strongswan のインストールについて、この記事で包括的に説明します。

strongswan のバイナリ パッケージは、Ubuntu 16.04 LTS で次のコマンドを使用してインストールできます。

aptitude install strongswan

Ubuntu リポジトリで利用可能な strongswan プラグインを以下に示します。

Ubuntu プラットフォームにインストールした後、構成ファイルとフォルダー (ipsec.conf、ipsec.secrets、ipsec.d、strongswan.conf、strongswan.d) は /etc ディレクトリに保存されます。

ソースを使用したストロングスワンのコンパイル

  • opensc (strongswan での HSM のサポート用)。
  • PC/SC(Ubuntu プラットフォームでのスマート カード リーダーのサポートに必要)。
  • GMP ライブラリ (strongswan での数学演算に必要)。
  • OpenSSL ツール (AES、SHA1 などの暗号化アルゴリズムのよく知られた実装)。
  • PKCS (公開鍵暗号規格) 1、7、8、11、12。

この記事では、PCSC-Lite ツールを opensc と共に Ubuntu プラットフォームにインストールして、スマート カード リーダーのサポートを追加します。 PCSC-Lite は CCID リーダーに推奨されます。

strongswan のコンパイルを開始する前に、次のコマンドを実行して前提条件のソフトウェアをインストールします。

1. Opensc のインストール

aptitude install opensc

2. GMP ライブラリのインストール

aptitude install libgmp10

GMPの開発ライブラリをインストールします。

aptitude install libgmp-dev

OpenSSL libcrypto は、次のコマンドを使用してインストールされます。

apt-get install libssl-dev

コンパイル手順

/usr/src/ フォルダに移動し、wget コマンドを使用して strongswan の最新リリースをダウンロードします。

cd /usr/src
wget https://download.strongswan.org/strongswan-5.5.0.tar.gz

圧縮ファイルを解凍し、解凍したフォルダー内に移動して構成スクリプトを実行します。

tar –xzf strongswan-5.5.0.tar.gz
cd strongswan-5.5.0

configure スクリプトを実行して、strongswan の依存関係を確認します。 HSM サポートは、以下に示すように、strongswan の最新バージョンで既に有効になっています。

構成スクリプトを実行し、プレフィックス /usr/local を使用して、openssl サポートを有効にします。

./configure --prefix=/usr/local  --enable-openssl

次のスナップショットは、必要なすべての依存関係が既にシステムにインストールされているため、configure スクリプトによってエラーが生成されなかったことを示しています。

次の 2 つのコマンドを実行して、/usr/local ディレクトリに strongswan をコンパイルしてインストールします。

make
make install

Ubuntu プラットフォームでの strongswan のコンパイルとインストールが完了し、いくつかの構成ファイル (strongswan.conf、ipsec.conf、および ipsec.secrets) とフォルダー (strongswan.d、ipsec.d) が /usr/local/etc パスの下にコピーされます。 . VPN ポリシーの構成は ipsec.conf ファイルに配置され、秘密の秘密は ipsec.secrets ファイルに格納されます。 Strongswan プラグインの構成は、strongswan.d ディレクトリに保存されます。

トランスポート VPN とトンネル VPN の両方が strongswan でサポートされています。トンネル モードでは、チャネルのサイト間セキュリティが提供され、cisco、huawei、juniper デバイスなどの他のベンダーと連携します。

サイト間 VPN

次の図は、ネットワーク内のストロングスワン ベースの VPN ゲートウェイ デバイスの配置を示しています。組織のプライベート ネットワーク 192.168.223.0/24 と 192.168.222.0/24 の間に、安全な通信チャネルが確立されます。

A と B のプライベート ネットワーク間で IPsec を使用する前に、A 側の VPN ゲートウェイがリモート側の VPN マシン (B) に ping を送信できるように、組織の VPN ゲートウェイ間のルーティングが機能していることを確認してください。これにより、ネットワーク接続が正常であることを確認できます。

以下に示すように、strongswan ツールのデフォルト設定は /usr/local/etc/ ディレクトリ内にあります。

事前共有鍵ベースのトンネル

最初のケースでは、共有シークレット ベースの VPN がゲートウェイ デバイス間で作成されます。よく知られているキー共有アルゴリズム Diffie-Hellman は、strongswan によって相互認証に使用されます。 IPsec プロトコルの仕組みの詳細については、次のリンクを参照してください。

VPN の構成:

(A面)

strongswan VPN ポリシーの主な構成は、ipsec.conf ファイルにあります。この構成ファイルには、次のような情報が含まれています。

  • IKE のバージョン
  • トンネルの種類
  • 送信元と宛先のゲートウェイ
  • VPN のプライベート ネットワーク

A側のipsec.confを以下に示します。

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.101
        leftsubnet=192.168.223.0/24
        right=192.168.1.102
        rightsubnet=192.168.222.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel

IPsec シークレット(共有キー、秘密キーのパスワード、hsm のロックを解除するためのピン)は、ipsec.secrets ファイルに保存されます。以下に示すように、両方の VPN パーティ間のシャード シークレットは \test12345\ です。

192.168.1.101 192.168.1.102 : PSK 'test12345'

(B面)

リモート側の ipsec.conf および ipsec.secrets ファイルの構成は、以下に示すようにローカル サイトの逆になります。

ipsec.conf ファイルの内容を以下に示します。

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.102
        leftsubnet=192.168.222.0/24
        right=192.168.1.101
        rightsubnet=192.168.223.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel

ipsec.secrets ファイルには、リモート側の共有シークレットが含まれています。

192.168.1.102 192.168.1.101 : PSK 'test12345'

両側で構成ファイルをセットアップした後、次のコマンドを使用して strongswan デーモン (charon) を開始します。

次のコマンドは、デバイスで作成された VPN のステータスを表示します。

ipsec ステータスオール

両側 (ローカルおよびリモート) のトンネルのステータスを以下に示します。

この Linux コマンドは、IPsec トンネルのポリシーと状態を表示します。

ip xfrm state
ip xfrm policy

上記のコマンド出力に示されているように、機密情報 esp/hmac (キー) も ip xfrm コマンドによって表示されます。

X.509 証明書ベースのトンネル

X.509 証明書 (公開鍵認証) ベースのトンネルでは、証明機関 (CA)、クライアント A および B の証明書を生成する必要があります。

次のスクリーンショットは、strongswan の PKI ユーティリティを使用して自己署名 CA 証明書を生成する方法を示しています。

/usr/local/etc/ipsec.d パスに入り、次のコマンドを実行します。

cd /usr/local/etc/ipsec.d
ipsec pki --gen --type rsa --size 4096 --outform pem > private/strongswanKey.pem
ipsec pki --self --ca --lifetime 3650 --in private/strongswanKey.pem --type rsa --dn "C=CH, O=strongSwan, CN=Root CA" --outform pem > cacerts/strongswanCert.pem    

クライアント A の証明書の生成を以下に示します。

ipsec pki --gen --type rsa --size 2048 --outform pem > private/client1Key.pem
chmod 600 private/client1Key.pem
ipsec pki --pub --in private/client1Key.pem --type rsa | ipsec pki --issue --lifetime 730 --cacert cacerts/strongswanCert.pem --cakey private/strongswanKey.pem --dn "C=CH, O=strongSwan, CN=device1" --san device1 --flag serverAuth --flag ikeIntermediate --outform pem > certs/client1Cert.pem

同様に、クライアント B 用に生成された公開鍵と秘密鍵のペアと証明書。

ipsec pki --gen --type rsa --size 2048 --outform pem > private/client2Key.pem
chmod 600 private/client2Key.pem
ipsec pki --pub --in private/client2Key.pem --type rsa | ipsec pki --issue --lifetime 730 --cacert cacerts/strongswanCert.pem --cakey private/strongswanKey.pem --dn "C=CH, O=strongSwan, CN=device2" --san device2 --flag serverAuth --flag ikeIntermediate --outform pem > certs/client2Cert.pem

CA とクライアント証明書が正常に生成されたら、次のステップは ipsec.conf と ipsec.secrets の構成を変更することです。 ipsec.conf と secrets ファイルの変更の詳細については、strongswan のドキュメントを参照してください。

A 側の ipsec.conf & ipsec.secrets の内容を以下に示します。

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.101
        leftsubnet=192.168.223.0/24
        right=192.168.1.102
        rightsubnet=192.168.222.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        #authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel
        leftcert=client1Cert.pem
        leftid="C=CH, O=strongSwan, CN=device1"
        rightid="C=CH, O=strongSwan, CN=device2"
#192.168.1.101 192.168.1.102 : PSK 'test12345'
: RSA client1Key.pem

B面の構成も以下の通り。

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.102
        leftsubnet=192.168.222.0/24
        right=192.168.1.101
        rightsubnet=192.168.223.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        #authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel
        leftcert=client2Cert.pem
        leftid="C=CH, O=strongSwan, CN=device2"
        rightid="C=CH, O=strongSwan, CN=device1"

#192.168.1.102 192.168.1.101 : PSK 'test12345'
: RSA client2Key.pem

ipsec restart コマンドを実行して上記の変更を適用し、証明書を使用して作成されたトンネルのステータスを確認します。

ipsec statusall    # at side A
ipsec statusall    # at side B

最後に、strongswan ツールを使用して、証明書ベースの VPN が正常に作成されました。