GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu16.04で証明書と事前共有キーを使用するStrongSwanベースのIPsecVPN

はじめに

この記事では、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)の主要部分で使用されます。ストロングスワン。

Strongswanの機能

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

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

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

  • WestCOS
  • SetCOS
  • CardOs
  • STARCOS
  • ASEPCOS

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

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

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

aptitude install strongswan

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

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

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

この記事では、PCSC-LiteツールをUbuntuプラットフォームのopenscに沿ってインストールし、スマートカードリーダーのサポートを追加します。 CCIDリーダーにはPCSC-Liteをお勧めします。

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

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

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

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

configureスクリプトを実行し、プレフィックス/ 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

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

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

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

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

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

http://www.unixwiz.net/techtips/iguide-ipsec.html

VPNの構成:

サイド

strongswan VPNポリシーの主な構成は、ipsec.confファイルにあります。以下のような情報は、この構成ファイルにあります。

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

サイドの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のロックを解除するためのPIN)は、 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 )を起動します )両側で構成ファイルを設定した後、次のコマンドを使用します。

ipsec restart

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

ipsec statusall

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

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

ip xfrm state
ip xfrm policy

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

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とシークレットファイルの変更の詳細については、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

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


Ubuntu
  1. Ubuntu20.04にAlgoVPNServerをインストールして構成する方法

  2. Ansibleを使用してUbuntu20.04にElasticsearchをインストールおよび構成する

  3. Ubuntu18.04にstrongSwanVPNをインストールして構成する方法

  1. Ubuntu20.04でdockerを使用してdockerベースのLAMPスタックを作成する方法

  2. Wireguardを使用してUbuntu20.04でVPNを作成する方法

  3. Strongswanを使用してIKEv2VPNをセットアップし、CentOS8で暗号化する方法

  1. 新規ユーザーとSSHキー認証を設定します。 Ubuntu18.04でAnsibleを使用する

  2. Ubuntuで事前共有キーとRSAキーを使用するLibreswanベースのIpsecVPN

  3. Ubuntu18.04LTSでPritunlを使用してVPNサーバーをセットアップする方法