Ubuntu Server で OpenVPNサーバを構築する
- はじめに
- パッケージのインストール
- OpenVPN Server
- OpenVPN Client
- OpenvpnサーバでIPフォワーディングの設定をする
- firewall の無効化
- クライアント用のOpenVPN構成ファイルを移動する
はじめに
今回構築する OpenVPNサーバ は、以前に下記リンクの備忘録を書いているため、説明等の詳細は割愛させていただきます。
tryota.hatenablog.com
パッケージのインストール
# apt install openvpn easy-rsa
OpenVPN Server
サーバ証明書の発行
サーバ証明書を発行するのに必要なものは、以下になる。
- 公開鍵ペア(public.key , private.key)
- 証明書署名要求(certificate signing request)
- DHパラメータ(pemファイル)
証明書発行用のディレクトリを作成する
ubuntu には、専用コマンド make-cadir があるので、これを使用してディレクトリを作成する。
# make-cadir /etc/openvpn/easy-rsa
カレントディレクトリを移動する
# cd /etc/openvpn/easy-rsa
作成したディレクトリの配下にファイルとディレクトリが作成されたことを確認する。
# ls easyrsa openssl-easyrsa.cnf vars x509-types
証明書作成用の環境変数を編集する
vars ファイルを編集する
# vim vars
varsファイルの以下の値を正しく編集する
set_var EASYRSA_REQ_COUNTRY "JP" set_var EASYRSA_REQ_PROVINCE "Hyogo" set_var EASYRSA_REQ_CITY "Akashi" set_var EASYRSA_REQ_ORG "OpenVPNServer" set_var EASYRSA_REQ_EMAIL "me@example.net" set_var EASYRSA_REQ_OU "My Organizational Unit"
認証局を作成する
CA(Certificate Authority)の作成をする。
./easyrsa build-ca
パスフレーズとCommonNameを問われるので、それとなく適当に入力
Enter New CA Key Passphrase:test Re-Enter New CA Key Passphrase:test Common Name (eg: your user, host, or server name) [Easy-RSA CA]:OpenvpnSV CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /etc/openvpn/easy-rsa/pki/ca.crt
作成されたことを確認する。
pki フォルダ内に以下が作成されていればOK。
- ca.crt
- private/ca.key
サーバ秘密鍵と証明書署名要求を作成する
※「server」の部分は任意。秘密鍵と証明書署名要求ファイルの名前に使われる。
# ./easyrsa gen-req server Enter PEM pass phrase:test Verifying - Enter PEM pass phrase:test Common Name (eg: your user, host, or server name) [server]:opoenvpnSV Keypair and certificate request completed. Your files are: req: /etc/openvpn/easy-rsa/pki/reqs/server.req key: /etc/openvpn/easy-rsa/pki/private/server.key
作成されたことを確認する。
pki フォルダ内に以下が作成されていればOK。
- reqs/server.req
- private/server.key
サーバ証明書の作成
サーバ証明書に署名する際は、引数を先ほど作成した証明書署名要求「server.req」を指定する。(拡張子は不要)
# ./easyrsa sign-req server server Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:test Certificate created at: /etc/openvpn/easy-rsa/pki/issued/server.crt
作成されたことを確認する。
pki フォルダ内に以下が作成されていればOK。
- issued/server.crt
DHパラメータの生成
Diffie-Hellman 鍵交換は、暗号鍵を安全に転送するために使用される方法です。
# ./easyrsa gen-dh
作成されたことを確認する。
pki フォルダ内に以下が作成されていればOK。
- dh.pem
TLS-Authキーの生成
openvpnでは、セキュリティを向上させるために TLS-Authキー(ta.key)を実装している。
# openvpn --genkey --secret ta.key
作成されたことを確認する。
easy-rsa フォルダ内に以下が作成されていればOK。
- ta.key
OpenVPN Client
クライアント秘密鍵と証明書署名要求を作成する
# cd /etc/openvpn/easy-rsa # ./easyrsa gen-req client nopass Common Name (eg: your user, host, or server name) [client_test]:test Keypair and certificate request completed. Your files are: req: /etc/openvpn/easy-rsa/pki/reqs/client_test.req key: /etc/openvpn/easy-rsa/pki/private/client_test.key
作成されたことを確認する。
pki フォルダ内に以下が作成されていればOK。
- reqs/client_test.req
- private/client_test.key
クライアント証明書を作成する
クライアント証明書に署名する際は、引数を先ほど作成した証明書署名要求「client_test.req」を指定する。(拡張子は不要)
# ./easyrsa sign-req client client_test Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:test Certificate created at: /etc/openvpn/easy-rsa/pki/issued/client_test.crt
作成されたことを確認する。
pki フォルダ内に以下が作成されていればOK。
- issued/client_test.crt
OpenVPNクライアント用に必要なファイルを移動する
- ca.crt
- client_test.key
- client_test.crt
- ta.key
上記のファイルを「/etc/openvpn/client/」ディレクトリの配下にコピーする。
(ca.crt , ta.key はコピーしなくてもよい)
「/etc/openvpn/client/」ディレクトリが無ければ、作成する
OpenVPNクライアントの構成ファイルをコピーする
デフォルトのままだと、openvpnクライアントの構成ファイルは「/etc/openvpn」フォルダには存在しないため、openvpnパッケージに付属している構成ファイルのテンプレートをコピーしてくる必要がある。
# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/client/ # cd /etc/openvpn/client
OpenVPNクライアントの構成ファイルを編集する
# vim client.conf
以下の行を編集する
42 remote {openvpnサーバのホスト名(又はIPアドレス)} 1194
61 user nobody #[;]を外す
62 group nogroup #[;]を外す
認証局の証明書を追記
# ca.crt コメントアウトする <ca> -----BEGIN CERTIFICATE----- MII..... ......AD -----END CERTIFICATE----- </ca>
クライアント証明書を追記
# cert client.crt コメントアウトする <ca> -----BEGIN CERTIFICATE----- MII..... ......=F -----END CERTIFICATE----- </ca>
クライアント秘密鍵を追記
# key client.key コメントアウトする <key> -----BEGIN PRIVATE KEY----- MII..... ......YR -----END PRIVATE KEY----- </key>
tls-autキーを追記する
# tls-auth ta.key 1 コメントアウトする <tls-auth> -----BEGIN OpenVPN Static key V1----- 42.... ......GT -----END OpenVPN Static key V1----- </tls-auth>
OpenVPNクライアントの構成ファイルの拡張子を変更する
# mv client.conf client.ovpn