Ich gebe meine Unwissenheit offen zu – oder vielleicht auch, dass mein Wissen ausreicht, um gefährlich zu sein.
Ich habe eine Subdomain http://db.<mydomain>.com
, die das Dienstprogramm phpMyAdmin bedient. Sie befindet sich derzeit in einem Verzeichnis mit einer Apache-Anweisung, die einen gültigen Benutzer aus .htaccess anfordert, was damals sinnvoll war, da ich die Anmeldeseite von phpMyAdmin nicht der Öffentlichkeit zugänglich machen möchte.
Das dadurch entstandene Problem bestand darin, dass ich versuchte, mit Cert-Bot SSL-Zertifikate für meine Site zu erstellen. Die ACME-Challenge konnte nicht validiert werden, weil die Challenge die .htaccess-Einschränkung nicht überwinden konnte.
Wie kann ich diese Subdomäne gleichzeitig über https bereitstellen und gleichzeitig eine zusätzliche Sicherheitsebene anfordern, bevor ein Benutzer die phpMyAdmin-Anmeldeseite sehen kann?
<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>
Antwort1
<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
Sie sollten die Anweisungen und entfernen Allow
. Dabei handelt es sich um Anweisungen alten Stils aus Apache 2.2, die unter Apache 2.4 veraltet waren und wahrscheinlich Konflikte verursachen (sie sind aber ohnehin nicht erforderlich).
Obwohl ich mich frage, warum Sie einen <Directory>
Abschnitt für haben /var/www/subdomains/db
, obwohl das DocumentRoot
als definiert ist /var/www/subdomains/db/phpMyAdmin
?
Fügen Sie dann einen zusätzlichen <Directory>
Abschnitt für den /.well-known/
Dateipfad hinzu, in dem Sie uneingeschränkten Zugriff erlauben – damit der Certbot die „ACME-Challenge validieren“ kann. Beispiel:
<Directory "/var/www/subdomains/db/phpMyAdmin/.well-known">
Require all granted
</Directory>
Antwort2
Es gibt mindestens drei Möglichkeiten, dieses Problem zu lösen:
- Verwenden Sie dieDNS-Herausforderung, erfordert keine HTTP-Verbindung
- Deaktivieren Sie die Basisauthentifizierung für
.well-known/
-pathdas von Certbot verwendet wird. - Verwenden Sie das Standalone-Modul von certbot. Dies führt zu 10-20 Sekunden Ausfallzeit
Antwort3
Eine Möglichkeit besteht darin, Zugriffsbeschränkungen für den virtuellen Host wie folgt hinzuzufügen:
<Directory "/www/docs/db">
<RequireAll>
Require ip <localip> <certbot host-name>
</RequireAll>
</Directory>
Weitere Informationen zur Require
Richtlinie finden Sie unterApache-Dokumentation.