# Alleen toegestane HTTP-methoden doorlaten: Nginx blokkeert ongewenste verzoeken met 405/444 Tijdens het tailen van de logs van een webapplicatie komen we soms op dit moment. * Ik dacht dat ik alleen `GET / POST / PUT / DELETE` gebruikte * In de logs zie ik een methode die ik nog nooit eerder heb gezien Bijvoorbeeld `PROPFIND`, een WebDAV-methode, verschijnt in de logs. De app zal het sowieso behandelen als een “niet-ondersteunde methode”. Maar het belangrijkste is dit: **Moet een hardwerkende applicatie zich toch bezig houden met ruis?** Het antwoord is meestal “nee”. Daarom is het schoon om alleen toegestane methoden door te laten en de rest in Nginx te blokkeren. --- ## Waarom moet het in Nginx worden geblokkeerd? {#sec-b5d4f5f6dfc2} Je kunt het op applicatieniveau blokkeren, maar zodra een verzoek de app bereikt, is er al kosten. * WSGI/ASGI wordt aangeroepen * Middleware, logging, authenticatie draaien deels * De app-log wordt vervuild, waardoor echte problemen verborgen blijven * Bij hoge traffic ontstaat onnodige belasting Blokkeer je het in Nginx: * **Direct in de eerste lijn** → minimale kosten * **App-logs blijven schoon** → eenvoudiger beheer * **Aanvalsoppervlak verkleint** → onnodige methoden worden geëlimineerd Kort samengevat: > **De app bouwt het product, Nginx fungeert als de poortwachter.** --- ## Onbekende methoden in de logs zijn meestal geen “normaal gebruik” {#sec-7f5126fc3fdf} `PROPFIND` is een typische WebDAV-methode. * Een scan die controleert of WebDAV is ingeschakeld * Als `PUT/MKCOL` per ongeluk open staat, probeert de scanner verder te gaan * Een lege User‑Agent of een vage HTTP/1.0‑verzoek komt vaak voor Het belangrijkste punt: **Als onze service die methode niet gebruikt, is het vrijwel zeker geen legitieme traffic.** Dus waarom de app laten reageren? --- ## Strategie: een allowlist gebruiken {#sec-84ef31ae1a20} ![Nginx als beveiligingsagent die de poort beheert](/media/editor_temp/6/e09dd4fc-f987-43bf-b38f-9ac6c4c594f6.png) Het principe is simpel: **open alleen wat nodig is, sluit de rest**. * Standaard webpagina’s/ statische bronnen: meestal `GET` en `HEAD` * API: alleen `POST/PUT/PATCH/DELETE` op de noodzakelijke eindpunten Alle andere methoden (bijv. `PROPFIND`, `MKCOL`, `LOCK`) worden volledig geblokkeerd als we ze niet gebruiken. --- ## 405 vs 444: welke respons gebruiken? {#sec-967ed2222242} Blokkering kan op twee manieren: ### 1) 405 Method Not Allowed {#sec-c79f33550d87} * Standaard, duidelijk voor legitieme clients * Geeft aan dat de methode niet is toegestaan ### 2) 444 (Nginx‑specifiek: geen respons, verbinding sluiten) {#sec-fe4e18cb7c1d} * Sluit zonder bericht * Geeft minder hints aan scanners/bots * Rustig en schoon voor het beheer (verwijdert “ruis”) In de praktijk: * **Onzinnige methoden op een publieke site**: 444 * **Legitieme clients die per ongeluk een fout maken**: 405 --- ## Nginx‑configuratie‑voorbeeld: “alleen toegestane methoden” – twee patronen {#sec-3c7629273a8a} Hieronder vind je een startpunt dat je meteen kunt kopiëren. ### Patroon A) Standaard: alleen GET/HEAD, API extra toestaan {#sec-42bc13636133} ```nginx server { # ... listen/server_name etc. ... # 1) Standaard: web/ statische bestanden alleen GET/HEAD location / { if ($request_method !~ ^(GET|HEAD)$) { return 444; } # of 405 proxy_pass http://app; } # 2) API: alleen noodzakelijke methoden location /api/ { if ($request_method !~ ^(GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS)$) { return 444; } proxy_pass http://app; } } ``` * `/` is meestal voldoende met alleen `GET/HEAD` voor pagina’s. * `/api/` vereist vaak `OPTIONS` vanwege CORS. ### Patroon B) Alleen “vreemde” methoden expliciet blokkeren (lichtgewicht start) {#sec-fa0b2940f799} ```nginx location / { if ($request_method ~ ^(PROPFIND|PROPPATCH|MKCOL|COPY|MOVE|LOCK|UNLOCK)$) { return 444; } proxy_pass http://app; } ``` * Verwijdert meteen de meest voorkomende “ruis”‑methoden. * Op de lange termijn is **Allowlist‑methode (Patroon A)** veiliger en makkelijker te beheren. > Opmerking: `if` in Nginx kan riskant zijn, maar voor een eenvoudige “direct return” is het gangbaar. Voor strengere controle kun je `limit_except` gebruiken. --- ## Conclusie: “Alleen toegestane methoden” maakt beheer eenvoudiger {#sec-35fe67d750b5} De kern is simpel: * Onbekende methoden zijn meestal geen legitieme traffic * Door ze naar de app te sturen, ontstaan extra kosten en rommelige logs * **Blokkeer in Nginx met 405/444** en laat alleen de noodzakelijke methoden doorgaan Met één patroon kun je: * Minder belasting op de app * Schone logs * Eenvoudiger beheer