Tengo varios hosts (dominios) configurados en mi servidor. Pero a veces alguien (probablemente un bot) prueba solo la dirección IP. En este caso, h2o parece usar el primer host configurado como predeterminado. ¿Cómo puedo cambiar esto? Mi objetivo es que h2o no responda a una solicitud sin un nombre de host (o que responda con un 404).
Por supuesto, podría hacer esto con mruby... pero estoy seguro de que hay una forma más simple/limpia, por ejemplo, configurando un comportamiento alternativo si no coincide ninguna regla del host.
No estoy seguro de si esta es una forma más limpia, pero mi solución fue poner una entrada falsa en la parte superior, inspirada en _¿Por qué configurar un "servidor SSL en blanco predeterminado"?_ @ https://calomel.org/ nginx.html
listen: &listen80
port: 80
# fake/invalid cert
listen: &listen443_blank
port: 443
ssl:
<<: !file /etc/h2o/default_ssl.conf
certificate-file: /etc/ssl/h2o/blank.cert.pem
key-file: /etc/ssl/h2o/blank.key.pem
hosts:
"_:80":
listen: *listen80
paths: &paths_blank
"/":
- mruby.handler: |
acl {
deny { ! addr.start_with?("127.0.0.1") && ! addr.start_with?("::1") }
}
- file.dir: /var/whatever
"_:443":
listen: *listen443_blank
paths: *paths_blank
# The valid domains start from here
@csmk Probé con su código y obtuve un mensaje de error "Prohibido" mostrando la página en Google Chrome.
Registro de acceso mostrado:
123.123.123.123 - - [27/Apr/2018:12:59:00 +0000] "GET / HTTP/2" 403 9 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
@ proyb6 , ¿podría pegar fragmentos de su configuración?
Bueno, "Prohibido" es el error previsto si no ha configurado ningún dominio válido.
He accedido usando la dirección IP. Funcionó según lo previsto mediante el uso de nombre de dominio.
@csmk Gracias, funciona bien... Aún así: si alguien tiene una solución más simple, por ejemplo, sin mruby, me gustaría saberlo.
Si alguien tiene una solución más simple, por ejemplo, sin mruby
Encontré una solución alternativa, en mi ejemplo anterior, elimine la parte mruby y señale file.dir:
a un directorio vacío en el que el usuario que ejecuta H2O no tiene acceso. La respuesta de H2O será 403.
Creo que una solución simple podría estar en el lado del firewall o de iptables.
Gracias de nuevo, @csmk . Esto parece un enfoque razonable para salirse con la suya sin mruby.
@proyb6 Un firewall típico como iptables solo mira los paquetes (desde qué IP, a qué IP, qué puertos, qué protocolo), pero no mira el contenido del tráfico HTTP. Con HTTPS ni siquiera podría mirar los detalles, incluso si quisiera. Por lo tanto, esto no parece una solución viable.