OpenVPNとeasy-rsaをepelリポジトリからインストールします。
[root@localhost ~]# yum --enablerepo=epel -y install openvpn easy-rsa |
バージョンアップで設定ファイルや証明書が変更されるのを防ぐために新しいディレクトリを作り、そこに設定ファイルなどを保存する運用を行う。
[root@localhost ~]# mkdir /etc/openvpn |
[root@localhost ~]# cp /usr/share/easy-rsa/3.0.3/* /etc/openvpn |
[root@localhost ~]# cd /etc/openvpn ←ディレクトリ移動 |
[root@localhost openvpn]# ./easyrsa init-pki ←初期化 |
[root@localhost openvpn]# ./easyrsa build-ca |
Generating a 2048 bit RSA private key .......................................+++ .............................................................................+++ writing new private key to '/etc/openvpn/easy-rsa/pki/private/ca.key.UzE5bd0SCu' 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. ----- Common Name (eg: your user, host, or server name) [Easy-RSA CA]: ←VPN接続時のホスト名(FQDN)を入力(例:hogehoge.com) 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 |
[root@localhost openvpn]# ./easyrsa gen-dh |
DH parameters of size 2048 created at /etc/openvpn/pki/dh.pem |
時間が掛かる(2分~3分)ので、しばし待機する。
DHパラメータ(dh.pem)が作成されます。
tls-authを設定しておくと、VPNセッション開始時のパケットをHMACで認証し、認可されないパケットは破棄されるため、DDoS攻撃を防ぐことができるみたい。オープンなVPNサーバーを建てる時には設定しておくことがオススメらしい。ta.keyは静的共有鍵なので、安全な方法で配送される必要がある。
[root@localhost openvpn]# openvpn --genkey --secret ./ta.key |
VPNサーバー「hogehoge.com」用の証明書と秘密鍵をパスフレーズ無しで作成します。
[root@localhost openvpn]# ./easyrsa build-server-full hogehoge.com nopass |
Generating a 2048 bit RSA private key ....+++ .......................................................+++ writing new private key to '/etc/openvpn/easy-rsa/pki/private/hogehoge.com.key.O3l2ARzsse' ----- Using configuration from ./openssl-1.0.cnf Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key: ←CA秘密鍵(ca.key)のパスフレーズを入力 Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'hogehoge.com' Certificate is to be certified until Mar 28 17:05:59 2028 GMT (3650 days) Write out database with 1 new entries Data Base Updated |
サーバー用の証明書(hogehoge.com.crt)および秘密鍵(hogehoge.com.key)が作成されます
クライアント「client01」用の証明書と秘密鍵をパスフレーズ無しで作成します。
[root@localhost openvpn]# ./easyrsa build-client-full client01 nopass Generating a 2048 bit RSA private key ................+++ ..............................................................................................................+++ writing new private key to '/etc/openvpn/easy-rsa/pki/private/client01.key.MY2YPyBgBr' ----- Using configuration from ./openssl-1.0.cnf Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key: ←CA秘密鍵(ca.key)のパスフレーズを入力 Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'client01' Certificate is to be certified until Mar 28 17:17:18 2028 GMT (3650 days) Write out database with 1 new entries Data Base Updated |
クライアント用の証明書(client01.crt)および秘密鍵(client01.key)が作成されます
証明書のコピー
[root@localhost openvpn]# cp /etc/openvpn/pki/ca.crt . |
[root@localhost openvpn]# cp /etc/openvpn/pki/dh.pem . |
[root@localhost openvpn]# cp /etc/openvpn/pki/issued/hogehoge.com.crt . |
[root@localhost openvpn]# cp /etc/openvpn/pki/private/hogehoge.com.key . |
サーバーのコンフィグファイルのひな型をコピー
[root@localhost ~]# cp /usr/share/doc/openvpn*/sample/sample-config-files/server.conf server.conf |
コンフィグファイル(server.conf)の編集
port 1194 ←使用するポート番号 proto tcp ←使用するプロトコル dev tun ←TAP/TUNデバイス指定 (VPNのtapとtunの違い) ca ca.crt ←ca証明書 cert hogehoge.com.crt ←サーバ証明書 key hogehoge.com.key # This file should be kept secret ←秘密鍵の指定 dh dh.pem ←乱数(DH)パラメータの指定 ifconfig-pool-persist ipp.txt ←配布用IPアドレスのテーブル(固定IPを使用する場合、ipp.txtを編集) push "route 10.8.0.0 255.255.255.0" push "route 10.150.11.0 255.255.255.0" client-to-client ←クライアント間通信の許可 keepalive 10 120 ←キープアライブ設定(10秒ごとに生存確認、120秒無応答でダウン) tls-auth ta.key 0 # This file is secret ←TLS認証キーの指定 cipher AES-256-CBC ←キーの強度を指定 comp-lzo ←圧縮の有効可 user nobody ←ユーザ権限の設定 group nobody persist-key persist-tun status /var/log/openvpn-status.log ←ステータスログ log /var/log/openvpn.log ←稼働ログ log-append /var/log/openvpn.log verb 3 ←ログレベル ;explicit-exit-notify 1 ←tcpを使う場合はコメントアウトする |
[root@localhost ~]# vi /etc/openvpn/ipp.txt |
client01,xxx.xxx.xxx.xx1 client02,xxx.xxx.xxx.xx2 |
ここで固定指定されていないユーザーについては、サーバー設定ファイルに記載された範囲内で、使用されていないものが順番に使用される。
別ターミナル(SSHクライアント)を起動してログイン後にログを表示させる
[root@localhost ~]# tail -f /var/log/openvpn.log |
設定中のターミナルで、起動テストを実行
[root@localhost openvpn]# openvpn server.conf |
Sun Apr 1 03:28:46 2018 OpenVPN 2.4.5 x86_64-redhat-linux-gnu [Fedora EPEL patched] [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Mar 1 2018 (省略) Sun Apr 1 03:28:46 2018 Initialization Sequence Completed |
※↑こんな感じのログが出ればOK
サービスとして起動
[root@localhost ~]# systemctl start openvpn@server |
※サービス起動コマンドの@以降の「server」の部分はOpenVPNのコンフィグファイル名を指定する。
例:server.conf の場合は openvpn@server となる。
サービス状態確認
[root@localhost ~]# systemctl starus openvpn@server |
サービス自動起動
[root@localhost ~]# systemctl enable openvpn@server |