kitser
Goto Top

NGINX Reverse Proxy clientmaxbodysize ohne Wirkung

Moin,

ich habe ein Problem mit einem NGINX Reverse Proxy incl. modsecurity.

Dieser hängt vor einem Exchange. Es funktioniert auch alles so wie es sein soll.

Nur an einer Sache hänge ich:
Wenn mobile Geräte per ActiveSync eine Email größer als 10MB senden wollen, klappt dies nicht.
Kleiner 10MB funktioniert alles.

Fehlerlog von NGINX: "Request body limit is marked to reject the request."

So weit, so eindeutig.

Sowohl in der nginx.conf als auch, testweise, in der conf des virtuellen Hosts hab ich client_max_body_size 100M; gesetzt.

Irgendwie scheint dieser Wert aber keine Wirkung zu haben.

Aktivieren oder Deaktivieren von Modsecurity ändert nichts an dem Verhalten.

Code der nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
load_module modules/ngx_http_modsecurity_module.so;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
        modsecurity on;
        modsecurity_rules_file /etc/nginx/modsec/main.conf;

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        types_hash_max_size 2048;
        proxy_connect_timeout 1200s;
        proxy_send_timeout 1200s;
        proxy_read_timeout 1200s;
        fastcgi_send_timeout 1200s;
        fastcgi_read_timeout 1200s;
        client_max_body_size 100M;

        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##
        
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;


        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;


}

Content-ID: 665398

Url: https://administrator.de/contentid/665398

Ausgedruckt am: 22.11.2024 um 14:11 Uhr

LordGurke
LordGurke 05.04.2021 um 14:49:21 Uhr
Goto Top
In der nginx.conf solltest du diese Einstellung nicht vornehmen.
Denn ich wette mit dir, dass in conf.d oder sites-enabled eine Datei liegt, die deine Einstellung wieder überschreibt face-wink
Falls das in sites-enabled überschrieben wird, ändere es in der entsprechenden Datei ab. Falls es in conf.d gesetzt wird, erstelle dort eine Datei mit einem Namen die lexalisch als letztes geladen wird (z.B. "zzz-mysettings.conf"), um die vorherigen Werte zu überschreiben.
KITSER
KITSER 05.04.2021 um 15:10:17 Uhr
Goto Top
Danke für deine Antwort,

in der conf.d habe ich nichts liegen. In der site-enabled liegt auch nur mein einziger virtueller Host. Wenn ich den Wert dort auch eintrage passiert ebenfalls nichts.
LordGurke
LordGurke 05.04.2021 um 15:14:57 Uhr
Goto Top
Hast du einmal mit "nginx -T" getestet, ob die Config in Ordnung ist und tatsächlich neu geladen wird? Wenn Fehler auftreten, bekommst du diese bei einem "reload" nicht angezeigt und nginx macht einfach mit unveränderter Config weiter.

Mit welcher Größe testest du denn? Neben der eigentlichen Datei werden ja noch weitere Informationen im Body übertragen, die dann über das Limit hinaus gehen könnten. Du kannst "client_max_body_size = 0" setzen um die Größe seitens nginx nicht mehr zu überprüfen.
KITSER
KITSER 05.04.2021 aktualisiert um 15:27:30 Uhr
Goto Top
Habe ich:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Auf 0 setzten bringt leider auch das gleiche Ergebnis. face-sad

Ich teste mit 3 Bildern die zusammen 10,1MB haben.
126231
126231 05.04.2021 um 16:08:22 Uhr
Goto Top
Servus!

Kommst du den intern überhaupt über das Limit?
Ich denke Exchange hat per default ActiveSync auf 10M limitiert...

Gruß
Luigi
KITSER
KITSER 05.04.2021 aktualisiert um 16:14:47 Uhr
Goto Top
Moin!

Ja, ich habe das Senden auf dem Exchange auf 50MB stehen. Ich bin auch testweise mal den direkten Weg ohne den ReverseProxy gegangen. Da funktioniert es problemlos.
KITSER
KITSER 05.04.2021 um 16:55:35 Uhr
Goto Top
Das ist meine conf für den virtuellen Host. Vielleicht findet jemand von euch dort einen Fehler?


server {
        listen 80;
        listen [::]:80;
        # redirect from htttp to https
        server_name xxxxxxxx;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name xxxxxxxx;
        #Enable SSL
        # ssl on;
        ssl_certificate /etc/nginx/ssl/xxxxxxxx.pem;
        ssl_certificate_key /etc/nginx/ssl/xxxxxxxx.key;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:AES256+EDH;
        ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
        ssl_session_cache shared:SSL:10m;
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
        add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";  
        add_header X-Frame-Options DENY;
        add_header X-Content-Type-Options nosniff;
        proxy_http_version 1.1;
        proxy_pass_request_headers on;
        proxy_pass_header Date;
        proxy_pass_header Server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        more_set_input_headers 'Authorization: $http_authorization';  
        proxy_set_header Accept-Encoding "";  
        more_set_headers -s 401 'WWW-Authenticate: Basic realm="xxxxxxxx"';  

       # location /owa           { proxy_pass https:{{comment_single_line_double_slash:1}}
       # location /OWA           { proxy_pass https:{{comment_single_line_double_slash:1}}
        location /EWS          { proxy_pass https://xxxxxxxx/EWS; }
        location /ews          { proxy_pass https://xxxxxxxx/EWS; }
        location /Microsoft-Server-ActiveSync { proxy_pass https://xxxxxxxx/Microsoft-Server-ActiveSync; }
        location /mapi           { proxy_pass https://xxxxxxxxx/mapi; }
        location /MAPI          { proxy_pass https://xxxxxxxx/mapi; }
        location /rpc           { proxy_pass https://xxxxxxxx/Rpc; }
        location /RPC           { proxy_pass https://xxxxxxxx/Rpc; }
        location /oab            { proxy_pass https://xxxxxxxx/OAB; }
        location /OAB            { proxy_pass https://xxxxxxxx/OAB; }
        location /autodiscover           { proxy_pass https://xxxxxxxx/Autodiscover; }
        location /Autodiscover           { proxy_pass https://xxxxxxxx/Autodiscover; }
  	
	client_max_body_size 100M;

        error_log /var/log/nginx/exchange-ssl-error.log;
        access_log /var/log/nginx/exchange-ssl-access.log;

}
Dani
Lösung Dani 05.04.2021 um 19:28:51 Uhr
Goto Top
KITSER
KITSER 05.04.2021 um 20:04:41 Uhr
Goto Top
Moin,

Ich habe modsecurity jetzt nochmal auf off gestellt und es funktioniert. Hatte ich zwar vorher auch schon mal gemacht, aber dabei anscheinend einen Fehler gemacht.

Mist, dann muss ich mal schauen wie ich da weiter komme. Danke dir!
KITSER
KITSER 05.04.2021 um 21:13:21 Uhr
Goto Top
Ich habe in der modsecurity.conf jetzt den Wert SecRequestBodyLimit geändert und es funktioniert.

Du hast mich auf die richtige Spur gebracht Dani, danke nochmal!
Dani
Dani 05.04.2021 um 21:53:11 Uhr
Goto Top
Moin,
freut mich zu hören. Auf welchen Wert hast du den Parameter nun eingestellt?


Gruß,
Dani