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