Pesquisa de site

18 Dicas de segurança e proteção do servidor Web Apache


O servidor web Apache é um dos servidores web mais populares e amplamente usados 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 para oferecer a proteção necessária que seu site precisa.

Neste guia, veremos algumas dicas e truques de proteção 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 caso você navegue na URL errada de um site. Abaixo está um exemplo de 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 host, o endereço IP e a porta em que ele está escutando.

Nunca é uma boa ideia exibir as 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 dificultar a ação dos hackers, é recomendável ocultar as informações do servidor web.

Para fazer isso, abra o arquivo de configuração padrão do Apache nas 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.

2. Desative 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 em seu diretório Raiz do Documento.

Para demonstrar isso, criaremos 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 poderemos visualizar a listagem do diretório.

Para desativar a listagem de diretórios, vá até o arquivo de configuração principal do Apache e procure o atributo ‘Diretório’. Defina o parâmetro ‘Opções‘ 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 regularmente o Apache

É sempre recomendável manter todos os seus aplicativos atualizados, pois os aplicativos mais recentes vêm com correções de bugs e patches de segurança que abordam vulnerabilidades subjacentes presentes em versões de software mais antigas.

Como tal, é recomendável atualizar regularmente seus aplicativos para as 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, usa o protocolo HTTP, que é um protocolo fraco e inseguro, propenso a espionagem. Para melhorar a segurança do seu site e, mais ainda, melhorar suas classificações de SEO no Google, considere criptografar seu site usando um certificado SSL.

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

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

  • Como proteger o Apache com o certificado SSL Let's Encrypt no RHEL
  • Como proteger o Apache com certificado SSL gratuito Let's Encrypt no Ubuntu e Debian

5. Habilite HTTP Strict Transport Security (HSTS) para Apache

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

HTTP Strict Transport Security (HSTS) é um mecanismo de política que protege sites contra ataques man-in-the-middle e sequestro de cookies. Isso acontece quando os invasores fazem o downgrade do protocolo HTTPS para o protocolo HTTP inseguro.

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

Para ativar o HSTS, certifique-se de que seu site esteja executando HTTPS e tenha um certificado TLS/SSL válido.

Em seguida, habilite o módulo headers para Apache:

sudo a2enmod headers

Em seguida, recarregue o Apache para aplicar as alterações.

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 :

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

Isto é o seguinte.

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

O parâmetro max-age instrui os navegadores a acessarem seu site somente usando HTTPS durante o próximo ano (31536000=1 ano).

Por fim, reinicie o Apache para que a política HSTS entre em vigor.

sudo systemctl restart apache2

6. Habilite HTTP/2 no Apache

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

Embora o HTTP/1.1 ainda seja amplamente utilizado, ele está associado a problemas de desempenho associados ao uso de múltiplas conexões TCP para processar múltiplas solicitações do navegador, o que leva a uma alta sobrecarga de recursos no lado do cliente, levando à degradação do desempenho da rede.

À medida que os aplicativos cresciam em complexidade e funcionalidade, o HTTP/2 foi criado para resolver as deficiências do HTTP/1.1, que incluem cabeçalhos HTTP longos, velocidades lentas de carregamento de páginas da web e desempenho geral. degradação.

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

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

  • Como habilitar HTTP/2 no Apache no Ubuntu

7. Restringir o acesso a diretórios confidenciais no Apache

Outra medida de segurança que você pode tomar é limitar o acesso a diretórios que possam conter informações confidenciais, como dados do 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>

Na configuração acima, Exigir todos negados nega 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 tenham efeito.

8. Desative a diretiva ServerSignature no Apache

A diretiva ServerSignature no arquivo de configuração do Apache anexa 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 ele está sendo executado. Expor detalhes cruciais sobre o seu servidor web a agentes mal-intencionados aumentará significativamente as chances de um ataque.

Para evitar a exposição de tais informações, você precisa desabilitar esta diretiva no arquivo de configuração do Apache:

ServerSignature Off

Salve as alterações e reinicie novamente o Apache para que as alterações tenham efeito.

sudo systemctl restart apache2

9. Defina a diretiva ‘ServerTokens’ como ‘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ção que você gostaria de expor ao público é que o servidor web é Apache. Qualquer outra coisa apenas exporia seu servidor a ataques potenciais. Portanto, é recomendado definir a diretiva ‘ServerTokens’ no arquivo de configuração do Apache como ‘prod’.

ServerTokens Off

Como sempre, salve as alterações e reinicie o Apache.

10. Proteja o Apache com Fail2ban

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

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

Confira como instalar o Fail2ban no Linux usando:

  • Como usar Fail2ban para proteger seu servidor Linux

11. Desative módulos desnecessários

Os módulos 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 recomendável desabilitar todos os módulos que não estão em uso atualmente para minimizar as chances de ser vítima de um ataque.

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

apache2ctl -M

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

apache2ctl -M | grep rewrite

Para desabilitar o módulo, execute o comando:

sudo a2dismod rewrite 

12. Use os módulos mod_security e mod_evasive para proteger o Apache

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

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

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

13. Serviços indesejados restritos no Apache

Para proteger ainda mais o Apache, considere desabilitar certos serviços, como links simbólicos e execução de CGI, se não forem necessários no momento. 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 ‘Diretório‘.

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

Isso também pode ser alcançado no nível do diretório. Por exemplo, aqui estamos desativando as execuções de arquivos Inclui e Cgi para o diretório “/var/www/html/meudominio1”.

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

Salve as alterações e reinicie o Apache.

14. Limite 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 de um cliente ao servidor web. Você pode configurá-lo no contexto de servidor, por diretório, por arquivo ou por local.

Por exemplo, se você deseja permitir o upload de arquivos para um diretório específico, diga diretório /var/www/domain.com/wp-uploads e restrinja o tamanho do arquivo enviado a 4M=4194304Bytes, adicione a seguinte diretiva ao 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 de servidor, por diretório, por arquivo ou por local. A diretiva evita comportamentos anormais de solicitação do cliente, que às vezes podem ser uma forma de ataque de negação de serviço (DoS).

15. Habilite o log no Apache

O registro fornece todos os detalhes sobre solicitações de clientes e quaisquer outras informações relativas ao desempenho do seu servidor web. Isso fornece informações úteis caso algo dê errado. Habilitar logs do Apache, especialmente em arquivos de host virtual, permite identificar um problema caso algo dê errado com o servidor web.

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

  • ErrorLog – Especifica o caminho do arquivo de log de erros.
  • 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 a criação de log.

<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 caminho /var/log/apache2.

16. Execute o Apache como um usuário e grupo separados

Executar o Apache como um usuário e grupo separados é uma prática de segurança comum. 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ê desejará 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 o grupo que o Apache executa, pode ser necessário atualizar a propriedade dos diretórios e arquivos da web para garantir que o Apache ainda possa 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. Proteja ataques DDOS e endurecimento

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

  • TimeOut – Esta diretiva permite especificar o tempo que o servidor aguardará a conclusão de determinados eventos antes de retornar um erro. O valor padrão é 300 segundos. Para sites suscetíveis a ataques DDoS, é aconselhável manter esse valor baixo. No entanto, a configuração apropriada depende muito da natureza das solicitações que seu site recebe. Nota: Um tempo limite baixo pode causar problemas com alguns scripts CGI.
  • MaxClients – Esta diretiva define o limite para o número de conexões que podem ser atendidas simultaneamente. Quaisquer novas conexões além deste limite serão enfileiradas. Está disponível nos MPMs Prefork e Worker. O valor padrão é 256.
  • KeepAliveTimeout – Esta diretiva especifica o tempo que o servidor aguardará por uma solicitação subsequente antes de fechar a conexão. O valor padrão é 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. Execute verificações regulares de vulnerabilidades

Outra forma de proteger o seu servidor web é realizar testes regulares de verificação de vulnerabilidades. Isso ajuda a identificar possíveis brechas de segurança que podem ser exploradas por hackers para obter acesso a arquivos confidenciais ou injetar malware.

As ferramentas de verificação de vulnerabilidades também ajudam a apontar configurações inseguras e ajudam na auditoria de conformidade. Ferramentas populares de verificação de vulnerabilidades incluem Acutenix, Nessus, Nexpose, Sucuri e muito mais.

Conclusão

Estas são algumas dicas de proteção do Apache que você pode implementar em seu servidor web para fornecer uma camada extra de proteção e evitar invasões.