Solo permite los métodos HTTP autorizados: corta las peticiones ruidosas con 405/444 en Nginx
\nAl monitorear los logs de una aplicación web en producción, a veces aparece algo inesperado.
\n- \n
- Pensaba que solo usaba
GET / POST / PUT / DELETE\n - En los logs aparece un método que nunca había visto \n
Por ejemplo, PROPFIND, un método WebDAV, aparece en el registro. La aplicación lo tratará como “método no soportado”, pero lo importante es:
¿Realmente necesitamos que una aplicación que ya hace su trabajo maneje peticiones ruidosas? La respuesta suele ser “no”. Por eso es limpio permitir solo los métodos autorizados y cortar el resto en Nginx.
\n\n
¿Por qué bloquearlo en Nginx?
\nSe puede hacer a nivel de aplicación, pero cuando la petición llega a la app ya se incurre en costos.
\n- \n
- Entrada a WSGI/ASGI \n
- Middleware, logging, autenticación se ejecutan parcialmente \n
- Los logs de la app se ensucian y ocultan problemas reales \n
- Con mucho tráfico, el sobrecosto se acumula \n
Al bloquearlo en Nginx:
\n- \n
- Cierre inmediato en la capa más externa → mínimo costo \n
- Logs de la app más limpios → más fácil operación \n
- Superficie de ataque reducida → se eliminan métodos innecesarios \n
En una frase:
\n\n\nLa app crea el producto, Nginx actúa como guardia.
\n
\n
Los métodos extraños en los logs suelen ser “no tráfico normal”
\nPROPFIND es un caso típico.
- \n
- Escaneo rápido para ver si WebDAV está habilitado \n
- Si
PUT/MKCOLestá abierto, intentan avanzar al siguiente nivel \n - A veces el User‑Agent está vacío o se envía con HTTP/1.0 de forma improvisada \n
El punto clave es:
\nSi nuestro servicio no usa ese método, es casi seguro que no sea tráfico legítimo. No tiene sentido enviarlo a la app y responder amablemente.
\n\n
La estrategia es simple: operar con una lista blanca (Allowlist)
\n
El principio es “abrir solo lo necesario y cerrar el resto”.
\n- \n
- Páginas web estáticas: normalmente
GETyHEADson suficientes \n - API: permitir
POST/PUT/PATCH/DELETEsolo en los endpoints que lo requieran \n
Y cualquier otro método (por ejemplo, PROPFIND, MKCOL, LOCK) que no usemos, bloqueamos. Es la forma más sencilla de operar.
\n
405 vs 444: ¿qué respuesta usar?
\nHay dos formas principales de bloquear.
\n1) 405 Method Not Allowed
\n- \n
- Estándar y fácil de entender \n
- Informa claramente a un cliente legítimo que el método no está permitido \n
2) 444 (solo de Nginx: cerrar la conexión sin respuesta)
\n- \n
- Cierra sin decir nada \n
- Da menos pistas a escáneres/bots \n
- Operativamente silencioso y limpio (“ocultamos el ruido”) \n
En la práctica se suele combinar:
\n- \n
- Métodos sin sentido en la web pública: 444 \n
- Clientes legítimos que pueden cometer errores: 405 \n
\n
Ejemplo de configuración de Nginx: “cortar fuera de los métodos permitidos” – 2 patrones
\nA continuación se presentan ejemplos listos para copiar y pegar.
\nPatrón A) GET/HEAD por defecto, API con métodos adicionales
\nserver {\n # ... listen/server_name etc ...\n\n # 1) Por defecto: web/estáticos solo GET/HEAD\n location / {\n if ($request_method !~ ^(GET|HEAD)$) { return 444; } # o 405\n proxy_pass http://app;\n }\n\n # 2) API: solo los métodos necesarios\n location /api/ {\n if ($request_method !~ ^(GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS)$) { return 444; }\n proxy_pass http://app;\n }\n}\n\n- \n
/suele ser suficiente conGET/HEADpara la visualización de páginas. \n/api/necesitaOPTIONSpor CORS. \n
Patrón B) Bloquear explícitamente “métodos extraños” (inicio ligero)
\nlocation / {\n if ($request_method ~ ^(PROPFIND|PROPPATCH|MKCOL|COPY|MOVE|LOCK|UNLOCK)$) { return 444; }\n proxy_pass http://app;\n}\n\n- \n
- Elimina los métodos ruidosos que vemos en producción. \n
- A largo plazo, el patrón A (Allowlist) es más seguro y fácil de mantener. \n
\n\nNota: aunque
\nifen Nginx puede ser peligroso si se abusa, en este caso de “retorno inmediato” es bastante común. Si prefieres algo más estricto, puedes usarlimit_except.
\n
Conclusión: “solo permite lo autorizado” simplifica la operación
\nEl mensaje es claro.
\n- \n
- Los métodos extraños casi nunca son tráfico legítimo \n
- Enviarlos a la app genera costos y ensucia los logs \n
- Por eso, en Nginx, deja pasar solo los métodos permitidos y corta el resto con 405/444 \n
Aplicar este patrón trae:
\n- \n
- Menos consumo de recursos en la app \n
- Logs más limpios \n
- Operación más sencilla \n