Kontakt

Carsten Rieger IT Services
Am Danglfeld 8 | 83132 Pittenhart
Telefon: 08624.9009794
E-Mail: info@c-rieger.de

Rate Limiting mit NGINX

Um Ihre Nextcloud etwas robuster bspw. gegen DDOS-Attacken einzurichten, können Sie die Webserverfunktion des Rate Limitings nutzen. Sie legen dabei fest, wieviele Anfragen innerhalb eines bestimmten Zeitrahmens von einer Quelle erlaubt werden. Wird diese „Rate“ überschritten, so wird die Anfrage unterbrochen und im Browser der http-Code 429 angezeigt. Zudem wird die Verursacher-IP dank der crowdsec – Absicherung gesperrt (ban).

429 Too Many Requests
sudo cscli decision list

Weiterführende Informationen // Quelle: nginx.org, Stand 08. Oktober 2024

Sichern Sie zuerst die derzeit verwendete vHost-Datei ihrer Nextcloud (bspw. nextcloud.conf) und öffnen diese dann im Anschluß:

cp /etc/nginx/conf.d/nextcloud.conf /etc/nginx/conf.d/nextcloud.conf.sicherung
nano /etc/nginx/conf.d/nextcloud.conf

Fügen Sie diese Zeile zu Beginn der Datei ein:

limit_req_zone $binary_remote_addr zone=NextCloud:10m rate=2r/s;
[...]
/etc/nginx/conf.d/nextcloud.conf

Gehen Sie dann an das Ende der Datei und fügen vor den letzten location-Block Folgendes hinzu:

[...]
   location /login {
    limit_req zone=NextCloud burst=5 nodelay;
    limit_req_status 429;
    try_files $uri $uri/ /index.php$request_uri;
    }
  location /{
    try_files $uri $uri/ /index.php$request_uri;
    }
}
  
/etc/nginx/conf.d/nextcloud.conf

Starten Sie den Webserver neu, um die Änderungen wirksam werden zu lassen.

systemctl restart nginx.service

Überprüfen Sie im Anschluß, ob die zuvor genutzten Werte an Ihre Umgebung und Ihre Anwendungsfälle möglicherweise angepasst (erhöht) werden müssen. Dazu überprüfen Sie das Webserverlog

tail -f /var/log/nginx/access.log | grep 429
/var/log/nginx/access.log

Um einen Bereich der Nextcloud (bspw. die Administrationseinstellungen) für bestimmte IP’s zu sperren oder bspw. nur für interne IP’s zugänglich zu machen, nutzen Sie diesen exemplarischen ‚location‘-Block:

location /settings/admin {
    allow 10.10.10.21;
    allow 192.168.0.0/24;
    deny all;
    try_files $uri $uri/ /index.php$request_uri;
    }
/etc/nginx/conf.d/nextcloud.conf
403 Forbidden

Die Absicherung Ihres Nextcloudservers wurde erfolgreich abgeschlossen und so wünsche ich Ihnen viel Spaß mit Ihren Daten in Ihrer privaten, abgesicherten Nextcloud. Über Ihre Unterstützung (diese wird ordnungsgemäß versteuert!) würden sich meine Frau, meine Zwillinge und ich sehr freuen!