Apache : Boas práticas de segurança

Este post é dedicado à segurança básica de um servidor Apache.

Em tempos atuais é bastante comum utilizarmos servidor em cloud e com isso temos nossa infra exposta caso não seja tratada com seriedade.

É muito comum um servidor desprotegido ser atacado de alguma forma, aparece muitos casos em servidores que utilizam Joomla e WordPress, lembrando que dependendo do caso pode ser algo específico indo além das boas práticas sugeridas.

1) Regras de Firewall :

Segue abaixo algumas boas práticas de regras para o Firewalld e Iptables.

O ideal é que se deixe somente o necessário aberto.

Iptables liberando regras 80 e 443

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

FirewallD

firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp

Caso seja utilizado um servidor na Amazon sugiro que revise bem seus security groups :

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html

2) Revisão de permissionamento em diretórios :

O ideal é que se tenha permissão 644 para arquivos e 755 para diretórios, que é a permissão mínima para arquivos e diretórios.

Arquivos :

find /dir -type f -exec chmod 644 {} \;

Diretórios :

find /dir -type d -exec chmod 755 {} \;

3) Utilize o SELINUX :

Para se ter um nível de segurança maior utilize o SELINUX , habilite como enforcing e aplique a tag de Apache para o seu diretório.

Habilitando o modo enforcing :

setenforce 1

Após configurar via comando defina o enforcing no arquivo /etc/selinux/config .

Aplique a tag no diretório :

semanage fcontext -a -t httpd_sys_content_t "/dir(/.*)?" 

Confirme a tag aplicada com o comando “ls -Zd /dir”

Habilite portas fora do padrão caso seja necessário :

semanage port -a -t http_port_t -p tcp 81

Confirme as portas liberadas com “semanage port -l”.

4) Segurança no Apache :

Habilite estas opções em seu /etc/conf/httpd.conf :

ServerSignature  off
ServerTokens     Prod
TraceEnable      off

ServerSignature off -> Desabilita as mensagens de informação do servidor;
ServerTokens Prod -> Desabilita o envio de Tokens HTTP;
TraceEnable off -> Desabilita o parâmetro utilizado para teste e diagnósticos.

Desative a lista de diretórios :

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

5) Migrando a versão do Servidor :

Caso o servidor Apache esteja desatualizado , sugiro que faça um plano de migração e atualize para uma versão mais nova, da versão 2.2 para 2.4 temos 300 problemas de segurança corrigidos .

Segue o link abaixo da Digital Ocean que pode te ajudar como levantar tais requisitos para migrar :
https://www.digitalocean.com/community/tutorials/migrating-your-apache-configuration-from-2-2-to-2-4-syntax

Link do Site do Apache :
https://httpd.apache.org/docs/trunk/upgrading.html

Referências

https://wiki.centos.org/HowTos/SELinux
http://httpd.apache.org/docs/current/mod/core.html#servertokens
http://httpd.apache.org/docs/current/mod/core.html#serversignature
http://httpd.apache.org/docs/current/mod/core.html#traceenable