Apache liefert sowohl statische HTML-Seiten als auch dynamisch generierte Inhalte via HTTP aus. Unverschlüsselte Verbindungen werden automatisch auf den mit TLS abgesicherten Port umgeleitet und per HSTS darauf festgenagelt. Browser können Zertifkate via DANE verifizieren.
Wir installieren den Apache Webserver und Module für die Authentifizierung und das Ausführen von Webanwendungen.
apt install apache2 libapache2-mod-{auth-{kerb,gssapi},fastcgi,fcgid}
Bei der Fehlersuche hilft oft ein Blick in die Protokolle.
tail -f /var/log/apache2/{access,error}.log
Debian verteilt die Konfiguration auf mehrere Dateien und Verzeichnisse.
/etc/apache2/apache2.conf
/etc/apache2/ports.conf
/etc/apache2/conf-enabled/
→ conf-available/
/etc/apache2/mods-enabled/
→ mods-available/
/etc/apache2/sites-enabled/
→ sites-available/
Unverschlüsselte Zugriffe leiten wir sofort um.
/etc/apache2/sites-available/illusioni.de.conf<VirtualHost *:80> RewriteEngine on RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </VirtualHost>
Der HSTS-Header veranlasst den Browser, immer gleich eine verschlüsselte Verbindung aufzubauen.
<VirtualHost *:443> ServerName illusioni.de ServerAlias *.illusioni.de ServerAdmin webmaster@illusioni.de ErrorLog /var/log/apache2/error.log CustomLog /var/log/apache2/access.log combined Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" SSLCertificateFile /etc/letsencrypt/live/illusioni.de/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/illusioni.de/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf Include /etc/powerdns/apache.conf Include /etc/sogo/apache.conf
UserDir public_html DocumentRoot /srv/www <Location /> Require all granted </Location>
Das CGI
definiert einen Standard zur Übergabe von Parametern aus
HTTP-Kopfzeilen
an Programme mittels Umgebungsvariablen. Mit dem Modul
cgi
lassen sich dynamische Seiten erzeugen.
ScriptAlias /Path /…/Program <Location /Path> Require all granted </Location>
Gute Webanwendungen verarbeiten oft komplette Unterbäume einer
URL.
Zu diesem Zweck werden die Module fcgid
und rewrite
aktiviert.
Alias /Path /…/Program <Location /Path> Require all granted Options +ExecCGI SetHandler fcgid-script RewriteEngine on RewriteLogLevel 1 RewriteLog /var/log/apache2/rewrite.log RewriteBase "/Path/" RewriteRule ^(.*)$ /…/Program [QSA,L] </Location>
Eigenständige
FastCGI-Anwendungen
laufen als Daemon und werden mit Hilfe des Moduls
proxy_fcgi
eingebunden.
ProxyPass /Path fcgi:/localhost:Port
Einige Dienste verfügen über einen eingebauten HTTP-Server, die man gerne unter einen hübschen Adresse anbieten möchte.
ProxyPass /pdns http://localhost:8053 ProxyPass /rspamd http://localhost:11334 ProxyPass /gitea http://localhost:3000
Zugriff auf vertrauliche Informationen sollte autorisierten Benutzern vorbehalten sein. Im einfachstern Fall verweist die Konfiguration auf eine separate Benutzer-Datenbank.
<Location Dir> Require valid-user AuthName "Private site" AuthType Basic AuthUserFile /etc/apache2/passwd </Location>
Die Passwörter verwalten wir dann in einer separaten Datenbank.
htpasswd -c /etc/apache2/passwd User
Das Modul authnz_ldap
erlaubt eine feine
Rechtevergabe durch frei konfigurierbare
LDAP-Anfragen.
Die Konfiguration kann zum Beispiel fordern, dass der Benutzer
Mitglied einer bestimmten Gruppe ist.
<Location Dir> Require ldap-group uid=Group,ou=users,dc=illusioni,dc=de AuthLDAPURL "ldap://localhost/dc=illusioni,dc=de?uid?sub?(objectClass=posixAccount)" AuthLDAPBindDN "cn=apache,ou=daemons,dc=illusioni,dc=de" AuthLDAPBindPassword "Password" </Location>
Das Modul auth_kerb
ermöglicht
Single Sign-On mit Kerberos
– wenn der Browser dies unterstützt.
(Firefox vertraut nur Kerberos-Domänen, die man in about:config
unter
network.negotiate-auth.trusted-uris
einträgt.)
<Location Dir> Require valid-user AuthName "Private site" AuthType Kerberos KrbAuthRealm ILLUSIONI.DE KrbMethodNegotiate on KrbMethodK5Passwd on KrbServiceName http/durmstrang.illusioni.de Krb5Keytab /etc/krb5/apache.keytab </Location> </VirtualHost>
Wir aktivieren die konfigurierten Webseiten und diverse Module. Vor einem Neustart testen wir immer auf eine korrekte Konfiguration.
a2ensite illusioni.de a2enmod userdir headers rewrite cgi fcgid proxy proxy_fcgi proxy_http authnz_ldap auth_kerb apachectl configtest Syntax OK systemctl restart apache2