O servidor web Apache é um dos mais populares e web servers mais utilizados para hospedagem de 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 para o seu site.
Neste guia, vamos olhar para algumas dicas e truques de hardening 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 do Sistema Operacional
Por padrão, o servidor web Apache exibe sua versão se você navegar 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 host do OS, o endereço IP e a porta que está ouvindo.

Nunca é uma boa ideia exibir informações do seu servidor web, pois isso pode ser um bom presente para hackers em suas missões de reconhecimento. Para adicionar uma camada de segurança e torná-lo mais difícil para hackers, é recomendado 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 mudanças 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, a informação do servidor web não será exibida.

2. Desabilitar a Listagem de Diretórios no Apache
Por padrão, Apache permite a listagem de diretórios, e visitantes podem ver quaisquer arquivos ou diretórios que você possa ter em seu diretório Document Root.
Para demonstrar isso, vamos criar um diretório chamado test.
$ sudo mkdir -p /var/www/html/test
A seguir, 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
conseguiremos ver a listagem de diretórios.

Para desabilitar a listagem de diretórios, vá até o arquivo de configuração principal do Apache e procure pelo atributo ‘Directory‘. Defina o parâmetro ‘Options‘ como '-Indexes'
, conforme mostrado.
<Directory /opt/apache/htdocs> Options -Indexes </Directory>
Recarregue o Apache, e desta vez, quando você visitar a URL, os diretórios não serão mais exibidos.

3. Atualize o Apache regularmente.
É sempre recomendado manter todas as suas aplicações atualizadas, já que 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.
Portanto, é recomendado atualizar regularmente suas aplicações para suas versões mais recentes.
$ sudo apt update && sudo apt upgrade [On Debian, Ubuntu and Mint] $ sudo dnf upgrade [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

4. Use Criptografia HTTPS no Apache
O Apache, por padrão, utiliza o protocolo HTTP que é um protocolo fraco e inseguro, propenso a escutas. Para melhorar a segurança do seu site e, mais ainda, melhorar seu ranking de SEO no Google, considere criptografar seu site usando um certificado SSL.
Ao fazer isso, ele altera o protocolo padrão HTTP para HTTPS, tornando assim mais difícil para qualquer pessoa interceptar e decifrar a comunicação enviada e recebida do servidor.
Veja como proteger o servidor web Apache usando Let’s Encrypt SSL no Linux.
- Como Proteger o Apache com Certificado SSL Let’s Encrypt no RHEL
- Como Proteger o Apache com Certificado SSL Let’s Encrypt Gratuito no Ubuntu e Debian
5. Ative 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 na web HSTS sobre o HTTPS.
HTTP Strict Transport Security (HSTS) é um mecanismo de política que protege sites contra ataques do tipo “man-in-the-middle” e sequestro de cookies. Isso ocorre quando os atacantes reduzem o protocolo HTTPS para o inseguro protocolo HTTP.
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 esteja executando HTTPS e tenha um certificado TLS/SSL válido.
Em seguida, habilite o módulo de cabeçalhos para o Apache:
$ sudo a2enmod headers
Em seguida, recarregue o Apache para aplicar as mudanças.
$ sudo systemctl restart apache2
Em seguida, 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 doze meses (31536000 = 1 ano).
Por fim, reinicie o Apache para que a política HSTS entre em vigor.
$ sudo systemctl restart apache2
6. Habilitar HTTP/2 no Apache
Em 2015, o HTTP/2 foi lançado, que é uma nova versão do protocolo HTTP que busca resolver vários problemas que os criadores do HTTP/1.1 não previram.
Enquanto o HTTP/1.1 ainda é amplamente utilizado, está associado a problemas de desempenho decorrentes do uso de múltiplas conexões TCP para processar múltiplas solicitações do navegador, o que leva a uma sobrecarga de recursos no lado do cliente, resultando em degradação no desempenho da rede.
À medida que as aplicações cresceram em complexidade e funcionalidade, o HTTP/2 foi criado para resolver as deficiências do HTTP/1.1, que incluem cabeçalhos HTTP longos, lentidão no carregamento de páginas da web e degradação geral no desempenho.
O HTTP/2 oferece mais proteção e privacidade do que seu antecessor. Igualmente importante, há um desempenho aprimorado por meio do uso de fluxos de dados multiplexados. Com o HTTP/2, uma única conexão TCP garante a utilização eficaz da largura de banda, mesmo ao transmitir múltiplos fluxos de dados.
Confira como habilitar o HTTP/2 no servidor web Apache usando:
7. Restringir Acesso a Diretórios Sensíveis no Apache
Outra medida de segurança que você pode tomar é limitar o acesso a diretórios que possam conter informações sensíveis, como dados de usuário, 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>
Nesta configuração, o Require all denied
nega o acesso a qualquer pessoa que tente acessar arquivos em /diretório_sensível.
Salve as alterações e saia do 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 desabilitar esta diretiva no arquivo de configuração do Apache:
ServerSignature Off
Salve as alterações e reinicie novamente o Apache para que as mudanças entrem em vigor.
$ sudo systemctl restart apache2
9. Configure 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 é o Apache. Qualquer outra informação só exporia seu servidor a ataques potenciais. Portanto, é recomendável configurar 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
O Fail2ban é uma aplicação 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 ataques de 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 negação de serviço (DoS) monitorando constantemente os logs do Apache para tentativas de login fracassadas e temporariamente banindo IPs ofensivos.
Veja como instalar Fail2ban no Linux usando:
11. Desativar Módulos Desnecessários
Os módulos do Apache são simplesmente programas que são 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 aqueles módulos que não estão em uso atualmente para minimizar as chances de se tornar vítima de um ataque.
Para visualizar todos os módulos ativados, execute o comando
$ apache2ctl -M

Para verificar se um módulo específico está ativado, por exemplo, o módulo de reescrita, execute o comando.
$ apache2ctl -M | grep rewrite

Para desativar o módulo, execute o comando:
$ sudo a2dismod rewrite

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 negação de serviço (DDoS).
- O módulo mod_security age como um firewall de aplicação web (WAF) e bloqueia tráfego suspeito e indesejado para 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 necessários atualmente. Por padrão, o Apache segue links simbólicos, podemos desativar esse recurso, bem como o recurso -Includes
e CGI em uma linha.
Para fazer isso, adicione a linha '-ExecCGI -FollowSymLinks -Includes'
para a diretiva ‘Options’ 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 arquivo Cgi para o diretório “/var/www/html/mydomain1”.
<Directory "/var/www/html/mydomain1"> Options -Includes -ExecCGI </Directory>
Salve as alterações e reinicie o Apache.
14. Limitar o Tamanho do Upload de Arquivos no Apache
Outra forma de proteger seu servidor web é limitar o tamanho total do corpo da solicitação HTTP enviado ao servidor web por um cliente. Você pode definir isso no contexto do servidor, por diretório, por arquivo ou por localização.
Por exemplo, se você quiser permitir o upload de arquivos para um diretório específico, digamos /var/www/domain.com/wp-uploads, e restringir o tamanho do arquivo enviado para 4M = 4194304Bytes, adicione a seguinte diretiva ao seu arquivo de configuração do Apache ou .htaccess.
<Directory "/var/www/domain.com/wp-uploads"> LimitRequestBody 4194304 </Directory>
Salvar 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ções de clientes, que às vezes pode ser uma forma de ataque de negação de serviço (DoS).
15. Ativar o Registro no Apache
O registro fornece todos os detalhes sobre as solicitações de clientes e qualquer outra informação relacionada ao desempenho do seu servidor web. Isso fornece informações úteis caso algo dê errado. Ativar os logs do Apache, especialmente em arquivos de host virtual, permite que você identifique um problema caso algo dê errado com o servidor web.
Para ativar o registro, você precisa incluir o módulo mod_log_config, que fornece duas principais diretivas 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 ativar 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 possíveis danos se o servidor web for comprometido.
Primeiro, você vai querer criar um novo usuário e grupo especificamente para Apache.
$ sudo groupadd apachegroup $ sudo useradd -g apachegroup apacheuser
A seguir, 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á mudando o usuário e o grupo que o Apache executa, você pode precisar atualizar a propriedade das pastas e arquivos de websites para garantir que o Apache ainda consiga ler-los.
$ sudo chown -R apacheuser:apachegroup /var/www/html
Depois de fazer essas mudanças, 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 Hardening
Bem, é verdade que você não pode proteger seu website totalmente de ataques DDoS. No entanto, aqui estão algumas diretrizes que podem ajudá-lo a mitigar e gerenciar eles.
- TimeOut – Esta diretiva permite que você especifique a duração que o servidor aguardará por determinados eventos completarem antes de retornar um erro. O valor padrão é de 300 segundos. Para sites vulneráveis a ataques DDoS, é recomendável manter este valor baixo. No entanto, a configuração apropriada depende muito do tipo de solicitações que o seu website recebe. Nota: Um timeout baixo pode causar problemas com algumas scripts CGI.
- MaxClients – Esta diretiva define o limite no número de conexões que podem ser servidas simultaneamente. Qualquer nova conexão além deste limite será colocada em fila. Ele está disponível tanto no Prefork quanto no Worker MPMs. O valor padrão é de 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 da 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 vulnerabilidades também ajudam a apontar configurações de segurança inadequadas e auxiliam na auditoria para conformidade. Ferramentas populares de varredura de vulnerabilidades incluem Acutenix, Nessus, Nexpose, Sucuri e muitas outras.
Conclusão
Estas são algumas das dicas de endurecimento do Apache que você pode implementar em seu servidor web para fornecer uma camada extra de proteção e manter as intrusões afastadas.