Destaque PrincipalDestaque SecundárioLinuxSegurança

Deixando seu Servidor Web Apache mais seguro

Na dica de hoje vamos falar de segurança para seu 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.

Precisando de um Servidor Web para sua aplicação, site ou projeto? Fale conosco https://soloweb.com.br

Veremos agora 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.

Precisando de uma hospedagem de site ou de um servidor dedicado personalizado, seja para ambiente de teste, desenvolvimento ou de produção? E com um suporte de especialistas, que ti, ajudam a resolver os problemas o mais rápido possível? A SoloWeb tem o prazer em ti, ajudar com isso. Entre em contato conosco e faça uma cotação agora mesmo, acesse: www.soloweb.com.br.
Mostrar informações da versão do Apache
Mostrar informações da versão do Apache

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   [No Debian, Ubuntu e Mint]
$ sudo systemctl restart httpd     [No RHEL/CentOS/Fedora e Rocky/AlmaLinux]

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

Verifique as informações da versão do Apache
Verifique as informações da versão do Apache

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 no 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.

Desativar listagem de diretório Apache
Desativar listagem de diretório Apache

Para desabilitar 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'-Indexes'  como mostrado.

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

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

Desativar listagem de diretórios no Apache
Desativar listagem de diretórios no Apache

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

$ sudo apt update && sudo apt upgrade [No Debian, Ubuntu e Mint ] 
$ sudo dnf upgrade [Em RHEL/CentOS/Fedora e 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 e recebida do servidor.

5. 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 degradação geral do desempenho.

HTTP/2 oferece mais proteção e privacidade do 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 a utilização eficaz da largura de banda, mesmo ao transmitir vários fluxos de dados.

6. 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. Usando os atributos “ Permitir ” e “ Negar ”, podemos restringir o acesso, por exemplo, ao diretório raiz conforme mostrado.

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

    # Other virtual host settings

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

Vejamos essas opções com mais detalhes.

  • “ Nenhum ” – Isso impede que os usuários habilitem quaisquer recursos opcionais.
  • Ordem “negar”, “permitir ” – A diretiva “ Negar ” tem precedência, seguida pela diretiva “ permitir ”.
  • Negar de todos – Restringe o acesso de todos ao diretório raiz.

Salve as alterações e saia do arquivo. Em seguida, reinicie o Apache para que as alterações tenham efeito.

7. 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 o Apache novamente para que as alterações tenham efeito.

$ sudo systemctl restart apache2

8. 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 possíveis ataques. 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.

$ sudo systemctl restart apache2

9. 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.

O 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.

10. 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

11. 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).

12. Serviços indesejados restritos no Apache

Para proteger ainda mais o Apache , considere desabilitar determinados 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 desligar esse recurso, bem como o -Includesrecurso e o CGI em uma linha.

Para fazer isso, adicione a linha '-ExecCGI -FollowSymLinks -Includes' para a diretiva ‘Opções’ 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/mydomain1” .

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

Salve as alterações e reinicie o Apache.

13. 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, digamos / var/www/domain.com/wp-uploads diretório e restringir o tamanho do arquivo enviado para 4M = 4194304Bytes , adicione a seguinte diretiva ao seu Apache arquivo de configuração ou 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).

14. 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 habilitar o log, você precisa incluir o módulo mod_log_config , que fornece duas diretivas principais de 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 IP_DO_SERVIDOR:443>
        ServerName example.com
        DocumentRoot /var/www/html/example/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

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

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

Executar o Apache como 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, talvez seja 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

16. 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 do 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 no 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.

Esperamos ter ajudado com mais esta dica, e siga nos, nas redes sociais para mais tutoriais, e se precisar de nossa ajuda estamos a disposição: www.soloweb.com.br.

E lembrando que a SOLOWEB além de oferecer Hospedagem de Sites, Servidores Dedicados, Servidores VPS com o menor custo do Brasil, também desenvolve soluções de software e realiza gerenciamento e monitoramento de servidores para sua empresa, faça uma cotação sem custo, acesse: www.soloweb.com.br