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

Anything that does not fit elsewhere
ummeegge
Community Developer
Community Developer
Posts: 4993
Joined: October 9th, 2010, 10:00 am

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

Post by ummeegge » November 13th, 2017, 5:28 pm

Ja bin auch mal gespannt ob/wie es läuft, können ja mal schauen ob wir da ein nettes Package gebaut bekommen.
qiller wrote:
November 13th, 2017, 11:38 am
Die OWASP-CRS haben wohl auch einige Voraussetzungen:
Ich denke das der Fire das meiste an Board hat.
qiller wrote:
November 13th, 2017, 11:38 am
Das util/upgrade.py Script (für das regelmäßige ruleset-Update) benötigt auch python.
Python2 ist standartmässig im Fire verbaut und muss nicht nachgeladen werden. Python3 gibt es mittlerweile auch in Pakfire aber hiernach --> https://github.com/SpiderLabs/owasp-mod ... ade.py#L22 sollte Python2 auch gehen.
qiller wrote:
November 13th, 2017, 11:38 am
Note, however, that libinjection is bundled with ModSecurity since version 2.8.
Sollte auch kein Problem sein (siehe u.a. error_log messages) da wir 2.9.2 verwenden.
qiller wrote:
November 13th, 2017, 11:38 am
Nextcloud lässt grüßen
Nutz ich hier auf einem internen Server u.a. für´s OpenVPN und bin damit zufrieden, hat auch so seine Vorteile Owncloud gegenüber.

Meine 32bit Maschine lahmt leider gerade ganz schön, kann schon morgen werden bis das Paket fertig ist, muss ihm mal wieder eine neue Platte spendieren wie es aussieht ::) .

Grüsse,

UE
Image
Image

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

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

Post by ummeegge » November 15th, 2017, 9:31 am

Hallo oli,
hat dann leider doch länger gedauert (bin froh das die Maschine noch fertig geworden ist). Du findest hier --> https://people.ipfire.org/~ummeegge/Ngi ... ity-2.9.2/ das Paket incl. SHA256 Summe. Installation wie oben beschrieben. Hab einen Kurztest gemacht und das sieht bis jetzt gut aus einziges Manko bis jetzt, irgendwie ist die logrotate config leer ??? Muss ich nochmal schauen will das aber jetzt unter den Umständen nicht nochmal bauen (dauert dann wieder). Als Ergänzung zu deiner Idee hier mal meine:

Code: Select all

/var/log/nginx/*.log {
    daily
    rotate 5
    compress
    delaycompress
    missingok
    notifempty
    create 0640 nobody nobody
    sharedscripts
    postrotate
        /etc/init.d/nginx reload >/dev/null 2>&1 || :
    endscript
}

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 16th, 2017, 9:38 pm

/etc/logrotate.de/nginx:

Code: Select all

/var/log/tor/*.log {
du hast aus Versehen den Log-Pfad von tor erwischt ;) . Bin gerade am basteln/testen, bisher läuft alles wie gewünscht :>. Melde mich nochmal für ne detailiertere Rückmeldung.

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 17th, 2017, 11:50 pm

Läuft leider noch nicht so, die Worker-Prozesse beenden sich immer:

/var/log/nginx/error.log:

Code: Select all

2017/11/18 00:09:17 [alert] 21104#0: worker process 21240 exited on signal 11
2017/11/18 00:09:17 [alert] 21241#0: *64 ignoring stale global SSL error (SSL: error:26078067:engine routines:ENGINE_LIST_ADD:conflicting engine id error:2606906E:engine routines:ENGINE_add:internal list error) while SSL handshaking, client: <Client IP>, server: 0.0.0.0:443
2017/11/18 00:09:17 [error] 21241#0: [client <Client IP>] ModSecurity: JSON support was not enabled [hostname ""] [uri "/owa/service.svc"] [unique_id "Ar@cAcAD7cMOUcAyAcncAcA4"]
2017/11/18 00:09:17 [error] 21241#0: [client <Client IP>] ModSecurity: Warning. Match of "eq 0" against "REQBODY_ERROR" required. [file "/etc/nginx/modsecurity.conf"] [line "60"] [id "200002"] [msg "Failed to parse request body."] [data ""] [severity "CRITICAL"] [hostname ""] [uri "/owa/service.svc"] [unique_id "Ar@cAcAD7cMOUcAyAcncAcA4"]
2017/11/18 00:09:17 [error] 21241#0: [client <Client IP>] ModSecurity: JSON support was not enabled [hostname ""] [uri "/owa/service.svc"] [unique_id "AcAvzcAcXrAwAcXcAcAcAccc"]
2017/11/18 00:09:17 [error] 21241#0: [client <Client IP>] ModSecurity: Warning. Match of "eq 0" against "REQBODY_ERROR" required. [file "/etc/nginx/modsecurity.conf"] [line "60"] [id "200002"] [msg "Failed to parse request body."] [data ""] [severity "CRITICAL"] [hostname ""] [uri "/owa/service.svc"] [unique_id "AcAvzcAcXrAwAcXcAcAcAccc"]
2017/11/18 00:09:47 [alert] 21104#0: worker process 21241 exited on signal 11
Hab die OWASP-CRS erstmal noch nicht installiert, das ist hier mit den Standard-Rules. Die Audit-Log musste ich außerdem in der modsecurity.conf auf "Concurrent" stellen:

Code: Select all

#SecAuditLogType Serial
SecAuditLogType Concurrent
#SecAuditLog /var/log/nginx/modsec_audit.log

# Specify the path for concurrent audit logging.
SecAuditLogStorageDir /var/log/modsecurity/audit/
Mit dem Serial-Mode gibts dann noch folgende Fehler in der error.log:

Code: Select all

2017/11/17 23:41:55 [error] 19063#0: [client <Client IP>] ModSecurity: Audit log: Failed to lock global mutex: Permission denied [hostname ""] [uri "/owa/sessiondata.ashx"] [unique_id "AcAcAcAPAcocAcA9AcAcAcAc"]
2017/11/17 23:41:55 [error] 19063#0: [client <Client IP>] ModSecurity: Audit log: Failed to unlock global mutex: Permission denied [hostname ""] [uri "/owa/sessiondata.ashx"] [unique_id "AcAcAcAPAcocAcA9AcAcAcAc"]
2017/11/17 23:41:55 [error] 19062#0: [client <Client IP>] ModSecurity: Audit log: Failed to lock global mutex: Permission denied [hostname ""] [uri "/owa/plt1.ashx"] [unique_id "AcAc6cAcAckc0cAcAQmcAcFc"]
2017/11/17 23:41:55 [error] 19062#0: [client <Client IP>] ModSecurity: Audit log: Failed to unlock global mutex: Permission denied [hostname ""] [uri "/owa/plt1.ashx"] [unique_id "AcAc6cAcAckc0cAcAQmcAcFc"]
2017/11/17 23:41:55 [alert] 19061#0: worker process 19063 exited on signal 11
Hab jetzt mehrere Zugriffsrechte durchprobiert, selbst mit 777/ chown nobody:nobody auf Ordner/aufitfile kommen die Fehler. Im Concurrent-Mode bleibt das "audit"-Verzeichnis allerdings leer, also auch da haut irgendwas nicht. Im Serial-Mode funktioniert das Logging in die Auditfile zumindest.

Auch der "ignoring stale global SSL error" taucht mehrmals auf, glaube aber dass das nur ein Folgefehler durch das Abschießen des Workers ist.

Wenn ich frisch gestartet habe, sieht noch alles schick aus:

Code: Select all

[root@ipfire ~]# ps aux | grep nginx
root     21104  0.0  0.0  62324  1568 ?        Ss   00:05   0:00 nginx: master process /usr/sbin/nginx
nobody   21105  0.0  0.0  62568  2268 ?        S    00:05   0:00 nginx: worker process
nobody   21106  0.3  0.0  62852  3980 ?        S    00:05   0:00 nginx: worker process
root     21108  0.0  0.0   4244   756 pts/0    S+   00:05   0:00 grep nginx
Sowie ich aber z.B. Owa aufrufe, verabschieden sich dann der/die Worker und die obigen Einträge tauchen oben in den Logs auf:

Code: Select all

[root@ipfire ~]# ps aux | grep nginx
root     21104  0.0  0.0  62324  1716 ?        Ds   00:05   0:00 nginx: master process /usr/sbin/nginx
nobody   21408  0.0  0.0      0     0 ?        Z    00:10   0:00 [nginx] <defunct>
root     21450  0.0  0.0  62324  1076 ?        R    00:11   0:00 nginx: master process /usr/sbin/nginx
root     21452  0.0  0.0   4240   756 pts/0    S+   00:11   0:00 grep nginx
Interessant ist außerdem, dass die Worker irgendwie als "root" neugestartet werden? Sieht irgendwie alles strange aus. Ich werd wohl erstmal einen ganz einfachen Standard-vhost mit modsecurity testen müssen, um irgendwelche Probleme mit dem Proxying auszuschließen. Komm ich aber erst nächste Woche zu.

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

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

Post by ummeegge » November 18th, 2017, 8:18 am

Mmhh,
die "Installation Details" im nginx LFS sehen so aus:

Code: Select all

###############################################################################
# Installation Details
###############################################################################

$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
	@$(PREBUILD)
	# Build ModSecurity
	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/ModSecurity-2.9.2.tar.gz
	cd $(DIR_SRC)/ModSecurity-2.9.2 && ./autogen.sh
	cd $(DIR_SRC)/ModSecurity-2.9.2 && ./configure --enable-standalone-module --disable-mlogc

	cd $(DIR_SRC)/ModSecurity-2.9.2 && make $(MAKETUNING)

	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
	cd $(DIR_APP) && ./configure \
		--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

	cd $(DIR_APP) && make $(MAKETUNING)
	cd $(DIR_APP) && make install

	mkdir -p /var/log/nginx /var/spool/nginx
	cp /usr/src/config/nginx/nginx /etc/init.d/
	# Install logrotate configuration
	cd $(DIR_CONF)/nginx && install -v -m644 nginx.rotate /etc/logrotate.d/nginx

	# Backup
	install -v -m 644 $(DIR_SRC)/config/backup/includes/nginx \
		 /var/ipfire/backup/addons/includes/nginx

	# Add ModSecurity configuration and unicode.map
	cd $(DIR_SRC)/ModSecurity-2.9.2 && cp -v modsecurity.conf-recommended /etc/nginx/modsecurity.conf
	cd $(DIR_SRC)/ModSecurity-2.9.2 && cp -v unicode.mapping /etc/nginx
	
	@rm -rf $(DIR_APP)
	@rm -rf $(DIR_SRC)/ModSecurity-2.9.2

	@$(POSTBUILD)
der Fehler z.b.:

Code: Select all

2017/11/18 00:09:17 [error] 21241#0: [client <Client IP>] ModSecurity: JSON support was not enabled [hostname ""] [uri "/owa/service.svc"] [unique_id "Ar@cAcAD7cMOUcAyAcncAcA4"]
ist einwenig seltsam, im LFS ist kein json support aktiviert bzw. ist Yajl auch nicht mitkompiliert. Hiernach --> https://github.com/SpiderLabs/owasp-mod ... issues/659 und was ich sonst so zum Bauen gefunden habe ist Yajl/Json bei der 2er Version von ModSec aber auch optional...

Es gibt ja auch den neuen Modsec-Nginx v3 connector --> https://github.com/SpiderLabs/ModSecurity-nginx , hier müsste Yajl auch seperat gebaut werden was ich bis jetzt gesehen hab, da gibt´s aber auch noch kein official release von daher hab ich mal die Finger davon gelassen.

Zu der Meldung
qiller wrote:
November 17th, 2017, 11:50 pm
Audit log: Failed to lock global mutex: Permission denied
gibt´s mehr im Netz, sowas wie das hier --> https://elkano.org/blog/modsecurity-aud ... on-denied/ etwas angepasst auf deine Umgebung geht nicht ? Eine compiletime option für user/group hab ich bei ModSec nicht gefunden...
qiller wrote:
November 17th, 2017, 11:50 pm
Ich werd wohl erstmal einen ganz einfachen Standard-vhost mit modsecurity testen müssen, um irgendwelche Probleme mit dem Proxying auszuschließen. Komm ich aber erst nächste Woche zu.
Ist wohl das beste erstmal Step-by-Step durchzugehen, beim Rest muss ich auch erstmal passen. Wenn du Ideen hast zum bauen sag bescheid hab auch gerade einiges zutun kümmer mich aber drum wenn Zeit da ist.

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 29th, 2017, 7:21 pm

Nur kurze Rückmeldung über meine Erkenntnisse bisher: Die Probleme bestehen auch mit einem einfachen nginx-vhost. Und zwar gibt es wohl schon länger ein Problem von modsecurity mit multiuser-Webservern wie apache2 oder nginx, aber die modsecurity-Macher bauen schon von Dritt-Usern erstellte Patches (die auch helfen sollen) einfach nicht ein:

Thread 1: https://github.com/SpiderLabs/ModSecurity/issues/454
Thread 2: https://github.com/SpiderLabs/ModSecurity/issues/712
Patch: https://gist.github.com/ju5t/0d61ee80b23f0987d65e

Damit könnte man dann wohl die Default "Serial-Log" ohne Fehlermeldung ("ModSecurity: Audit log: Failed to lock global mutex: Permission denied") weiternutzen. Ich nehme aber mal an, dass die modsecurity-Macher sich auf den Nachfolger v3 konzentriert haben, wo ja auch das Log-Format auf JSON umgestellt werden soll (daher braucht man da wohl auch den Yajl-Support).

Für die älteren modsecurity-Versionen <v3 gibt es für die Auditlog im Prinzip einen "Workaround": Concurrent Logs wo dann für jede Anfrage eine neue Datei erstellt wird. In der modsecurity.conf trägt man dann ein:

Code: Select all

SecAuditLogDirMode 1733
SecAuditLogFileMode 0550
SecAuditLogType Concurrent
SecAuditLogStorageDir /var/log/nginx/modsec_audit/
Das dumme ist nur, dass das Verzeichnis leer bleibt. In der Debuglog (Debuglevel 9) steht nach einem Aufruf der Testpattern (http://ipfire.local/?test=mod_security_test) im Browser folgendes:

Code: Select all

[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Initialising transaction (txid AcWcjcA2AnAcAcAcAc1cActc).
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][5] Adding request argument (QUERY_STRING): name "test", value "mod_security_test"
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Transaction context created (dcfg 9fee320).
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Starting phase REQUEST_HEADERS.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][9] This phase consists of 2 rule(s).
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Recipe: Invoking rule 9fff0b0; [file "/etc/nginx/modsecurity.conf"] [line "23"] [id "200000"].
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][5] Rule 9fff0b0: SecRule "REQUEST_HEADERS:Content-Type" "@rx (?:application(?:/soap\\+|/)|text/)xml" "phase:1,auditlog,id:200000,t:none,t:lowercase,pass,nolog,ctl:requestBodyProcessor=XML"
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Rule returned 0.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][9] No match, not chained -> mode NEXT_RULE.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Recipe: Invoking rule a0026b0; [file "/etc/nginx/modsecurity.conf"] [line "30"] [id "200001"].
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][5] Rule a0026b0: SecRule "REQUEST_HEADERS:Content-Type" "@rx application/json" "phase:1,auditlog,id:200001,t:none,t:lowercase,pass,nolog,ctl:requestBodyProcessor=JSON"
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Rule returned 0.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][9] No match, not chained -> mode NEXT_RULE.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Second phase starting (dcfg 9fee320).
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Input filter: This request does not have a body.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Starting phase REQUEST_BODY.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][9] This phase consists of 5 rule(s).
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Recipe: Invoking rule 9fefaf8; [file "/etc/nginx/modsecurity.conf"] [line "8"] [id "99999"].
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][5] Rule 9fefaf8: SecRule "ARGS" "@rx mod_security_test" "phase:2,log,auditlog,pass,t:normalisePathWin,id:99999,severity:4,msg:'Drive Access'"
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][9] T (0) normalisePathWin: "mod_security_test"
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Transformation completed in 110 usec.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Executing operator "rx" with param "mod_security_test" against ARGS:test.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][9] Target value: "mod_security_test"
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Operator completed in 340 usec.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][2] Warning. Pattern match "mod_security_test" at ARGS:test. [file "/etc/nginx/modsecurity.conf"] [line "8"] [id "99999"] [msg "Drive Access"] [severity "WARNING"]
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Rule returned 1.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][9] Match -> mode NEXT_RULE.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Recipe: Invoking rule a003db0; [file "/etc/nginx/modsecurity.conf"] [line "60"] [id "200002"].
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][5] Rule a003db0: SecRule "REQBODY_ERROR" "!@eq 0" "phase:2,auditlog,id:200002,t:none,log,deny,status:400,msg:'Failed to parse request body.',logdata:%{reqbody_error_msg},severity:2"
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Transformation completed in 22 usec.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Executing operator "!eq" with param "0" against REQBODY_ERROR.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][9] Target value: "0"
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Operator completed in 51 usec.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Rule returned 0.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][9] No match, not chained -> mode NEXT_RULE.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Recipe: Invoking rule a005748; [file "/etc/nginx/modsecurity.conf"] [line "81"] [id "200003"].
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][5] Rule a005748: SecRule "MULTIPART_STRICT_ERROR" "!@eq 0" "phase:2,auditlog,id:200003,t:none,log,deny,status:400,msg:'Multipart request body failed strict validation: PE %{REQBODY_PROCESSOR_ERROR}, BQ %{MULTIPART_BOUNDARY_QUOTED}, BW %{MULTIPART_BOUNDARY_WHITESPACE}, DB %{MULTIPART_DATA_BEFORE}, DA %{MULTIPART_DATA_AFTER}, HF %{MULTIPART_HEADER_FOLDING}, LF %{MULTIPART_LF_LINE}, SM %{MULTIPART_MISSING_SEMICOLON}, IQ %{MULTIPART_INVALID_QUOTING}, IP %{MULTIPART_INVALID_PART}, IH %{MULTIPART_INVALID_HEADER_FOLDING}, FL %{MULTIPART_FILE_LIMIT_EXCEEDED}'"
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Transformation completed in 1 usec.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Executing operator "!eq" with param "0" against MULTIPART_STRICT_ERROR.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][9] Target value: "0"
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Operator completed in 2 usec.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Rule returned 0.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][9] No match, not chained -> mode NEXT_RULE.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Recipe: Invoking rule a0080b8; [file "/etc/nginx/modsecurity.conf"] [line "86"] [id "200004"].
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][5] Rule a0080b8: SecRule "MULTIPART_UNMATCHED_BOUNDARY" "!@eq 0" "phase:2,auditlog,id:200004,t:none,log,deny,msg:'Multipart parser detected a possible unmatched boundary.'"
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Transformation completed in 1 usec.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Executing operator "!eq" with param "0" against MULTIPART_UNMATCHED_BOUNDARY.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][9] Target value: "0"
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Operator completed in 2 usec.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Rule returned 0.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][9] No match, not chained -> mode NEXT_RULE.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Recipe: Invoking rule a009518; [file "/etc/nginx/modsecurity.conf"] [line "100"] [id "200005"].
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][5] Rule a009518: SecRule "TX:/^MSC_/" "!@streq 0" "phase:2,log,auditlog,id:200005,t:none,deny,msg:'ModSecurity internal error flagged: %{MATCHED_VAR_NAME}'"
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Rule returned 0.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][9] No match, not chained -> mode NEXT_RULE.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Hook insert_filter: Adding output filter (r a048f40).
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][9] Output filter: Receiving output (f a049c28, r a048f40).
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Starting phase RESPONSE_HEADERS.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][9] This phase consists of 0 rule(s).
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Output filter: Not buffering response body for unconfigured MIME type "null".
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][9] Content Injection: Not enabled.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Output filter: Completed receiving response body (non-buffering).
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Starting phase RESPONSE_BODY.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][9] This phase consists of 0 rule(s).
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Output filter: Output forwarding complete.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][9] Output filter: Sending input brigade directly.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Initialising logging.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Starting phase LOGGING.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][9] This phase consists of 0 rule(s).
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Recording persistent data took 0 microseconds.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Audit log: Logging this transaction.
[29/Nov/2017:19:18:39 +0100] [/sid#9fedcf8][rid#a048f40][/][4] Audit log: Skipping request since there is nowhere to write to.
Die Suche nach "Audit log: Skipping request since there is nowhere to write to." führte dann immer wieder nur zu Treffern, die sich auf modsecurity v3 und fehlender JSON-Unterstützung beziehen.

Das einzige Logging, was immer (egal ob Serial- oder Concurrent-Mode) funktioniert, ist die nginx-error-Log:

Code: Select all

2017/11/29 19:18:39 [error] 30012#0: [client 192.168.33.100] ModSecurity: Warning. Pattern match "mod_security_test" at ARGS:test. [file "/etc/nginx/modsecurity.conf"] [line "8"] [id "99999"] [msg "Drive Access"] [severity "WARNING"] [hostname ""] [uri "/"] [unique_id "AcWcjcA2AnAcAcAcAc1cActc"]
Das ist natürlich für eine genauere Analyse ungenügend, würde notfalls aber zur weiteren Recherche auch erstmal reichen. Wichtig dafür sind ja die config-Datei, Zeile und ID. Der genaue Response/Request fehlt allerdings, so dass man am Ende nicht weiß, wie der genaue Input für modsecurity aussah. Eine funktionierende und nicht mit "Failed to (un-)/lock global mutex"-vollgespammte Auditlog wär schon gut :x.

Gruß Oli

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

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

Post by ummeegge » November 30th, 2017, 7:21 pm

Hallo Oli,
das heisst nun ModSec 3 mit Yajl bauen :D ?

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 » December 1st, 2017, 12:14 am

Ich befürchte. Natürlich blöd, dass der nginx-connector noch experimentell ist, aber ich denke Versuch ist es wert. Oder halt mit dem verlinkten Patch die 2.9er Version bauen. Nur keine Ahnung, ob der Patch noch so problemlos funktioniert, ist ja auch schon wieder 3 Jahre alt :x.

Die neue 3er Version ist ja konzeptionell anders aufgebaut und soll Webserver-unabhängiger sein. Die 2.9er Version für nginx ist ja im Prinzip nur nen Wrapper für den Apache-Mod und damit langsamer und fehleranfälliger (vlt ist der "Lock-/Unlock"-Fehler auch genau einer der Folgen, ka).

Edit: Achso, vlt sollte ich auch erwähnen, dass ich unter Ubuntu 16.04 problemlos nen Apache 2.4 im mpm-prefork-Modus mit dem von der Distribution ausgelieferten modsecurity (2.9.0)+Serial-Log und OWASP-CRS am laufen habe. Ob es hier immer noch beim mpm-itk-Modus zu Problemen kommt (ähnlich wie hier mit nginx und wie in den verlinkten Threads beschrieben), hab ich jetzt nicht getestet.

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

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

Post by ummeegge » December 1st, 2017, 5:42 pm

Hi Oli,
magst du vielleicht dann einen extra Topic aufmachen (irgendwo im DEV Bereich) da das eigentliche Thema hier schon [gelöst] ist und ModSec (dann ja auch für den Apache ;) für andere Suchende hier im Forum event. auch nett zu finden wäre ?

Hab hier gerade mit OpenSSL-1.1.0 und OpenVPN-2.4.4 zu tun komme wenn die Zeit mich lässt dann aber auch gerne mal rüber.

Grüsse,

UE
Image
Image

Post Reply