はじめに
背景
QNAPのNASは家庭や小規模オフィスでよく使われます。ファイル共有やバックアップに便利ですが、インターネット経由で使う場合は通信の暗号化(HTTPS)が重要です。無料のLet’s Encryptを使えば、安全な証明書を手軽に取得できます。
本書の目的
本ドキュメントは、QNAPでLet’s Encrypt証明書を発行・更新し、myQNAPCloudや独自ドメインで安全に利用するための手順と注意点を整理します。実際の設定例やよくあるトラブル対応も含めます。
対象読者
基本的なNAS操作ができる方を想定します。初心者の方にもわかるよう具体例で補足します。
前提条件
QNAPの管理画面にアクセスできること、ネットワークやドメインの基礎知識があることを前提とします。特別な費用は不要です(Let’s Encryptは無料です)。
章構成
続く章で、問題解決方法、NGINXのプロキシ設定、証明書発行と適用手順、ワイルドカード取得、AWS準備、保存ディレクトリ作成まで順に説明します。
QNAP NASのmyQNAPCloud用Let’s Encrypt証明書が発行できない問題の解決方法
問題の概要
QNAP本体とは別サーバ(例:NGINXコンテナ)で80番を受け、NASへ転送していると、Let’s EncryptのHTTP-01チャレンジがNASに到達せず証明書発行が失敗します。これはHTTP認証がポート80へ直接アクセスするためです。
解決策の要点
NGINXでドメイン宛の「/.well-known/acme-challenge/」だけをNASに転送し、他は受けない設定にします。これによりLet’s Encryptの認証ファイルだけNASで応答できます。
NGINX設定の例(要点のみ)
server { listen 80; server_name your.domain.example; location /.well-known/acme-challenge/ { proxy_pass http://NAS_IP:PORT; } location / { return 404; } }
実行手順
- NGINXに上記設定を追加してリロード。2. QNAPのmyQNAPCloudアプリからLet’s Encrypt発行・更新を実行。3. 発行後、QNAP側でHTTPS強制とHSTSを有効化して動作確認。
注意点
NASのHTTPポートとIPを正確に指定してください。プロキシのタイムアウトやヘッダ転送も必要に応じて調整します。
NGINXでのLet’s Encrypt用プロキシ設定例
以下は、80番ポートでmyQNAPCloudのホスト名を受け、HTTP-01チャレンジのパスだけNASへ転送するシンプルな設定例です。
server {
listen 80;
server_name nas.example.com;
location /.well-known/acme-challenge/ {
proxy_pass http://192.0.2.10:8080/; # NASのIPとHTTPポートに合わせて変更
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
return 404;
}
}
ポイント:
– proxy_pass はNASのIPとポート(例:192.0.2.10:8080)に変えてください。
– proxy_set_header はNAS側で正しいホストやクライアントIPを扱うために入れます。
– 設定ファイルをsites-availableに置き、sites-enabledへシンボリックリンクを作ります(例: ln -s /etc/nginx/sites-available/myqnap /etc/nginx/sites-enabled/)。その後 nginx を再起動してください(systemctl restart nginx)。
この設定でLet’s EncryptのHTTP-01チャレンジがNGINX経由でNASに到達し、証明書発行が可能になります。ネットワークやNASのHTTP待ち受け、ファイアウォールも確認してください。
QNAPでのLet’s Encrypt証明書発行手順と注意点
概要
QNAPの管理画面でmyQNAPCloudアプリを開き、「SSL証明書」タブからLet’s Encryptを選ぶと、ACMEを使った証明書発行・更新ができます。本章は手順と注意点を分かりやすく説明します。
発行手順(簡潔)
- myQNAPCloudにログインし、デバイス名が正しいことを確認します。myqnapcloud.comのサブドメインが設定済みであることが前提です。
- myQNAPCloudアプリの「SSL証明書」タブへ移動し、Let’s Encryptを選択します。
- 対象ホスト名を入力して「発行」を実行します。QNAPが自動でHTTP-01チャレンジを行い、認証が通れば証明書が取得されます。
注意点
- DNSとポート: サブドメインが外部から到達可能であること(A/AAAA設定)が必要です。ルーターでポート80/443をNASへ転送してください。ファイアウォールやISPの制約で失敗することがあります。
- コントロールパネル経由の発行が失敗するケースがあります。その場合はmyQNAPCloudアプリ経由で試してください。理由は環境依存で不明なことが多いです。
- ワイルドカード証明書: HTTP-01では発行できません。DNS-01が必要なため、別手段(後の章で説明)を検討してください。
- 更新とバックアップ: 自動更新を有効にしても、念のため鍵と証明書は定期的にエクスポートして安全に保管してください。
トラブル時の簡単な対処法
- まずDNS設定とポート転送を確認します。次にQNAPのログを見てエラー内容を確認してください。必要なら一時的に外部アクセスを有効にして再試行します。
QNAP Container StationでLet’s Encryptワイルドカード証明書を取得しNASに適用する手順
概要
QNAPのContainer StationでCertbotを動かし、AWS Route53のDNS認証(DNS-01)でワイルドカード証明書を取得し、NASの管理画面などに適用します。対象機種はTS-h1283XU-RPです。certbot-dns-route53プラグインを利用します。
準備
- AWSのIAMユーザーとアクセスキーを用意(Route53の編集権限が必要)。
- Container Stationに外部フォルダ(例:/share/letsencrypt)をマウントしておく。
手順(要点)
- コンテナ起動
- Dockerイメージ例: certbot/dns-route53
- マウント: /etc/letsencrypt をホストのフォルダに割当て
- 環境変数を設定
- AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY をコンテナに渡す
- 証明書取得コマンド例
- certbot certonly –dns-route53 -d “*.example.com” -d “example.com” –non-interactive –agree-tos –email you@example.com
- 成功すると /etc/letsencrypt/live/example.com に fullchain.pem と privkey.pem が作成されます
- NASへ適用
- fullchain.pem をサーバ証明書(.crt)、privkey.pem を秘密鍵(.key)として保存
- QNAP管理画面: コントロールパネル > セキュリティ > 証明書をインポート でアップロード
更新と注意点
- 自動更新はコンテナ内でcronやsystemdタイマーで設定してください。
- DNS設定反映に時間がかかる場合があります。権限不足やAPIレート制限に注意してください。
AWS IAMユーザーとRoute53権限の準備
概要
AWSコンソールで「プログラムによるアクセス」を持つIAMユーザーを作成し、Route53でDNSレコードを変更できる権限を与えます。発行したアクセスキーとシークレットキーをcertbot-dns-route53プラグインに渡してワイルドカード証明書を取得します。
手順(簡単)
- AWSコンソールのIAM→ユーザー→ユーザーを追加を開く。
- アクセスの種類で「プログラムによるアクセス」を選ぶ。
- 「ポリシーを直接アタッチする」を選択し、Route53用のポリシーを割り当てる(下記参照)。
- ユーザー作成後、アクセスキーIDとシークレットアクセスキーをダウンロードまたは控える。シークレットは再表示できません。
最小権限の例(ポリシーJSON)
以下は特定のホストゾーンだけに権限を絞る例です。HostedZoneのIDは実際のIDに置き換えてください。
{
"Version":"2012-10-17",
"Statement":[{
"Effect":"Allow",
"Action":["route53:ChangeResourceRecordSets","route53:ListHostedZones","route53:GetChange"],
"Resource":["arn:aws:route53:::hostedzone/ZONEID"]
}]
}
アクセスキーの渡し方(コンテナ)
- 環境変数: AWS_ACCESS_KEY_ID と AWS_SECRET_ACCESS_KEY を設定。例:docker run -e …
- 共有ファイル: ~/.aws/credentials をコンテナにマウントして使う方法もあります。
注意点
- シークレットは安全に保管し、不要になったらキーを削除してください。
- ポリシーはできるだけホストゾーンに限定してください。
QNAP側での証明書保存用ディレクトリの作成
概要
QNAPの共有フォルダ上に証明書用ディレクトリを作り、ワイルドカード証明書(例: fullchain.pem と privkey.pem)を安全に保管します。こうすることでNAS本体やコンテナが証明書を参照しやすくなります。
作成手順(GUI)
- QTSの「コントロールパネル」→「共有フォルダ」→「作成」を選びます。
- 名前を「ssl」や「certs」にして作成します。
- 共有フォルダのアクセス権を必要なユーザーだけに制限します。
作成手順(SSH)
- SSHでNASにログインします(例: ssh admin@)。
- ディレクトリを作ります: mkdir -p /share/xxxxx/ssl
- 所有者と権限を設定します: chown admin:administrators /share/xxxxx/ssl && chmod 700 /share/xxxxx/ssl
証明書保存の注意点
- 秘密鍵は公開しないでください。権限は600に設定します(chmod 600 privkey.pem)。
- ファイル名は分かりやすく(fullchain.pem, privkey.pem)にしてください。
- 定期バックアップとアクセスログの確認を習慣にしてください。
NASでの利用例
- QTSの証明書管理で「証明書の追加」から保存先を指定します。コンテナやサービスは保存先パスを参照するだけで利用できます。
補足
必要ならSMBマウントや外部バックアップで二重保管を検討してください。安全第一で管理してください。












