私は自分の無知を率直に認めます。あるいは、危険なほどの知識があるかもしれません。
phpMyAdmin ユーティリティを提供するサブドメインがありますhttp://db.<mydomain>.com
。現在、このサブドメインは、.htaccess から有効なユーザーを要求する Apache ディレクティブを含むディレクトリにあります。これは、phpMyAdmin ログイン ページを一般に公開したくないため、当時は理にかなったことでした。
これによって発生した問題は、cert-bot を使用してサイトの SSL 証明書を作成しようとしたときに、チャレンジが .htaccess 制限を通過できないため、ACME チャレンジを検証できないことです。
ユーザーが phpMyAdmin ログイン ページを表示できるようにするには、このサブドメインを https 経由で同時に提供しながら、追加のセキュリティ レイヤーも要求するにはどうすればよいでしょうか。
<VirtualHost *:80>
ServerName db.<mydomain>.com
ServerAlias www.db.<mydomain>.com
DocumentRoot /var/www/subdomains/db/phpMyAdmin
</VirtualHost>
<Directory "/var/www/subdomains/db">
Options Indexes FollowSymLinks ExecCGI
Order allow,deny
Allow from all
AuthType Basic
AuthUserFile "/var/www/.htpasswd-users"
require valid-user
</Directory>
答え1
<Directory "/var/www/subdomains/db"> Options Indexes FollowSymLinks ExecCGI Order allow,deny Allow from all AuthType Basic AuthUserFile "/var/www/.htpasswd-users" require valid-user </Directory>
Order
およびディレクティブを削除する必要がありますAllow
。これらは古いスタイルの Apache 2.2 ディレクティブであり、Apache 2.4 では非推奨になっており、競合を引き起こす可能性があります (ただし、いずれにしても必須ではありません)。
<Directory>
のセクションがある/var/www/subdomains/db
のに、 がDocumentRoot
と定義されているのはなぜでしょうか/var/www/subdomains/db/phpMyAdmin
?
<Directory>
次に、無制限のアクセスを許可するファイル パスの追加セクションを追加します。/.well-known/
これにより、certbot は「ACME チャレンジを検証」できるようになります。例:
<Directory "/var/www/subdomains/db/phpMyAdmin/.well-known">
Require all granted
</Directory>
答え2
これを解決するには少なくとも 3 つの方法があります。
- 使用DNSチャレンジHTTP接続を必要としない
.well-known/
-pathの基本認証を無効にするcertbot によって使用されます。- certbotのスタンドアロンモジュールを使用します。これにより、10〜20秒のダウンタイムが発生します。
答え3
1 つの方法としては、次のように仮想ホストにアクセス制限を追加することが挙げられます。
<Directory "/www/docs/db">
<RequireAll>
Require ip <localip> <certbot host-name>
</RequireAll>
</Directory>
指令の詳細については、以下Require
をご覧ください。Apache ドキュメント。