さくらのVPS（CentOS8 x86_64）でWordPressやMediawiki、VPNなどをする話（２）

今回は第2回。SoftEther VPN ServerのインストールとHTTPS化を行う。

（前回のお話：[さくらのVPS（CentOS8 x86_64）でWordPressやMediawiki、VPNなどをする話（１）](https://qiita.com/Nickel2Plus/items/733cec25a2873635ea22)）



#SoftEther VPN Serverインストール
```terminal:command
[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のインストールが始まる。

```terminal:command
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ファイルはもう要らないので消してしまう。
```terminal:command
[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を設定する。

```terminal:command
[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化する。

```terminal:command
[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」をインストールする。

```terminal:command
[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レコードの設定をしておく必要がある。

```terminal:command
[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で定期的に証明書を更新して貰う。

```terminal:command
[root@hogehoge]# crontab -e
* * */7  *  * root /usr/bin/certbot renew <--- 7日毎にcertbotを実行し証明書が更新出来るか確認する

```

今回はここまで。

# 参考URL
* [CentOS 8で立てるSoftether VPN Server](https://blog.tsurai.work/2019/10/352/)
* [さくらのVPS に Let's encrypt を導入してお名前.comで取得したドメインをサブドメイン含めてSSL対応する](https://kde.hateblo.jp/entry/2020/02/29/031710)
* [https://lima.world/lets-encrypt/](https://lima.world/lets-encrypt/)