Pesquisa de site

Como conceder ou negar acesso a sites no servidor Apache


Apache é um dos servidores web mais utilizados no mundo, oferecendo uma plataforma robusta e flexível para hospedagem de sites.

Ao gerenciar um site, talvez seja necessário controlar quem pode acessar determinados recursos ou sites inteiros. Por exemplo, você pode querer bloquear endereços IP específicos ou permitir acesso apenas de determinadas regiões ou redes. O Apache torna isso possível usando um recurso chamado Controle de Acesso.

Neste guia, percorreremos as etapas para permitir ou negar acesso a sites no Apache usando uma configuração simples e legível.

Noções básicas de controle de acesso Apache

O Apache usa duas diretivas principais para controlar o acesso:

  • Exigir: é usado para permitir acesso a determinados usuários, endereços IP ou grupos.
  • Deny e Allow (obsoleto em versões posteriores): Anteriormente usado em versões mais antigas do Apache, mas substituído pela diretiva Require.

Nas versões mais recentes do Apache (2.4 e posteriores), a diretiva Require é a principal forma de gerenciar controles de acesso.

Etapa 1: edite o arquivo de configuração do Apache

Os arquivos de configuração do Apache podem ser encontrados em locais diferentes dependendo do seu sistema.

Por exemplo:

  • Ubuntu/Debian: /etc/apache2/apache2.conf ou dentro do arquivo host virtual (por exemplo, /etc/apache2/sites-available/your-site .conf).
  • CentOS/RHEL: /etc/httpd/conf/httpd.conf ou o arquivo host virtual (por exemplo, /etc/httpd/conf.d/your- site.conf).

Use um editor de texto como nano ou vi para editar esses arquivos.

Etapa 2: configurar o controle de acesso usando a diretiva Require

A diretiva Require especifica quem tem acesso permitido ou negado. Vejamos exemplos de permissão e negação de acesso.

Exemplo 1: Negar acesso de endereços IP específicos

Para negar acesso de endereços IP específicos, use a diretiva Require not.

Por exemplo, para bloquear o IP 192.168.1.100:

<Directory /var/www/html>
    Require all granted
    Require not ip 192.168.1.100
</Directory>

Nesse caso:

  • Exigir todos concedidos: permite acesso a todos os endereços IP.
  • Exigir não ip 192.168.1.100: Nega acesso ao endereço IP especificado.

Exemplo 2: Permitindo acesso apenas a endereços IP específicos

Se você deseja permitir acesso apenas a um IP específico ou intervalo de IPs, use o seguinte:

<Directory /var/www/html>
    Require ip 192.168.1.0/24
</Directory>

Aqui, Require ip 192.168.1.0/24 permite acesso apenas a IPs dentro do intervalo 192.168.1.0 a 192.168.1.255 (uma rede local comum faixa).

Exemplo 3: Negar acesso a todos, exceto IPs específicos

Você pode querer negar acesso a todos, exceto a um determinado IP ou grupo de IPs.

<Directory /var/www/html>
    Require all denied
    Require ip 192.168.1.10
</Directory>

Nesse caso:

  • Exigir todos negados: bloqueia o acesso de todos.
  • Exigir ip 192.168.1.10: Permite acesso apenas ao endereço IP 192.168.1.10.

Exemplo 4: Restringir acesso por nome de host

Você também pode restringir o acesso com base em nomes de host. Por exemplo, se quiser permitir acesso apenas a usuários de um domínio específico (como example.com), você pode usar:

<Directory /var/www/html>
    Require host example.com
</Directory>

Isso permitiria que apenas visitantes de example.com acessassem o site.

Etapa 3: bloquear países inteiros no Apache

Para bloquear o tráfego de países específicos, você precisa instalar um módulo adicional chamado mod_maxminddb, que usa um banco de dados GeoIP para determinar o país com base no endereço IP do visitante.

Instale mod_maxminddb no Linux

Para usar o módulo mod_maxminddb, você precisa instalá-lo e configurá-lo.

No Ubuntu/Debian, execute:

sudo apt update
sudo apt install libmaxminddb0 libmaxminddb-dev mmdb-bin apache2-dev
git clone https://github.com/maxmind/mod_maxminddb.git
cd mod_maxminddb
sudo apxs -i -a -c mod_maxminddb.c

No CentOS/RHEL, execute:

sudo yum install epel-release
sudo yum install libmaxminddb libmaxminddb-devel mmdb-bin httpd-devel
git clone https://github.com/maxmind/mod_maxminddb.git
cd mod_maxminddb
sudo apxs -i -a -c mod_maxminddb.c

Baixe o banco de dados MaxMind GeoIP

MaxMind fornece um banco de dados GeoLite2 gratuito que podemos usar para determinar o país com base em endereços IP.


tar -xvzf GeoLite2-Country.tar.gz
sudo mkdir -p /usr/share/GeoIP
sudo mv GeoLite2-Country.mmdb /usr/share/GeoIP/

Configure o Apache para usar mod_maxminddb

Agora, precisamos dizer ao Apache para usar o módulo mod_maxminddb e o banco de dados GeoIP.

sudo nano /etc/apache2/apache2.conf   # On Ubuntu/Debian
sudo nano /etc/httpd/conf/httpd.conf  # On CentOS/RHEL

Adicione a seguinte configuração para ativar mod_maxminddb e especifique o caminho para o banco de dados GeoIP:

<IfModule mod_maxminddb.c>
    MaxMindDBEnable On
    MaxMindDBFile COUNTRY_DB /usr/share/GeoIP/GeoLite2-Country.mmdb
    MaxMindDBEnv MM_COUNTRY_CODE COUNTRY_DB/country/iso_code
</IfModule>

Adicione controle de acesso com base no país

Agora que o módulo está configurado, você pode usá-lo para bloquear ou permitir o acesso com base no país do visitante. Por exemplo, para bloquear o acesso de usuários na China (CN) e na Rússia (RU), use esta configuração em seu arquivo de host virtual Apache:

<Directory /var/www/html>
    SetEnvIf MM_COUNTRY_CODE CN BlockCountry
    SetEnvIf MM_COUNTRY_CODE RU BlockCountry
    Require all granted
    Require not env BlockCountry
</Directory>

Após adicionar as novas configurações, reinicie o Apache para aplicar as alterações:

sudo systemctl restart apache2  # On Ubuntu/Debian
sudo systemctl restart httpd    # On CentOS/RHEL

Para confirmar se o módulo está instalado corretamente, você pode verificar se mod_maxminddb está carregado no Apache:

apachectl -M | grep maxminddb

Se estiver carregado corretamente, você verá uma saída semelhante a:

maxminddb_module (shared)
Conclusão

Controlar o acesso ao seu site é um aspecto essencial do gerenciamento da segurança e funcionalidade do seu servidor web. Os recursos de controle de acesso do Apache permitem permitir ou negar acesso com base em endereços IP, nomes de host ou até mesmo localização geográfica.

Esteja você bloqueando bots, restringindo recursos internos ou protegendo seu site de usuários não autorizados, o Apache torna simples e eficaz a implementação desses controles.

Artigos relacionados: