Plesk Obsidianリリース記念!Plesk最大7カ月無料キャンペーン

2012/5/24

【実証】第1回:OpenVPNをLinuxサーバーで設定する

GMOクラウド株式会社の芦田です。今回ご紹介する活用術では、GMOクラウド PublicでOpenVPNを導入する方法を数回に分けて連載していきます。

OpenVPNは、インターネット上に仮想的なプライベートネットワークを構築するためのソフトウェア(無料)です。専用回線や高価なルーター機器を購入する必要がないため、低コストで手軽にセキュアなネットワーク構築が可能です。クラウド上で機密性の高いデータを安全にやり取りするだけでなく、複数の支店や営業所でファイルサーバーや社内システムを共通化したり、外出先から会社のファイルサーバーに置いてある資料を閲覧するなど、いろいろな使い方が期待できます。

【設定環境について】

下記の環境で、OpenVPNを設定した場合の方法をご紹介します。
[サーバー]
OS…Linux、Windows LAMP設定を行ったサーバー上に、OpenVPNをインストールします。
[クライアント]
OS…Windows 複数のPCから接続できます。
※サーバーにWindowsを選択した場合は、基本的に1サーバーに対し1クライアントの接続です。(但し、Linuxサーバー等でcaファイルを使った証明書を作成し、利用することで、複数クライアントの接続も可能です。)

【ご注意】 ・IPアドレスは、OpenVPNのデフォルト設定をご利用ください。クラウドコンソール上で設定したローカルおよびグローバルIPアドレスはご利用にならないよう、ご注意ください。 ・ブリッジモードはご利用できません。ルーティングモードで構築してください。

【第1回:OpenVPNをLinuxサーバーで設定する】

LinuxサーバーでOpneVPNを導入するには下記の手順で行います。
「パッケージの取得」

「インストール」

「キー(証明書)の作成」

「設定」

1-1、Linuxサーバについて

今回OpenVPNをインストールするLinuxサーバは以下の仕様で設定しました。
GMOクラウド PublicのOSテンプレートをそのまま利用し構築を行いました。
CentOS 5.7 LAMP x64 kvm

1-2、パッケージの取得

パッケージの取得には2通りの方法があります。
●rpmパッケージを直接ftpサイト等からダウンロードする方法。 …安定したバージョンを長く使いたいという実運用におすすめです。
●rpmfoge等のパッケージサイトが提供するリポジトリをパッケージシステムに登録し、yumコマンド等で直接インストールするようにする方法。 …とにかく新しいバージョンを試したいという検証用におすすめです。
今回、入手したrpmパッケージのバージョンは以下のとおり。
OpenVPN本体:openvpn-2.1.4-1
依存パッケージその1:lzo-2.02-2
依存パッケージその2:pkcs11-helper-1.07-2 ダウンロード:

wget ftp://ftp.kddlabs.co.jp/pub/Linux/packages/fedora/epel/5Server/x86_64/openvpn-2.1.4-1.el5.x86_64.rpm
wget ftp://ftp.kddlabs.co.jp/pub/Linux/packages/fedora/epel/5Server/x86_64/lzo-2.02-2.el5.1.x86_64.rpm
wget ftp://ftp.kddlabs.co.jp/pub/Linux/packages/fedora/epel/5Server/x86_64/pkcs11-helper-1.07-2.el5.1.x86_64.rpm

(今回はRedHat系のfedoraリポジトリを使っています。)

1-3、インストール

rpmコマンドにてインストールを行います。

rpm -ivh openvpn-2.1.4-1.el5.x86_64.rpm lzo-2.02-2.el5.1.x86_64.rpm pkcs11-helper-1.07-2.el5.1.x86_64.rpm

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.com" ← サーバ名を指定
export KEY_EMAIL="vpn-root@gmocloud.com" ← サーバ管理者メールアドレスを指定

(上記は一例です、お客さまの情報に応じて変更してください。)

1-4-3、キーの作成

キーの作成では、サーバの証明書、クライアント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.com]: ← ENTER
Organizational Unit Name (eg, section) []: ← ENTER
Common Name (eg, your name or your server's hostname) [gmocloud.com CA]: ← ENTER
Name []: ← ENTER
Email Address [vpn-root@gmocloud.com]: ← ENTER

設定を変更している場合は上のように変更した情報が予め入力された状態となりますので、必要に応じて変更します。(設定を変更していない場合も、できるだけ自分の組織に合ったものに変更する方がベストです。) ファイルができたか確認しておきます。

ls keys/

ca.crt ca.keyの2つのファイルがあること。(他にもファイルができていますが、重要なのはこの2ファイルのみです。)
サーバ証明書: ・サーバ証明書を作成します

./build-key-server server

以下のように追加情報の入力を促されるため、入力していきます。

Generating a 1024 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.com]: ← ENTER
Organizational Unit Name (eg, section) []:← ENTER
Common Name (eg, your name or your server's hostname) [server]:miya-vpn-Linux ← ホスト名を入力しENTER
Name []:← ENTER
Email Address [vpn-root@gmocloud.com]: ← ENTER
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:← ENTER
An optional company name []:← ENTER
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :P RINTABLE:'JP'
stateOrProvinceName :P RINTABLE:'Tokyo'
localityName :P RINTABLE:'Shibuya-ku'
organizationName :P RINTABLE:'gmocloud.com'
commonName :P RINTABLE:'miya-vpn-Linux'
emailAddress :IA5STRING:'vpn-root@gmocloud.com'
Certificate is to be certified until May 15 09:21:19 2022 GMT (3650 days)
Sign the certificate? [y/n]:y← yを入力しENTER
 
1 out of 1 certificate requests certified, commit? [y/n]y← yを入力しENTER
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 ../

ta.keyがあること。
作成したキーを移動します。
OpenVPNの設定ファイルを記述する際にわかりやすいように、各キーファイルを移動します。
(設定ファイルにpath込みで記述する場合は移動は必要ありませんが、今回の活用術では設定ファイルと同じ場所に置く形式とします。)

cp keys/ca.crt /etc/openvpn/
cp keys/server.crt /etc/openvpn/
cp keys/server.key /etc/openvpn/
cp keys/dh1024.pem /etc/openvpn/

ユーザー(クライアント)キーファイル(証明書)の作成: クライアントのキーファイルもサーバ側で作成します。

./build-key-pass client_pc1
Generating a 1024 bit RSA private key
...................++++++
.........++++++
writing new private key to 'client_pc1.key'
Enter PEM pass phrase: ← パスフレーズを入力ENTER
Verifying - Enter PEM pass phrase: ← もう一度入力ENTER
-----
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.com]: ← ENTER
Organizational Unit Name (eg, section) []:← ENTER
Common Name (eg, your name or your server's hostname) [client_pc1]: ← ENTER
Name []:pc1← 何か識別できるものを入力しENTER(必須ではありません)
Email Address [vpn-root@gmocloud.com]:client1@gmocloud.com← ENTER
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:← ENTER
An optional company name []:← ENTER
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :P RINTABLE:'JP'
stateOrProvinceName :P RINTABLE:'Tokyo'
localityName :P RINTABLE:'Shibuya-ku'
organizationName :P RINTABLE:'gmocloud.com'
commonName :T61STRING:'client_pc1'
name :P RINTABLE:'pc1'
emailAddress :IA5STRING:'client1@gmocloud.com'
Certificate is to be certified until May 15 10:25:47 2022 GMT (3650 days)
Sign the certificate? [y/n]:y← yを入力しENTER
 
1 out of 1 certificate requests certified, commit? [y/n]y← yを入力しENTER
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.1.4/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、サーバの起動

OpenVPNサーバとして起動させるには以下のコマンドを実行します。

service openvpn start

OKの表示が出ない場合は設定ファイルの間違いがないかを見直し、それでもわからない場合は設定ファイル中の以下の部分

;log openvpn.log

の先頭の”;”を取り有効化して、再度起動し、エラーメッセージ等を見て修正を行います。

1-7、サーバの停止

OpenVPNサービスの停止は以下のコマンドを実行します。

service openvpn stop

1-8、その他

サーバ起動時の自動実行のための設定等については通常のサービスと同じです。ここでは割愛します。
次回は、OpenVPNをWindowsサーバーで設定する方法を解説します。


コラム一覧へ