H2o: No permitir el acceso sin un host solicitado

Creado en 27 abr. 2018  ·  8Comentarios  ·  Fuente: h2o/h2o

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.

Todos 8 comentarios

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.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

fetus-hina picture fetus-hina  ·  4Comentarios

daniel-lucio picture daniel-lucio  ·  5Comentarios

dch picture dch  ·  5Comentarios

Jxck picture Jxck  ·  7Comentarios

ndac-todoroki picture ndac-todoroki  ·  5Comentarios