reverse proxy mit apache2 für groupware
Zitat von Der Texta am 23. April 2018, 10:12 UhrDa 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.shAb 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 headersKonfiguration 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.confAnlegen 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>
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.confNeustart apache2
# service apache2 restart oder # systemctl restart apache2Nun 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).
[ratings]
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>
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).
[ratings]