Cloud Computing

30 ago, 2013

Criando um servidor NAS na Amazon com OpenMediaVault

Publicidade

No ano passado, publiquei um artigo descrevendo como criar seu próprio serviço “Dropbox Like” na Amazon Web Services utilizando o ownCloud, eleito como um dos melhores de 2012. Na ocasião, alguns leitores discorreram sobre alguns problemas de capilaridade de permissões de acesso (ou a falta dessa feature) no ownCloud, além de outras características no tocante ao gerenciamento de arquivos. Pensando nisso e, após utilizar algumas soluções de fileserver local e estudar a sua implementação em nuvem (para que a disponibilidade seja alta), cheguei a uma solução simples: utilizar um servidor NAS (Network Accessible Storage).

Um NAS é na sua essência um “disco de rede”, onde se podem armazenar arquivos e controlar permissões de acesso a eles através de grupos e usuários – é análoga à famosa “pasta compartilhada” do Windows, mas com mais recursos e segurança. Essa tecnologia tem se tornado bastante popular e não apenas entre linuxers e usuários de perfil mais técnico – há várias marcas famosas como Qnap, Lassie, Drobo e Iomega que oferecem appliances NAS para uso doméstico e SoHo (e até para aplicações Enterprise), porém em muitos casos o valor é relativamente alto aqui no Brasil (na casa de alguns milhares de Reais).

Muitos fornecedores justificam o seu custo mais elevado devido aos recursos adicionais embarcados, como FTP, servidor de mídia, NFS, Rsync, cliente Torrent, redundância de discos (RAID), configuração via browser (como um roteador doméstico), alta capacidade de armazenamento local e vários outros, além do hardware customizado e homologado para a aplicação. Contudo, é possível encontrar algumas distros Linux dedicadas a essa tarefa e que rodam sem maiores problemas em praticamente qualquer hardware, como o FreeNAS, desenvolvido a partir do FreeBSD, o Openfiler, desenvolvido a partir do Red Hat (versões gratuita e paga), e o OpenMediaVault, desenvolvido a partir do Debian. E o melhor, com todos (ou quase todos) os recursos oferecidos pelos appliances comerciais, dá para montar um servidor de arquivos e mídia a um custo baixo, bons recursos e de administração simples – mas aí vem aquela velha dor de cabeça de manter uma máquina local só para isso e todo o risco inerente a falhas de hardware, backups etc.

nas-1

Exemplo de tela de administração do OpenMediaVault.

Com a alta disponibilidade e o baixo custo da Computação em Nuvem, oferecida por várias empresas no Brasil e fora dele, já dá para pensar em ter um NAS sem nem ao menos precisar de uma tomada de energia para ele – e o melhor, os arquivos ficam no seu VPS (Virtual Private Server), acessíveis de qualquer lugar do mundo onde se disponha de uma conexão à Internet. Porém, como quase todas as soluções NAS open source são distribuídas somente via ISOs para instalação física, há um problema: não é possível instalá-las em VPS – ou melhor, não era. Neste artigo, mostrarei como configurar seu próprio NAS, baseado em OpenMediaVault, na Amazon Web Services – com FTP, NFS, Rsync e outras features interessantes – e sem usar a ISO disponibilizada pelo desenvolvedor, apenas instalando pacotes e via SVN.

Passo 1: criando uma instância na AWS

Pesquisando no fórum do OpenMediaVault, encontrei algumas informações úteis para fazer a instalação do mesmo no Debian “Wheezy”, e vou resumi-las aqui e adaptá-las ao contexto da AWS – instâncias Micro custam frações de centavos de dólar por hora, são muito baratas e também adequadas em cenários onde há poucos usuários simultâneos; contudo, seu troughput é baixo e, dependendo do tráfego e volume de arquivos, isso pode ser um gargalo. Vale a pena dimensionar qual instância é ideal para a sua necessidade, mesmo que isso custe alguns dólares a mais. Para tanto:

  1. Entre na console de administração da AWS e lance uma instância EBS preferencialmente com a imagem ami-032b416a (disponível na aba “Community AMIs”);
  2. Crie um Security Group para essa instância (isola as policies do restante do seu ambiente, tornando-o mais seguro). Esse Security Group ao qual essa instância será alocada, num primeiro momento, precisa estar “de cara para o vento” (todas as regras de TCP e UDP habilitadas, e opcionalmente o ICMP se você deseja monitorar o NAS através de Nagios, Zabbix ou outro sistema de monitoramento). Depois de testado e validado, refaça as regras do Security Group para somente habilitar as portas necessárias (TCP 22 para SSH/RSYNC, TCP 80/8080 para HTTP, TCP 25 para SMTP, TCP 21 para FTP e UDP 53 para DNS e, obviamente, ICMP para monitoramento);
  3. Gere um Keypair para essa instância, entre via SSH com o usuário “admin” (sem aspas) e você já está na console do servidor;
  4. Crie também um volume EBS para ser o disco onde os shares de rede serão configurados de acordo com sua necessidade de giga ou terabytes, monte-o na instância criada e configure uma política de snapshots para que você possa reverter o disco ao um estado anterior em caso de crash do volume (e sempre que adicionar novos volumes à instância será necessário adicioná-los pela GUI do OpenMediaVault, como um HD novo e sem formatação);
  5. Atribua um Elastic IP à máquina e se desejar crie um recordset de DNS no Route53 para esse servidor – por exemplo http://fileserver.meudominio.com.br – para que o acesso seja mais amigável em vez de decorar o endereço IP. Se desejar, coloque a instância em uma VPC (Virtual Private Cloud) onde os IPs são internos, economizando tráfego e aumentando a performance geral, além de possibilitar a conexão do seu ambiente local com a sua nuvem privada.

Passo 2: instalando o OpenMediaVault

Nota: opcionalmente, o OpenMediaVault pode disparar e-mails para o administrador em determinados eventos. Para isso, ele usa o servidor de e-mail Postfix e o tutorial já prevê sua instalação, não sendo necessário preocupar-se em fazê-lo separadamente, embora isso seja possível desde antes da instalação do OpenMediaVault. Não vou discorrer sobre a configuração de um Postfix neste artigo, pois há bastante informação disponível on line.

Agora vamos preparar o Debian para receber o OpenMediaVault instalando alguns pacotes necessários (Apache, FTP, SSL, Quota etc.):

[shell]

sudo apt-get update && apt-get upgrade -y

sudo apt-get –yes –force-yes install apache2 apache2-suexec libapache2-mod-fcgid php5-cgi php5-cli ethtool acl ifenslave resolvconf iproute xfsprogs jfsutils ntfs-3g hdparm sdparm ifupdown mdadm postfix libsasl2-modules bsd-mailx ntp cpufrequtils rsyslog smartmontools openssl openssh-server openssh-blacklist-extra uuid tzdata nfs-kernel-server proftpd-basic wget tftpd-hpa samba samba-common-bin rsync apt-utils snmpd avahi-daemon libnss-mdns iptables monit acpid beep gdisk rrdtool collectd cron anacron cron-apt quota quotatool whiptail lvm2 watchdog ca-certificates perl libjson-perl liblocale-po-perl libjavascript-minifier-perl coreutils xmlstarlet parted libapache2-mod-php5 debhelper subversion dpkg-dev po-debconf xsltproc php5-dev libpam0g-dev libnet-ssleay-perl libauthen-pam-perl libpam-runtime libio-pty-perl build-essential:native

[/shell]

Em um dado momento, o instalador do Postfix irá aparecer na janela da console – ali são descritos rapidamente os modos de operação do mesmo; selecione Ok e siga em frente. Na próxima tela, você deve escolher o modo de operação do Postfix – selecione o que mais se adequar ao seu cenário, selecione Ok e siga em frente (dependendo da configuração, o instalador irá pedir mais informações e gerar certificados; não irei descrever aqui a configuração do Postfix). No nosso exemplo, selecionaremos No configuration e após isso selecione Ok.

Os próximos passos são configurações gerais (Apache, etc) – selecione Ok, All, Ok, Ok, Standalone.

Uma vez feito isso, vamos atualizar os repositórios para a última versão (“Fedaykin”) do OpenMediaVault:

[shell]

sudo echo "deb http://packages.openmediavault.org/public fedaykin main" > /etc/apt/sources.list.d/openmediavault.list

[/shell]

Nota: sempre que for liberada uma nova versão do OpenMediaVault, substitua a palavra fedaykin (que é o nome da versão atual) pelo nome da nova versão. Assim, as instruções de configuração deste artigo não ficarão tão desatualizadas em médio prazo. O nome da versão atual pode ser encontrado no próprio site do projeto OpenMediaVault.

Continuando a instalação, vamos baixar e instalar a key de assinatura do pacote do OpenMediaVault:

[shell]

sudo wget -O – http://packages.openmediavault.org/public/archive.key | apt-key add –

[/shell]

Atualizamos os repositórios:

[shell]

sudo apt-get update

[/shell]

Agora vamos baixar e instalar o scponly, necessário antes de instalar o OpenMediaVault:

[shell]

cd /tmp

sudo wget http://ftp.us.debian.org/debian/pool/main/s/scponly/scponly_4.8-4.1_$(uname -r | cut -d "-" -f3).deb

sudo dpkg -i scponly_4.8-4.1_$(uname -r | cut -d "-" -f3).deb

[/shell]

Neste momento, lhe será perguntado se deseja configurar o scponly em modo chroot nos diretórios/home dos usuários – selecione No e siga em frente, caso contrário, seu server pode ficar vulnerável.

Agora vamos baixar o OpenMediaVault via SVN no servidor e instalá-lo com a key apropriada:

[shell]

sudo svn checkout svn://svn.code.sf.net/p/openmediavault/code/trunk openmediavault-code

cd openmediavault-code/deb/php5-pam

sudo dpkg-buildpackage

sudo dpkg -i ../php5-pam_1.0.3-1_$(uname -r | cut -d "-" -f3).deb

sudo apt-get –yes –force-yes install openmediavault-keyring openmediavault

[/shell]

Atenção: após a instalação do OpenMediaVault, o acesso SSH é bloqueado por padrão – por isso, não feche a sua janela de console! Para complicar mais, o usuário administrador do OpenMediaVault é o mesmo do SSH (admin) e com isso não é possível entrar com a senha padrão, que é openmediavault. Faremos um reset da senha do usuário admin:

[shell]

sudo passwd admin

[/shell]

Digite duas vezes uma nova senha do usuário admin – nesse ponto, se a janela da console SSH for fechada, você perderá o controle do servidor – e isso não é desejável. Para resolver o problema, é necessário alterar as permissões do usuário admin colocando-o no grupo sudo ou, caso contrário, podem surgir problemas para configurar os serviços do OpenMediaVault via browser:

[shell]

sudo usermod –g sudo admin

[/shell]

Agora faça o login na interface de administração do OpenMediaVault pelo seu browser utilizando o usuário admin e a senha escolhida – caso você tenha dificuldades, repita o passo anterior para redefinir a senha do admin.

nas-2

No menu à esquerda, vá em Services e clique em SSH. Na área principal da tela, aparecerão as opções de configuração do SSH – deixe-as conforme mostrado na figura abaixo e salve as configurações.

nas-3

Agora prossiga com o reset do usuário root:

[shell]

sudo passwd root

[/shell]

Digite duas vezes uma nova senha do usuário admin – agora, sim, você tem controle SSH da máquina pelo root e pode, a qualquer momento, adicionar novos usuários como sudoers – e pode fechar a janela da console SSH sem sustos!

Aplicações

Agora basta configurar serviços, usuários, shares e quotas para cada share etc. – recomendo que visitem o wiki do projeto caso ainda não estejam familiarizados com o OpenMediaVault. Por exemplo, é possível:

  • Possuir um backup na nuvem só seu, com total privacidade de arquivos e poder também criar pastas públicas, e FTP comum ou anônimo para troca de arquivos;
  • Integrar seu NAS via LDAP com um controlador de domínio e herdar as policies;
  • Se já possuir um servidor local com Rsync (como o FreeNAS), é possível usar o OpenMediaVault como backup na nuvem (ou sincronizá-lo a outro OpenMediaVault, em outra hosting zone da AWS) e garantir redundância, disponibilidade e segurança;
  • Segregar acessos a shares com informações sensíveis criando usuários e grupos com privilégios específicos no próprio OpenMediaVault;
  • Criar shares nativos AFP para seu Mac OSX, ou CIFS para Windows via Samba integrado ao OpenMediaVault;
  • Receber e-mails do NAS sempre que algo estiver errado e até integrá-lo via SNMP com Nagios, Zabbix ou outra aplicação de monitoramento de ambiente de TI e saber a quantas anda o sistema;
  • Gerenciar um ou mais volumes EBS conectados à instância e assim ter capacidade virtualmente infinita de storage com suporte a RAID 0/1/5… ou JBOD;
  • Utilizá-lo como servidor NFS de armazenamento de arquivos dinâmicos (por exemplo, para aplicações multi-instância em Elastic Beanstalk como um CMS em que o conteúdo via upload de arquivos é alimentado pelos usuários);
  • Gerenciar seus Torrents sem ocupar o seu PC;
  • Proteger os arquivos com antivírus HAVP integrado;
  • Utilizá-lo como servidor de arquivos multimídia para sistemas como o Plex Media Server e criar um serviço de mídia distribuída;
  • E muitas outras possibilidades – visite o site do projeto OpenMediaVault e saiba mais.

Conclusão

NAS não possuem clients de sincronização como o Dropbox ou o ownCloud, mas a proposta de um NAS é diferente de um repositório de arquivos com sincronismo como o Dropbox. Obviamente, se desejar utilizá-lo como servidor de arquivos primário, sem um servidor local, é mandatório que possua largura de banda de internet suficiente para o tráfego de arquivos como se estivesse em rede local (pelo menos 100Mbps em link dedicado) para manipular arquivos bem grandes por FTP ou mesmo mapeamento de unidade de rede, mas é recomendável que o utilize como contingência de um NAS local. Contudo, se a sua necessidade for apenas backup de segurança, o OpenMediaVault na Amazon vai servir muito bem – mesmo que possua link “sujo”, não dedicado.

Dadas às possibilidades citadas e outras que certamente serão encontradas, é certo que uma boa parte dos leitores vai experimentar essa solução até mesmo como alternativa a serviços pagos de storage de nuvem, sobretudo devido à privacidade e flexibilidade de configurar os serviços como se desejar, dentro das possibilidades do OpenMediaVault.