Servidor NFS (National Foundation for Security)

Em uma das reuniões de um projeto no qual eu e Hani participamos, um coreano visitante mencionou que é preciso uma catástrofe para que algo possa ser reconstruído da forma correta. Confesso que a declaração do coreano me marcou muito, e a cada dia eu vejo que isso é verdade. Tudo bem que ele fez menção à guerras, insinuando talvez que o Brasil só "tomará jeito" quando algo do tipo acontecer. Enfim, parece que isso se aplica também a tecnologia, pois nos últimos meses o PPGEE e CEFALA foram assombrados por problemas envolvendo RAID e ambos estão sendo reerguidos de forma estável e estruturados para crescer.

Esta contribuição tem o intuito de documentar parte do que está sendo feito no servidor do CEFALA, mais especificamente ao novo servidor de compartilhamento de arquivos e autenticação. Atualmente, o servidor físico do CEFALA (KVM ou Hospedeiro, chamem como quiser) tem SSH e Libvirt instalados. O acesso à este servidor ficará restrito aos administradores do Libvirt, demais usuários do CEFALA terão acesso apenas aos serviços providos através de Máquinas Virtuais. Neste momento irei focar no servidor CEFALA-NFS (National Foundation for Security) o qual será responsável por compartilhar o /home e a base de dados para autenticação via LDAP (Lightweight Directory Access Protocol).

No hospedeiro, que deve ser entendido como o servidor físico do CEFALA, foi configurado um volume em RAID 1 que totaliza 1.8TB e que será de uso exclusivo para o /home. O volume foi adicionado à VM CEFALA-NFS de forma transparente, ou seja, a VM consegue acesso direto ao /dev/md3 do hospedeiro. Isso foi possível com a seguinte inserção no arquivo /etc/libvirt/qemu/CEFALA-NFS.xml:

<disk type='block' device='disk'>
  <driver name='qemu' type='raw'/>
  <source dev='/dev/md3'/>
  <target dev='hdc' bus='virtio'/>
</disk>

Ainda é cedo para afirmar a performance e estabilidade da forma de acesso utilizada. No entanto, caso a VM apresente alguma instabilidade, uma alternativa seria exportar o NFS diretamente do hospedeiro ou compartilhar o diretório do hospedeiro no qual o RAID 1 está montado. Se leu até aqui, faça agora um minuto de oração para que tudo funcione adequadamente!

Seguindo adiante, após a implementação do RAID 1 dentro da VM, que foi montado como /home e teve todos os dados do antigo servidor copiados via rsync, o próximo passo é compartilhá-lo com outras VMs. Deu-se início então ao processo de instalação do LDAP, necessário para que as permissões do /home e a autenticação dos usuários sejam possíveis. O processo de instalação do LDAP seguiu à risca os manuais do próprio Debian, tanto para instalação do Servidor quando para o Uso do LDAP. Não é necessário entrar em detalhes sobre a configuração do LDAP, visto que com o uso da documentação citada não houve imprevistos, o LDAP foi posto em funcionamento em poucos minutos tanto no Servidor quando no Cliente.

Para facilitar a administração da base LDAP, a aplicação phpLDAPadmin foi instalada. A interface pode ser acessada através do endereço http://nfs.cefala.org/phpldapadmin, que funcionará unicamente com HTTPS. O usuário administrador da base é cn=admin,dc=cefala,dc=org e a senha será compartilhada posteriormente com os administradores. Será neste ambiente que novos usuários deverão ser criados, farei isso com todos os usuários que existiam no servidor antigo e após isso o acesso ao hospedeiro será cancelado, permanecendo apenas os usuários hani, rlaboiss e lopan, com contas Unix, para administração do KVM/QEMU.

Com o LDAP funcionando, agora é a vez do NFS-Server (Network File System) para exportará o /home para outras VMs. A instalação do NFS-Server seguiu as orientações do Debian, disponível na página NFS Server Setup. Exportação da pasta /home foi configurada no /etc/exports:

/home        172.16.10.*(rw,no_root_squash,subtree_check)

Mais uma vez não houve imprevistos com a documentação do Debian, o NFS-Server foi tranquilamente instalado e testado, em outra VM, com o comando mount 172.16.10.1:/home /mnt/home. O único problema diagnosticado nesta etapa, mas que não é falha da documentação utilizada, foi a respeito de portas abertas para o mundo, ouvindo no endereço 0.0.0.0. Para resolver este problema de forma definitiva, optei pela implementação de um Firewall simples, a ser carregado no /etc/rc.local, que tem o intuito de preservar acesso externo apenas para ICMP, SSH, HTTP e HTTPS:

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth1 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -P INPUT DROP

Se a paciência (ou curiosidade) foi tamanha para chegar até aqui, provavelmente estará se perguntando: que rede é essa no NFS-Server (172.16.10.*)? A resposta tem ligação com o Firewall anterior. Seria ingenuidade colocar um NFS-Server com acesso via porta WAN ou LAN, e em nosso caso é até desnecessário! Em um ambiente como o nosso é possível criar uma Rede Virtualizada. Cria-se uma Bridge no Hospedeiro que interconectará todas as Interfaces Virtuais das VMs que a utilizarem. Ficou confuso? Então vamos a uma explicação mais detalhada...

A rede 172.16.10.0/24 foi reservada para comunicação exclusivamente entre VMs, não sendo possível acesso via WAN ou LAN. Neste sentido foi criado a bridge br3 no hospedeiro, sem adição de endereço IP pois nem este terá acesso à rede 172.16.10.0/24. As VMs que desejarem acesso aos serviços LDAP, NFS, ou simplesmente uma conexão fora da rede pública (WAN ou LAN), devem inserir uma Interface de Rede na br3, que irá se comportar analogamente como um switche. A VM CEFALA-NFS, objetivo deste post, está configurada com o Endereço IP 172.16.10.1 na br3. Outras VMs deverão ser configuradas como 172.16.10.{2, 3, 4, ..., 254}.

Como o hospedeiro conta com um RAID 5, além do RAID 1 utilizado exclusivamente para o /home, este será utilizado para backup. A VM CEFALA-NFS será agendada para diariamente (semanalmente ou mensalmente, a definir) fazer o backup do /home no RAID 5 do hospedeiro. Os usuários dos serviços providos pelo CEFALA-NFS terão acesso ao /home somente através deste servidor, ficando o /home backup acessível apenas pelos administradores.

Chega ao fim a implementação do Servidor NFS (National Foundation for Security), sendo necessário em seus clientes (VMs) apenas três passos:

  1. Configuração de uma Interface Virtual na br3 com IP na rede 172.16.10.0/24;
  2. Instalação do LDAP cliente;
  3. Configuração do NFS no /etc/fstab para montagem automática do /home.

Update: (por Rafael Laboissière) Este é o comando, a ser rodado na VM kvm.cefala.org, para restaurar um diretório /home/$user a partir do backup diário:

rsync -av /mnt/sdc1/backup_users/$user nfs.cefala.org:/home/$user

social