34 Apache als Reverse Proxy mit SSL/TLS-Interception und Lastverteilung

34.1 Einrichtung von Apache als Reverse Proxy

34.1.1 Installation des Apache-HTTP-Servers

Debian-basierte Systeme (z.B. Ubuntu):

sudo apt-get update
sudo apt-get install apache2

Red Hat-basierte Systeme (z.B. CentOS):

sudo yum update
sudo yum install httpd

34.1.2 Aktivieren der notwendigen Module

Debian-basierte Systeme:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod ssl
sudo a2enmod headers
sudo systemctl restart apache2

Red Hat-basierte Systeme: Bearbeiten der Apache-Konfigurationsdatei (httpd.conf), um die Module zu laden:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule headers_module modules/mod_headers.so

Danach Apache-Dienst neu starten:

sudo systemctl restart httpd

34.2 Konfiguration des Reverse Proxy

Bearbeiten der Datei /etc/apache2/sites-available/000-default.conf (Debian) oder /etc/httpd/conf/httpd.conf (Red Hat):

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    # Reverse Proxy Konfiguration
    ProxyPreserveHost On
    ProxyPass / http://backend_server/
    ProxyPassReverse / http://backend_server/

    <Proxy *>
        Require all granted
    </Proxy>

    # Logging
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

34.3 Reverse Proxy mit SSL/TLS-Termination

34.3.1 SSL-Zertifikat erstellen und installieren

Beispiel für ein selbstsigniertes Zertifikat:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

34.3.2 Erstellen und Bearbeiten der SSL-Konfigurationsdatei

Bearbeiten der Datei /etc/apache2/sites-available/default-ssl.conf (Debian) oder /etc/httpd/conf.d/ssl.conf (Red Hat):

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        # Reverse Proxy Konfiguration
        ProxyPreserveHost On
        ProxyPass / http://backend_server/
        ProxyPassReverse / http://backend_server/

        <Proxy *>
            Require all granted
        </Proxy>

        # SSL Konfiguration
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
        SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key

        # Sicherheitsheader
        Header always set X-Content-Type-Options "nosniff"
        Header always set X-Frame-Options "SAMEORIGIN"
        Header always set X-XSS-Protection "1; mode=block"

        # Logging
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
</IfModule>

34.3.3 Aktivieren der SSL-Site und Neustarten von Apache

sudo a2ensite default-ssl
sudo systemctl restart apache2

34.4 Lastverteilung und Load Balancing

Bearbeiten der Datei /etc/apache2/sites-available/000-default.conf:

<Proxy "balancer://mycluster">
    BalancerMember "http://backend1" loadfactor=1
    BalancerMember "http://backend2" loadfactor=2

    # Load Balancer Management
    ProxySet lbmethod=byrequests
</Proxy>

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    # Reverse Proxy und Load Balancing Konfiguration
    ProxyPreserveHost On
    ProxyPass "/balancer" "balancer://mycluster"
    ProxyPassReverse "/balancer" "balancer://mycluster"

    <Proxy *>
        Require all granted
    </Proxy>

    # Logging
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

34.5 Sicherheitsaspekte und Hardening

34.5.1 SSL/TLS-Termination und Sicherheitsrichtlinien

  1. Aktualisieren und Verwenden von starken SSL/TLS-Zertifikaten: Stellen Sie sicher, dass Ihre SSL/TLS-Zertifikate aktuell und stark genug sind.

  2. Konfigurieren von Sicherheitsheadern: Fügen Sie Sicherheitsheader hinzu, um die Sicherheit Ihrer Webanwendungen zu erhöhen:

    Header always set X-Content-Type-Options "nosniff"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set X-XSS-Protection "1; mode=block"
  3. Beschränken des Zugriffs: Verwenden Sie Zugriffskontrolllisten (ACLs) und Firewall-Regeln, um den Zugriff auf Ihre Proxy-Server zu beschränken.

34.5.2 Beispielkonfiguration für Sicherheitsrichtlinien:

Bearbeiten der Datei /etc/apache2/sites-available/000-default.conf:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    # Reverse Proxy Konfiguration
    ProxyPreserveHost On
    ProxyPass / http://backend_server/
    ProxyPassReverse / http://backend_server/

    <Proxy *>
        Require ip 192.168.1.0/24
    </Proxy>

    # Sicherheitsheader
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set X-XSS-Protection "1; mode=block"

    # Logging
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

34.6 TLS-Interception (SSL-Bumping)

34.6.1 Erstellung eines selbstsignierten Zertifikats

  1. Erstellen einer eigenen Zertifizierungsstelle (CA):

    openssl genpkey -algorithm RSA -out /etc/apache2/ssl/myCA.key -aes256
    openssl req -new -x509 -days 3650 -key /etc/apache2/ssl/myCA.key -out /etc/apache2/ssl/myCA.pem
  2. Erstellen eines privaten Schlüssels und eines Zertifikats für Apache:

    openssl genpkey -algorithm RSA -out /etc/apache2/ssl/apache.key
    openssl req -new -key /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.csr
    openssl x509 -req -days 3650 -in /etc/apache2/ssl/apache.csr -CA /etc/apache2/ssl/myCA.pem -CAkey /etc/apache2/ssl/myCA.key -CAcreateserial -out /etc/apache2/ssl/apache.crt

34.6.2 Konfiguration von Apache für TLS-Interception

  1. Aktivieren der notwendigen Module:

    sudo a2enmod ssl
    sudo a2enmod proxy
    sudo a2enmod proxy_http
    sudo a2enmod proxy_connect
    sudo systemctl restart apache2
  2. Bearbeiten der Apache-Konfigurationsdatei:

    sudo nano /etc/apache2/sites-available/000-default.conf
  3. Hinzufügen der folgenden Konfiguration für TLS-Interception:

    <VirtualHost *:443>
        SSLEngine on
        SSLCertificateFile "/etc/apache2/ssl/apache.crt"
        SSLCertificateKeyFile "/etc/apache2/ssl/apache.key"
        SSLCACertificateFile "/etc/apache2/ssl/myCA.pem"
    
        # Proxy-Konfiguration
        ProxyRequests On
        ProxyPreserveHost On
    
        <Proxy *>
            Require all granted
        </Proxy>
    
        # SSL/TLS-Interception
        SSLProxyEngine On
        SSLProxyVerify none
        SSLProxyCheckPeerCN off
        SSLProxyCheckPeerName off
    
        ProxyPass / http://backendserver/
        ProxyPassReverse / http://backendserver/
    </VirtualHost>
  4. Erstellen einer SSL-Ports-Konfigurationsdatei:

    sudo nano /etc/apache2/ports.conf

    Hinzufügen der folgenden Zeilen, um Apache auf Port 443 lauschen zu lassen:

    Listen 443
    <IfModule ssl_module>
        Listen 443
    </IfModule>

34.7 Neustarten des Apache-Dienstes

sudo systemctl restart apache2

34.8 Installieren des CA-Zertifikats auf den Clients

  1. Kopieren des CA-Zertifikats auf die Clients:

vertrauenswürdige CA.

  1. Installieren des CA-Zertifikats:

34.9 Testen der Konfiguration

34.9.1 Verwenden von curl zum Testen des Proxies

curl -x http://<Apache-IP>:80 http://example.com

34.9.2 Überprüfen der Log-Dateien

Debian-basierte Systeme:

sudo tail -f /var/log/apache2/access.log

Red Hat-basierte Systeme:

sudo tail -f /var/log/httpd/access_log

34.10 Zusammenfassung

Mit diesen Schritten können Sie Apache als Reverse Proxy einrichten. Apache bietet eine flexible und leistungsfähige Möglichkeit zur Verwaltung eingehender Anfragen und zur Weiterleitung an interne Server. Durch die Konfiguration von SSL/TLS und Load Balancing sowie TLS-Interception können Sie die Sicherheit und Leistung Ihrer Webanwendungen weiter erhöhen.