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
eAllow
(obsoleto em versões posteriores): Anteriormente usado em versões mais antigas do Apache, mas substituído pela diretivaRequire
.
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.