Restrinja o acesso IP direto ao site

13

Quero restringir o acesso IP direto ao meu site. Encontrei várias soluções envolvendo .htaccess, mas nenhuma funcionou. Eu também encontrei uma solução através da configuração de hosts virtuais do apache, que estava funcionando bem até instalar 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 que eu desinstale o certificado SSL.

Aqui está a 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. Ficaria muito grato se alguém puder esclarecer o que estou fazendo de errado aqui. Obrigado.

Ivan
fonte
Eu acho que você não precisa usar = ServerName 192.168.1.1
ADM
Tentei isso também, não tem nenhum efeito.
22413 Ivan Ivan
Os VirtualHosts foram reordenados? Aquele com o erro 403 foi o primeiro vhost (padrão) antes?
precisa
Não, a ordem não mudou. Problema iniciado após a adição do certificado SSL, o que significa que o último foi simplesmente adicionado. Agora, se eu removê-lo completamente, ele não funcionará mais, então outra coisa também foi definitivamente alterada, mas parece que não consigo descobrir o que.
Ivan
aqui está a solução via htaccess serverfault.com/a/171260/273980
jsHate

Respostas:

12

E pronto, 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 para todas as configurações de host virtual, exceto aquela que precisa redirecionar / restringir o acesso direto ao IP.

Ivan
fonte
Isso causará problemas com clientes executando o IE6 e IE8. Se você concorda com isso, tudo bem. Eles devem atualizar seus navegadores antigos de qualquer maneira.
Vasili Syrakis
6

A resposta poderia ser muito mais simples.

Basta copiar isso na parte inferior 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>

Somente quando os visitantes acessarem pelo site www.example.com, ele poderá obter acesso ao servidor.

Stonyau
fonte
2

Você não pode desativar o acesso IP direto ao 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, fazer o download do certificado, ler o conteúdo e verificar se o nome do host está correto.

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

Vasili Syrakis
fonte
1
  1. Provavelmente, seu certificado foi emitido para example.com, não para 192.168.1.1, nem ambos; Portanto, os visitantes que usam https://192.168.1.1devem ter um erro SSL (porque a URL difere da do certificado).
  2. Você não tem um site 'SSL padrão' <VirtualHost *:443> SSLEngine on </VirtualHost>
  3. Você deve usar o apache com suporte SNI (existem alguns requisitos da 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)
filimônico
fonte
0

Eu acredito que é isso que você está procurando

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

user155813
fonte
1
Não, isso não tem nada a ver com o meu problema. Desejo bloquear o acesso ao site para aqueles que acessam o IP do meu site em vez do DNS.
22414 Ivan Ivan
Isso faz exatamente isso ... #
315131313
1
Não, isso bloqueia o acesso ao site pelo endereço IP do cliente. A questão está procurando uma maneira de bloquear o acesso ao site usando seu endereço IP.
precisa saber é o seguinte
0

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

figtrap
fonte
0

Isso pode ser fácil se você não colocar seus arquivos no diretório / var / www / html padrão. 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 esqueça de ativar seu host virtual, por exemplo:

sudo a2ensite example.com.conf
Mehdi
fonte
0

Em uma instalação do Apcahe com vários .confarquivos, a precedência vai para o primeiro arquivo carregado e depois para o segundo .. da mesma forma. Portanto, se você estiver no Ubuntu, os arquivos serão carregados em ordem lexicográfica; portanto, o "primeiro" .confarquivo a ser carregado será o 000-default.conf( portanto, o 000 em seu nome ) residindo no /etc/apache2/sites-available/diretório.

Portanto, para impedir que qualquer outra regra seja aplicada, precisamos colocar nossa regra no topo desse primeiro arquivo.

e você pode simplesmente anexar a seguinte regra a esse arquivo.

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

Tentou e testou na versão Ubuntu 16.4 x64 Apache > 2.4

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

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

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

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

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

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

basta colar no seu arquivo php e divirta-se!

Max Marley
fonte
1
Você poderia explicar as vantagens disso sobre as outras respostas?
030
este é o método mais simples que você pode usar para restringir o acesso direto ao seu site, sem editar as configurações do apache!
Max Marley