Restreindre l'accès IP direct au site Web

13

Je souhaite restreindre l'accès IP direct à mon site Web. J'ai trouvé plusieurs solutions impliquant .htaccess mais aucune n'a fonctionné. J'ai également trouvé une solution via la configuration des hôtes virtuels apache qui fonctionnait bien jusqu'à ce que j'installe un certificat SSL via CPanel. Je n'ai absolument aucune idée de ce qui a été modifié dans le fichier httpd.conf mais maintenant le paramètre de redirection ne fonctionne pas même si je désinstalle le certificat SSL.

Voici ma configuration actuelle d'hôtes virtuels:

NameVirtualHost 192.168.1.1:80 NameVirtualHost *

<VirtualHost 192.168.1.1:80>
    ServerName mysite.com
    ServerAlias www.mysite.com
    DocumentRoot /home/rotate/public_html
    ServerAdmin [email protected]
    UseCanonicalName Off

    ## User rotate # Needed for Cpanel::ApacheConf
    UserDir disabled
    UserDir enabled rotate
    ScriptAlias /cgi-bin/ /home/rotate/public_html/cgi-bin/
</VirtualHost>

<VirtualHost 192.168.1.1:80>
    ServerName 192.168.1.1
    Redirect 403 /
    ErrorDocument 403 "Sorry, direct IP access not allowed."
    DocumentRoot /usr/local/apache/htdocs
    ServerAdmin [email protected]
    UseCanonicalName Off
    UserDir disabled
</VirtualHost>

<VirtualHost *>
    ServerName server.mysite.com
    DocumentRoot /usr/local/apache/htdocs
    ServerAdmin [email protected]
    UserDir disabled
</VirtualHost>

NameVirtualHost 192.168.1.1:443
<VirtualHost 192.168.1.1:443>
    ServerName mysite.com
    ServerAlias www.mysite.com
    DocumentRoot /home/rotate/public_html
    ServerAdmin [email protected]
    UseCanonicalName Off

    UserDir disabled
    UserDir enabled rotate

    ScriptAlias /cgi-bin/ /home/rotate/public_html/cgi-bin/
    SSLEngine on
    #SSL stuff here
</VirtualHost>

IP et noms ont été remplacés par des noms génériques. La partie "Rediriger 403 /" ne fonctionne pas depuis l'installation du certificat SSL. Je serais reconnaissant si quelqu'un pouvait faire la lumière sur ce que je fais mal ici. Merci.

Ivan
la source
je suppose que vous n'avez pas à utiliser = ServerName 192.168.1.1
ADM
J'ai essayé ça aussi, ça n'a aucun effet.
Ivan
Les VirtualHosts ont-ils été réorganisés? Est-ce que celui avec l'erreur 403 était le premier vhost (par défaut) avant?
Håkan Lindqvist
Non, la commande n'a pas changé. Le problème a commencé après l'ajout du certificat SSL, ce qui signifie que le dernier a été simplement ajouté. Maintenant, si je le supprime complètement, cela ne fonctionnera plus, donc quelque chose d'autre a définitivement été changé aussi, mais ne semble pas comprendre quoi.
Ivan
voici la solution via htaccess serverfault.com/a/171260/273980
jsHate

Réponses:

12

Et le tour est joué:

<VirtualHost mysite.com:80>
    ServerName mysite.com
    ServerAlias www.mysite.com
    DocumentRoot /home/rotate/public_html
    ServerAdmin [email protected]
    UseCanonicalName Off
</VirtualHost>

NameVirtualHost mysite.com:80
<VirtualHost 192.168.1.1:80>
    ServerName 192.168.1.1
    Redirect 403 /
    ErrorDocument 403 "Sorry, direct IP access not allowed."
    DocumentRoot /usr/local/apache/htdocs
    ServerAdmin [email protected]
    UseCanonicalName Off
    UserDir disabled
</VirtualHost>

<VirtualHost *>
    ServerName server.mysite.com
    DocumentRoot /usr/local/apache/htdocs
    ServerAdmin [email protected]
    UserDir disabled
</VirtualHost>

NameVirtualHost mysite.com:443
<VirtualHost mysite.com:443>
    ServerName mysite.com
    ServerAlias www.mysite.com
    DocumentRoot /home/rotate/public_html
    ServerAdmin [email protected]
    UseCanonicalName Off
</VirtualHost>

La solution était de simplement remplacer l'adresse IP par le nom de domaine pour tous les paramètres de l'hôte virtuel, à l'exception de celui qui doit rediriger / restreindre l'accès IP direct.

Ivan
la source
Cela entraînera des problèmes avec les clients exécutant IE6 et IE8. Si vous êtes d'accord avec ça, alors ça va. Ils devraient de toute façon mettre à jour leurs anciens navigateurs.
Vasili Syrakis
6

La réponse pourrait être beaucoup plus simple.

Il suffit de copier ceci au bas de httpd.conf (généralement situé dans / etc / httpd / conf)

<VirtualHost *:80>
ServerName localhost
Redirect 403 /
UseCanonicalName Off
UserDir disabled
</VirtualHost>

<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/html
</VirtualHost>

Alors seulement lorsque les visiteurs accèdent par www.example.com, il peut accéder au serveur.

stonyau
la source
2

Vous ne pouvez pas désactiver l'accès IP direct à votre serveur via HTTPS car le nom d'hôte de votre hôte virtuel est chiffré à l'intérieur du certificat SSL.

Les clients doivent se connecter à votre adresse IP, télécharger le certificat, lire le contenu, puis ils peuvent vérifier que le nom d'hôte est correct.

La seule autre façon consiste à appliquer SNI , mais vous causerez des problèmes aux utilisateurs qui naviguent avec les anciennes versions d'Internet Explorer.

Vasili Syrakis
la source
1
  1. Votre certificat est probablement délivré à example.com, pas à 192.168.1.1, ni aux deux; Ainsi, les visiteurs qui utilisent https://192.168.1.1doivent avoir une erreur SSL (car l'URL diffère de celle du certificat).
  2. Vous n'avez pas de site Web «SSL par défaut» <VirtualHost *:443> SSLEngine on </VirtualHost>
  3. Vous devez utiliser apache avec prise en charge SNI (il existe certaines exigences de version libSSL et Apache) pour utiliser SSL par nom d'hôte (voir Utilisation de plusieurs certificats SSL dans Apache avec une seule adresse IP).
filimonique
la source
0

Je crois que c'est ce que vous cherchez

http://www.htaccess-guide.com/deny-visitors-by-ip-address/

user155813
la source
1
Non, cela n'a rien à voir avec mon problème. Je veux bloquer l'accès au site Web pour ceux qui accèdent à l'IP de mon site Web au lieu de son DNS.
Ivan
cela fait exactement cela ....
user155813
1
Non, cela bloque l'accès au site par l'adresse IP du client. La question cherche un moyen de bloquer l'accès au site en utilisant son adresse IP.
DaveTheMinion
0

Pour ajouter une autre réponse, mod_security, si cela vaut la peine d'être configuré, a des règles pour interdire l'accès au serveur par adresse IP.

figtrap
la source
0

Cela peut être facile si vous ne placez pas vos fichiers dans le répertoire par défaut / var / www / html. Créez simplement un autre répertoire, disons / web par exemple:

mkdir /web 
mkdir /web/example

copiez vos fichiers et changez le chown:

sudo chown -R www-data:www-data /web

Créez ensuite un hôte virtuel avec la configuration suivante:

<Directory /web/example>
  Require all granted
</Directory>

<VirtualHost *:80>

    DocumentRoot /web/example
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin [email protected]

    # Force SSL, you can remove this line
    Redirect permanent / https://example.com/

    ServerAdmin [email protected]

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

# If you use SSL
<IfModule mod_ssl.c>
    <VirtualHost *:443>
        DocumentRoot /web/example
        ServerName example.com
        ServerAlias www.example.com
        ServerAdmin [email protected]

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # adapt this to your paths
        SSLEngine on
        SSLCertificateFile /etc/ssl/example/example_com.crt
        SSLCertificateKeyFile /etc/ssl/example/example.key
        SSLCertificateChainFile /etc/ssl/example/example_com.ca-bundle

    </VirtualHost>
</IfModule>

N'oubliez pas d'activer votre hôte virtuel, exemple:

sudo a2ensite example.com.conf
Mehdi
la source
0

Dans une configuration Apcahe ayant plusieurs .conffichiers, la priorité va au premier fichier chargé, puis au second ... de même. Donc, si vous êtes sur Ubuntu, les fichiers sont chargés dans l'ordre lexicographique, donc le tout "premier" .conffichier qui sera chargé sera le 000-default.conf(d' où le 000 dans son nom ) résidant sous le /etc/apache2/sites-available/répertoire.

Donc, pour empêcher l'application de toute autre règle, nous devons placer notre règle en haut de ce premier fichier.

et vous pouvez simplement ajouter la règle suivante à ce fichier.

<VirtualHost *:80>
    ServerName default
    DocumentRoot /var/www/html
    #This part here, is crucial.
    <Location />
        Require all denied
    </Location>
</VirtualHost>

Testé et testé sur Ubuntu 16.4 x64 Apache version > 2.4

Si vous utilisez une version inférieure d'Apache, essayez de remplacer Require all deniedle code ci-dessus par ...

<Location />
    Order deny,allow
    Deny from all
</Location>
Mohd Abdul Mujib
la source
-3

J'ai écrit ce code simple en PHP pour restreindre l'accès IP direct!

$servername =  $_SERVER['SERVER_NAME'];
if($servername == 'your-domain.com'){

}elseif($servername == 'your-domain-with-www.com'){

}else{
    die("Direct ip access not allowed!");
}

il suffit de coller dans votre fichier php et profitez-en!

Max Marley
la source
1
Pourriez-vous en expliquer les avantages par rapport aux autres réponses?
030
c'est la méthode la plus simple que vous pouvez utiliser pour restreindre l'accès IP direct à votre site Web, sans modifier les paramètres d'Apache!
Max Marley