📚 シリーズ目次
- ①QEMUでDebianを動かしてみる
- ②rcloneで暗号化フォルダを作る
- ③HTTPSサーバを構築してみる
- ④SNVサーバを構築してみる
- ⑤Gitサーバを構築してみる
- ⑥サーバ構成を改変してみる
本シリーズは、作業の一部で Linux Mint 22.2 Cinnamon Edition を使用します。
( Windows 11 での作業手順も併記しています。)
1. はじめに
rcloneなら機密フォルダに自信が持てます♪ということで、今回はHTTPSサーバの構築です。前回の記事では、rcloneでのマウントにより暗号化フォルダを透過的にアクセスできることが確認できました。本記事では、Gitサーバ、SVNサーバへのアクセス基盤とするためにHTTPSサーバを構築していきます。
本記事では、非rootのスマホに仮想マシンを導入し、Android OS上でネイティブなLinuxサーバを稼働させることを目指します。
2. サーバアクセスの経路
2.1 SSH接続ではダメなの?
Gitサーバ、SVNサーバともにSSH経由での接続が可能です。今回はDebian上にサーバを構築するので、Termuxサーバでの長すぎURL問題とも無縁。HTTPS接続と違ってアップロードの容量制限もないので、管理用途ならSSH接続のほうが良さげ。
2.2 HTTPS接続のメリット
うん。SVNサーバにSSH接続してコミットすると、作者名がサーバのログイン名に固定となる訳ですよ。サーバ側で利用者ごとにログインユーザを作成することで対処できますが、手間も掛かるし使用できる文字の制限もある。HTTPS接続なら、このあたりがだいぶ楽になります。以下は、今回のサーバ構成での接続図です。
3. マウントの永続化
3.1 サービスの作成
前回は、動作確認のためにコマンドからマウントしただけでした。rcloneのマウントをサービス化して、Debianの起動時に自動でマウントさせるようにします。まずは、PCから以下のコマンドを実行してDebianに接続します。
ssh termux-qemu
続いて、systemdのサービスユニットを作成します。次のコマンドで .service ファイルを作成し、以下のように記載してください。
sudo nano /etc/systemd/system/rclone-mounter.service
[Unit]
Description=Rclone Mounter for Termux Storage
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/usr/bin/mkdir -p /mnt/shared
ExecStartPre=/usr/bin/mkdir -p /mnt/sdcard
ExecStartPre=/usr/bin/mkdir -p /mnt/secure
ExecStart=/usr/bin/rclone mount termux-sftp:storage/shared /mnt/shared \
--uid 1000 --gid 33 --umask 002 --allow-other \
--vfs-cache-mode writes --daemon
ExecStart=/usr/bin/rclone mount termux-sftp:storage/sdcard /mnt/sdcard \
--uid 1000 --gid 33 --umask 002 --allow-other \
--vfs-cache-mode writes --daemon
ExecStart=/usr/bin/rclone mount termux-secure: /mnt/secure \
--uid 1000 --gid 33 --umask 002 --allow-other \
--vfs-cache-mode writes --daemon
ExecStop=/usr/bin/fusermount -u /mnt/shared
ExecStop=/usr/bin/fusermount -u /mnt/sdcard
ExecStop=/usr/bin/fusermount -u /mnt/secure
[Install]
WantedBy=multi-user.target
3.2 サービスの有効化
サービスユニットが作成できたら、以下のコマンドを実行してください。サービスが有効化されて起動するので、Debian起動時に自動でマウントされるようになります。
sudo systemctl daemon-reload
sudo systemctl enable rclone-mounter
sudo systemctl start rclone-mounter
4. HTTPS接続の設定
4.1 HTTPS通信の有効化
Apacheは前回でインストール済みなので、HTTPS通信の有効化から始めます。以下のコマンドを実行すると、HTTPS通信が有効化されます。
sudo a2enmod ssl
sudo a2ensite default-ssl
sudo systemctl restart apache2
PCのブラウザで以下のURLを表示させると、プライバシーエラーの警告が出ます。HTTPS通信は問題なく動いているようです。
https://192.168.x.x:8443/
4.2 SSL認証の設定
クライアントでSSL認証を行うために、サーバ証明書を作成します。以下のコマンドを実行すると、自己署名のサーバ証明書が作成されます。
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/termux.key \
-out /etc/ssl/certs/termux.crt \
-subj "/CN=Termux Local Server" \
-addext "subjectAltName=DNS:termux.home.arpa"
サーバ証明書を作成したら、default-ssl.conf の設定を修正して反映させます。
sudo nano /etc/apache2/sites-available/default-ssl.conf
# A self-signed (snakeoil) certificate can be created by installing
# the ssl-cert package. See
# /usr/share/doc/apache2/README.Debian.gz for more info.
# If both key and certificate are stored in the same file, only the
# SSLCertificateFile directive is needed.
- SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
- SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
+ SSLCertificateFile /etc/ssl/certs/termux.crt
+ SSLCertificateKeyFile /etc/ssl/private/termux.key
sudo systemctl restart apache2
4.3 クライアントの設定
サーバ側の設定ができたら、次はクライアント側の設定を行います。Debianもクライアントとして使用するため、Debianの設定から始めます。まずは、以下のコマンドで hosts ファイルを開いてホスト名を追加してください。
sudo nano /etc/hosts
127.0.1.1 Redmi-12-5G
127.0.1.2 termux.home.arpa
続いて、以下のコマンドでシステムの信頼ストアにサーバ証明書を追加します。
sudo cp /etc/ssl/certs/termux.crt \
/usr/local/share/ca-certificates/termux-local-server.crt
sudo update-ca-certificates
クライアントPCも同様に設定を行います。まずは、ホスト名の追加です。
sudo nano /etc/hosts
192.168.x.x termux.home.arpa
Windows環境では、以下のフォルダに hosts ファイルがあります。メモ帳を「管理者として実行」して編集してください。
C:\Windows\System32\drivers\etc
クライアントPCでは、ChromeやEdgeなどのブラウザからサーバ証明書をダウンロードしてください。以下のURLを開くと、アドレスバーに「⛔ 保護されていない通信」が表示されます。これを右クリックして証明書ビューアを開き、「エクスポート(X)」をクリックするとサーバ証明書をダウンロードすることができます。
https://termux.home.arpa:8443/
ダウンロードフォルダから右クリックでターミナルを開いて、以下のコマンドを実行するとシステムの信頼ストアにサーバ証明書が追加されます。
sudo cp "Termux Local Server" \
/usr/local/share/ca-certificates/termux-local-server.crt
sudo update-ca-certificates
Windows環境では、以下のコマンドを実行します。Windows PowerShellを「管理者として実行」し、コマンドを実行してください。
cd "C:\Users\ユーザ名\Downloads"
Import-Certificate -FilePath "Termux Local Server.crt" `
-CertStoreLocation Cert:\LocalMachine\Root
Linux版のChromeとEdgeは、Windows版とは違い独自の証明書ストアを運用しています。以下のURLでサーバ証明書をインポートしてお使いください。
chrome://certificate-manager/
5. おわりに
ストレージのマウントと接続経路の確保ができたので、残すところはGitとSVNのサーバ構築です。QEMUでの処理速度が実用に耐えうるのか、乞うご期待。余談ですが、Debianよりもさらに軽量なAlpine Linuxなるものを試してみました。QEMUから爆速で起動する…こともなく、Debianと変わらない起動時間でしたとさ。
| ◀️ 前の記事 | 次の記事 ▶️ |
|---|---|
| セキュアサーバに、なりたいな「ハイ!rclone crypt」②rcloneで暗号化フォルダを作る | セキュアサーバに、なりたいな「ハイ!rclone crypt」④SNVサーバを構築してみる |
