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.
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.