Inspire from 基本的なOpenVPNの構築手順@makisyu
サーバー CentOS8.2
クライアント Windows 10, iphone ios 13.6
ダウンロード
https://openvpn.net/index.php/download/community-downloads.html
これを書いた当時は2.4.9が最新だったが、適宜その時の最新版を取得。
サーバー側の設定
ここが便利: http://www.openvpn.jp/document/how-to/
本家のHow-toを日本語化してくれている。らしいけど。
らしいけど。うまくいかなかったのであくまで参考程度。(インストール↓参照)
インストール
RPMを作るのがオススメらしい。がうまくいかなかった。
#dnf group install "RPM Development Tools"
#dnf install openssl-devel lzo-devel pam-devel
#rpmbuild -tb openvpn-2.4.9.tar.gz
#dnf install /root/rpmbuild/RPMS/x86_64/openvpn-2.4.9-1.x86_64.rpm
# rpmbuild -tb openvpn-2.4.9.tar.gz
error: Failed to read spec file from openvpn-2.4.9.tar.gz
#dnf group install "RPM Development Tools"
#dnf install openssl-devel lzo-devel pam-devel
#dnf install rpm-build rpmdevtools make gcc
#dnf install openssl lzo pam
#cd /tmp
#wget https://swupdate.openvpn.org/community/releases/openvpn-2.4.9.tar.xz
#cd ./openvpn-2.4.9
#tar xf openvpn-2.4.9.tar.xz
#./configure
#make
#make install
#dnf -y install easy-rsa
#mkdir -p /etc/openvpn/easy-rsa/
#cp -r /usr/share/easy-rsa/3.0.7/ /etc/openvpn/easy-rsa/
#cd /etc/openvpn/easy-rsa/*/
認証局の設置
もともとはopenvpn-2.4.9.tar.xz
に同梱されてたらしいけど入ってるのを見たことがない
とりあえずdnf install easy-rsa
でインストールできるのでインストール
そしたらversion 3.0.7がはいってきた。このままやる
# cd /etc/openvpn/easy-rsa/3.0.7/
# ./easyrsa init-pki
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/easy-rsa/3.0.7/pki
# ./easyrsa build-ca
Using SSL: openssl OpenSSL 1.1.1c FIPS 28 May 2019
Enter New CA Key Passphrase:
Re-Enter New CA Key Passphrase:
Generating RSA private key, 2048 bit long modulus (2 primes)
..+++++
..................................................+++++
e is 65537 (0x010001)
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:
/etc/openvpn/easy-rsa/3.0.7/pki/ca.crt
Common Name はめんどかったのでそのままエンターした
# ./easyrsa gen-dh
Using SSL: openssl OpenSSL 1.1.1c FIPS 28 May 2019
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 /etc/openvpn/easy-rsa/3.0.7/pki/dh.pem
昔は30分くらいかかった希ガスけど1分かからず終わった。マシンのスペックかな?
# openvpn --genkey --secret ./pki/ta.key
# ls -lvhA pki/
total 56K
-rw------- 1 root root 1.2K Aug 10 01:10 ca.crt
drwx------ 2 root root 4.0K Aug 10 01:10 certs_by_serial
-rw------- 1 root root 424 Aug 10 01:11 dh.pem
-rw------- 1 root root 0 Aug 10 01:10 index.txt
-rw------- 1 root root 0 Aug 10 01:10 index.txt.attr
drwx------ 2 root root 4.0K Aug 10 01:10 issued
-rw------- 1 root root 4.6K Aug 10 01:10 openssl-easyrsa.cnf
drwx------ 2 root root 4.0K Aug 10 01:10 private
drwx------ 5 root root 4.0K Aug 10 01:10 renewed
drwx------ 2 root root 4.0K Aug 10 01:10 reqs
drwx------ 5 root root 4.0K Aug 10 01:10 revoked
-rw------- 1 root root 4.6K Aug 10 01:10 safessl-easyrsa.cnf
-rw------- 1 root root 3 Aug 10 01:10 serial
-rw------- 1 root root 636 Aug 10 01:16 ta.key
サーバ鍵と証明書の作成
./easyrsa build-server-full server nopass
みんなやってるので(パスワード無しで)やりました。反省してません。
cd /etc/openvpn
ln -s /etc/openvpn/easy-rsa/3.0.7/pki/
ln -s pki/ta.key
ln -s pki/ca.crt
ln -s pki/dh.pem
ln -s pki/private/server.key
ln -s pki/issued/server.crt
cp /tmp/openvpn-2.4.9/sample/sample-config-files/server.conf /etc/openvpn/server.conf.org
cp /tmp/openvpn-2.4.9/sample/sample-config-files/server.conf /etc/openvpn/server.conf
とりあえずこの辺やっときゃ必要なファイルが拾えるのでリンク貼った。
server.conf はオリジナルを保持しておきたいのでコピー
ca /etc/openvpn/ca.crt # 78行目くらい
cert /etc/openvpn/server.crt # 79行目
key /etc/openvpn/server.key # 80
dh /etc/openvpn/dh.pem # 85
server 172.16.0.0 255.255.0.0 # 101
push "route 0.0.0.0 0.0.0.0" # 141 ; すべてのパケットをVPNサーバ経由とする
push "dhcp-option DNS 199.85.126.10" # 200 ; DNS サーバのアドレスをNorton DNSに向ける
push "dhcp-option DNS 199.85.127.10" # 201 ; DNS サーバのアドレスをNorton DNSに向ける
tls-auth /etc/openvpn/ta.key 0 # 244
cipher AES-256-GCM # 252 ; AES-256-CBC ではなく AES-256-GCM を採用
compress lz4-v2 # 257
user nobody # 274
group nobody # 275
status /var/log/openvpn/status.log # 287
log /var/log/openvpn/openvpn.log #296
log-append /var/log/openvpn/openvpn.log #297
ncp-ciphers AES-256-GCM # 最終行に追記
tls-version-min 1.2 # 最終行に追記
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384 # 最終行に追記
reneg-sec 60 # 最終行に追記
- Norton DNS ポリシー 1: セキュリティ
- OpenVPNのTLSと暗号化を強くする @ keiya | Qiita
- AES-256-GCMの方が安全なのに、なぜAES-256-CBCを使用するのですか?
- 安全性が高いTLSへの移行で解決 - 狙われるセキュリティプロトコル:日経クロステック Active
変えたのは上記。うん、結構あるなぁ
openvpn /etc/openvpn/server.conf
設定ファイルを書いたら、まずはフォアグラウンドで動作確認。
Mon Aug 10 02:03:30 2020 Warning: Error redirecting stdout/stderr to --log file: /var/log/openvpn/openvpn.log: No such file or directory (errno=2)
Mon Aug 10 02:03:30 2020 Warning: Error redirecting stdout/stderr to --log file: /var/log/openvpn/openvpn.log: No such file or directory (errno=2)
Options error: --status fails with '/var/log/openvpn/status.log': No such file or directory (errno=2)
Options error: Please correct these errors.
Use --help for more information.
こうなった。そりゃそうだ。/var/log/openvpn
ディレクトリ作ってないんだもの
mkdir /var/log/openvpn/
openvpn /etc/openvpn/server.conf
何も表示されないままになればOK(?)
とりあえず^Cで終了させて。。。
# systemctl status openvpn
Unit openvpn.service could not be found.
Linux の任意のスクリプトをサービス登録し OS 起動時に自動起動させる [init.d/SystemD 編] @ KEINOS | Qiita
↑参考にしつつサービス登録する。
[Unit]
Description=OpenVPN
After=network.target
[Service]
Type=simple
User=nobody
WorkingDirectory=/etc/openvpn
ExecStart=/usr/local/sbin/openvpn /etc/openvpn/server.conf
[Install]
WantedBy=multi-user.target
こんな感じで作ってみたけどあってんかはわからない。
ln -s /etc/openvpn/openvpn.service /etc/systemd/system/
あとはリンクつなげてテスト
# systemctl status openvpn
● openvpn.service - OpenVPN
Loaded: loaded (/etc/openvpn/openvpn.service; linked; vendor preset: disabled)
Active: inactive (dead)
# systemctl start openvpn
# systemctl status openvpn
● openvpn.service - OpenVPN
Loaded: loaded (/etc/openvpn/openvpn.service; linked; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2020-08-10 02:21:21 JST; 4s ago
Process: 94886 ExecStart=/usr/local/sbin/openvpn /etc/openvpn/server.conf (code=exited, status=1/FAILURE)
Main PID: 94886 (code=exited, status=1/FAILURE)
Aug 10 02:21:21 localhost systemd[1]: Started OpenVPN.
Aug 10 02:21:21 localhost systemd[1]: openvpn.service: Main process exited, code=exited, status=1/FAILURE
Aug 10 02:21:21 localhost systemd[1]: openvpn.service: Failed with result 'exit-code'.
lines 1-9/9 (END)
とりあえず systemD が認識したっぽいので start してみるがエラー...
vim /etc/openvpn/openvpn.service
[Unit]
Description=OpenVPN
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/etc/openvpn
ExecStart=/usr/local/sbin/openvpn /etc/openvpn/server.conf
[Install]
WantedBy=multi-user.target
# systemctl start openvpn.service
Warning: The unit file, source configuration file or drop-ins of openvpn.service changed on disk. Run 'systemctl daemon-reload' to reload units.
# systemctl daemon-reload
# systemctl start openvpn.service
# systemctl status openvpn -l
● openvpn.service - OpenVPN
Loaded: loaded (/etc/openvpn/openvpn.service; linked; vendor preset: disabled)
Active: active (running) since Mon 2020-08-10 02:34:05 JST; 2s ago
Main PID: 95065 (openvpn)
Tasks: 1 (limit: 2851)
Memory: 1.4M
CGroup: /system.slice/openvpn.service
mq95065 /usr/local/sbin/openvpn /etc/openvpn/server.conf
Aug 10 02:34:05 localhost systemd[1]: Started OpenVPN.
User=root
にしたらサービス起動した...
permission deny とかでなかったじゃんかーーーーーー
systemctl enable openvpn.service
Created symlink /etc/systemd/system/multi-user.target.wants/openvpn.service → /etc/openvpn/openvpn.service.
いつも見るmesgみると落ち着く。。。
# journalctl -e -u openvpn.service
こいつでログも見れるのでとりあえず systemD へのレジスト はokってことでおk?
firewall-cmd --permanent --add-service openvpn
firewall-cmd --add-service openvpn
あとは、firewallD に許可リスト突っ込む
クライアントの設定
クライアント用秘密鍵生成
# cd /etc/openvpn/easy-rsa/3.0.7
# ./easyrsa build-client-full client01 nopass
Using SSL: openssl OpenSSL 1.1.1c FIPS 28 May 2019
Generating a RSA private key
...................................+++++
................+++++
writing new private key to '/etc/openvpn/easy-rsa/3.0.7/pki/easy-rsa-95128.16s90t/tmp.KXofP8'
-----
Using configuration from /etc/openvpn/easy-rsa/3.0.7/pki/easy-rsa-95128.16s90t/tmp.U6v8Ai
Enter pass phrase for /etc/openvpn/easy-rsa/3.0.7/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:'client01'
Certificate is to be certified until Nov 12 17:49:24 2022 GMT (825 days)
Write out database with 1 new entries
Data Base Updated
もう面倒になったので(パスワード無しで)やりました。反省してません。
あとは、pki/ta.key
pki/private/ca.crt
pki/issued/client01.crt
pki/private/client01.key
をSCPとかでこっそり持ってきちゃうと楽。
設定ファイル
/tmp/openvpn-2.4.9/sample/sample-windows/sample.ovpn
(ソースコードの中)にクライアント用(windows)の設定ファイルがあるのでそれを適宜修正する。
cp /tmp/openvpn-2.4.9/sample/sample-windows/sample.ovpn /etc/openvpn/client01.ovpn
cp /tmp/openvpn-2.4.9/sample/sample-windows/sample.ovpn /etc/openvpn/client01.ovpn.org
remote example.net
port 1194
proto udp
dev tun
; ifconfig 10.3.0.1 255.255.255.0
ca ca.crt
cert client.crt
key client.key
tls-auth ta.key 1
compress lz4-v2
cipher AES-256-GCM
verb 4
p.s.
記事書いてて ta.key
が ずっと Turkey
にしか見えなかった・・・Turkey
食いてぇ