No Apache, como desabilito o acesso a um site quando alguém usa apenas o endereço IP em um navegador da web?

8

Estou usando o servidor web apache no CentOS e preciso desabilitar a capacidade de acesso ao site usando o endereço IP do servidor em um navegador da web. Eu quero que quando alguém tenta navegar para o endereço IP, eles recebam uma mensagem de erro proibida.

Quais configurações seriam necessárias para fazer isso?

    
por Amr Elkhedewy 28.05.2013 / 16:46

4 respostas

10

Basta configurar o host virtual padrão. Há um exemplo comentado em httpd.conf ou algo trivial como:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /var/www/html
</VirtualHost>
    
por 28.05.2013 / 19:14
7

Você pode conseguir isso com mod_rewrite (no arquivo .htaccess , ou no contexto do servidor padrão, ou em um VirtualHost separado onde o ServerName é o endereço IP do host):

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

Isso diz que, se o cabeçalho HTTP_HOST corresponder ao endereço IP 1.2.3.4, qualquer solicitação deverá ser atendida com 403 Forbidden . Qualquer solicitação que tenha outro cabeçalho HTTP_HOST (por exemplo, um com o nome do domínio real em vez do endereço IP) não deve ser afetada.

    
por 28.05.2013 / 17:14
1

Você não pode bloquear o acesso direto por IP. Você deve permitir a conexão, mas depois decidir o que fazer com ela. Isso pode ser um 403, um 404 ou redirecioná-los para a página desejada. Você pode fazer isso com mod_rewrite.

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

Isso corresponderá ao cabeçalho HTTP HOST passado pelo Web client. Todas as outras solicitações passariam.

No entanto, você pode querer normalizar seus URLs para fins de SEO.

Com essa abordagem, você reescreve qualquer coisa que não corresponda ao resultado desejado.

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]

Referência: link

Referência: link

    
por 28.05.2013 / 17:16
1

Esta solução não cobre todos os casos.

Substitua qualquer número ou ponto no URL IP por seu% ## por exemplo, 1 por% 31 ... 8 por% 38 e você chegará no IP, não no URL do domínio.

Suponha que este IP incorreto, usado para facilitar a explicação: 123.45.6.789

Você deve usar as 2 alternativas para todos os dígitos e pontos: o ponto é% 2E e o 0..9 são% 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]

Feio, pode ser reduzido com {1,3} e restringido a IP válido, mas como é para o seu IP, não há necessidade de fazê-lo.

Não esqueça as portas como ": 80". HTTP_HOST contém e SERVER_NAME não é confiável.

    
por 08.09.2014 / 16:02