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:
- Configuração de uma Interface Virtual na
br3
com IP na rede172.16.10.0/24
; - Instalação do LDAP cliente;
- 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