Apache, Linux

Tutorial de Apache – Parte 5 – Segurança do Web Server


Olá para você que pretende aprender Apache!

No tópico de hoje abordaremos um assunto deveras importante, que porém nem sempre recebe a devida atenção do administrador de sistemas: segurança.

Para ilustrar o quão importante  é este fator, costumo citar o caso da PSN, que foi invadida e teve dados de milhões de usuários expostos, tudo isso devido a um servidor com Apache desatualizado.

Em nossa máquina virtual, algumas das dicas citadas aqui já estão aplicadas, mas mesmo assim vou citá-las, com uma breve explicação do porquê precisamos delas.

Firewall Ativado

Nem precisaríamos frisar esta questão, não é mesmo? Um servidor web é um servidor público, exposto via internet. Se a nossa máquina roda Apache, precisamos apenas de três portas abertas: 80 (HTTP), 443  (HTTPS) e 22 (SSH). Para configurar o firewall no Red Hat/CentOS, recomendo utilizar a interface gráfica, rodando o comando:

system-config-firewall
system-config-firewall
system-config-firewall

Desabilitar o login do root via SSH

Já publicamos aqui este artigo explicando como desabilitar o login remoto do usuário root. Qualquer servidor com acesso via internet deve ter esta boa prática aplicada.

SELinux ativo

O SELinux é um sistema que aplica contextos as pastas do sistema, como se fossem etiquetas. E para que serve ?

Os serviços do servidor, como o Apache por exemplo, só conseguirão acessar as pastas com o seu respectivo contexto. No caso do Apache, o selinux context seria o httpd_sys_content_t.

Para verificar qual o contexto da pasta, basta navegar até a pasta e executar o comando:

ll -Zd

selinux

O diretório /var/www já vem com o contexto certo para o Apache. Caso você queira utilizar uma outra pasta como DocumentRoot, basta aplicar a ela o contexto.

Vamos criar a pasta websites na raiz.

mkdir /websites

Depois, aplicamos o contexto:

chcon -Rt httpd_sys_content_t /websites

Confirmamos navegando até a pasta e rodamos:

ll -Zd

Um teste mais efetivo é criar um virtual host com o DocumentRoot apontando para /websites, e colocar algum arquivo html dentro da pasta. Este procedimento eu não preciso explicar passo a passo, pois já aprendemos na segunda parte do tutorial.

Desabilitar a exposição do S.O e da versão do Apache.

Para entender melhor este tópico, vamos forçar um erro no Apache, tentando acessar http://localhost/erro.html

Apache mostrando versão e S.O
Apache mostrando versão e S.O

Vejam que brecha de segurança temos aqui. Basta tentar acessar algum arquivo que não existe no servidor para ficar sabendo qual o sistema operacional (Red Hat) e a versão do Apache (2.2.15).

Isto permite, por exemplo, alguém mal intencionado buscar por bugs no Apache 2.2.15 e explorá-los para conseguir acesso ao seu servidor.

Corrigir esta falha é muito simples.

Primeiro editamos o arquivo httpd.conf:

vim /etc/httpd/conf/httpd.conf

Vamos alterar a diretiva ServerSignature On para off:

ServerSignature Off

Agora basta recarregar o apache:

service httpd reload

Feito isto, forçamos o erro novamente e verificamos que as informações não aparecem mais:

apache sem erro
Apache sem erro

No tópico de hoje vimos os conceitos básicos de segurança do Web Server. Existem diversas outras questões que podem ser abordadas, muitas envolvendo mais o sistema operacional em si do que o Apache, mas aqui cobrimos as etapas mais básicas, e simples, para termos o mínimo de segurança para um serviço público na internet.

Não percam a próxima parte do tutorial: Balanceamento de carga com mod_proxy_balancer !

Até a próxima!


			

8 comentários sobre “Tutorial de Apache – Parte 5 – Segurança do Web Server

  1. Paz do Senhor,

    Tenho acompanhado, praticado e aprendido bastante com seus tutoriais, muito obrigado.

    No caso quando o desenvolvedor/programador fizer um site. Qual a forma recomendada e segura para ele gravar seus arquivos no /var/www ?

    1) via FTP ?

    2) via SSH ?

    3) alguma outra forma ?

    * e o mais importante, precisa ser algo simples.

    Isaías 55:6
    Obrigado

    Curtir

    1. Ronald, bom dia

      Em caso de um ambiente de testes, o protocolo sftp, que utilizada o ssh para enviar arquivos em um método parecido com o ftp é o mais prático. Existe um programa para Windows chamado WinSCP que executa muito bem essa tarefa. Para o Linux, é nativo do sistema de arquivos.

      Já para um ambiente de produção, o ideal é utilizar um ftp mesmo, porém vai ser um pouco chato ajeitar as permissões e o SELinux para a mesma pasta ser acessada pelos serviços do apache e do ftp.

      Obrigado pela visita.

      Curtir

      1. Paz do Senhor,

        Obrigado pela resposta breve.

        Conheço os pacotes e programas citados. E gostaria de não fazer via console de texto (para ficar mais fácil para o Desenvolvedor).

        via Windows vou testar com o WinSCP (conheço ele).

        A minha dúvida é realmente apenas ao FTP (vsftp) + APACHE no mesmo servidor.

        Sei configurar ambos separados no Centos ou Ubuntu/Debian.

        A dúvida no caso é como trocar a pasta padrão do FTP de /var/ftp/pub/ para /var/www ?

        Paz.

        Curtir

  2. Paz do Senhor, parece que consegui resolver assim:

    1) # useradd servo -d /var/www/html/servo -s /bin/false

    2) # passwd servo

    3) # nano /etc/ssh/sshd_config (adicionei as linhas abaixo no final)

    Match User servo
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp

    –> confira se existe essa linha: Subsystem sftp /usr/libexec/openssh/sftp-server

    4) # service sshd restart

    Pronto agora o usuário: “servo” não tem acesso ao shell, nem via ssh, apenas via FTP 🙂

    Deve ter alguns ajustes depois um colega fala aqui, pra um Pedagogo tá bom né 🙂

    Leiam Lucas 15:7

    t+

    Curtir

  3. Paz do Senhor,

    apenas uma observação que descobri na última sexta-feira, não é necessário instalar o VSFTP ou Proftp por exemplo. No caso o FTP é usado baseado no SSH (sftp), não sendo necessário um servidor de FTP.

    Paz.

    Curtir

  4. Como vai Fábio, muito bom seu tutorial…
    vi vc comentando sobre os treinamentos que participou, onde foi? poderia me passar o nome ou contato da escola?
    Obrigado..

    Curtir

Deixe um comentário