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 da web apache no CentOS e preciso desativar a capacidade das pessoas acessarem o site usando o endereço IP do servidor em um navegador da web. Quero que, quando alguém tentar navegar para o endereço IP, receber uma mensagem de erro proibida.

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

Amr Elkhedewy
fonte

Respostas:

10

Basta configurar o host virtual padrão. Há um exemplo comentado httpd.confou faz algo trivial como:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /var/www/html
</VirtualHost>
Michael Hampton
fonte
Bem, Isso resolveu o meu problema .. muito obrigado para todos vocês :)
Amr Elkhedewy
7

Você pode conseguir isso com mod_rewrite (no .htaccessarquivo, ou no contexto padrão do servidor, ou em um VirtualHost separado, onde 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 indica que, se o cabeçalho HTTP_HOST corresponder ao endereço IP 1.2.3.4, qualquer solicitação deverá ser atendida com a 403 Forbidden. Qualquer solicitação que tenha outro cabeçalho HTTP_HOST (por exemplo, um com o nome de domínio real e não o endereço IP) não deve ser afetado.

Jenny D
fonte
Não funcionou em httpd.conf
Amr Elkhedewy
funcionou através do arquivo .htaccess, preciso que seja feito nas configurações do Apache.
Amr Elkhedewy
2
Você reiniciou o apache após editar o httpd.conf? Caso contrário, o apache não saberá sobre a nova configuração. Isso é diferente de .htaccess, que também é analisado sem reiniciar o apache.
Etagenklo 28/05
Claro, mas nada mudou #
Amr Elkhedewy 28/05
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 retornar 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 cliente da web. Todos os outros pedidos seriam aprovados.

No entanto, você pode 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: https://httpd.apache.org/docs/2.0/rewrite/rewrite_guide.html#canonicalurl

Referência: http://en.wikipedia.org/wiki/URL_normalization

jeffatrackaid
fonte
Não funcionou em httpd.conf
Amr Elkhedewy
funcionou através do arquivo .htaccess, preciso que seja feito nas configurações do Apache.
Amr Elkhedewy
Ele funcionará no httpd.conf, mas certifique-se de ativar o mecanismo de reescrita e colocá-lo dentro das diretivas de host virtual. Caso contrário, será aplicado apenas ao seu servidor padrão. Veja: httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond
jeffatrackaid
1

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

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

Suponha que esse IP incorreto seja 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 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, ele pode ser reduzido com {1,3} e restringido ao IP válido, mas, como é para o seu IP, não é necessário fazê-lo.

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

shijie-hk
fonte