linux-ubuntu-debian webserver apache ssl virtualhosts security

Apache2 Configuration: Virtual Hosts & SSL (Artikel 034)

Professionelle Konfiguration des Apache2 Webservers. Einrichtung von Virtual Hosts, Modul-Management und die Absicherung mittels SSL/TLS und Let's Encrypt.

# Apache2 Masterclass: Virtual Hosts, Module & TLS

TL;DR / Management Summary Trotz der Konkurrenz durch Nginx bleibt Apache2 der vielseitigste Webserver für komplexe Enterprise-Umgebungen. Seine Stärken liegen im modularen Aufbau, der Unterstützung für .htaccess (dezentrale Konfiguration) und der tiefen Integration in Legacy-Applikationen. Ein professionelles Setup nutzt Namensbasierte Virtual Hosts, strikte TLS-Ciphers und minimiert die geladenen Module auf das absolute Minimum.


# 1. Einführung & Architektur

Der Prozess-orientierte Webserver.

Apache2 (im event MPM Modus) kann heute fast so effizient wie Nginx skalieren. Er trennt den Core von den Features (Modulen).

# Architektur-Übersicht (Mermaid)

graph TD
    A[Incoming Request Port 80/443] --> B[Apache Core]
    B --> C{Check VirtualHost}
    C -->|Match domain.com| D[vHost Config]
    D --> E{Check Modules}
    E --> F[mod_ssl]
    E --> G[mod_rewrite]
    E --> H[mod_proxy_fcgi]
    F/G/H --> I[Content / Application]

# 2. Virtual Hosts: Mehrere Seiten pro Server

Namensbasierte Trennung.

Die Konfiguration liegt in /etc/apache2/sites-available/.

# Beispiel: Ein sicherer vHost (001-myapp.conf)


    ServerName myapp.company.com
    # Redirect permanent auf HTTPS
    Redirect permanent / https://myapp.company.com/



    ServerName myapp.company.com
    DocumentRoot /var/www/myapp/public
    
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/myapp.company.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/myapp.company.com/privkey.pem

    
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    

    ErrorLog ${APACHE_LOG_DIR}/myapp_error.log
    CustomLog ${APACHE_LOG_DIR}/myapp_access.log combined

# 3. Modul-Management

Nur laden, was man braucht.

Apache bietet hunderte Module. Jedes Modul verbraucht RAM und erhöht die Angriffsfläche.

# Wichtige Befehle

# Modul aktivieren (z.B. Rewrite für saubere URLs)
sudo a2enmod rewrite

# Modul deaktivieren (z.B. autoindex - Verhindert Directory Listing)
sudo a2dismod autoindex

# Seite aktivieren/deaktivieren
sudo a2ensite myapp.conf
sudo a2dissite 000-default.conf

# 4. SSL/TLS & Let’s Encrypt

Verschlüsselung automatisiert.

Nutzen Sie Certbot, um Zertifikate automatisch zu erstellen und zu erneuern.

sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d myapp.company.com

# Manuelles Hardening (/etc/apache2/mods-available/ssl.conf)

Erzwingen Sie moderne Ciphers:

SSLProtocol             all -SSLv3 -TLSv1 -SSLv2 -TLSv1.1
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder     off

# 5. Troubleshooting & “War Stories”

Wenn die Seite nicht lädt.

# Story 1: “Der Port-Konflikt”

Symptom: Apache startet nicht mit der Meldung (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80. Ursache: Ein anderer Dienst (oft Nginx oder Varnish) belegt bereits Port 80. Lösung: sudo ss -tulpn | grep :80 zeigt den Schuldigen.

# Story 2: “Die .htaccess Ignoranz”

Symptom: URLs in WordPress funktionieren nicht (404), obwohl die .htaccess Datei vorhanden ist. Ursache: AllowOverride None ist in der vHost-Konfiguration gesetzt (Apache ignoriert dann .htaccess). Lösung: Setzen Sie AllowOverride All für das Verzeichnis (siehe Beispiel oben) und laden Sie mod_rewrite mit a2enmod rewrite.


# 6. Monitoring & Performance

  • Status: mod_status aktivieren, um live zu sehen, welche IP welches File anfragt.
  • Logs: Nutzen Sie tail -f /var/log/apache2/error.log zur Echtzeit-Fehlersuche.
  • MPM: Prüfen Sie, ob Sie das moderne mpm_event nutzen (apache2ctl -M | grep mpm). Es ist deutlich effizienter als das alte prefork.

# 7. Fazit & Empfehlung

  • Sicherheit: Deaktivieren Sie Indexes, um neugierige Blicke in Verzeichnisse zu verhindern.
  • Struktur: Nutzen Sie für jede Domain eine eigene Konfigurationsdatei.
  • SSL: Nutzen Sie immer TLS 1.2/1.3.

# Anhang: Cheatsheet

Aufgabe Befehl
Config testen sudo apache2ctl configtest
Sanfter Reload sudo systemctl reload apache2
Liste aller vHosts apache2ctl -S
Liste aller Module apache2ctl -M
Berechtigungen fixen chown -R www-data:www-data /var/www