H2o: Interdire l'accès sans hôte demandé

Créé le 27 avr. 2018  ·  8Commentaires  ·  Source: h2o/h2o

J'ai plusieurs hôtes (domaines) configurés sur mon serveur. Mais parfois, quelqu'un (probablement un bot) essaie uniquement l'adresse IP. Dans ce cas, h2o semble utiliser le premier hôte configuré par défaut. Comment puis-je changer cela? Mon objectif est que h2o ne réponde pas à une requête sans nom d'hôte (ou réponde avec un 404).

Bien sûr, je pourrais le faire avec mruby... mais je suis sûr qu'il existe un moyen plus simple/plus propre, par exemple en configurant un comportement de repli si aucune règle d'hôte ne correspond.

Tous les 8 commentaires

Je ne sais pas si c'est une manière plus propre, mais ma solution était de mettre une fausse entrée en haut, dans laquelle a été inspiré par _Pourquoi configurer un "serveur SSL vierge par défaut" ?_ @ 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 J'ai essayé avec votre code et j'ai reçu un message d'erreur "Interdit" affichant la page dans Google Chrome.

Journal d'accès affiché :

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 pourriez-vous coller un extrait de votre configuration ?

Eh bien, "Interdit" est l'erreur prévue si vous n'avez configuré aucun domaine valide.

J'ai accédé en utilisant l'adresse IP. Cela a fonctionné comme prévu en utilisant le nom de domaine.

@csmk Merci, ça marche bien... Encore: Si quelqu'un a une solution plus simple, par exemple sans mruby, j'aimerais le savoir.

Si quelqu'un a des solutions plus simples, par exemple sans mruby

J'ai trouvé une solution de contournement, dans mon exemple ci-dessus, supprimez la partie mruby et pointez le file.dir: vers un répertoire vide auquel l'utilisateur exécutant H2O n'a pas accès. La réponse de H2O sera 403.

Je pense qu'une solution simple pourrait être côté pare-feu ou côté iptables?

Merci encore, @csmk . Cela ressemble à une approche raisonnable pour s'en sortir sans mruby.

@ proyb6 Un pare-feu typique comme iptables regarde simplement les paquets (de quelle adresse IP, vers quelle adresse IP, quels ports, quel protocole), mais ne regarde pas le contenu du trafic HTTP. Avec HTTPS, il ne pouvait même pas regarder dans les détails, même s'il le voulait. Par conséquent, cela ne semble pas être une solution viable.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

taosx picture taosx  ·  6Commentaires

proyb6 picture proyb6  ·  5Commentaires

Ys88 picture Ys88  ·  5Commentaires

paulpref picture paulpref  ·  5Commentaires

fetus-hina picture fetus-hina  ·  4Commentaires