はじめに
この記事では、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ディレクトリに保存されます。
- 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デバイスなどの他のベンダーと連携します。
次の図は、ネットワーク内での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ツールを使用して正常に作成されました。