OpenVPNサーバーのインストールと設定

VPSサーバーと色々作業をするのにVPN接続があるとローカルにおいたサーバと同じように扱えるので便利です。なのでOpenVPNを利用してVPN環境の構築を行います。最終的にはPCだけでなくスマホなどもVPN接続できるようにします。

今回はOpenVPNサーバーのインストールになります。

OpenVPNとEasyRSAのインストール

毎度おなじみyumでopenvpnのインストール。


[root@sakura ~]# yum install openvpn easy-rsa
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: ftp.tsukuba.wide.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Resolving Dependencies
--> Running transaction check
---> Package easy-rsa.noarch 0:3.0.3-1.el7 will be installed
---> Package openvpn.x86_64 0:2.4.4-1.el7 will be installed
--> Processing Dependency: liblz4.so.1()(64bit) for package: openvpn-2.4.4-1.el7.x86_64
--> Processing Dependency: libpkcs11-helper.so.1()(64bit) for package: openvpn-2.4.4-1.el7.x86_64
--> Running transaction check
---> Package lz4.x86_64 0:1.7.3-1.el7 will be installed
---> Package pkcs11-helper.x86_64 0:1.11-3.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==========================================================================================================================================================================================================================================================
 Package                                                          Arch                                                      Version                                                         Repository                                               Size
==========================================================================================================================================================================================================================================================
Installing:
 easy-rsa                                                         noarch                                                    3.0.3-1.el7                                                     epel                                                     31 k
 openvpn                                                          x86_64                                                    2.4.4-1.el7                                                     epel                                                    457 k
Installing for dependencies:
 lz4                                                              x86_64                                                    1.7.3-1.el7                                                     epel                                                     82 k
 pkcs11-helper                                                    x86_64                                                    1.11-3.el7                                                      epel                                                     56 k

Transaction Summary
==========================================================================================================================================================================================================================================================
Install  2 Packages (+2 Dependent packages)

Total download size: 626 k
Installed size: 1.5 M
Is this ok [y/d/N]: y
Downloading packages:
(1/4): lz4-1.7.3-1.el7.x86_64.rpm                                                                                                                                                                                                  |  82 kB  00:00:00
(2/4): easy-rsa-3.0.3-1.el7.noarch.rpm                                                                                                                                                                                             |  31 kB  00:00:00
(3/4): openvpn-2.4.4-1.el7.x86_64.rpm                                                                                                                                                                                              | 457 kB  00:00:00
(4/4): pkcs11-helper-1.11-3.el7.x86_64.rpm                                                                                                                                                                                         |  56 kB  00:00:00
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                                                                     915 kB/s | 626 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : lz4-1.7.3-1.el7.x86_64                                                                                                                                                                                                                 1/4
  Installing : pkcs11-helper-1.11-3.el7.x86_64                                                                                                                                                                                                        2/4
  Installing : openvpn-2.4.4-1.el7.x86_64                                                                                                                                                                                                             3/4
  Installing : easy-rsa-3.0.3-1.el7.noarch                                                                                                                                                                                                            4/4
  Verifying  : pkcs11-helper-1.11-3.el7.x86_64                                                                                                                                                                                                        1/4
  Verifying  : lz4-1.7.3-1.el7.x86_64                                                                                                                                                                                                                 2/4
  Verifying  : openvpn-2.4.4-1.el7.x86_64                                                                                                                                                                                                             3/4
  Verifying  : easy-rsa-3.0.3-1.el7.noarch                                                                                                                                                                                                            4/4

Installed:
  easy-rsa.noarch 0:3.0.3-1.el7                                                                                                openvpn.x86_64 0:2.4.4-1.el7

Dependency Installed:
  lz4.x86_64 0:1.7.3-1.el7                                                                                                pkcs11-helper.x86_64 0:1.11-3.el7

Complete!
[root@sakura ~]#

yumからなので特に難しいところはなく。easy-rsaはオレオレ認証局に使用します。

まずはeasy-rsa3を使ってオレオレ認証局を作成します。今回はバージョン3です。以前と比べて手順がかなり楽になったみたいです。

easy-rsa 3 で認証局を構築する

現在ダウンロードできるOpenVPNでは、今まで認証局の構築で使用していたeasy-rsaが含まれなくなっています。 OpenVPN.netのダウンロードページ にも Note that easy-rsa is no longer bundled with OpenVPN…

概ねこのサイトにある通りの作業で大丈夫そう。それだけだとこのブログの存在意義がなくなってしまうので、自分の実施した手順も列挙していきます。

初期化

[root@sakura 3]# ./easyrsa init-pki

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /usr/share/easy-rsa/3/pki

[root@sakura 3]#

まずは初期化します。PKIのディレクトリが作成されればOK。

CA認証局の作成

[root@sakura 3]# ./easyrsa build-ca
Generating a 2048 bit RSA private key
.........................+++
.+++
writing new private key to '/usr/share/easy-rsa/3/pki/private/ca.key.lJ4bzuCSc9'
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]: <<<認証局名を入力 >>>

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/usr/share/easy-rsa/3/pki/ca.crt

[root@sakura 3]#

こちらもeasyrsaのコマンドで実行します。途中で認証局の秘密鍵用のパスフレーズを設定します。また、Common Nameの入力を要求されますのでサーバー名などを入力します。

DHパラメータの作成

[root@sakura 3]# ./easyrsa gen-dh
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
.................................(中略)................+..........................++*++*

DH parameters of size 2048 created at /usr/share/easy-rsa/3/pki/dh.pem

[root@sakura 3]#

DHパラメータというのを作っておきます。メッセージにもある通りやや時間がかかりますが放っておきます。dh.pemが出来ればOK。

サーバー用の秘密鍵と証明書の作成

[root@sakura 3]# ./easyrsa build-server-full server
Generating a 2048 bit RSA private key
....+++
................................................+++
writing new private key to '/usr/share/easy-rsa/3/pki/private/server.key.IGmfV3VpE3'
Enter PEM pass phrase: <<< サーバー用の秘密鍵のパスフレーズ >>>
Verifying - Enter PEM pass phrase:<<< サーバー用の秘密鍵のパスフレーズ >>>
-----
Using configuration from ./openssl-1.0.cnf
Enter pass phrase for /usr/share/easy-rsa/3/pki/private/ca.key: <<< 認証局の秘密鍵のパスフレーズ >>>
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'server'
Certificate is to be certified until Mar 18 13:51:57 2028 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated
[root@sakura 3]#

サーバーが使用する秘密鍵と証明書などを作ります。ちなみにサーバー用の秘密鍵にパスフレーズが掛かっているとOpenVPNの再起動時などに毎回パスフレーズの入力が必要になってしまい、面倒なのでeasy-rsa build-server-full server nopassのようにしてパスフレーズをなしにしておいたほうが楽かもしれません。パスフレーズを設定してしまった場合は、以下の方法でパスフレーズを解除しておきましょう。

[root@sakura 3]# openssl rsa -in pki/private/server.key -out pki/private/server.key
Enter pass phrase for pki/private/server.key: <<< サーバーの秘密鍵に設定したパスフレーズ >>>
writing RSA key
[root@sakura 3]#

鍵交換用アルゴリズムファイルの作成

[root@sakura 3]# openvpn --genkey --secret ./pki/ta.key
[root@sakura 3]#

あとで出てきますがOpenVPNの設定ファイルのta.keyを使う項目の説明に「For extra security beyond that provided by SSL/TLS, create an “HMAC firewall” to help block DoS attacks and UDP port flooding.」とあります。DoS攻撃などを防ぐための助けになるそうなので作成しておきます。これを使う場合、クライアント側でもこのファイルが必要となります。

OpenVPNサーバーの設定

ここまでで認証局の準備と、サーバー側に必要な秘密鍵や証明書などの準備が整いました。VPNに接続するためにはクライアント用の秘密鍵や証明書の作成も必要なのですが、それらの前にとりあえずOpenVPNサーバーの設定を済ませておきたいと思います。

まずは設定ファイルの準備。

[root@sakura 3]# cp /usr/share/doc/openvpn-2.4.4/sample/sample-config-files/server.conf /etc/openvpn/
[root@sakura 3]#

サンプルからコピーしてきます。変更箇所がいくつかあります。

ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key

# Diffie hellman parameters.
# Generate your own with:
#   openssl dhparam -out dh2048.pem 2048
dh /etc/openvpn/dh.pem

認証局、サーバーの証明書や秘密鍵の場所を指定します。ファイルは後ほどコピーしてきますが、とりあえず絶対パス指定。DHはファイル名の修正も忘れずに・・。

# Uncomment this directive to allow different
# clients to be able to "see" each other.
# By default, clients will only see the server.
# To force clients to only see the server, you
# will also need to appropriately firewall the
# server's TUN/TAP interface.
client-to-client

コメントを外しておきます。クライアント同士で通信ができるようになるみたいです。セキュリティ的にはあんましよろしくないかもしれませんが、いろいろと便利なので。

# For extra security beyond that provided
# by SSL/TLS, create an "HMAC firewall"
# to help block DoS attacks and UDP port flooding.
#
# Generate with:
#   openvpn --genkey --secret ta.key
#
# The server and each client must have
# a copy of this key.
# The second parameter should be '0'
# on the server and '1' on the clients.
tls-auth ta.key 0 # This file is secret

これは最初から有効になっているかもしれません。DoS攻撃対策のための追加設定ファイルです。OpenVONのTCP/UDPポートに対する「HMACファイアウォール」の一種で、正しくないTLSコントロールチャネルのパケットが届いた場合に破棄する処理を行います。・・だそうです。

OpenVPN TLS-Auth とは?

OpenSSLのHeartbeat Extensionの脆弱性がOpenVPNに与える影響については Twitterでも取り上げましたが、TLS-Authが有効になっていればこの脆弱性による影響を回避できます。それで、今回は OpenVPNのマニュアルから、TLS-Authオプションに関する部分の日本語訳を掲載します。 …

# Select a cryptographic cipher.
# This config item must be copied to
# the client config file as well.
# Note that v2.4 client/server will automatically
# negotiate AES-256-GCM in TLS mode.
# See also the ncp-cipher option in the manpage
;cipher AES-256-CBC
auth SHA256

暗号アルゴリズムの指定を行っている部分をコメントアウトします。クライアントが古い場合など、自動ネゴシエーションだと上手くいかない場合は、この指定を有効にしてください。

また、暗号化方式の指定である「auth SHA256」の記述がない場合、これを追加しておいてください。無くても大丈夫な気もするのですが、少なくともうちの環境では、この後のWindows版のOpenVPN GUIクライアントからの接続が上手くいきませんでした。

# Enable compression on the VPN link and push the
# option to the client (v2.4+ only, for earlier
# versions see below)
compress lz4-v2
push "compress lz4-v2"

# For compression compatible with older clients use comp-lzo
# If you enable it here, you must also
# enable it in the client config file.
;comp-lzo

通信パケットを圧縮する設定にしておきます。comress lz4-v2かcomp-lzoのいずれかを有効にしておきます。compress lz4-v2を有効にした場合、最新のクライアントである必要があります。

# It's a good idea to reduce the OpenVPN
# daemon's privileges after initialization.
#
# You can uncomment this out on
# non-Windows systems.
user nobody
group nobody

これもコメントを外しておきます。

# By default, log messages will go to the syslog (or
# on Windows, if running as a service, they will go to
# the "\Program Files\OpenVPN\log" directory).
# Use log or log-append to override this default.
# "log" will truncate the log file on OpenVPN startup,
# while "log-append" will append to it.  Use one
# or the other (but not both).
;log         openvpn.log
log-append  openvpn.log

ログを出しておきます。本番運用になったら不要かもしれませんが、いちおう安定するまでは出しておいたほうが幸せかも。

[root@sakura openvpn]# diff server.conf.orig server.conf
78,80c78,80
< ca ca.crt
< cert server.crt
< key server.key  # This file should be kept secret
---
> ca /etc/openvpn/ca.crt
> cert /etc/openvpn/server.crt
> key /etc/openvpn/server.key  # This file should be kept secret
85c85
< dh dh2048.pem
---
> dh /etc/openvpn/dh.pem
209c209
< ;client-to-client
---
> client-to-client
252c252,253
< cipher AES-256-CBC
---
> ;cipher AES-256-CBC
> auth SHA256
257,258c258,259
< ;compress lz4-v2
< ;push "compress lz4-v2"
---
> compress lz4-v2
> push "compress lz4-v2"
274,275c275,276
< ;user nobody
< ;group nobody
---
> user nobody
> group nobody
297c298
< ;log-append  openvpn.log
---
> log-append  openvpn.log
[root@sakura openvpn]#

diffとるとこんな感じです。

認証局の証明書、サーバー証明書と秘密鍵、そしてDHパラメータファイルを忘れずにコピーしてきます。

[root@sakura openvpn]# cp /usr/share/easy-rsa/3/pki/ca.crt /etc/openvpn/
[root@sakura openvpn]# cp /usr/share/easy-rsa/3/pki/dh.pem /etc/openvpn/
[root@sakura openvpn]# cp /usr/share/easy-rsa/3/pki/private/server.key /etc/openvpn/
[root@sakura openvpn]# cp /usr/share/easy-rsa/3/pki/issued/server.crt /etc/openvpn/
[root@sakura openvpn]# cp /usr/share/easy-rsa/3/pki/ta.key /etc/openvpn/
[root@sakura openvpn]#

準備は完了しました。

OpenVPNサーバーの起動

まぁ特別なことは必要ないのですが、CentOS7なのでsystemctlで起動します。

[root@sakura ~]# systemctl start openvpn@server
[root@sakura ~]#
[root@sakura ~]# systemctl status openvpn@server
* openvpn@server.service - OpenVPN Robust And Highly Flexible Tunneling Application On server
   Loaded: loaded (/usr/lib/systemd/system/openvpn@.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2018-03-21 23:29:28 JST; 18min ago
 Main PID: 13986 (openvpn)
   Status: "Initialization Sequence Completed"
   CGroup: /system.slice/system-openvpn.slice/openvpn@server.service
           `-13986 /usr/sbin/openvpn --cd /etc/openvpn/ --config server.conf

Mar 21 23:29:28 tk2-219-19107.vs.sakura.ne.jp systemd[1]: Starting OpenVPN Robust And Highly Flexible Tunneling Application On server...
Mar 21 23:29:28 tk2-219-19107.vs.sakura.ne.jp systemd[1]: Started OpenVPN Robust And Highly Flexible Tunneling Application On server.
[root@sakura ~]#
[root@sakura ~]#

こんな感じで、openvpn@[設定ファイル名]で起動します。設定ファイルがserver.confだったらopenvpn@serverで。

特に何も出なければ起動に成功していますが、一応ステータスで確認します。


[root@sakura ~]# cat /etc/openvpn/openvpn.log
Wed Mar 21 23:29:28 2018 OpenVPN 2.4.4 x86_64-redhat-linux-gnu [Fedora EPEL patched] [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Sep 26 2017
Wed Mar 21 23:29:28 2018 library versions: OpenSSL 1.0.2k-fips  26 Jan 2017, LZO 2.06
Wed Mar 21 23:29:28 2018 Diffie-Hellman initialized with 2048 bit key
Wed Mar 21 23:29:28 2018 ROUTE_GATEWAY ***.***.***.***/255.255.254.0 IFACE=eth0 HWADDR=**:**:**:**:**:**
Wed Mar 21 23:29:28 2018 TUN/TAP device tun0 opened
Wed Mar 21 23:29:28 2018 TUN/TAP TX queue length set to 100
Wed Mar 21 23:29:28 2018 do_ifconfig, tt->did_ifconfig_ipv6_setup=0
Wed Mar 21 23:29:28 2018 /sbin/ip link set dev tun0 up mtu 1500
Wed Mar 21 23:29:28 2018 /sbin/ip addr add dev tun0 local 10.8.0.1 peer 10.8.0.2
Wed Mar 21 23:29:28 2018 /sbin/ip route add 10.8.0.0/24 via 10.8.0.2
Wed Mar 21 23:29:28 2018 Could not determine IPv4/IPv6 protocol. Using AF_INET
Wed Mar 21 23:29:28 2018 Socket Buffers: R=[212992->212992] S=[212992->212992]
Wed Mar 21 23:29:28 2018 UDPv4 link local (bound): [AF_INET][undef]:1194
Wed Mar 21 23:29:28 2018 UDPv4 link remote: [AF_UNSPEC]
Wed Mar 21 23:29:28 2018 GID set to nobody
Wed Mar 21 23:29:28 2018 UID set to nobody
Wed Mar 21 23:29:28 2018 MULTI: multi_init called, r=256 v=256
Wed Mar 21 23:29:28 2018 IFCONFIG POOL: base=10.8.0.4 size=62, ipv6=0
Wed Mar 21 23:29:28 2018 IFCONFIG POOL LIST
Wed Mar 21 23:29:28 2018 Initialization Sequence Completed
[root@sakura ~]#

特にすることもないのでログを見てみましたが、起動は問題なさそうです。

最後に、OpenVPNを自動起動するための設定を行っておきます。

[root@sakura ~]# systemctl enable openvpn@server.service
Created symlink from /etc/systemd/system/multi-user.target.wants/openvpn@server.service to /usr/lib/systemd/system/openvpn@.service.
[root@sakura ~]#

クライアント側の設定ファイルについては次のエントリで。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください