Desabilitar o acesso IP direto no apache

1

Este é o meu arquivo httpd.config Como desativar o acesso IP direto? Se alguém digitar o endereço IP do site, ele não deverá redirecionar para o nome de domínio padrão ou o site que é xxx.com neste exemplo

    <VirtualHost ipaddress:8080>

            ServerName xxx.com
            ServerAlias www.xxx.com
            ServerAdmin [email protected]
            DocumentRoot /home/admin/web/xxx.com/public_html
            ScriptAlias /cgi-bin/ /home/admin/web/xxx.com/cgi-bin/
            Alias /vstats/ /home/admin/web/xxxcom/stats/
            Alias /error/ /home/admin/web/xxx.com/document_errors/
            .
            .
            .
    </VirtualHost>
    
por jonnaans 04.04.2017 / 15:56

3 respostas

6

Estou expandindo meu comentário para uma resposta a fim de fornecer a configuração detalhada em resposta à consulta do OP. Minha recomendação é mover sua configuração para blocos do VirtualHost para permitir maior flexibilidade. Apenas os bits essenciais são mostrados aqui:

<VirtualHost *:80>
    ServerName default
    DocumentRoot /home/admin/web/xxx.com/public_html
    <Location />
        Require all denied
    </Location>
</VirtualHost>

<VirtualHost *:80>
    ServerName domain.com
    DocumentRoot /home/admin/web/xxx.com/public_html
</VirtualHost>

default pode ser qualquer nome ou endereço IP do servidor.

domain.com é o domínio para o qual você deseja que seu servidor responda.

Explicação: Quando chamado com o endereço IP, o apache elabora a solicitação com o VirtualHost padrão. O primeiro VirtualHost definido é o padrão, independentemente de seu ServerName. Naturalmente, definir o nome do servidor para o endereço IP também funciona e deixará o servidor padrão livre para ser usado de outra forma. O bloco de localização nega todas as solicitações para todo o VirtualHost.

Editar: mais tarde, vi que a pergunta estava marcada com apache-2.2 , enquanto minha resposta usa a sintaxe apache-2.4 . Em apache-2.2 , a linha Require all denied deve ser substituída por duas linhas: Order deny,allow e Deny from all . Além disso, um NameVirtualHost *:80 é necessário antes das definições de VirtualHost .

Atualização: A pergunta foi atualizada, então acho melhor fornecer a configuração para apache-2.2 , incluindo todas as linhas necessárias. A mesma explicação acima se aplica.

Listen 8080
NameVirtualHost ipaddress:8080
<Directory "/home/admin/web/xxx.com/public_html">
    Order allow,deny
    Allow from all
</Directory>

<VirtualHost ipaddress:8080>
    ServerName ipaddress
    DocumentRoot /home/admin/web/xxx.com/public_html
    <Location />
        Order deny,allow
        Deny from all
    </Location>
</VirtualHost>

<VirtualHost ipaddress:8080>
    ServerName xxx.com
    DocumentRoot /home/admin/web/xxx.com/public_html
</VirtualHost>

Comentário: Concordo que existem outras soluções válidas; no entanto, é assim que eu gosto de organizar meus arquivos de configuração, com restrições de segurança dentro de Directory ou Location blocos, para saber onde procurá-los.

    
por 04.04.2017 / 17:16
2

o IP sempre será acessado (depois de tudo o que seus domínios apontam), o que você pode fazer é verificar qual nome do host a solicitação foi usada para fazer:

Para instâncias, use mod-rewrite:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^192\.168\.0\.1$
RewriteRule .* - [F,L]

você também pode optar por redirecionar todos os nomes de host dos quais não gosta

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.thedomainiwant\.com$ [NC]
RewriteRule .* http://www.thedomainiwant.com%{REQUEST_URI} [R=301,L]

alternativamente use https: // a reescrita; -)

    
por 04.04.2017 / 16:32
1

Ainda outra maneira de usar mod_setenvif

 SetEnvIf HTTP_HOST ^[0-9].+[0-9]$ HOST_NODNS
 Deny from env=HOST_NODNS
    
por 04.04.2017 / 18:01

Tags