16 votes

Apache - écouter uniquement sur un domaine spécifique, pas sur une adresse IP

Comment puis-je configurer Apache pour qu'il refuse les connexions provenant directement de l'adresse IP (http://xxx.xxx.xxx.xxx) au lieu du nom vhost http://example.com?

Ma configuration VirtualHost :

ServerName example.com

        ServerName example.com

        DocumentRoot /var/www/

                AllowOverride All
                Order allow,deny
                allow from all

33voto

Shane Madden Points 112034

Vous ne pouvez pas refuser les connexions, car le nom d'hôte (ou l'IP) que l'utilisateur essaie d'utiliser comme hôte HTTP n'est pas connu du serveur tant que le client n'envoie pas réellement une requête HTTP. L'écouteur TCP est toujours lié à l'adresse IP.

Une réponse d'erreur HTTP serait-elle acceptable à la place?

    ServerName catchall

        Order allow,deny
        Deny from all

    ServerName example.com
    DocumentRoot /var/www/

        AllowOverride All
        Order allow,deny
        allow from all

0 votes

Eh bien, cela génère un 403 Forbidden pour les demandes ne provenant pas du domaine, ce qui n'est pas mal dans ma situation. Cependant, je veux que le serveur soit "inexistant" pour ces demandes. Je suis sûr que cela peut être fait d'une manière ou d'une autre, peut-être pas avec Apache mais au niveau du système ?

3 votes

@Alex Non, c'est complètement impossible. La connexion TCP doit être établie et le client doit envoyer sa requête HTTP (ou son en-tête SNI, je suppose) avant que le serveur puisse déterminer s'ils essaient d'accéder au nom de domaine ou à l'adresse IP dans leur requête HTTP.

0 votes

@ShaneMadden Complètement impossible? Je comprends que le serveur doit connaître l'IP de l'utilisateur avant de pouvoir choisir quoi en faire, mais est-il complètement impossible de ne pas répondre à ce hit une fois qu'il connaît son identité? Le serveur ne peut-il pas simplement suspendre la connexion jusqu'à ce qu'elle expire?

3voto

Chuck Replogle Points 11

Une façon propre de gérer cela est avec une RewriteRule comme suit

  RewriteRule ^.*$ http://www.example.com/$1 [L]

Même si cela expose le site associé à l'adresse IP au lieu de refuser l'accès à un serveur appelé par adresse IP. Mais simple et propre si cela est acceptable.

0 votes

N'oubliez pas RewriteEngine On

1voto

Andy Points 1145
ServerName xxx.xxx.xxx.xxx  #votre adresse IP de serveur web

                Order deny,allow
                Deny from all

Ceci interdira l'accès en utilisant l'adresse IP

0voto

user127490 Points 1

Depuis Apache 2.5.1, il existe un paramètre appelé StrictHostCheck. Il vous suffit d'ouvrir simplement votre fichier /etc/apache2.conf et d'ajouter la ligne suivante :

StrictHostCheck ON

Ensuite, redémarrez votre service apache2 :

service apache2 restart

Désormais, votre site web ne sera accessible que si l'hôte correspond à celui défini dans ServerName (example.com, comme dans votre exemple). Toutes les autres requêtes seront refusées avec le code 400 Bad Request.

Vous pouvez trouver plus de documentation sur StrictHostCheck ici.

0voto

Ray Chakrit Points 101

L'ordre des VirtualHost est important pour limiter l'accès par nom d'hôte. Si vous voulez appeler uniquement www.example.com et refuser le reste, utilisez simplement la balise VirtualHost avec www.example.com en bas et mettez le reste en haut comme ceci.

    ServerName null

    ServerName www.example.com

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X