He estado recibiendo errores de Django en mi servidor web (detrás de Nginx / uWSGI) quejándose de que se está accediendo con una solicitud donde Host
es la dirección IP del servidor. Nginx usa hosts virtuales, por lo que espero que Host
sea siempre el nombre del servidor, por lo que ALLOWED_HOSTS
de Django es solo eso.
Invalid HTTP_HOST header: '###.###.###.###'. You may need to add '###.###.###.###' to ALLOWED_HOSTS.
Request repr():
<WSGIRequest
path:/,
GET:<QueryDict: {}>,
POST:<QueryDict: {}>,
COOKIES:{},
META:{'CONTENT_LENGTH': '',
'CONTENT_TYPE': '',
'DOCUMENT_ROOT': '/usr/share/nginx/html',
'HTTP_HOST': '###.###.###.###',
'PATH_INFO': '/',
'QUERY_STRING': '',
'REMOTE_ADDR': '184.105.139.68',
'REMOTE_PORT': '45409',
'REQUEST_METHOD': 'GET',
'REQUEST_URI': '/',
'SCRIPT_NAME': '',
'SERVER_NAME': 'subdomain.example.net',
'SERVER_PORT': '443',
'SERVER_PROTOCOL': 'HTTP/1.1',
'UWSGI_SCHEME': 'https',
'uwsgi.core': 1,
'uwsgi.node': b'subdomain.example.net',
'uwsgi.version': b'2.0.12',
'wsgi.errors': <_io.TextIOWrapper name=2 mode='w' encoding='ANSI_X3.4-1968'>,
'wsgi.file_wrapper': <built-in function uwsgi_sendfile>,
'wsgi.input': <uwsgi._Input object at 0x7f...>,
'wsgi.multiprocess': True,
'wsgi.multithread': True,
'wsgi.run_once': False,
'wsgi.url_scheme': 'https',
'wsgi.version': (1, 0)}>
Los errores son provocados por 184.105.247.195, 1 o 2 por día, que es propiedad de la "Fundación Shadowserver", por lo que no estoy seguro de que estos (simulacros) ataques sean frustrados con éxito (pero me molestan con un error). código) o si algo extraño está sucediendo ... por ejemplo, cómo / por qué Nginx está pasando una solicitud con un IP Host
a un bloque de servidor que tiene el siguiente formato (tengo un bloque de servidor catch-all que rechaza Host- menos solicitudes):
server {
listen 443;
server_name abc.example.net;
# ...
}
Esta respuesta SO me dice cómo configurar Nginx para rechazar solicitudes mal formadas (encabezado Host
incorrecto), pero eso parece como un enfoque de cinturón y tirantes.
¿Esto indica que mi cinturón no se ha cerrado correctamente mientras alguien está intentando jadearme?
Como un anexo, está usando SSL (y estoy hospedando múltiples sitios SSL en el mismo puerto, usando SNI para distinguirlos, no estoy seguro de si eso importa ...). Algo así como esta respuesta (a otra pregunta) menciona , ¿el "ataque" consiste en negociar con uno de los Nginx? el servidor bloquea, luego en la solicitud cifrada cambiando el encabezado Host
a la IP de mi servidor?