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
1 | iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
2 | iptables -A INPUT -p tcp --dport 443 -j ACCEPT |
FirewallD
1 | firewall-cmd --permanent --add-port=80/tcp |
2 | 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 :
1 | find / dir - type f - exec chmod 644 {} \; |
Diretórios :
1 | 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 :
1 | setenforce 1 |
Após configurar via comando defina o enforcing no arquivo /etc/selinux/config .
Aplique a tag no diretório :
1 | 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 :
1 | 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 :
1 | ServerSignature off |
2 | ServerTokens Prod |
3 | 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 :
1 | <Directory /var/www/html> |
2 | Options -Indexes |
3 | </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