Aumentando a segurança do Apache

 
Introdução:

Após instalar o Apache, é interessante adicionar uma camada extra de segurança ao servidor-web. Para tanto, siga as dicas abaixo.

Ocultando a versão do Apache e a identidade do sistema operacional das páginas de erro:


Quando se instala o Apache dos repositórios, como demonstrado no tutorial anterior, ele exibe, nas páginas de erros, sua versão e o nome do sistema operacional onde está rodando. Essas informações podem ser exploradas por crackers. Sua exibição, portanto, pode ser uma ameaça à segurança do servidor, sendo prudente ocultá-las.


No Terminal (Ctrl+Alt+T), digite:


sudo nano /etc/apache2/apache2.conf


Agora, procure pelas entrada “ServerSignature” que, por padrão, deverá conter o parâmetro “On”. É preciso alterá-lo para “Off” e incluir o comando “ServerTokens Prod” na linha seguinte. Este trecho do arquivo ficará assim:

  ServerSignature Off 
ServerTokens Prod

Desabilitando a listagem de diretórios:

Por padrão, o Apache lista o conteúdo de seu diretório root quando da ausência de um arquivo index. É possível ocultar esta listagem, realizando-se uma pequena alteração no arquivo apache2.conf, que ainda deve estar aberto


Na seção <Directory>, insira a linha

  Options -Indexes 

Dependendo do diretório raiz de seu servidor, ficará algo parecido como o exemplo abaixo:

  <Directory /var/www/html>
  Option -Indexes
</Directory>

Limitando o tamanho da requisição:

Por padrão, o Apache não limita o tamanho das requisições ao servidor, o que o vulnerabiliza a ataques do tipo (D)DoS. Essa opção pode ser alterada, indo de 0 (ilimitado) a 2147483647 (2GB), incluindo-se a diretiva “LimitRequestBody” na tag directory, do arquivo de configuração do servidor.


Para manter a segurança, use valores baixos para a maior parte da aplicação-web e, se houver a possibilidade de upload de arquivos por usuários, dedique um diretório aos arquivos e limite seu tamanho. No exemplo a seguir, o diretório de destino chama-se “user_uploads”, e o tamanho limite dos arquivos é 2 MB.


Crie uma tag “Directory” para o diretório para o qual se deseja estabelecer o limite do tamanho dos arquivos a serem enviados pelos usuários:

<Directory "/var/www/html/user_uploads">
    LimitRequestBody 2097152
</Directory>

Aplicando as regras criadas:

Salve as edições e saia do Nano com a sequência de teclas: Ctrl+x, S (ou “y”, se seu sistema estiver em inglês), e Enter.

Para aplicá-las, rode o seguinte comando:

sudo service ssh restart

Se aparecer a mensagem de erro "Unable to connect to Upstart", reinicie o ssh com o comando:

sudo systemctl restart ssh

Utilizando os módulos Security e Evasive:

Tratam-se de dois módulos populares de segurança.O mod_security é um módulo open source de detecção de intrusão e prevenção para aplicações-web que se integra de forma transparente com o servidor-web. Já o mod-evasive executa métodos de evasão quando o servidor está sob ataque. Atuando em conjunto, ambos são importantes ferramentas de proteção de servidores-web contra ataques de força bruta e (D)DoS.


Para instalar os módulos Security e Evasive, rode o seguinte código de uma linha no Terminal:


sudo apt install libapache2-modsecurity libapache2-mod-evasive


.Módulo Security:


Para configurar o módulo Security, é preciso alterar as regras de funcionamento presentes no arquivo modsecurity.conf. Para tanto, vamos modificar o arquivo padrão existente por meio de uma cópia renomeada, com o comando:


sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf


Em seguida, abra o abra o arquivo modsecurity.conf no Nano com o comando:


sudo nano /etc/modsecurity/modsecurity.conf


Localize e altere as seguintes regras para que figurem da seguinte forma:

  SecRuleEngine On 
SecRequestBodyAccess On
SecRequestBodyLimit 32768000
SecRequestBodyInMemoryLimit 32768000
SecResponseBodyAccess Off
Salve o arquivo e feche o Nano com a sequência de teclas Ctrl+x, s (ou “y”, se seu sistema estiver em inglês), e Enter.

As regras do mod_security se encontram nos seguintes diretórios:

 /usr/share/modsecurity-crs/base_rules        
/usr/share/modsecurity-crs/optional_rules
/usr/share/modsecurity-crs/experimental_rules

Para ativar as regras básicas do CRS, crie links simbólicos com o seguinte comando:


sudo ln -s /usr/share/modsecurity-crs/base_rules/*.conf /usr/share/modsecurity-crs/activated_rules/


É recomendável baixar e configurar as regras mantidas pelo OWASP (Projeto Aberto para Segurança de Aplicações-web), um grupo de trabalho internacional aberto que mantém um conjunto de regras atualizadas para a segurança de aplicações-web no Git Hub, para uso público e gratuito.


Comece instalando o mecanismo de acesso aos repositórios do GitHub:


sudo apt install git


 

 

Agora, clone o repositório das regras da OWASP para o módulo Security:


sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git


Crie os arquivos que serão editados com os seguintes comandos (um por vez):

 sudo mv /usr/share/modsecurity-crs /usr/share/modsecurity-crs.bak         

sudo mv owasp-modsecurity-crs /usr/share/modsecurity-crs

sudo mv /usr/share/modsecurity-crs/modsecurity_crs_10_setup.conf.example /usr/share/modsecurity-crs/modsecurity_crs_10_setup.conf

Para finalizar, é preciso editar algumas linhas, em alguns dos arquivos:


sudo nano /usr/share/modsecurity-crs/activated_rules/modsecurity_crs_35_bad_robots.conf


Com o arquivo aberto no Nano, comente as linhas 16, 21 e 28. Nota: para tanto, basta adicionar o símbolo # no início da linha. Ao final, elas deverão ficar assim:

  #SecRule REQUEST_HEADERS:User-Agent "@pmFromFile modsecurity_35_bad_robots.data" \
 
#SecRule REQUEST_HEADERS:User-Agent "@pmFromFile modsecurity_35_bad_robots.data" \

#SecRule REQUEST_HEADERS:User-Agent

Salve o arquivo e feche o Nano com a sequência de teclas Ctrl+x, s (ou “y”, se seu sistema estiver em inglês), e Enter. Agora, edite o próximo arquivo:


sudo nano /usr/share/modsecurity-crs/activated_rules/modsecurity_crs_40_generic_attacks.conf


Comente a linha 169, que deverá ficar assim:


#SecRule REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|!REQUEST_COOKIES:/_pk_ref/|REQUEST_COOKIES_NAMES|ARGS_NAMES|ARGS|XML:/* "@pmFromFile modsecurity_40_generic_attacks.data" \


Salve o arquivo e feche o Nano. Agora, o último arquivo:


sudo nano /usr/share/modsecurity-crs/activated_rules/modsecurity_crs_50_outbound.conf


Comente a linha 101, para que fique assim:



#SecRule RESPONSE_BODY "!@pmFromFile modsecurity_50_outbound.data" \


Salve o arquivo e feche o Nano com a sequência de teclas Ctrl+x, s (ou “y”, se seu sistema estiver em inglês), e Enter.


.Módulo Evasive:


Para configurar o módulo Evasive, edite o arquivo evasive.conf no Nano:


sudo nano /etc/apache2/mods-enabled/evasive.conf


Altere o conteúdo das seguintes regras, de modo a que figure assim:

DOSPageCount 5 
DOSSiteCount 30
DOSPageInterval 1
DOSSiteInterval 3
DOSBlockingPeriod 3600

Na linha 9, introduza um endereço de e-mail para ser notificado se um IP for incluído à lista de bloqueios (exemplo):


DOSEmailNotify root@localhost

Na linha 11, especifique o diretório para receber o arquivo de log:


DOSLogDir "/var/log/mod_evasive.log"


Salve o arquivo e feche o Nano com a sequência de teclas Ctrl+x, s (ou “y”, se seu sistema estiver em inglês), e Enter.


Agora, é preciso criar o diretório de log. Rode o seguinte comando:


sudo mkdir /var/log/mod_evasive.log


Transfira ao Apache o privilégio de escrita para a lista de bloqueios:


sudo chown www-data:www-data /var/log/mod_evasive.log


.Aplicando as regras:


Habilite os módulos com os comandos:
sudo a2enmod security2 

sudo a2enmod evasive

sudo a2enmod headers

Atenção: Se você possui uma instalação do Wordpress, pode ser necessário desabilitar algumas regras do módulo Security. Para tanto, é póssível editar essas regras na seção VirtualHost definida para seu domínio no arquivo de configuração do Apache.


Comece abrindo o arquivo de configuração no Nano, com o comando:


sudo nano /etc/apache2/sites-enabled/000-default.conf


No arquivo que se abre, dentro da chave <VirtualHost *:80> </VirtualHost *:80>, insira os seguintes campos e parâmetros:


<LocationMatch "/wp-admin/post.php">
    SecRuleRemoveByld  300016
</LocationMatch>

<LocationMatch "/wp-admin/nav-menus.php">
    SecRuleRemoveByld  300016
</LocationMatch>

<LocationMatch "(/wp-admin/|/wp-login.php)">
    SecRuleRemoveByld  950117
    SecRuleRemoveByld  950005
</LocationMatch>

Salve o arquivo e feche o Nano com a sequência de teclas Ctrl+x, s (ou “y”, se seu sistema estiver em inglês), e Enter.

Reinicie o Apache:


sudo service apache2 restart


Notas finais:

Essas são algumas medidas que podem ajudar a proteger um servidor Apache e suas aplicações-web. Não são todas. Uma pesquisa na Rede retornará mais medidas, exemplos e dicas de boas práticas para incrementar ainda mais a segurança de um servidor.