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

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s