Dans Apache, comment désactiver l'accès à un site Web lorsque quelqu'un utilise uniquement l'adresse IP dans un navigateur Web?

8

J'utilise un serveur Web Apache sur CentOS et je dois désactiver la possibilité pour les personnes d'accéder au site Web en utilisant l'adresse IP du serveur dans un navigateur Web. Je le veux pour que lorsque quelqu'un essaie de naviguer jusqu'à l'adresse IP, il reçoive un message d'erreur interdit.

Quelles configurations seraient nécessaires pour cela?

Amr Elkhedewy
la source

Réponses:

10

Configurez simplement l'hôte virtuel par défaut. Il y a un exemple commenté dans httpd.confou faites quelque chose de trivial comme:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /var/www/html
</VirtualHost>
Michael Hampton
la source
Eh bien, cela a résolu mon problème .. merci beaucoup pour vous tous :)
Amr Elkhedewy
7

Vous pouvez y parvenir avec mod_rewrite (soit dans le .htaccessfichier, soit dans le contexte du serveur par défaut, soit dans un VirtualHost distinct où ServerNameest l'adresse IP de l'hôte):

RewriteEngine On
RewriteCond %{HTTP_HOST} 1.2.3.4 # Replace with your own IP address
RewriteRule .* - [F]

Cela signifie que si l'en-tête HTTP_HOST correspond à l'adresse IP 1.2.3.4, alors toute demande doit être satisfaite par un 403 Forbidden. Toute demande qui a un autre en-tête HTTP_HOST (par exemple, une avec le nom de domaine réel plutôt que l'adresse IP) ne devrait pas être affectée.

Jenny D
la source
Cela n'a pas fonctionné dans httpd.conf
Amr Elkhedewy
cela a fonctionné via le fichier .htaccess, j'ai besoin que cela soit fait à partir des configurations Apache.
Amr Elkhedewy,
2
Avez-vous redémarré apache après avoir édité httpd.conf? Sinon, apache ne connaîtra pas la nouvelle configuration. C'est différent de .htaccess, qui est également analysé sans redémarrer apache.
etagenklo
Bien sûr, mais rien n'a changé
Amr Elkhedewy
1

Vous ne pouvez pas bloquer l'accès direct par IP. Vous devez autoriser la connexion, puis décider quoi en faire. Cela peut être renvoyer un 403, un 404 ou les rediriger vers la page souhaitée. Vous pouvez le faire avec mod_rewrite.

 RewriteEngine On
 RewriteCond %{HTTP_HOST} ^123\.123\.123\.123
 RewriteRule ^(.*)$ - [F,L]

Cela correspondra à l'en-tête HTTP HOST transmis par le client Web. Toutes les autres demandes seraient acceptées.

Cependant, vous souhaiterez peut-être normaliser vos URL à des fins de référencement.

Avec cette approche, vous réécrivez tout ce qui ne correspond pas au résultat souhaité.

RewriteCond %{HTTP_HOST}   !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*)         http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]

Référence: https://httpd.apache.org/docs/2.0/rewrite/rewrite_guide.html#canonicalurl

Référence: http://en.wikipedia.org/wiki/URL_normalization

jeffatrackaid
la source
Cela n'a pas fonctionné dans httpd.conf
Amr Elkhedewy
cela a fonctionné via le fichier .htaccess, j'ai besoin que cela soit fait à partir des configurations Apache.
Amr Elkhedewy,
Cela fonctionnera dans httpd.conf, mais assurez-vous d'activer le moteur de réécriture et de le placer dans vos directives d'hôte virtuel. Sinon, cela s'appliquera simplement à votre serveur par défaut. Voir: httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond
jeffatrackaid
1

Cette solution ne couvre pas tous les cas.

Remplacez n'importe quel nombre ou point dans l'URL IP par son% ## par exemple 1 par% 31 ... 8 par% 38 et vous arriverez sur l'IP, pas sur l'url du domaine.

Supposons que cette mauvaise IP, utilisée pour faciliter l'explication: 123.45.6.789

Vous devez utiliser les 2 alternatives pour tous les chiffres et points: le point est% 2E et 0..9 sont% 30 ..% 39

RewriteEngine on
RewriteCond %{HTTP_HOST} (1|%31)(2|%32)(3|%33)(\.|%2E)(4|%34)(5%35)(\.|%2E)(6|%36)(\.|%2E)(7|%37)(8|%38)(9|%39)
RewriteRule . - [F]

Moche, il peut être réduit avec {1,3} et restreint à une adresse IP valide, mais comme c'est le cas pour votre adresse IP, pas besoin de le faire.

N'oubliez pas les ports comme ": 80". HTTP_HOST le contient et SERVER_NAME n'est pas fiable.

shijie-hk
la source