Poupe até 53% em Servidores VPS, escolha agora. Oferta limitada.

Otimizar Apache contra ataques DDoS e sobrecarga no Ubuntu 22.04

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:

  1. Instalar e configurar o módulo mod_evasive
  2. Ajustar limites de conexão no Apache
  3. Configurar rate limiting com mod_limitipconn
  4. Implementar timeout otimizado
  5. Ativar compressão e cache para reduzir carga
  6. 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

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.

Conheça nossos planos de VPS com proteção DDoS

  • 0 Os usuários acharam isso útil
  • apache, ddos, mod-evasive, ubuntu, seguranca, rate-limiting, AviraHost
Esta resposta foi útil?

Artigos Relacionados

Instalando painel de gerenciamento de hospedagem VirtualMin.

O virtualmin é um painel de gerenciamento de hospedagem de sites gratuito, que é suportado por...

Como usar a ferramenta oficial de acesso remoto do Windows no PC e celular

1. Pelo menu Iniciar, acesse os “Acessórios do Windows” e abra o “Conexão de Área de Trabalho...

Como acessar o painel de gerenciamento dos meus Serviços.

Para acessar o painel de gerenciamento do seu serviço basta seguir o passo á passo abaixo.   1....

Compreendendo o Servidor VPS: O que é e Como Funciona!

Um servidor VPS (Virtual Private Server) é uma solução de hospedagem na qual um servidor físico é...

Como trocar a senha do usuário root do servidor VPS ou Dedicado.

Para trocar a senha do usuário root em um servidor VPS da AviraHost, você pode seguir os...