Restringir o acesso IP direto ao site

12

Eu quero restringir o acesso IP direto ao meu site. Eu encontrei várias soluções envolvendo .htaccess mas nenhum trabalho. Eu também encontrei uma solução via configuração de hosts virtuais apache que estava funcionando bem até que eu instalei um certificado SSL através do CPanel. Não tenho absolutamente nenhuma idéia do que foi alterado no arquivo httpd.conf, mas agora a configuração de redirecionamento não funciona mesmo se eu desinstalar o certificado SSL.

Aqui está minha configuração atual de hosts virtuais:

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 e nomes foram substituídos por genéricos. A parte "Redirect 403 /" não está funcionando desde a instalação do certificado SSL. Eu ficaria grato se alguém puder esclarecer o que estou fazendo de errado aqui. Obrigado.

    
por Ivan 22.06.2014 / 20:35

9 respostas

11

E voila, a correção:

<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>

A solução foi simplesmente substituir o IP pelo nome de domínio de todas as configurações do virtualhost, exceto pelo que precisa redirecionar / restringir o acesso IP direto.

    
por 23.06.2014 / 11:48
5

A resposta pode ser muito mais simples.

Copie isso para o fundo do httpd.conf (geralmente localizado em / 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>

Então, somente quando os visitantes acessarem por www.example.com, ele poderá obter acesso ao servidor.

    
por 06.08.2015 / 09:37
2

Você não pode desabilitar o acesso IP direto ao seu servidor por HTTPS porque o nome do host do seu host virtual é criptografado dentro do certificado SSL.

Os clientes devem se conectar ao seu endereço IP, baixar o certificado, ler o conteúdo e depois verificar se o nome do host está correto.

A única outra maneira é impor SNI , mas você causará problemas para usuários que estão navegando com versões mais antigas do Internet Explorer.

    
por 23.06.2014 / 02:55
1
  1. Provavelmente seu certificado é emitido para example.com, não para 192.168.1.1, nem para ambos; Assim, os visitantes que usam https://192.168.1.1 devem ter um erro de SSL (porque o URL difere do do certificado).
  2. Você não tem um site 'padrão SSL' <VirtualHost *:443> SSLEngine on </VirtualHost>
  3. Você deve usar o apache com suporte a SNI (há alguns requisitos de versão libSSL e Apache) para usar o SSL por nome de host (consulte Usando vários certificados SSL no Apache com um endereço IP
por 22.06.2014 / 23:41
0

Eu acredito que isso é o que você está procurando

link

    
por 22.06.2014 / 22:03
0

Para adicionar outra resposta, mod_security, se valer a pena configurar, tem regras para proibir o acesso ao servidor por endereço IP.

    
por 17.08.2016 / 19:51
0

Isso pode ser fácil se você não colocar seus arquivos no diretório padrão / var / www / html. Basta criar um outro diretório, digamos / web por exemplo:

mkdir /web 
mkdir /web/example

copie seus arquivos e mude o chown:

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

Em seguida, crie um host virtual com a seguinte configuração:

<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ão se esqueça de ativar seu host virtual, por exemplo:

sudo a2ensite example.com.conf
    
por 04.03.2018 / 01:29
0

Em uma configuração Apcahe com vários arquivos .conf , a precedência vai para o primeiro arquivo carregado e depois para o segundo..likewise. Então, se você está no Ubuntu, os arquivos são carregados em ordem lexicográfica, então o primeiro arquivo "%".conf que será carregado será o 000-default.conf ( portanto o 000 em seu nome ) sob o diretório /etc/apache2/sites-available/ .

Então, para evitar que qualquer outra regra seja aplicada, precisamos colocar nossa regra no topo desse primeiro arquivo.

e você pode simplesmente preceder a seguinte regra para esse arquivo.

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

Testado e testado no Ubuntu 16.4 x64 Versão do Apache > 2.4

Se você estiver executando uma versão inferior do Apache, tente substituir Require all denied do código acima para ...

<Location />
    Order deny,allow
    Deny from all
</Location>
    
por 05.06.2018 / 03:13
-2

Eu escrevi este código simples em PHP para restringir o acesso ip direto!

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

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

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

apenas cole no seu arquivo php e divirta-se!

    
por 19.04.2017 / 15:14