今回は第2回。SoftEther VPN ServerのインストールとHTTPS化を行う。
(前回のお話:さくらのVPS(CentOS8 x86_64)でWordPressやMediawiki、VPNなどをする話(1))
#SoftEther VPN Serverインストール
[root@hogehoge ~]# wget http://jp.softether-download.com/files/softether/v4.38-9760-rtm-2021.08.17-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.38-9760-rtm-2021.08.17-linux-x64-64bit.tar.gz
[root@hogehoge ~]# tar zxvf softether-vpnserver-v4.38-9760-rtm-2021.08.17-linux-x64-64bit.tar.gz
[root@hogehoge ~]# ls
softether-vpnserver-v4.38-9760-rtm-2021.08.17-linux-x64-64bit.tar.gz vpnserver
[root@hogehoge ~]# cd vpnserver/
[root@hogehoge vpnserver]# make
これでSoftEther VPN Serverのインストールが始まる。
SoftEther VPN コマンドライン管理ユーティリティ (vpncmd コマンド)
Version 4.38 Build 9760 (Japanese)
Compiled 2021/08/17 22:32:49 by buildsan at crosswin
Copyright (c) SoftEther VPN Project. All Rights Reserved.
VPN Tools を起動しました。HELP と入力すると、使用できるコマンド一覧が表示できます。
VPN Tools>Check
Check コマンド - SoftEther VPN の動作が可能かどうかチェックする
---------------------------------------------------
SoftEther VPN 動作環境チェックツール
Copyright (c) SoftEther VPN Project.
All Rights Reserved.
この動作環境チェックツールを実行したシステムがテストに合格した場合は、SoftEther VPN ソフトウェアが動作する可能性が高いです。チェックにはしばらく時間がかかる場合があります。そのままお待ちください...
'カーネル系' のチェック中...
[合格] ○
'メモリ操作系' のチェック中...
[合格] ○
'ANSI / Unicode 文字列処理系' のチェック中...
[合格] ○
'ファイルシステム' のチェック中...
[合格] ○
'スレッド処理システム' のチェック中...
[合格] ○
'ネットワークシステム' のチェック中...
[合格] ○
すべてのチェックに合格しました。このシステム上で SoftEther VPN Server / Bridge が正しく動作する可能性が高いと思われます。
コマンドは正常に終了しました。
--------------------------------------------------------------------
The preparation of SoftEther VPN Server is completed !
インストールが完了した。
ただこのままだとhomeディレクトリにvpnserverディレクトリが存在するのでやや邪魔である。/usr/localディレクトリに移動させる。
また、元のter.gzファイルはもう要らないので消してしまう。
[root@hogehoge ~]# mv /vpnservver /usr/local
[root@hogehoge ~]# rm -rf softether-vpnserver-v4.38-9760-rtm-2021.08.17-linux-x64-64bit.tar.gz
[root@hogehoge ~]#vi /etc/systemd/system/softethervpn.service
---
[Unit]
Description=SoftEther VPN Server
After=network.target auditd.service
ConditionPathExists=!/opt/vpnserver/do_not_run
[Service]
Type=forking
EnvironmentFile=-/opt/vpnserver
ExecStart=/opt/vpnserver/vpnserver start
ExecStop=/opt/vpnserver/vpnserver stop
KillMode=process
Restart=on-failure
# Hardening
PrivateTmp=yes
ProtectHome=yes
ProtectSystem=full
ReadOnlyDirectories=/
ReadWriteDirectories=-/opt/vpnserver
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW CAP_SYS_NICE CAP_SYS_ADMIN CAP_SETUID
[Install]
WantedBy=multi-user.target
---
[root@hogehoge ~]# systemctl daemon-reload
[root@hogehoge ~]# systemctl enable softethervpn
[root@hogehoge ~]# systemctl start softethervpn
[root@hogehoge ~]# systemctl status softethervpn
Active: active(running) <--- active(runnning)になっていればOK
あとはvpnserverディレクトリを勝手に弄られないよう、所有者を変更しておく。
[root@hogehoge ~]# cd /usr/local/vpnserver
[root@hogehoge ~]# chmod 600 *
[root@hogehoge ~]# chmod 700 vpncmd
[root@hogehoge ~]# chmod 700 vpnserver
SoftEtherの通信がfirewalldに遮られないよう、firewalldを設定する。
[root@hogehoge ~]# vi /etc/firewalld/services/softether-vpn.xml
---
<service>
<short>SoftetherVpnServer</short>
<description>Softether VPN Server</description>
<!-- TCP -->
<port protocol="tcp" port="443"/>
<port protocol="tcp" port="992"/>
<port protocol="tcp" port="1194"/>
<port protocol="tcp" port="5555"/>
<!-- UDP -->
<port protocol="udp" port="443"/>
<port protocol="udp" port="992"/>
<port protocol="udp" port="1194"/>
<port protocol="udp" port="5555"/>
<!-- UDP高速化 -->
<port protocol="udp" port="40000-44999"/>
</service>
---
[root@hogehoge ~]# firewall-cmd --reload
[root@hogehoge ~]# firewall-cmd --permanent --zone=public --add-service=softether-vpn
[root@hogehoge ~]# firewall-cmd --permanent --zone=public --add-service=ipsec
[root@hogehoge ~]# firewall-cmd --reload
[root@hogehoge ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens3
sources:
services: cockpit dhcpv6-client ipsec softether-vpn ssh ssh-no2 <---追加されている。
但し、このままだと次節から行うHTTPS対応化の際、SoftEtherとHTTPSで同じ443ポートを使用しようとして競合を起こしてしまう。443ポートは一般にHTTPSのwell-known Portであるので、SoftEther側での使用を停止する。
vpncmdからでも設定出来るがCUIで使い勝手が悪いので、私はノートPCにインストールしたSE-VPN管理ツールでサーバーにアクセスし設定した。
HTTPS対応化
このままWebページを公開するとHTTPのままで暗号化されていない。
そのためLet's Encryptという無料SSLツールで証明書を発行して貰いHTTPS化する。
[root@hogehoge]# yum install mod_ssl
Complete!
[root@hogehoge]# systemctl restart httpd
/* 上でSoftEtherの443番ポートを停止していないとエラーが出る */
[root@hogehoge]# httpd -M
ssl_module (shared)
/* 実行中のモジュールを確認出来る。ssl_moduleが稼働していることが分かる */
次にLet's Encryptの証明書を発行して貰うためのプログラム、「certbot」をインストールする。
[root@hogehoge]# yum install epel-release
[root@hogehoge]# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-8.rpm <---必要ないかも?
[root@hogehoge]# yum -y install certbot
[root@hogehoge]# yum install python3-certbot-apache
ただこのままでは証明書を発行することが出来ないので、httpd.confを編集しこのサーバーのIPアドレスとドメインを紐付ける。なお、予めお名前ドットコム等ドメインを購入したサイト等でDNSレコードの設定をしておく必要がある。
[root@hogehoge]# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.old
[root@hogehoge]# vi /etc/httpd/conf/httpd.conf
--- /* ファイルの最後尾に加える */
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin root@hogehoge.com
DocumentRoot /var/www/html
ServerName hogehoge
</VirtualHost>
/* hogehogeにはドメイン名を入れる */
---
[root@hogehoge]# systemctl restart httpd
[root@hogehoge]# certbot --apache -d hogehoge.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for hogehoge.com
Successfully received certificate.
(略)
このままだと証明書が発行されたきりになり、証明書の有効期限が切れるとHTTPS接続時に不具合が発生する。このため、crontabで定期的に証明書を更新して貰う。
[root@hogehoge]# crontab -e
* * */7 * * root /usr/bin/certbot renew <--- 7日毎にcertbotを実行し証明書が更新出来るか確認する
今回はここまで。