gelöst: nginx als reverse-proxy für MS Exchange

Anything that does not fit elsewhere
Vossi
Posts: 235
Joined: December 26th, 2008, 8:25 pm

gelöst: nginx als reverse-proxy für MS Exchange

Post by Vossi » August 1st, 2017, 1:43 pm

Hallo Gemeinde,

ich habe einen nginx als reverse-proxy aufgesetzt. Sinn ist es, die Webdienste des Exchange (OWA, ActiveSync) nicht direkt im Inet zu haben, sondern hinter dem reverse-proxy. Mit OWA klappt das auch sehr gut, aber beim ActiveSync meckert er mit folgender Fehlermeldung:

Code: Select all

2017/08/01 15:25:50 [crit] 31073#0: *160 SSL_shutdown() failed (SSL: error:140E0197:SSL routines:SSL_shutdown:shutdown while in init) while SSL handshaking, client: 89.204.xxx.xxx, server: 0.0.0.0:443
Laut Google-Suche (https://serverfault.com/questions/76475 ... -nginx-log ist hierfür die OpenSSL-Version schuld, in der neuesten Version 1.1.0-pre3-dev soll das wohl gefixt sein.

Frage: Kann man diese OpenSSL-Version mal testweise installieren? Laut openSSL ist das kein security-fix, deshalb sicher noch nicht im IpFire enthalten. Und auch für den nginx gibt es eine neuere Version. Könnte jemand der Entwickler mir bitte diese beiden mal zum testen kompilieren?

Das wäre sehr nett von euch!!

Danke

Vossi
Last edited by Vossi on August 7th, 2017, 12:22 pm, edited 1 time in total.

ummeegge
Community Developer
Community Developer
Posts: 4904
Joined: October 9th, 2010, 10:00 am

Re: nginx als reverse-proxy für MS Exchange

Post by ummeegge » August 3rd, 2017, 6:33 am

Moin Vossi,
hiernach --> https://github.com/openssl/openssl/issues/1760 sollte ein Update auf >= Nginx-1.9.12 reichen was, so denke ich, auch einem OpenSSL Update auf die 1.1.0 durchaus vorzuziehen wäre, ich denke einsimples OpenSSL Update könnte so einige andere Komponenten zerschiessen und die alte Version einfach wieder überzuinstallieren ist auch nicht mal eben gemacht da OpenSSL im Core liegt und kein Package ist.
Den Nginx könnt ich dir event. durchreichen (für welche Platform ?) wenn du dass erstmal so probieren willst, habe gerade mal testweise Nginx-1.13.2 für i586 durchlaufen lassen und baue den gerade Clean durch.

Grüsse,

UE
Image
Image

Vossi
Posts: 235
Joined: December 26th, 2008, 8:25 pm

Re: nginx als reverse-proxy für MS Exchange

Post by Vossi » August 3rd, 2017, 8:18 am

Guten Morgen Ummeegge,

i586 passt! Wenn du so lieb wärst und mir gleich noch eine Anleitung zum Einspielen des Paketes mitgibts...

Danke!

Vossi

ummeegge
Community Developer
Community Developer
Posts: 4904
Joined: October 9th, 2010, 10:00 am

Re: nginx als reverse-proxy für MS Exchange

Post by ummeegge » August 4th, 2017, 6:08 am

Moin Vossi,
OK ist durchgelaufen, habe auch einen Kurztest gemacht und das sieht erstmal ganz gut aus.

Installation:

Code: Select all

cd /opt/pakfire/tmp &&
curl -O http://people.ipfire.org/~ummeegge/Nginx/nginx-1.13.3-32bit-6.ipfire &&
echo &&
sha256sum nginx-1.13.3-32bit-6.ipfire &&
echo
das sollte dann folgenden Hash ergeben:

Code: Select all

e87502d244194847a5b7f1d7b8fcbe8bf0c419f619e891e2f2267c416864d3ea
wenn korrekt dann

Code: Select all

tar xvf nginx-1.13.3-32bit-6.ipfire &&
./update.sh &&
/etc/init.d/nginx restart &&
ps aux | grep -v grep | grep nginx &&
echo &&
nginx -V &&
echo
die Codeblöcke kannst du dir gerade so rauskopieren und ausführen, das sollte es erstmal gewesen sein.

Grüsse,

UE
Image
Image

Vossi
Posts: 235
Joined: December 26th, 2008, 8:25 pm

Re: nginx als reverse-proxy für MS Exchange

Post by Vossi » August 4th, 2017, 9:39 am

Vielen Dank, Installation ist durchgelaufen ohne Fehler!

Ich melde mich, wenn ich getestet hab ;-)

Vossi
Posts: 235
Joined: December 26th, 2008, 8:25 pm

Re: nginx als reverse-proxy für MS Exchange

Post by Vossi » August 7th, 2017, 7:51 am

Moin Ummeegge,

es funzt! Der SSL-Fehler tritt nicht mehr auf. Der Zugriff auf den Exchange klappt so, wie er soll.

Beim Kompilieren hast du noch einen kleinen Fehler in der config drinn:

Code: Select all

configure arguments: --prefix=/usr/share/nginx/ 
Der letzte Slash ist zu viel. Damit findet der nginx sein www-root-Verzeichnis nicht. Stört mich jetzt nicht, weil ich ihn eh nur als Reverse-Proxy und nicht als Webserver einsetze, aber wenn du das in den stable-tree überführst, sollte man es vorher anpassen.

Ansonsten nochmal vielen Dank für die schnelle Hilfe und ich werde mich mit einem Wiki-Eintrag revanchieren ;)

Vossi

ummeegge
Community Developer
Community Developer
Posts: 4904
Joined: October 9th, 2010, 10:00 am

Re: nginx als reverse-proxy für MS Exchange

Post by ummeegge » August 7th, 2017, 8:15 am

Moin Vossi,
freut mich das es funktioniert.
Vossi wrote:
August 7th, 2017, 7:51 am
Beim Kompilieren hast du noch einen kleinen Fehler in der config drinn:

Code: Select all

configure arguments: --prefix=/usr/share/nginx/ 
Der letzte Slash ist zu viel. Damit findet der nginx sein www-root-Verzeichnis nicht. Stört mich jetzt nicht, weil ich ihn eh nur als Reverse-Proxy und nicht als Webserver einsetze, aber wenn du das in den stable-tree überführst, sollte man es vorher anpassen.
Ist gefixt, lass ihn gerade durchlaufen und lade erstmal die neue Version dann heut noch in meinen private. Gibt´s vielleicht noch einen nice to have ?
Vossi wrote:
August 7th, 2017, 7:51 am
Ansonsten nochmal vielen Dank für die schnelle Hilfe und ich werde mich mit einem Wiki-Eintrag revanchieren ;)
Jo gerne, Wiki Erweiterung wäre toll :) .

Grüssle,

UE
Image
Image

Vossi
Posts: 235
Joined: December 26th, 2008, 8:25 pm

Re: nginx als reverse-proxy für MS Exchange

Post by Vossi » August 7th, 2017, 9:15 am

Wiki-Erweiterung ist fertig!

Ach ja, dass bei der Installation meine nginx.conf überschrieben wurde, war nicht so nett :o
Ist sicher der unkonventionellen Installation ohne pakfire geschuldet. Aber wofür sonst gibts backups... :D

Vossi

ummeegge
Community Developer
Community Developer
Posts: 4904
Joined: October 9th, 2010, 10:00 am

Re: nginx als reverse-proxy für MS Exchange

Post by ummeegge » August 7th, 2017, 10:19 am

Vossi wrote:
August 7th, 2017, 9:15 am
Wiki-Erweiterung ist fertig!
Nett von dir :) .
Vossi wrote:
August 7th, 2017, 9:15 am
Ach ja, dass bei der Installation meine nginx.conf überschrieben wurde, war nicht so nett :o Ist sicher der unkonventionellen Installation ohne pakfire geschuldet
Ja genau das liegt daran das Pakfire das nicht macht, hab ich auch nicht dran gedacht, sollte aber regulär kein Problem sein.
Vossi wrote:
August 7th, 2017, 7:51 am

Code: Select all

configure arguments: --prefix=/usr/share/nginx/ 
Ist nun gefixt und auch hochgeladen --> http://people.ipfire.org/~ummeegge/Nginx/ .

Grüsse,

UE
Image
Image

Vossi
Posts: 235
Joined: December 26th, 2008, 8:25 pm

Re: nginx als reverse-proxy für MS Exchange

Post by Vossi » August 7th, 2017, 12:21 pm

Hab's eingespielt und es funzt!

Danke!

qiller
Posts: 70
Joined: July 27th, 2014, 3:21 pm

Re: gelöst: nginx als reverse-proxy für MS Exchange

Post by qiller » November 11th, 2017, 5:42 pm

Auch von mir ein dickes Dankeschön. Hab den neuen nginx ebenfalls als Reverse-Proxy vor einem Exchange-Server laufen und konnte bisher keinerlei Probleme feststellen. Hab noch ein Letsencrypt-Zertifikat per "acme.sh" eingebunden, damit man nicht irgendwelche Zertifikatsfehlermeldungen sieht. Mir fehlte nur das Logrotate, was ich kurzerhand nachgeholt habe:

Einfach eine Datei z.B. "nginx" unter /etc/logrotate.d/ mit folgendem Inhalt erstellen:

Code: Select all

/var/log/nginx/*.log {
	daily
	copytruncate
	missingok
	notifempty
	compress
	delaycompress
}
Jetzt wollt ich als nächsten Schritt "modsecurity" mit den OWASP-CRS als Web Application Firewall einsetzen. Bin mir noch nicht 100% sicher, ob modsecurity besser auf dem IIS des Exchange-Servers oder auf dem nginx-Reverse-Proxy zum Einsatz kommen sollte. Ich tendiere eher zu letzterem, zumal ich mit modsecurity und Apache unter Ubuntu-Server schon etwas Erfahrung sammeln konnte. Oder ist der IIS die bessere Wahl?

Nun ist der hier verlinkte nginx leider ohne modsecurity-Support. Wäre es möglich diesen nochmal mit dem modsecurity-modul hochzuladen? Vielen Dank nochmal für die Mühen.

ummeegge
Community Developer
Community Developer
Posts: 4904
Joined: October 9th, 2010, 10:00 am

Re: gelöst: nginx als reverse-proxy für MS Exchange

Post by ummeegge » November 12th, 2017, 7:19 am

Hallo quiller,
was hast du denn für ein System ? 32 oder 64 Bit ?

Grüsse,

UE
Image
Image

qiller
Posts: 70
Joined: July 27th, 2014, 3:21 pm

Re: gelöst: nginx als reverse-proxy für MS Exchange

Post by qiller » November 12th, 2017, 12:01 pm

Hey ummeegge,

ist 32bit. Gleich noch ne Frage hinterher: Ihr bietet ja jetzt standardmäßig die 64bit-Version zum Download an (was ich gut finde). Sind die ganzen Addons denn auch für 64bit lauffähig? Ich denke da so an wio, htop, apcupsd, guardian, tor aber auch der nginx natürlich. Habe in der Übersicht keine Information dazu gefunden. Danke dir schonmal im Voraus!

gruß oli

ummeegge
Community Developer
Community Developer
Posts: 4904
Joined: October 9th, 2010, 10:00 am

Re: gelöst: nginx als reverse-proxy für MS Exchange

Post by ummeegge » November 13th, 2017, 10:49 am

Hallo oli,
qiller wrote:
November 12th, 2017, 12:01 pm
ist 32bit.
OK, dauert aber noch einwenig bis er durchgebaut hat. Hab auch mal die ersten Tests gemacht allerdings hatte ich da Core 113 laufen und eine ältere Version von APR weswegen es eine Fehlermeldung auf der produktiven Core 116er Maschine gab

Code: Select all

-> service nginx restart
Stopping nginx Server...                                                                             [  OK  ]
Starting nginx Server...
nginx: [warn] ModSecurity: Loaded APR do not match with compiled!                                    [  OK  ]
hab mal alle Änderungen gepullt und bau gerade neu. Ein aktuelles Core würdest du dann brauchen...

Mal schnell zur Vorgehensweise:
- Habe das derzeit aktuelle nginx-1.13.6 und ModSecurity-2.9.2 genommen.
- libyajl ist eine Abhängigkeit und kann mit einem

Code: Select all

pakfire install libyajl
nachinstalliert werden.
- modsecurity.conf und unicode.mapping sind unter /etc/nginx zu finden.
- Ein nginx unter logrotate.d wird mitinstalliert, ist ein wenig anders als deine, wenn nicht gewünscht dann bitte vorher sichern und wieder nachinstallieren.
- Kurzer Test mit einer Änderung (Aktivierung von ModSec) in der nginx.conf

Code: Select all

--- /etc/nginx/conf.bck/nginx.conf	2017-11-12 13:40:44.004686371 +0100
+++ /etc/nginx/nginx.conf	2017-11-12 13:41:55.924686693 +0100
@@ -41,6 +41,8 @@
         #access_log  logs/host.access.log  main;
 
         location / {
+	    ModSecurityEnabled on;
+	    ModSecurityConfig modsecurity.conf;
             root   html;
             index  index.html index.htm;
         }

sieht erstmal ganz gut aus:

Code: Select all

-> nginx -V
nginx version: nginx/1.13.6
built with OpenSSL 1.0.2l  25 May 2017 (running with OpenSSL 1.0.2m  2 Nov 2017)
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --sbin-path=/usr/sbin/nginx --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --http-client-body-temp-path=/var/spool/nginx/client_body_temp --http-proxy-temp-path=/var/spool/nginx/proxy_temp --http-fastcgi-temp-path=/var/spool/nginx/fastcgi_temp --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --user=nobody --group=nobody --with-imap --with-imap_ssl_module --with-http_ssl_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module --with-http_dav_module --with-http_sub_module --with-pcre --add-module=../ModSecurity-2.9.2/nginx/modsecurity
bzw.

Code: Select all

-> nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
bzw.

Code: Select all

-> cat /var/log/nginx/error.log 
2017/11/12 13:37:31 [notice] 6459#0: ModSecurity for nginx (STABLE)/2.9.2 (http://www.modsecurity.org/) configured.
2017/11/12 13:37:31 [notice] 6459#0: ModSecurity: APR compiled version="1.6.2"; loaded version="1.6.2"
2017/11/12 13:37:31 [notice] 6459#0: ModSecurity: PCRE compiled version="8.41 "; loaded version="8.41 2017-07-05"
2017/11/12 13:37:31 [notice] 6459#0: ModSecurity: LUA compiled version="Lua 5.3"
2017/11/12 13:37:31 [notice] 6459#0: ModSecurity: YAJL compiled version="2.1.0"
2017/11/12 13:37:31 [notice] 6459#0: ModSecurity: LIBXML compiled version="2.9.4"
2017/11/12 13:37:31 [notice] 6459#0: ModSecurity: Status engine is currently disabled, enable it by set SecStatusEngine to On.
2017/11/12 13:42:11 [notice] 6665#0: ModSecurity for nginx (STABLE)/2.9.2 (http://www.modsecurity.org/) configured.
2017/11/12 13:42:11 [notice] 6665#0: ModSecurity: APR compiled version="1.6.2"; loaded version="1.6.2"
2017/11/12 13:42:11 [notice] 6665#0: ModSecurity: PCRE compiled version="8.41 "; loaded version="8.41 2017-07-05"
2017/11/12 13:42:11 [notice] 6665#0: ModSecurity: LUA compiled version="Lua 5.3"
2017/11/12 13:42:11 [notice] 6665#0: ModSecurity: YAJL compiled version="2.1.0"
2017/11/12 13:42:11 [notice] 6665#0: ModSecurity: LIBXML compiled version="2.9.4"
2017/11/12 13:42:11 [notice] 6665#0: ModSecurity: StatusEngine call: "2.9.2,nginx,1.6.2/1.6.2,8.41/8.41 2017-07-05,Lua 5.3,2.9.4,c0"
2017/11/12 13:42:11 [notice] 6665#0: ModSecurity: StatusEngine call successfully sent. For more information visit: http://status.modsecurity.org/
- Die OWASP Core Rule Sets sind nun nicht dabei und müssten von dir integriert werden, geht ja hier --> https://github.com/SpiderLabs/owasp-modsecurity-crs zur Aktualisierung z.b. mit einem cronjob...
- Habe die un- install.sh vom Package auch angepasst da sie nicht über Pakfire integriert wird (deinstallieren geht dann z.b. trotzdem).

Wenn du die buildfiles haben möchtest, sag bescheid.
qiller wrote:
November 12th, 2017, 12:01 pm
Gleich noch ne Frage hinterher: Ihr bietet ja jetzt standardmäßig die 64bit-Version zum Download an (was ich gut finde). Sind die ganzen Addons denn auch für 64bit lauffähig? Ich denke da so an wio, htop, apcupsd, guardian, tor aber auch der nginx natürlich. Habe in der Übersicht keine Information dazu gefunden.
Ja klar, alle offiziell angebotenen Addons sind auf 32 Bit, 64 Bit und auch auf ARM lauffähig --> https://mirror.lightningwirelabs.com/pu ... /pakfire2/ . Hab hier aber nur eine 32 und 64 Bit Maschine zum bauen, ARM kann ich leider nicht anbieten.

Ich sag dir hier bescheid wenn fertig und hochgeladen.

Grüsse,

UE
Image
Image

qiller
Posts: 70
Joined: July 27th, 2014, 3:21 pm

Re: gelöst: nginx als reverse-proxy für MS Exchange

Post by qiller » November 13th, 2017, 11:38 am

Wow, hoffe dat läuft :>. Die OWASP-CRS haben wohl auch einige Voraussetzungen:
CRS is designed to be used with ModSecurity (although many other
projects also use the provided rules). CRS version 3.x is designed for
ModSecurity 2.8 or above. CRS version 3.x makes use of libinjection
and libXML2. Failure to provide these prerequisites may result in
serious false negatives and CRS version 3.x should NOT be run without
these. Note, however, that libinjection is bundled with ModSecurity
since version 2.8. Additionally, if you are downloading from the
GitHub repo you will need to install 'git' on your system.
Das util/upgrade.py Script (für das regelmäßige ruleset-Update) benötigt auch python. Hab aber gesehen, dass man auch python über die Pak-Verwaltung nachinstallieren kann.

Ich finde auch, dass in den IPFire eine Web Application Firewall gehört. Und nginx+modesecurity+CRS bietet sich da einfach an, vor allem da sich der nginx nicht mit dem httpd (Apache?) für die IPFire-Weboberfläche in die Quere kommt. Ich muss aber auch zugeben, dass man sich mit dem Ruleset, Auditlog und z.B. der ID-Exclusion beschäftigen muss, sonst ist der Webserver nicht mehr erreichbar oder nur noch teilweise funktional (Webdav läuft z.B. nicht Out-of-the-Box mit den OWASP-CRS - Nextcloud lässt grüßen). Ist leider keine Fire-and-Forget-Lösung für mehr Sicherheit, möchte es aber auch nicht mehr missen.

PS: Aktuelles Core läuft natürlich :>

Post Reply