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:
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).