18 Dicas de Segurança e Reforço do Servidor Web Apache

O servidor web Apache é um dos mais populares e amplamente utilizados servidores web para hospedar arquivos e sites. É fácil de instalar e configurar para atender às suas necessidades de hospedagem. No entanto, as configurações padrão não são seguras o suficiente para oferecer a proteção necessária que seu site precisa.

Neste guia, examinamos algumas dicas e truques de endurecimento do servidor Apache que você pode implementar para fortalecer a segurança do seu servidor web.

1. Como ocultar a versão do Apache e informações sobre o sistema operacional

Por padrão, o servidor web Apache exibe sua versão caso você navegue na URL errada de um site. Abaixo está um exemplo de uma página de erro indicando que a página não pode ser encontrada no site. A última linha indica a versão do Apache, o sistema operacional anfitrião, o endereço IP e a porta em que está escutando.

Show Apache Version Info

Não é uma boa ideia exibir informações do seu servidor web, pois isso pode ser um bom presente para hackers em sua missão de reconhecimento. Para adicionar uma camada de segurança e tornar mais difícil para os hackers, é recomendável ocultar as informações do servidor web.

Para fazer isso, abra o arquivo de configuração padrão do Apache em distribuições baseadas em Debian.

$ sudo vim /etc/apache2/apache2.conf

Para sistemas baseados em RHEL como RHEL, Fedora, CentOS, Rocky e AlmaLinux.

$ sudo vim /etc/httpd/conf/httpd.conf

Adicione as seguintes linhas no final do arquivo.

ServerTokens Prod
ServerSignature Off

Salve as alterações e reinicie o servidor web Apache.

$ sudo systemctl restart apache2   [On Debian, Ubuntu and Mint]
$ sudo systemctl restart httpd     [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

Agora recarregue o site e, desta vez, as informações do servidor web não serão exibidas.

Check Apache Version Info

2. Desativar a listagem de diretórios no Apache

Por padrão, o Apache permite a listagem de diretórios, e os visitantes podem ver quaisquer arquivos ou diretórios que você possa ter no diretório Document Root.

Para demonstrar isso, vamos criar um diretório chamado test.

$ sudo mkdir -p /var/www/html/test

Em seguida, navegaremos até o diretório e criaremos alguns arquivos.

$ cd /var/www/html/test
$ sudo touch app.py main.py

Agora, se acessarmos a URL, http://localhost/test, poderemos ver a listagem de diretórios.

Disable Apache Directory Listing

Para desativar a listagem de diretórios, vá para o arquivo de configuração principal do Apache e procure pelo atributo ‘Directory‘. Defina o parâmetro ‘Options‘ para '-Indexes' conforme mostrado.

<Directory /opt/apache/htdocs>
Options -Indexes
</Directory>

Recarregue o Apache e, desta vez, quando visitar a URL, os diretórios não serão mais exibidos.

Disable Directory Listing in Apache

3. Atualizar regularmente o Apache

É sempre recomendado manter todas as suas aplicações atualizadas, pois as últimas aplicações vêm com correções de bugs e patches de segurança que abordam vulnerabilidades subjacentes presentes em versões mais antigas do software.

Como tal, é recomendado atualizar regularmente suas aplicações para suas últimas versões.

$ sudo apt update && sudo apt upgrade [On Debian, Ubuntu and Mint]
$ sudo dnf upgrade                    [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
Update System Packages

4. Use a Criptografia HTTPS no Apache

O Apache, por padrão, utiliza o protocolo HTTP, que é um protocolo fraco e inseguro que está suscetível a espionagem. Para melhorar a segurança do seu site e, mais ainda, melhorar o ranking de SEO do Google, considere criptografar seu site usando um certificado SSL.

Ao fazer isso, ele altera o protocolo HTTP padrão para HTTPS, tornando assim mais difícil para qualquer pessoa interceptar e decifrar a comunicação enviada de e para o servidor.

Confira como proteger o servidor web Apache usando Let’s Encrypt SSL no Linux.

5. Ativar a Segurança de Transporte Estrito de HTTP (HSTS) para o Apache

Além de criptografar seu site com um certificado TLS/SSL, considere implementar o mecanismo de segurança web HSTS em cima do HTTPS.

HTTP Strict Transport Security (HSTS) é um mecanismo de política que protege sites de ataques de homem-no-meio e sequestro de cookies. Isso acontece quando atacantes degradam o protocolo HTTPS para o protocolo HTTP inseguro.

HSTS permite que o servidor web declare estritamente que os navegadores da web devem interagir apenas com ele via HTTPS, e nunca através do protocolo HTTP.

Para habilitar HSTS, certifique-se de que seu site está rodando em HTTPS e possui um certificado TLS/SSL válido.

Em seguida, habilite o módulo de cabeçalhos para o Apache:

$ sudo a2enmod headers

Então recarregue o Apache para aplicar as mudanças.

$ sudo systemctl restart apache2

Depois, acesse o arquivo de configuração do host virtual do seu domínio.

$ sudo vim /etc/apache2/sites-available/mydomain.conf

Em seguida, adicione esta linha dentro do bloco <VirtualHost *:443>:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Isso se parece com o seguinte.

<VirtualHost *:443>
        # .....
        # ....
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</VirtualHost>

O parâmetro max-age instrui os navegadores da web a acessar seu site apenas usando HTTPS pelos próximos um ano (31536000 = 1 ano).

Por fim, reinicie o Apache para que a política HSTS tenha efeito.

$ sudo systemctl restart apache2

6. Habilite o HTTP/2 no Apache

Em 2015, o HTTP/2 foi lançado, sendo uma nova versão do protocolo HTTP que busca resolver diversos problemas que os criadores do HTTP/1.1 não previram.

Embora HTTP/1.1 ainda seja amplamente utilizado, está associado a problemas de desempenho relacionados ao uso de várias conexões TCP para processar várias solicitações do navegador, o que leva a um alto consumo de recursos no lado do cliente, resultando em desempenho de rede degradado.

Conforme as aplicações cresceram em complexidade e funcionalidade, HTTP/2 foi criado para resolver as deficiências de HTTP/1.1 que incluem cabeçalhos HTTP longos, velocidades de carregamento de páginas da web lentas e degradação geral de desempenho.

HTTP/2 oferece mais proteção e privacidade do que seu antecessor. Igualmente importante, é o desempenho aprimorado por meio do uso de fluxos multiplexados de dados. Com HTTP/2, uma única conexão TCP garante a utilização eficiente da largura de banda, mesmo ao transmitir vários fluxos de dados.

Confira como habilitar o HTTP/2 no servidor web Apache usando:

7. Restringir o Acesso a Diretórios Sensíveis no Apache

Outra medida de segurança que você pode tomar é limitar o acesso a diretórios que podem conter informações sensíveis, como dados de usuários, logs e arquivos de configuração.

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html

    # Other virtual host settings

    <Directory /var/www/html/sensitive_directory>
        Require all denied
    </Directory>
</VirtualHost>

No configuração acima, o Require all denied nega o acesso a qualquer pessoa tentando acessar arquivos em /diretório_sensível.

Salve as alterações e feche o arquivo. Em seguida, reinicie o Apache para que as alterações entrem em vigor.

8. Desative a Diretiva ServerSignature no Apache

A diretiva ServerSignature no arquivo de configuração do Apache acrescenta um rodapé aos documentos gerados pelo servidor que contêm informações sobre a configuração do seu servidor web, como a versão e o sistema operacional no qual está sendo executado. Expor detalhes cruciais sobre o seu servidor web a atores maliciosos aumentará significativamente as chances de um ataque.

Para evitar a exposição de tais informações, é necessário desativar essa diretiva no arquivo de configuração do Apache:

ServerSignature Off

Salve as alterações e reinicie novamente o Apache para que as alterações entrem em vigor.

$ sudo systemctl restart apache2

9. Defina a Diretiva ‘ServerTokens’ para ‘Prod’

A diretiva ‘ServerTokens‘ controla quais informações o servidor envia, incluindo a versão do Apache (versão principal e secundária), sistema operacional e o tipo de servidor web em execução.

A menor quantidade de informações que você gostaria de expor ao público é que o servidor web é Apache. Qualquer outra informação exporia seu servidor a possíveis ataques. Portanto, é recomendado definir a diretiva ‘ServerTokens‘ no arquivo de configuração do Apache para ‘prod‘.

ServerTokens Off

Como sempre, salve as alterações e certifique-se de reiniciar o Apache.

10. Proteja o Apache com o Fail2ban

Fail2ban é um aplicativo de prevenção de intrusões de código aberto que protege sistemas Linux de ameaças externas, incluindo ataques de negação de serviço (DoS) e força bruta. Ele funciona monitorando constantemente os logs do sistema em busca de atividades maliciosas e banindo hosts que correspondem a padrões que imitam comportamentos de ataque.

Fail2ban pode ser configurado para proteger o Apache de ataques de DoS monitorando constantemente os logs do Apache em busca de tentativas de login malsucedidas e banindo temporariamente IPs ofensivos.

Confira como instalar Fail2ban no Linux usando:

11. Desativar Módulos Desnecessários

Os módulos do Apache são simplesmente programas carregados para estender a funcionalidade do servidor web. As funções estendidas pelos módulos incluem autenticação básica, cache de conteúdo, criptografia, segurança, etc.

Sempre é recomendado desativar todos os módulos que não estão sendo usados atualmente para minimizar as chances de se tornar vítima de um ataque.

Para visualizar todos os módulos habilitados, execute o comando

$ apache2ctl -M
View Apache Modules

Para verificar se um módulo específico está habilitado, por exemplo, o módulo de reescrita, execute o comando.

$ apache2ctl -M | grep rewrite
Check Apache Module

Para desativar o módulo, execute o comando:

$ sudo a2dismod rewrite 
Disable Apache Module

12. Usar os Módulos mod_security e mod_evasive para Segurar o Apache

Você pode habilitar os módulos mod_security e mod_evasive para proteger o Apache contra ataques de força bruta ou ataques de DDoS.

  • O módulo mod_security age como um firewall de aplicação web (WAF) e bloqueia tráfego suspeito e indesejado para o seu site.
  • O módulo mod_evasive protege seu servidor contra ataques de força bruta e negação de serviço (DoS).

Leia mais sobre como proteger o Apache usando os módulos mod_security e mod_evasive.

13. Restringir Serviços Indesejados no Apache

Para aumentar a segurança do Apache, considere desabilitar certos serviços como links simbólicos e execução de CGI se não forem atualmente necessários. Por padrão, o Apache segue symlinks, podemos desativar esse recurso, bem como o recurso -Includes e o CGI em uma única linha.

Para fazer isso, adicione a linha '-ExecCGI -FollowSymLinks -Includes' para o ‘Options’ diretiva na seção ‘Directory‘.

<Directory /your/website/directory>
Options -ExecCGI -FollowSymLinks -Includes
</Directory>

Isso também pode ser alcançado em um nível de diretório. Por exemplo, aqui, estamos desativando Includes e execuções de arquivos CGI para o “/var/www/html/mydomain1” diretório.

<Directory "/var/www/html/mydomain1">
	Options -Includes -ExecCGI
</Directory>

Salve as alterações e reinicie o Apache.

14. Limitar o Tamanho do Arquivo de Upload no Apache

Outra maneira de proteger seu servidor web é limitar o tamanho total do corpo da solicitação HTTP enviado ao servidor web a partir de um cliente. Você pode definir isso no contexto do servidor, por diretório, por arquivo ou por localização.

Por exemplo, se você deseja permitir o upload de arquivos para um diretório específico, digamos o diretório /var/www/domain.com/wp-uploads, e limitar o tamanho do arquivo carregado a 4M = 4194304Bytes, adicione a seguinte diretiva ao seu arquivo de configuração do Apache ou ao arquivo .htaccess.

<Directory "/var/www/domain.com/wp-uploads">
	LimitRequestBody  4194304
</Directory>

Salve as alterações e lembre-se de reiniciar o Apache.

Você pode configurá-lo no contexto do servidor, por diretório, por arquivo ou por localização. A diretiva afasta o comportamento anormal de solicitação de cliente, que às vezes pode ser uma forma de ataque de negação de serviço (DoS).

15. Habilitar o Registro no Apache

O registro fornece todos os detalhes sobre as solicitações de cliente e qualquer outra informação relacionada ao desempenho do seu servidor web. Isso fornece informações úteis no caso de algo dar errado. Habilitar os registros do Apache, especialmente em arquivos de host virtual, permite que você identifique um problema no caso de algo dar errado com o servidor web.

Para habilitar o registro, você precisa incluir o módulo mod_log_config, que fornece duas diretivas principais de registro.

  • ErrorLog – Especifica o caminho do arquivo de log de erro.
  • CustomLog – Cria e formata um arquivo de log.

Você pode usar esses atributos em um arquivo de host virtual na seção de host virtual para habilitar o registro.

<VirtualHost 172.16.25.125:443>
        ServerName example.com
        DocumentRoot /var/www/html/example/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

A diretiva {APACHE_LOG_DIR} em sistemas Debian é definida como o caminho /var/log/apache2.

16. Executar o Apache como um Usuário e Grupo Separados

Executar o Apache como um usuário e grupo separados é uma prática comum de segurança. Ao fazer isso, você pode isolar o processo do servidor web de outros processos do sistema e minimizar os danos potenciais se o servidor web for comprometido.

Primeiro, você vai querer criar um novo usuário e grupo especificamente para o Apache.

$ sudo groupadd apachegroup
$ sudo useradd -g apachegroup apacheuser

Em seguida, você precisará editar o arquivo de configuração do Apache para especificar o novo usuário e grupo.

User apacheuser
Group apachegroup

Como você está alterando o usuário e grupo que o Apache é executado, talvez seja necessário atualizar a propriedade dos diretórios e arquivos da web para garantir que o Apache ainda consiga lê-los.

$ sudo chown -R apacheuser:apachegroup /var/www/html

Após fazer essas alterações, reinicie o Apache para aplicá-las:

$ sudo systemctl restart httpd      # For RHEL/CentOS
$ sudo systemctl restart apache2    # For Debian/Ubuntu

17. Proteger contra Ataques DDOS e Reforçar

Bem, é verdade que você não pode proteger totalmente seu site contra ataques DDoS. No entanto, aqui estão algumas diretrizes que podem ajudar a mitigar e gerenciá-los.

  • TimeOut – Esta diretiva permite que você especifique a duração que o servidor aguardará para que certos eventos sejam concluídos antes de retornar um erro. O valor padrão é de 300 segundos. Para sites suscetíveis a ataques DDoS, é aconselhável manter esse valor baixo. No entanto, a configuração apropriada depende em grande parte da natureza das solicitações que seu site recebe. Observação: Um tempo limite baixo pode causar problemas com alguns scripts CGI.
  • MaxClients – Esta diretiva define o limite no número de conexões que podem ser atendidas simultaneamente. Novas conexões além desse limite serão enfileiradas. Está disponível tanto nos MPMs Prefork quanto Worker. O valor padrão é 256.
  • KeepAliveTimeout – Esta diretiva especifica a duração que o servidor aguardará por uma solicitação subsequente antes de fechar a conexão. O valor padrão é de 5 segundos.
  • LimitRequestFields – Esta diretiva define um limite para o número de campos de cabeçalho de solicitação HTTP aceitos pelos clientes. O valor padrão é 100. Se ataques DDoS estiverem ocorrendo devido a um número excessivo de cabeçalhos de solicitação HTTP, é recomendável reduzir esse valor.
  • LimitRequestFieldSize – Esta diretiva define um limite de tamanho para o cabeçalho de solicitação HTTP.

18. Realize Varreduras de Vulnerabilidade Regulares

Outra maneira de proteger seu servidor web é realizando testes regulares de varredura de vulnerabilidade. Isso ajuda a identificar possíveis brechas de segurança que podem ser exploradas por hackers para acessar arquivos sensíveis ou injetar malware.

Ferramentas de varredura de vulnerabilidade também ajudam a identificar configurações inseguras e auxiliam na auditoria de conformidade. Algumas ferramentas populares de varredura de vulnerabilidade incluem Acutenix, Nessus, Nexpose, Sucuri, e muitas outras.

Conclusão

Essas são algumas dicas de fortalecimento do Apache que você pode implementar em seu servidor web para fornecer uma camada extra de proteção e manter as intrusões afastadas.

Source:
https://www.tecmint.com/apache-security-tips/