13 min de leitura · Guia técnico
Otimizar Apache contra ataques DDoS é essencial para manter a estabilidade do servidor web sob alta carga maliciosa. Para proteger seu Apache no Ubuntu 22.04, siga estes passos:
- Instalar e configurar o módulo mod_evasive
- Ajustar limites de conexão no Apache
- Configurar rate limiting com mod_limitipconn
- Implementar timeout otimizado
- Ativar compressão e cache para reduzir carga
- Configurar monitoramento de logs em tempo real
Pré-requisitos
- Servidor Ubuntu 22.04 LTS com Apache 2.4 instalado
- Acesso root ou usuário com privilégios sudo
- Conhecimento básico de linha de comando Linux
- Backup atual da configuração do Apache
- Pelo menos 2GB de RAM disponível para otimizações
Instalando e configurando mod_evasive
O mod_evasive é a primeira linha de defesa contra ataques DDoS no Apache. Este módulo monitora requisições por IP e bloqueia automaticamente comportamentos suspeitos.
Instale o módulo mod_evasive:
sudo apt update
sudo apt install libapache2-mod-evasive
Ative o módulo no Apache:
sudo a2enmod evasive
sudo systemctl reload apache2
Crie o arquivo de configuração personalizado:
sudo nano /etc/apache2/mods-available/evasive.conf
Adicione a configuração otimizada:
<IfModule mod_evasive24.c>
DOSHashTableSize 2048
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 300
DOSLogDir /var/log/apache2/evasive
DOSEmailNotify [email protected]
DOSWhitelist 127.0.0.1
DOSWhitelist 192.168.1.*
</IfModule>
Crie o diretório de logs e defina permissões:
sudo mkdir -p /var/log/apache2/evasive
sudo chown www-data:www-data /var/log/apache2/evasive
sudo chmod 755 /var/log/apache2/evasive
Reinicie o Apache para aplicar as configurações:
sudo systemctl restart apache2
Output esperado: O Apache deve reiniciar sem erros e o mod_evasive estará ativo, monitorando requisições automaticamente.
Configurando limites de conexão Apache
Ajustar os limites de conexão do Apache previne sobrecarga do servidor durante picos de tráfego legítimo ou ataques coordenados.
Edite o arquivo de configuração principal:
sudo nano /etc/apache2/apache2.conf
Adicione as configurações de limite ao final do arquivo:
# Configurações anti-DDoS
ServerLimit 16
MaxRequestWorkers 400
ThreadsPerChild 25
MaxConnectionsPerChild 1000
# Timeouts otimizados
Timeout 30
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
# Limites de requisição
LimitRequestBody 10485760
LimitRequestFields 100
LimitRequestFieldSize 8190
LimitRequestLine 4094
Para servidores com mais recursos, ajuste o módulo mpm_prefork:
sudo nano /etc/apache2/mods-available/mpm_prefork.conf
Configure os valores otimizados:
<IfModule mpm_prefork_module>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
MaxRequestWorkers 150
MaxConnectionsPerChild 1000
</IfModule>
Teste a configuração antes de aplicar:
sudo apache2ctl configtest
Output esperado: "Syntax OK" indica que a configuração está correta.
Implementando rate limiting com mod_limitipconn
O rate limiting complementa o mod_evasive controlando conexões simultâneas por IP de forma mais granular.
Instale o módulo mod_limitipconn:
sudo apt install libapache2-mod-limitipconn
sudo a2enmod limitipconn
Configure limites por virtual host editando seu arquivo de configuração:
sudo nano /etc/apache2/sites-available/000-default.conf
Adicione dentro do bloco VirtualHost:
<VirtualHost *:80>
# Configurações existentes...
# Rate limiting por IP
<Location />
MaxConnPerIP 10
NoIPLimit image/*
NoIPLimit text/css
NoIPLimit application/javascript
</Location>
# Proteção específica para áreas sensíveis
<Location /wp-admin>
MaxConnPerIP 3
</Location>
<Location /login>
MaxConnPerIP 2
</Location>
</VirtualHost>
Recarregue a configuração:
sudo systemctl reload apache2
Atenção: Teste os limites com tráfego real antes de implementar em produção para evitar bloquear usuários legítimos.
Otimizando compressão e cache
A compressão e cache reduzem significativamente a carga do servidor, tornando-o mais resistente a ataques de volume.
Ative os módulos necessários:
sudo a2enmod deflate
sudo a2enmod expires
sudo a2enmod headers
sudo a2enmod rewrite
Crie arquivo de configuração para compressão:
sudo nano /etc/apache2/conf-available/compression.conf
Configure a compressão otimizada:
<IfModule mod_deflate.c>
# Comprimir tipos de arquivo específicos
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
# Excluir arquivos já comprimidos
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|zip|gz|bz2)$ no-gzip dont-vary
# Configurar nível de compressão
DeflateCompressionLevel 6
</IfModule>
Configure cache de arquivos estáticos:
sudo nano /etc/apache2/conf-available/expires.conf
Adicione regras de expiração:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/css "access plus 1 week"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType application/javascript "access plus 1 week"
ExpiresByType application/x-javascript "access plus 1 week"
ExpiresByType text/javascript "access plus 1 week"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 2 days"
</IfModule>
Ative as configurações:
sudo a2enconf compression
sudo a2enconf expires
sudo systemctl reload apache2
Configurando monitoramento em tempo real
O monitoramento em tempo real permite detectar e responder rapidamente a ataques DDoS em andamento.
Instale ferramentas de monitoramento:
sudo apt install htop iotop nethogs fail2ban
Configure o Fail2Ban para Apache:
sudo nano /etc/fail2ban/jail.local
Adicione configuração específica para Apache:
[apache-auth]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 3
bantime = 3600
[apache-badbots]
enabled = true
port = http,https
filter = apache-badbots
logpath = /var/log/apache2/access.log
maxretry = 2
bantime = 86400
[apache-noscript]
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/log/apache2/access.log
maxretry = 6
bantime = 86400
[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
logpath = /var/log/apache2/error.log
maxretry = 2
bantime = 86400
Crie script de monitoramento personalizado:
sudo nano /usr/local/bin/apache-monitor.sh
Adicione o script de monitoramento:
#!/bin/bash
# Monitor de conexões Apache
CONNECTIONS=$(netstat -an | grep :80 | wc -l)
THRESHOLD=200
if [ $CONNECTIONS -gt $THRESHOLD ]; then
echo "$(date): ALERTA - $CONNECTIONS conexões ativas" >> /var/log/apache-monitor.log
# Top 10 IPs com mais conexões
netstat -an | grep :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -10 >> /var/log/apache-monitor.log
fi
# Verificar uso de CPU do Apache
CPU_USAGE=$(ps aux | grep apache2 | awk '{sum += $3} END {print sum}')
if (( $(echo "$CPU_USAGE > 80" | bc -l) )); then
echo "$(date): ALERTA - Apache usando ${CPU_USAGE}% CPU" >> /var/log/apache-monitor.log
fi
Torne o script executável e configure cron:
sudo chmod +x /usr/local/bin/apache-monitor.sh
sudo crontab -e
Adicione linha para executar a cada minuto:
* * * * * /usr/local/bin/apache-monitor.sh
Inicie o Fail2Ban:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Problemas comuns e como resolver
Sintoma: Apache não inicia após configurar mod_evasive
Causa: Erro de sintaxe no arquivo de configuração ou módulo não instalado corretamente.
Solução: Execute sudo apache2ctl configtest para verificar erros de sintaxe. Se necessário, reinstale o módulo com sudo apt install --reinstall libapache2-mod-evasive e verifique se está habilitado com apache2ctl -M | grep evasive.
Sintoma: Usuários legítimos sendo bloqueados pelo mod_evasive
Causa: Limites muito restritivos ou falta de whitelist para IPs confiáveis.
Solução: Aumente os valores de DOSPageCount e DOSSiteCount no arquivo de configuração. Adicione IPs de CDNs e bots de busca na whitelist usando DOSWhitelist IP_ADDRESS. Para redes corporativas, use wildcards como DOSWhitelist 192.168.1.*.
Sintoma: Alto uso de CPU mesmo com otimizações
Causa: Configuração inadequada do MPM ou ataques muito intensos.
Solução: Monitore com htop e ajuste MaxRequestWorkers baseado na RAM disponível. Para servidores com 4GB RAM, use MaxRequestWorkers 200. Se o ataque persistir, considere implementar um proxy reverso como Nginx na frente do Apache.
Sintoma: Logs do mod_evasive não são criados
Causa: Permissões incorretas no diretório de logs ou caminho inexistente.
Solução: Verifique se o diretório existe com ls -la /var/log/apache2/evasive. Corrija permissões com sudo chown www-data:www-data /var/log/apache2/evasive e sudo chmod 755 /var/log/apache2/evasive. Reinicie o Apache após corrigir.
Perguntas frequentes sobre otimizar Apache contra ataques DDoS
O que é mod_evasive e como ele protege o Apache?
O mod_evasive é um módulo do Apache que detecta e bloqueia ataques DDoS monitorando requisições por IP. Ele limita o número de requisições por segundo e por página, bloqueando temporariamente IPs suspeitos. É uma das primeiras linhas de defesa contra ataques de força bruta HTTP.
Qual a diferença entre rate limiting e mod_evasive?
Rate limiting controla a velocidade de requisições de forma geral, enquanto mod_evasive foca especificamente em detectar padrões de ataque DDoS. O mod_evasive bloqueia IPs automaticamente quando detecta comportamento suspeito, já o rate limiting apenas limita a velocidade sem necessariamente bloquear.
Como saber se meu Apache está sendo atacado por DDoS?
Sinais incluem alta carga de CPU, muitas conexões simultâneas no netstat, logs do Apache com muitas requisições do mesmo IP e lentidão extrema do servidor. Use comandos como 'netstat -an | grep :80 | wc -l' para contar conexões ativas na porta 80.
É seguro ativar mod_evasive em sites de alto tráfego?
Sim, mas requer configuração cuidadosa dos limites para evitar bloquear usuários legítimos. Sites com muito tráfego devem aumentar os valores de DOSPageCount e DOSSiteCount, e configurar uma whitelist para IPs confiáveis como CDNs e bots de busca.
Posso usar mod_evasive junto com firewall como UFW?
Sim, mod_evasive e UFW trabalham em camadas diferentes e se complementam. O mod_evasive atua no nível da aplicação Apache, enquanto UFW opera no nível de rede. Usar ambos oferece proteção mais robusta contra diferentes tipos de ataques.
Conclusão
Implementar proteções contra DDoS no Apache requer uma abordagem em camadas combinando mod_evasive, rate limiting e monitoramento ativo. As configurações apresentadas oferecem proteção robusta mantendo a performance para usuários legítimos.
- Configure mod_evasive com limites adequados ao seu perfil de tráfego
- Implemente monitoramento contínuo para detectar ataques rapidamente
- Teste todas as configurações em ambiente controlado antes da produção
Leia também
- Instalando painel de gerenciamento de hospedagem VirtualMin.
- Como usar a ferramenta oficial de acesso remoto do Windows no PC e celular
- Como acessar o painel de gerenciamento dos meus Serviços.
Precisa de ajuda com proteção DDoS?
Nossa equipe especializada pode configurar proteções avançadas contra DDoS em seu servidor VPS. Oferecemos suporte técnico especializado para implementar todas essas otimizações de forma segura.