Infrastruktur

apache 2 reverse proxy für mailcow

Da meine bisher dedizierte mailcow-Maschine weitere Webapplikationen hosten soll, möchte ich gerne einen reverse proxy, bevorzugt Apache2, davorschalten.

Änderungen an mailcow-dockerized

Damit dies klappt, muss ich die Standard-Struktur von mailcow-dockerized moderat anpassen. Von Haus aus läuft der webserver (nginx) des Projekts ohne reverse proxy und bedient daher die beiden standard TCP-Ports 80 (unverschlüsselt) und 443 (verschlüsselt) auf allen Netzwerkschnittstellen. Dazu editiere ich die Datei mailcow.conf in der root des mailcow-dockerized Verzeichnisses wie folgt:

reverse proxy: mailcow.conf changes

Die originalen Zeilen lasse ich mal drin, denn ob die Erneuerung des Zertifikats auch nach meinen Änderungen funktioniert, wird sich noch zeigen :-).

Um die Änderungen zu übernehmen, führe ich folgende Befehle an der shell aus:

# cd /root/von/mailcow-dockerized
# . ./mailcow.conf
# ./update.sh

Ab sofort lauscht der Webserver von mailcow-dockerized nur noch auf 127.0.0.1 (localhost) und auf den in der mailcow.conf veränderten TCP-Ports. Leider ist die Groupware SOGo ab sofort aus dem Internet nicht mehr zu erreichen. Falls Du sie für ActiveSync auf Smartphones nutzt, muss Dir bewusst sein, dass alles erst wieder geht, wenn ein Dienst die Aufgaben übernimmt, die  bis vor Kurzem noch mailcow-dockerized gemacht hat.

reverse proxy: Installation des Apache2 Webservers

# apt install apache2 
# a2enmod proxy proxy_http ssl headers

Konfiguration des Apache2 Webservers

In diesem Fall gehe ich nur auf die Deaktivierung der standard Webseite (-> vhost/virtual host) ein und die Konfiguration unseres virtuellen Webservers für mailcow-dockerized. Alles Andere würde den Rahmen dieses Artikels sprengen.

Deaktivierung des standard vhosts

a2dissite 000-default.conf

Anlegen des vhosts für mailcow-dockerized

# vi example.com.conf
....

<VirtualHost *:80>
  ServerName example.com
  ServerAdmin webmaster@example.com
  RedirectPermanent / https://example.com/
</VirtualHost>
<VirtualHost *:443>
         ServerName example.com
         ServerAlias autodiscover.example.com
         ServerAlias autoconfig.example.com
         ServerAdmin webmaster@example.com
         ProxyPass / http://127.0.0.1:8080/
         ProxyPassReverse / http://127.0.0.1:8080/
         ProxyPreserveHost On
         ProxyAddHeaders On
        SSLEngine On
        SSLCertificateFile /root/of/mailcow-dockerized/data/assets/ssl/acme/cert.pem
        SSLCertificateKeyFile /root/of/mailcow-dockerized/data/assets/ssl/acme/private/privkey.pem
        SSLCertificateChainFile /root/of/mailcow-dockerized/data/assets/ssl/acme/chain.pem

    # This header does not need to be set when using http
    # RequestHeader set X-Forwarded-Proto "https"

# Intermediate configuration, tweak to your needs
SSLProtocol             all -SSLv2 -SSLv3
SSLCipherSuite          ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder     on
SSLCompression          off

SSLOptions +StrictRequire

# Add vhost name to log entries:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" vhost_combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common


    # If you plan to proxy to a HTTPS host:
    # SSLProxyEngine On
</VirtualHost>

Die für den reverse Proxy Part interessanten Zeilen beginnen mit Proxy.

In dieser Konfig bediene ich mich des Zertifikats, das von mailcow-dockerized angefordert wird. Da das Rendezvous mit dem Client bereits verschlüsselt erfolgt, habe ich es mir geschenkt, vom apache2 auch noch mit https zum nginx zu gehen.

Aktivierung des vhosts für mailcow-dockerized

# a2ensite example.com.conf

Neustart apache2

# service apache2 restart

oder

# systemctl restart apache2

Nun ist der Change abgeschlossen. Du kannst testen, ob du über die gleiche URL wie früher auf Deine Groupware zugreifen kannst. Solltest Du Probleme haben, fängt die Suche am Besten beim apache2 logfile an (-> /var/log/apache2/error.log).

 

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (10 Bewertungen, Durchschnitt: 4,30 von 5)
Loading...

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.