OpenVPNはオープンソースのSSL-VPNソフトウェア。証明書認証でクライアントを特定することができ、パスワード認証よりも強固なセキュリティを提供できる。
インストール
1. ソースコードの入手
OpenVPNのソースをダウンロード。
cd /usr/local/src
wget http://swupdate.openvpn.org/community/releases/openvpn-2.3.1.tar.gz2. 必要な関連パッケージをインストール
OpenVPNのインストールには下記のパッケージを必要とする。
yum install openssl openssl-devel lzo lzo-devel pam pam-devel3. RPMビルド
ソースからRPMを作成。尚、ビルドに必要な開発ツールは必要に応じてインストールすること。
rpmbuild -tb openvpn-2.3.1.tar.gz実行するとrootディレクトリにrpmbuildが作成される。
4. インストール
rpmコマンドでインストール。
cd /root/rpmbuild/RPMS/x86_64/
rpm -ivh openvpn-2.3.1-1.x86_64.rpm設定
1. easy-rsaを入手
OpenVPN2.3から同梱されなくなった。公式サイトからダウンロード。
cd /usr/local/src
wget https://github.com/OpenVPN/easy-rsa/archive/master.zipmaster.zipと指定してダウンロードしているが、何故かmasterとして保存されている。unzipで展開する。
unzip masterOpenVPN設定ディレクトリへコピー。
cp -r /usr/local/src/easy-rsa-master/easy-rsa/2.0/ /etc/openvpn/easy-rsa2. CA証明書と秘密鍵を作成
実行権限を付加。
cd /etc/openvpn/easy-rsa/
chmod +x *環境変数設定ファイルを編集。
下記を環境に応じて設定。
export KEY_COUNTRY="JP" # 国名
export KEY_PROVINCE="Tokyo" # 都道府県名
export KEY_CITY="Chiyoda" # 市区町村名
export KEY_ORG="mydomain.com" # 組織名
export KEY_EMAIL="admin@mydomain.com" # メールアドレス
export KEY_OU="centos.mydomain.com" # 部署名環境変数をシステムに反映。
source vars証明書関連ディレクトリ初期化。
./clean-allCA証明書と秘密鍵を作成。
./build-caCommon Name以外は全てEnterで応答。
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]:
State or Province Name (full name) [Tokyo]:
Locality Name (eg, city) [Chiyoda]:
Organization Name (eg, company) [mydomain.com]:
Organizational Unit Name (eg, section) [centos.mydomain.com]:
Common Name (eg, your name or your server's hostname) [mydomain.com CA]:centos # ホスト名を入力
Name [EasyRSA]:
Email Address [admin@mydomain.com]:ca.crt(CA証明書)とca.key(秘密鍵)が生成される。CA証明書をOpenVPN設定ディレクトリへコピー。
cp keys/ca.crt /etc/openvpn/3. サーバー証明書と秘密鍵作成を作成
サーバー証明書と秘密鍵作成を作成。
./build-key-server server2箇所以外は全てEnterで応答。
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]:
State or Province Name (full name) [Tokyo]:
Locality Name (eg, city) [Chiyoda]:
Organization Name (eg, company) [mydomain.com]:
Organizational Unit Name (eg, section) [centos.mydomain.com]:
Common Name (eg, your name or your server's hostname) [server]:
Name [EasyRSA]:
Email Address [admin@mydomain.com]:
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:'Chiyoda'
organizationName :PRINTABLE:'mydomain.com'
organizationalUnitName:PRINTABLE:'centos.mydomain.com'
commonName :PRINTABLE:'server'
name :PRINTABLE:'EasyRSA'
emailAddress :IA5STRING:'admin@mydomain.com'
Certificate is to be certified until Apr 12 16:45:11 2023 GMT (3650 days)
Sign the certificate? [y/n]:y # yで応答
1 out of 1 certificate requests certified, commit? [y/n]y # yで応答
Write out database with 1 new entries
Data Base Updatedserver.crt(サーバー証明書)とserver.key(秘密鍵作成)が生成される。両方をOpenVPN設定ディレクトリへコピー。
cp keys/server.crt keys/server.key /etc/openvpn/4. DHパラメータ生成
DHパラメータ生成。
./build-dhDHパラメータをOpenVPN設定ディレクトリへコピー。
cp keys/dh2048.pem /etc/openvpn/5. 証明書廃止リスト作成
ダミーのクライアント証明書作成。
./build-key dummy2箇所以外は全てEnterで応答。
Generating a 2048 bit RSA private key
..............................................................................................................+++
...................+++
writing new private key to 'dummy.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]:
State or Province Name (full name) [Tokyo]:
Locality Name (eg, city) [Chiyoda]:
Organization Name (eg, company) [mydomain.com]:
Organizational Unit Name (eg, section) [centos.mydomain.com]:
Common Name (eg, your name or your server's hostname) [dummy]:
Name [EasyRSA]:
Email Address [admin@mydomain.com]:
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:'Chiyoda'
organizationName :PRINTABLE:'mydomain.com'
organizationalUnitName:PRINTABLE:'centos.mydomain.com'
commonName :PRINTABLE:'dummy'
name :PRINTABLE:'EasyRSA'
emailAddress :IA5STRING:'admin@mydomain.com'
Certificate is to be certified until Apr 12 17:10:46 2023 GMT (3650 days)
Sign the certificate? [y/n]:y # yで応答
1 out of 1 certificate requests certified, commit? [y/n]y # yで応答
Write out database with 1 new entries
Data Base Updatedダミーのクライアント証明書廃止
./revoke-full dummy証明書廃止リストをOpenVPN設定ディレクトリへコピー。
cp keys/crl.pem /etc/openvpn/6. OpenVPNサーバー設定
TLS認証鍵生成
openvpn --genkey --secret /etc/openvpn/ta.key サーバー設定ファイルコピー
cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/サーバー設定ファイル編集
変更と追記箇所のみ
dh dh2048.pem # dh1024.pemから変更
server 192.168.200.0 255.255.255.0 # 環境に応じて変更
push "route 192.168.1.0 255.255.255.0" # クライアントルーティング設定
push "dhcp-option DNS 192.168.1.1" # クライアントDNS設定
tls-auth ta.key 0 # コメントを解除してTLS認証有効化
user nobody # コメントを解除してOpenVPNの実行権限を下げる
group nobody # コメントを解除してOpenVPNの実行権限を下げる
log-append /var/log/openvpn.log # ログを追記モードで有効化
management localhost 7505 # 追記:管理インターフェイスを有効化
crl-verify crl.pem # 追記:証明書廃止リストを有効化7. ログローテーション設定
新規作成。
/var/log/openvpn.log {
missingok
notifempty
sharedscripts
postrotate
/etc/rc.d/init.d/openvpn restart 2>&1 > /dev/null || true
endscript
}8. IP転送(ルーティング)設定
デフォルトではIP転送が有効になっていない。
net.ipv4.ip_forward = 1 # 0から1に変更しIP転送有効化再起動すれば有効になるが、即時有効にしたい場合。
echo 1 > /proc/sys/net/ipv4/ip_forwardOpenVPNサーバー起動確認
OpenVPNの状態確認
service openvpn status起動していない
openvpn: service not started起動と再起動、自動起動確認。
service openvpn start
service openvpn restart
chkconfig openvpn on | chkconfig openvpn --listOpenVPNクライアント設定
1. クライアント証明書と秘密鍵作成を作成
OpenVPNサーバーで実施。Windowsは下記手順で問題ないが、iPhone用の証明書を作成する場合、build-key-passではなくbuild-keyを使う。iPhoneのOpenVPNクライアントはパスフレーズに対応していない。
cd /etc/openvpn/easy-rsa/
source vars
./build-key-pass client4箇所以外は全てEnterで応答。
Generating a 2048 bit RSA private key
......+++
.............................+++
writing new private key to 'client.key'
Enter PEM pass phrase:xxxxxxxx # 任意のパスフレーズ
Verifying - Enter PEM pass phrase:xxxxxxxx # 任意のパスフレーズを確認応答
-----
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]:
State or Province Name (full name) [Tokyo]:
Locality Name (eg, city) [Chiyoda]:
Organization Name (eg, company) [mydomain.com]:
Organizational Unit Name (eg, section) [centos.mydomain.com]:
Common Name (eg, your name or your server's hostname) [client]:
Name [EasyRSA]:
Email Address [admin@mydomain.com]:
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:'Chiyoda'
organizationName :PRINTABLE:'mydomain.com'
organizationalUnitName:PRINTABLE:'centos.mydomain.com'
commonName :PRINTABLE:'client'
name :PRINTABLE:'EasyRSA'
emailAddress :IA5STRING:'admin@mydomain.com'
Certificate is to be certified until Apr 12 18:08:47 2023 GMT (3650 days)
Sign the certificate? [y/n]:y # yで応答
1 out of 1 certificate requests certified, commit? [y/n]y # yで応答
Write out database with 1 new entries
Data Base Updated2. クライアントへ証明書関連ファイルを移動
SCPでコピーするのが望ましいが、セキュリティを考慮してrootでのSSHログインを拒否している場合が想定される。一般ユーザのホームディレクトリへ証明書関連ファイルを移動してSCPでコピーを実施。rootでのSSHログインを許可していればSCPでそのままコピーすればよい。
cp /etc/openvpn/ca.crt /home/admin/ # CA証明書
cp /etc/openvpn/ta.key /home/admin/ # TLS認証鍵
cp /etc/openvpn/easy-rsa/keys/client.crt /home/admin/ # クライアント証明書
cp /etc/openvpn/easy-rsa/keys/client.key /home/admin/ # クライアント秘密鍵証明書関連ファイルの所有者を一般ユーザに変更。この状態でSCPでコピー。
cd /home/admin
chown admin.admin ca.crt ta.key client.crt client.keyコピーしたら削除
rm -f ca.crt ta.key client.crt client.keyコピーした証明書関連ファイルはC:Program FilesOpenVPNconfigへ移動する。
3. OpenVPNクライアント設定
サンプル設定ファイルをコピー
C:Program FilesOpenVPNsample-configからC:Program FilesOpenVPNconfigへclient.ovpnをコピーする。
クライアント設定ファイル編集
remote 192.168.1.1 1194 # OpenVPNサーバーを指定(FQDN可)
cert client.crt # クライアント証明書
key client.key # クライアント秘密鍵
tls-auth ta.key 1 # コメント解除OpenVPNクライアント起動
Windows7では初回起動時にのみ下記の手順が必要。
スタートメニュー
-> すべてのプログラム
-> OpenVPN
-> OpenVPN GUI # 右クリック
-> プロパティ
-> 互換性
-> 管理者としてこのプログラムを実行する # チェックを入れてOKをクリック下記手順でOpenVPNクライアント起動してアイコンが緑になれば接続完了。
スタートメニュー
-> すべてのプログラム
-> OpenVPN
-> OpenVPN GUI # クリックするとタスクバーにアイコンが現れる
タスクバー
-> OpenVPN GUI # 右クリック
-> 接続構築後の運用管理
1. クライアント証明書廃止
証明書の漏洩が発覚した場合は一刻も早く該当のクライアント証明書を廃止する。また不要な証明書は廃止するのが望ましい。
cd /etc/openvpn/easy-rsa
source vars
./revoke-full client # clientのクライアント証明書廃止
cp keys/crl.pem /etc/openvpn/ # 証明書廃止リストを上書き2. 管理インターフェイス
telnet localhost 7505status(クライアント接続状況確認)、kill(クライアント強制切断)などがある。詳細はhelpで確認すること。
参考リンク
- http://freescitech.net/2/ovpn2_howto_ja.html
- http://centossrv.com/openvpn.shtml
- http://blog.cles.jp/item/5524
書籍
ストーリーで覚える Linux CLI 入門
Linux のコマンドライン操作を基礎から確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。




