GMOクラウドユーキです。
今回はクラウド環境にOpenVPNを導入する方法を数回に分けて連載していきます。初回は、LinuxサーバーのOpenVPN導入について紹介していきます。
OpenVPNは、インターネット上に仮想的なプライベートネットワークを構築するためのソフトウェア(無料)です。専用回線や高価なルーター機器を購入する必要がないため、低コストで手軽にセキュアなネットワーク構築ができます。
クラウド上で機密性の高いデータを安全にやり取りするだけでなく、複数の支店や営業所でファイルサーバーや社内システムを共通化したり、外出先から会社のファイルサーバーに置いてある資料を閲覧するなど、いろいろな使い方が期待できます。
ALTUS Isolateシリーズであれば標準でVPN環境をご利用いただけます。ただ「VPNの鍵をより強固なものを試してみたい」など相談を頂くこともあり、今回改めて取り上げてみました。
【設定環境について】
下記の環境で、OpenVPNを設定した場合の方法をご紹介します。
[サーバー]OS…Linux、Windows LAMP設定を行ったサーバー上に、OpenVPNをインストールします。
[クライアント]OS…Windows 複数のPCから接続できます。
※サーバーにWindowsを選択した場合は、基本的に1サーバーに対し1クライアントの接続です。(ただし、Linuxサーバー等でcaファイルを使った証明書を作成し、利用することで、複数クライアントの接続も可能です。)
【ご注意】
・IPアドレスはOpenVPNのデフォルト設定をご利用ください。クラウドコンソール上で設定したローカルおよびグローバルIPアドレスはご利用にならないよう、ご注意ください
・ブリッジモードはご利用できないため、ルーティングモードで構築してください
OpenVPNをLinuxサーバーで設定する
LinuxサーバーでOpneVPNを導入するにはルートユーザーにて、下記の手順で行います。
「パッケージの取得」→「インストール」→「キー(証明書)の作成」→「設定」
1-1、Linuxサーバーについて
今回OpenVPNをインストールするLinuxサーバーはGMOクラウド ALTUS BasicシリーズのOSテンプレートを利用し構築を行いました。
CentOS 6.8 LAMP 64bit 20170117
小さくていいので、検証用に仮想サーバーを新規構築するのがおすすめです。
1-2、パッケージの取得
『最新バージョンの情報入手』→『ftp取得』→『インストール』→『検証』→『運用』→『次バージョンの情報入手』...
と運用ライフサイクルがあるなかで、ここでは取得について記載します。
パッケージの取得にはいくつか方法があります。
(1)rpmパッケージを直接ftpサイトからダウンロード
->公式リポジトリから取得するため、実運用向け
(2)外部パッケージサイト(EPEL/rpmforgeなど)のリポジトリをパッケージシステムに登録し、インストールと同時に取得
->比較的新しいバージョンを試せるため、運用の検証向け
(3)自分でソースコードからパッケージを作る
->バグの修正や最新技術が早期利用できる反面、手間がかかるためパッケージを利用したシステム開発向け
今回は(1)で、入手したrpmパッケージのバージョンは以下のとおりです。
OpenVPN本体 :openvpn-2.4.4-1
RSA設定ツール :easy-rsa-2.2.2
依存パッケージ1:lzo(これだけ依存関係をもつため、Baseリポジトリから自動取得)
依存パッケージ2:lz4-r131
依存パッケージ3:pkcs11-helper-1.11-3
パッケージ ダウンロード:
--------------------------------------------------------------------------------
wget ftp://ftp.kddlabs.co.jp/Linux/packages/fedora/epel/6Server/x86_64/easy-rsa-2.2.2-1.el6.noarch.rpm
wget ftp://ftp.kddlabs.co.jp/pub/Linux/packages/fedora/epel/6Server/x86_64/openvpn-2.4.4-1.el6.x86_64.rpm
wget ftp://ftp.kddlabs.co.jp/pub/Linux/packages/fedora/epel/6Server/x86_64/lz4-r131-1.el6.x86_64.rpm
wget ftp://ftp.kddlabs.co.jp/pub/Linux/packages/fedora/epel/6Server/x86_64/pkcs11-helper-1.11-3.el6.x86_64.rpm
--------------------------------------------------------------------------------
このあとインストールに移りますが、この時点はインストール前のクリーンな環境のため、
ぜひALTUSの仮想マシンスナップショットを作成することをおすすめします。
『インストールに失敗した!』『最初からやりなおしたい!』など再構築の際、仮想マシンの作成からいちいちやりなおす手間が省けるので、楽にやりなおしができます。
>仮想マシンスナップショットの使い方はこちら
1-3、インストール
yumコマンドにてインストールを行います。
--------------------------------------------------------------------------------
sudo yum localinstall ./pkcs11-helper-1.11-3.el6.x86_64.rpm ./lz4-r131-1.el6.x86_64.rpm ./openvpn-2.4.4-1.el6.x86_64.rpm ./easy-rsa-2.2.2-1.el6.noarch.rpm
--------------------------------------------------------------------------------
lzoだけはbaseリポジトリを利用するため、Insatalling for dependenciesになっているはずです。
--------------------------------------------------------------------------------
Install 4 Package(s)
Total size: 1.4 M
Total download size: 55 k
Installed size: 1.5 M
Is this ok [y/N]: y← yを入力しENTER
(中略)
Installed:
easy-rsa.noarch 0:2.2.2-1.el6 lz4.x86_64 0:r131-1.el6 openvpn.x86_64 0:2.4.4-1.el6 pkcs11-helper.x86_64 0:1.11-3.el6
Dependency Installed:
lzo.x86_64 0:2.03-3.1.el6_5.1
Complete!
--------------------------------------------------------------------------------
これでインストールは完了しました。
1-4、キーの作成
OpenVPNで使用する各種証明書(キーファイル)の作成を行います。
OpenVPNはインストールすると、証明書発行用のユーティリティーも一緒にインストールされるため、その簡単な設定から行います。
1-4-1、ユーティリティーのコピー
インストールディレクトリから、一般的に利用しやすい/etc/openvpnディレクトリへツール類を移動します。
cp -r /usr/share/openvpn/easy-rsa/2.0/ /etc/openvpn/easy-rsa
1-4-2、設定の変更
証明書に書き込む所属情報などは設定ファイルを編集しておくと、毎回入力する必要がないため、クライアントが多いような場合は編集しておくと便利です。(ここは絶対に必要な工程ではありません。)
vim /etc/openvpn/easy-rsa/vars
ファイルの最後あたりに
ーーーーーーーーーーーーーーーーーーー
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
ーーーーーーーーーーーーーーーーーーー
とあるので、以下のように変更します。
ーーーーーーーーーーーーーーーーーーー
export KEY_COUNTRY="JP" ← サーバー所在地(国名)を指定(例:JP)
export KEY_PROVINCE="Tokyo" ← サーバー所在地(都道府県名)を指定
export KEY_CITY="Shibuya-ku" ← サーバー所在地(市区町村名)を指定
export KEY_ORG="GMOCLOUD K.K." ← サーバー名を指定
export KEY_EMAIL="vpn-root@gmocloud.com" ← サーバー管理者メールアドレスを指定
ーーーーーーーーーーーーーーーーーーー
上記は一例です、お客さまの情報に応じて変更してください。
キーの作成では、サーバーの証明書、クライアントPCで使用するクライアント証明書、OpenVPNで使用する証明書を3種類作成します。
準備: 設定を有効にするため、以下のコマンドを実行します。
ーーーーーーーーーーーーーーーーーーー
cd /etc/openvpn/easy-rsa
. ./vars
ーーーーーーーーーーーーーーーーーーー
これは以下のコマンドと一緒です。
先頭の”.”がコマンドですので忘れないでください。
ーーーーーーーーーーーーーーーーーーー
source ./vars
ーーーーーーーーーーーーーーーーーーー
でも同じ効果があります。
実行後ちょっとしたメッセージが出ますがエラーではありません。
次にいったん、キーファイルの出力先を初期化します。今回はインストール直後のため、実行しなくても問題ありませんが、念のため実行します。
ーーーーーーーーーーーーーーーーーーー
./clean-all
ーーーーーーーーーーーーーーーーーーー
準備の最後にca(認証局)証明書を作成します。
ーーーーーーーーーーーーーーーーーーー
./build-ca ← CA証明書・秘密鍵作成
Generating a 1024 bit RSA private key
.......++++++
......++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]: ← ENTER
State or Province Name (full name) [Tokyo]: ← ENTER
Locality Name (eg, city) [Shibuta-ku]: ← ENTER
Organization Name (eg, company) [GMOCLOUD K.K.]: ← ENTER
Organizational Unit Name (eg, section) []: ← ENTER
Common Name (eg, your name or your server's hostname) [gmocloud.com CA]: ← ENTER
Name [EasyRSA]: ← ENTER
Email Address [vpn-root@gmocloud.com]: ← ENTER
ーーーーーーーーーーーーーーーーーーー
設定を変更している場合は上のように変更した情報があらかじめ入力された状態となりますので、必要に応じて変更します。(設定を変更していない場合も、できるだけ自分の組織に合ったものに変更する方がベストです。) ファイルができたか確認しておきます。
ーーーーーーーーーーーーーーーーーーー
ls ./keys/
ーーーーーーーーーーーーーーーーーーー
ca.crt ca.keyの2つのファイルがあること。(他にもファイルができていますが、重要なのはこの2ファイルのみです。)
サーバー証明書: ・サーバー証明書を作成します
ーーーーーーーーーーーーーーーーーーー
./build-key-server server
ーーーーーーーーーーーーーーーーーーー
以下のように追加情報の入力を促されるため、入力していきます。
ーーーーーーーーーーーーーーーーーーー
Generating a 2048 bit RSA private key
..................................+++
.......+++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]: ← ENTER
State or Province Name (full name) [Tokyo]: ← ENTER
Locality Name (eg, city) [Shibuya-ku]: ← ENTER
Organization Name (eg, company) [GMOCLOUD K.K.]: ← ENTER
Organizational Unit Name (eg, section) [MyOrganizationalUnit]: ← ENTER
Common Name (eg, your name or your server's hostname) [GMOCLOUD K.K. CA]: ← ENTER
Name [EasyRSA]: ← ENTER
Email Address [vpn-root@gmocloud.com]: ← ENTER
ls keys/
ca.crt ca.key index.txt serial
./build-key-server server
Generating a 2048 bit RSA private key
..........................+++
.................+++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:← ENTER
State or Province Name (full name) [Tokyo]:← ENTER
Locality Name (eg, city) [Shibuya-ku]:← ENTER
Organization Name (eg, company) [GMOCLOUD K.K.]← ENTER:
Organizational Unit Name (eg, section) [MyOrganizationalUnit]:← ENTER
Common Name (eg, your name or your server's hostname) [server]:openvpn← ENTER
Name [EasyRSA]:← ENTER
Email Address [vpn-root@gmocloud.com]:← ENTER
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'JP'
stateOrProvinceName :PRINTABLE:'Tokyo'
localityName :PRINTABLE:'Shibuya-ku'
organizationName :PRINTABLE:'GMOCLOUD K.K.'
organizationalUnitName:PRINTABLE:'MyOrganizationalUnit'
commonName :PRINTABLE:'openvpn'
name :PRINTABLE:'EasyRSA'
emailAddress :IA5STRING:'vpn-root@gmocloud.com'
Certificate is to be certified until Oct 30 01:02:08 2027 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
ーーーーーーーーーーーーーーーーーーー
ここでも設定ファイルを変更した場合、初期値が入力されているため、必要な部分のみ入力を行います。 ファイルができているか確認します。
ーーーーーーーーーーーーーーーーーーー
ls ./keys/
ーーーーーーーーーーーーーーーーーーー
server.crt server.csr server.keyの3ファイルができていること。
OpenVPNの使う各種証明書、キーファイルの作成:
・鍵交換の際に使用される暗号キーファイル(dhファイル)を作成します。
ーーーーーーーーーーーーーーーーーーー
./build-dh
ーーーーーーーーーーーーーーーーーーー
しばらく”.”や”+”の文字がたくさん出ますが、しばらくすると、完了します。 ファイルができているか確認します。
ーーーーーーーーーーーーーーーーーーー
ls keys/
ーーーーーーーーーーーーーーーーーーー
dh1024.pemができていること。
・最後にTLSキーファイルを作成します。
ーーーーーーーーーーーーーーーーーーー
openvpn --genkey --secret /etc/openvpn/ta.key
ーーーーーーーーーーーーーーーーーーー
TLSキーファイルは直接/etc/openvpnに作成します。
ファイルができているか確認します。
ーーーーーーーーーーーーーーーーーーー
ls /etc/openvpn/
ーーーーーーーーーーーーーーーーーーー
ta.keyがあること。
作成したキーを移動します。
OpenVPNの設定ファイルを記述する際にわかりやすいように、各キーファイルを移動します。
(設定ファイルにpath込みで記述する場合は移動は必要ありませんが、今回の活用術では設定ファイルと同じ場所に置く形式とします。)
ーーーーーーーーーーーーーーーーーーー
cp keys/ca.crt /etc/openvpn/
cp keys/server.crt /etc/openvpn/
cp keys/server.key /etc/openvpn/
cp keys/dh2048.pem /etc/openvpn/
ーーーーーーーーーーーーーーーーーーー
ユーザー(クライアント)キーファイル(証明書)の作成: クライアントのキーファイルもサーバー側で作成します。
ーーーーーーーーーーーーーーーーーーー
./build-key-pass client_pc1
Generating a 2048 bit RSA private key
...................................+++
.........................+++
writing new private key to 'client_pc1.key'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:← ENTER
State or Province Name (full name) [Tokyo]:← ENTER
Locality Name (eg, city) [Shibuya-ku]:← ENTER
Organization Name (eg, company) [GMOCLOUD K.K.]:← ENTER
Organizational Unit Name (eg, section) [MyOrganizationalUnit]:← ENTER
Common Name (eg, your name or your server's hostname) [client_pc1]:← ENTER
Name [EasyRSA]:← ENTER
Email Address [vpn-root@gmocloud.com]:← ENTER
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'JP'
stateOrProvinceName :PRINTABLE:'Tokyo'
localityName :PRINTABLE:'Shibuya-ku'
organizationName :PRINTABLE:'GMOCLOUD K.K.'
organizationalUnitName:PRINTABLE:'MyOrganizationalUnit'
commonName :T61STRING:'client_pc1'
name :PRINTABLE:'EasyRSA'
emailAddress :IA5STRING:'vpn-root@gmocloud.com'
Certificate is to be certified until Oct 30 01:15:44 2027 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
ーーーーーーーーーーーーーーーーーーー
ファイルができているか確認します。
ーーーーーーーーーーーーーーーーーーー
ls keys/
ーーーーーーーーーーーーーーーーーーー
client_pc1.crt client_pc1.key client_pc1.csrの3ファイルができていること。 また、複数のクライアントキーファイルを作成する場合は、コマンド実行時の引数につける名前は必ず一意のものにするようにします。
1-5、設定
最後にOpenVPNのサーバーとしての設定を行います。 設定ファイルのサンプル(元)をコピーします。
ーーーーーーーーーーーーーーーーーーー
cp /usr/share/doc/openvpn-2.4.4/sample/sample-config-files/server.conf /etc/openvpn/
ーーーーーーーーーーーーーーーーーーー
設定ファイルを編集します。
ーーーーーーーーーーーーーーーーーーー
vim /etc/openvpn/server.conf
ーーーーーーーーーーーーーーーーーーー
英文コメントでパラメーターの説明がありますが、ここでは変更点だけに絞って記載します。
";"がついている場合は削除して有効化します。
なお、既に先頭に";"がついていなければ、そのパラメーターは有効化されていることになります。
ーーーーーーーーーーーーーーーーーーー
tls-auth ta.key 0 # This file is secret
user nobody
group nobody
ーーーーーーーーーーーーーーーーーーー
変更したらセーブしてエディターを終了します。 以上でサーバー側の設定は完了となります。
1-6、サーバーの起動
まずは実行前にconfigファイルの検査を実施します。
ーーーーーーーーーーーーーーーーーーー
openvpn --config ./server.conf
ーーーーーーーーーーーーーーーーーーー
Initialization Sequence Completed
となり、待機状態になったらOKです。
Ctrl+cでopenvpnプロセスを終了してください。
Conpletedの表示が出ない場合は設定ファイルの間違いがないかを見直します。
なお、これ以降のデーモン化(サービス化)を実施した場合に問題が起きたときのことを考えて、設定ファイル中の以下の部分
;log openvpn.log
の先頭の”;”を取り有効化して、エラーメッセージ等を残すことができます。
1-7、サーバーの停止
上記ではCtrl+Cで終了しましたが、サービスとしては
OpenVPNサービスの停止は以下のコマンドを実行します。
ーーーーーーーーーーーーーーーーーーー
service openvpn stop
ーーーーーーーーーーーーーーーーーーー
1-8、その他
サーバー起動時の自動実行のための設定等については通常のサービスと同じで、
yumでrpmパッケージを使ってインストールしたため、chkconfig上は既にaddされているので、起動時の自動起動を設定します。
ーーーーーーーーーーーーーーーーーーー
chkconfig openvpn on
chkconfig
ーーーーーーーーーーーーーーーーーーー
次回は、OpenVPNをWindowsサーバーで設定する方法を解説します。