Você está na página 1de 20

Xen

Firewalls Virtuais por: Djames Suhanko (djames.suhanko@gmail.com) 19 de agosto de 2007

Sumrio
1 Compreendendo o ambiente de para-virtualizao Do ambiente real ao para-virtualizado Congurando o Xen 3.1 Conceitos . . . . . . . . . . . . . . . . . . 3.2 Xen0 . . . . . . . . . . . . . . . . . . . . . 3.2.1 Desabilitando servios . . . . . . . 3.2.2 Instalao dos pacotes necessrios. . 3.2.3 Criando a LVM . . . . . . . . . . . 3.2.4 Congurao da bridge . . . . . . . 3.2.5 Script inicializador da DomU . . . 3.2.6 Ajustes importantes . . . . . . . . . 3.3 XenU . . . . . . . . . . . . . . . . . . . .

2 3 4 4 4 4 5 5 7 8 9 9 11 11 11 13 13 15 19

2 3

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

Controle das domUs 4.1 Iniciando um rewall . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Comandos do Xen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Backups 5.1 Backup das domUs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Backup das Dom0s . . . . . . . . . . . . . . . . . . . . . . . . . . . . Consideraes nais

Captulo 1 Compreendendo o ambiente de para-virtualizao


Para-virtualizao e virtualizao so dois modos diferentes de atingir um mesmo objetivo - rodar mais de um sistema operacional em uma nica mquina. A virtualizao implica em emular um hardware para que um dado sistema operacional trabalhe independente da plataforma fsica em que est hospedado. Com isso, tm-se um custo; o alto consumo de processamento, pois todo um hardware est sendo emulado por um virtualizador, chegando ao esgotamento dos recursos. Cada requisio de hardware feita pelo sistema hospedeiro entregue ao virtualizador, que se encarrega de fazer a transao com o hardware real. Entre os mais conhecidos, encontra-se o Bochs, Qemu e VMWare. Nesses softwares emuladores de hardware, o sistema operacional deve ser instalado em um arquivo, ou inicializados a partir de um arquivo ISO1 . Na para-virtualizao, o software trabalha muito mais prximo do hardware real; um sistema operacional usando um kernel modicado gerencia sistemas para-virtualizados, rodando micro-kernels. Com isso, ganha-se em processamento, pois no h uma emulao completa desde a BIOS, possibilitando a execuo de muitos sistemas operacionais simultaneamente. Esse trabalho feito em Linux pelo Xen, um para-virtualizador com verso free e open. Nesse documento ser abordado o uso de Xen rodando em Linux OpenSuSE 10.2, para-virtualizando sistemas instalados em LVM2 ,designados tarefa de rewalls.

1 BIN,CUE, 2 Linux

iso8859 - formato binrio para ser gravado em algum tipo de mdia como CD ou DVD. Volume Manager

Captulo 2 Do ambiente real ao para-virtualizado


Apresentando uma situao real, na multinacional Uranet1 , onde viveu-se a limitao de espao fsicos de seu data center, pelo mtodo estratgico adotado. Por ser uma empresa de telefonia e callcenter, cada cliente possui um ou mais tipos de link com a prestadora do servio, criando assim uma rede local ou remota onde trabalham os atendentes de telemarketing, ou por onde trafegam dados sigilosos. Am de garantir a segurana e manter a simplicidade de manuteno, impactando ao mnimo no ambiente de produo e isolando qualquer tipo de problema, essas redes so separadas por rewalls independentes, que controlam o acesso entre o cliente e prestadora. A soluo utilizada seria ideal se no fosse a limitao fsica - consumo demasiado de espao, racks, servers-select2 , e principalmente energia (atingindo o limite de seus geradores e no-breaks). Esse o caso em que se aplicou a soluo descrita nesse documento. Como toda a tecnologia (ou toda a soluo), h prs e contras. Citando imediatamente os contras - perde-se nesse momento a segurana do problema fsico isolado (apesar de ser o menos comum dos problemas), pois a paralizao de um hardware real implicar na paralizao de N rewalls. Por m, ainda contra a congurao, que no complexa ao extremo, nem to simples como poderia ser e, para disolver essa parte do problema, uma estratgia de gerao/restaurao est contida nesse documento. Cada hardware real comportar 4 rewalls para-virtualizados. Assim, conta-se como vantagem a reduo do parque de mquinas em 75%, alm de racks, servers-select e energia. Tambm as facilitaes; a cada uma porta do server-select se acessa de maneira mais gil o console de 4 rewalls. Para contar com um ambiente ideal, as mquinas reais so computadores industriais3 e as placas ethernet, 2 quad-port4 . Ainda deve-se contar com 1 porta da rede onboard, am de criar a rede das mquinas reais. Cada rewall virtual ter uma reserva de 256MB de memria, ou seja - (4.256)+X para a dom0. A dom0 No necessita de muita memria, porm para atingir algum valor acima de 1GB ser necessrio adquirir 3 pentes de 512MB ou 2 de 1GB.

1 www.uranet.com.br

centralizador de acesso s mquinas, para que cada uma no precise de teclado e monitor independente e evitando passeios com mesa, teclado e mouse. 3 computadores com mais recursos, onde a placa-me colocada em um slot ISA/PCI, em uma placa chamada backplane. 4 ethernets de quatro portas

2 Monitor

Captulo 3 Congurando o Xen


3.1 Conceitos

Existem alguns conceitos a seguir que evitaro confuses posteriores. Inicialmente tratando-se dos sistemas operacionais. Um sistema para-virtualizador conhecido como Dominio0, Domain0, Dom0, Xen0. Um sistema para-virtualizado chamado de DominioU, DomainU, DomU, XenU. O U signica Unprivilegied ou, sem previlgios - pois esse sistema no ter acesso direto ao hardware. A congurao necessria a preparao da dom0 e da domU. A comunicao entre elas acontecer atravs de bridges, que isolaro as interfaces de cada rewall. Nos domUs s sero vistas as interfaces que lhe forem atribuidas, ou seja,s poderia ser farejado atravs da dom0, onde sero enxergadas. As dom0s por sua vez estaro em uma rede separada por um outro rewall, que s ser conectado ao mundo no momento em que houver a necessidade de uma manuteno remota. Assim seria algo como: Internet > Firewall > Rede Xen0. O acesso feito por ssh, sendo derrubado o daemon assim que a conexo estabelecida. Conclundo-se a manuteno, o rewall desconectado sicamente da rede. Feita a parte paranica.

3.2

Xen0

A congurao da Xen0 consiste em uma instalao padro de um SuSE em modo texto, tendo o hd particionado em 3, onde uma partio menor ser swap, uma ser a raiz e a terceira, uma partio LVM, que abrigar os domUs.

3.2.1

Desabilitando servios

Aps a instalao do sistema, os seguintes daemons foram mantidos: auditd cron dbus fbset haldaemon kbd microcode network

CAPTULO 3. CONFIGURANDO O XEN

nscd policykitd powersaved resmgr sshd syslog xend xendomain Para desabilitar os daemons desnecessrios, basta rodar o Yast e, em sistema, selecionar Servios do Nvel de Execuo.

3.2.2

Instalao dos pacotes necessrios.

Os pacotes Xen a serem instalados so: kernel-xen xen xen-libs xen-tools Automaticamente ser adicionado o pacote bridge-utils, para a congurao da bridge.

3.2.3

Criando a LVM

O script abaixo ajuda a criar o LVM. Basicamente, criado com pvcreate, posteriormente o grupo com vgcreate e por m, os volumes. No necessrio conhecimento prvio em LVM para a utilizao do script. A funo do script a seguir criar as parties raiz, swap e uma pequena partio para backup, como descrito no captulo 5. #!/bin/sh escolhe_particao(){ PARTICAO=dialog stdout inputbox "Digite a particao a criar LVM" 0 0 [ $? = 1 ] && exit dialog stdout yesno "Voce escolheu $PARTICAO ?" 0 0 if [ $? = 1 ];then escolhe_particao echo $PARTICAO >particao } criar_grupo(){ NOME_DO_GRUPO=dialog stdout inputbox "Nome para o grupo:" 0 0 vm dialog stdout yesno "Correto ($NOME_DO_GRUPO)?" 0 0 if [ $? = 1 ];then criar_grupo dialog stdout yesno "Grupo: $NOME_DO_GRUPO \n Particao: $PARTICAO \n Correto?" 0 0 if [ $? = 1 ];then exit 0 pvcreate $(cat particao) ||{

CAPTULO 3. CONFIGURANDO O XEN

dialog stdout infobox "Houve algum erro. \n Verique se a particao existe e se o pacote para LVM esta instalado." 0 0 exit 1 } vgcreate $NOME_DO_GRUPO $PARTICAO ||{ dialog stdout infobox "Houve algum erro. \n Verique se a particao existe e se o pacote para LVM esta instalado." 0 0 exit 1 } } criar_volume(){ if [ "$1" != "" ];then NOME_DO_GRUPO="$1" NOME_DO_VOLUME=dialog stdout inputbox "Nome para o volume:" 0 0 vm1 dialog stdout yesno "Correto ($NOME_DO_VOLUME)?" 0 0 if [ $? = 1 ];then criar_volume tamanho(){ TAMANHO_RAIZ=dialog stdout inputbox "Tamanho (512M, 5G...)" 0 0 5G dialog stdout yesno "Correto ($TAMANHO_RAIZ)?" 0 0 if [ $? = 1 ];then tamanho TAMANHO_SWAP=dialog stdout inputbox "Tamanho swap (512M, 5G...)" 0 0 512M dialog stdout yesno "Correto ($TAMANHO_SWAP)?" 0 0 if [ $? = 1 ];then tamanho } tamanho lvcreate -L$TAMANHO_RAIZ -n $NOME_DO_VOLUME.raiz $NOME_DO_GRUPO echo "y"|mkreiserfs /dev/$NOME_DO_GRUPO/$NOME_DO_VOLUME.raiz lvcreate -L$TAMANHO_SWAP -n $NOME_DO_VOLUME.swap $NOME_DO_GRUPO mkswap /dev/$NOME_DO_GRUPO/$NOME_DO_VOLUME.swap } auto_volume(){ NUM=dialog stdout inputbox "Quantas maquinas deseja?" 0 0 if [ $? = 1 ];then exit NOME_DO_VOLUME=dialog stdout inputbox "Nome para o volume:" 0 0 vm TAMANHO_RAIZ=dialog stdout inputbox "tamanho da Raiz" 0 0 5G TAMANHO_SWAP=dialog stdout inputbox "Tamanho da Swap" 0 0 512M for i in seq 1 $NUM;do lvcreate -L$TAMANHO_RAIZ -n $NOME_DO_VOLUME$i.raiz $NOME_DO_GRUPO echo "y"| mkreiserfs /dev/$NOME_DO_GRUPO/$NOME_DO_VOLUME$i.raiz lvcreate -L$TAMANHO_SWAP -n $NOME_DO_VOLUME$i.swap $NOME_DO_GRUPO

CAPTULO 3. CONFIGURANDO O XEN

mkswap /dev/$NOME_DO_GRUPO/$NOME_DO_VOLUME$i.swap done dialog stdout infobox "Verique abaixo se foram criadas" 0 0 ls /dev/vm/* } dialog stdout yesno "Deseja colocar maquinas a um grupo existente?" 0 0 if [ $? = 0 ];then NOME_DO_GRUPO=dialog stdout inputbox "Nome do grupo existente" 0 0 criar_volume $NOME_DO_GRUPO exit 0 escolhe_particao criar_grupo dialog stdout yesno "Gostaria de criar varios volumes \n passando apenas nome, tamanho raiz e swap?" 0 0 if [ $? = 1 ];then criar_volume else auto_volume for i in seq 1 4;do ls -l /dev/$NOME_DO_GRUPO/vm$i\.bkp ||{ lvcreate -L64M -n vm$i\.bkp $NOME_DO_GRUPO echo "y"| mkreiserfs /dev/$NOME_DO_GRUPO/vm$i\.bkp } done

3.2.4

Congurao da bridge

A bridge normalmente congurada em /etc/xen/scripts/network-bridge. Para esse modelo de congurao, o script foi criado com o seguinte contedo: #!/bin/sh #Djames Suhanko #source /etc/xen/scripts/bridges.so if [ "$1" = "" ];then echo "Usage: Stop or Start" echo " " exit 0 if [ "$1" = "start" ];then for i in seq 0 7;do #Cria bridge e adiciona interface /sbin/brctl addbr br$i 2>/dev/null /sbin/brctl addif br$i eth$i 2>/dev/null #Congura interface /sbin/ifcong eth$i 0 0.0.0.0 2>/dev/null #IP na ponte /sbin/ifcong br$i 192.168.10.$i netmask 255.255.0.0 2>/dev/null done

CAPTULO 3. CONFIGURANDO O XEN elif [ "$1" = "stop" ];then for i in seq 0 7;do /sbin/brctl delbr br$i 2>/dev/null /sbin/brctl delif br$i eth$i 2>/dev/null /sbin/ifcong br$i down 2>/dev/null /sbin/ifcong eth$i down done

Desse modo, cada bridge recebe uma interface ethernet, fazendo (a grosso modo) a conexo entre a mquina virtual e a interface ethernet real. A interface 8, correspondente placa de rede onboard dever ser congurada normalmente na dom0, am de permitir a rede local dom0. Recomenda-se que a congurao dessa interface seja feita em /etc/init.d/after.local (esse arquivo dever ser criado e ajustado como executvel). Algo como: /sbin/ifcong eth8 10.0.0.1 netmask 255.255.0.0 up.

3.2.5

Script inicializador da DomU

Para iniciar uma mquina virtual, pode-se passar com o comando xm todos os parmetros necessrios ou atravs de um script, como descrito a seguir: kernel="/boot/vmlinuz-2.6.18.2-34-xen" ramdisk="/boot/initrd-2.6.18.2.34.xen" memory=256 root="/dev/hda1 ro" disk=[phy:/dev/vm/vm1.raiz,hda1,w,phy:/dev/vm/vm1.swap,hda2,w,phy:/dev/vm/vm1.bkp,hda3,w vif=[mac=ac:de:48:00:00:01,bridge=br0,mac=ac:de:48:00:00:02,bridge=br1,] A primeira linha se refere ao kernel, contido no diretrio boot da dom0. Da mesma forma para o initrd, na segunda linha. Seguidamente, a quantidade de memria reservada para essa mquina. A est mais uma grande vantagem da para-virtualizao sobre uma vlan, por exemplo, pois a domU pode ser atacada ou por algum outro motivo, ter seu desempenho prejudicado. A domU est limitada sua poro de recursos; sua quantidade de CPU e, como especicado aqui, a memria. Com isso, mantm-se isolado qualquer problema. A linha seguinte memria indica a partio raiz da domU. Deve-se notar que, mesmo que o HD da dom0 seja SATA, na domU aparecer como IDE e nesse primeiro momento, como read-only. A linha disk informar a raiz, swap e uma partio para o backup, descrito no captulo 5. O parmetro phy indica que as parties so fsicas. Somente o que for especicado nesse arquivo ser visvel para a domU. A linha vif indica as bridges que cada interface ethernet atuar. Especicar o mac de cada interface opcional, porm para validar o sistema de restaurao, necessrio faz-lo. O spoong do MAC deve obedecer a ordem da reserva ac:de:48, podendo modicar todos os demais campos. Tambm deve-se tomar cuidado para no repetir um MAC ou IP na mesma rede. Caso no seja especicado um MAC, ser gerado um aleatoriamente, dentro da reserva do Xen (00:16:3e:...). Esse arquivo pode receber qualquer nome, porm para validar o backup necessrio que se chame vmX.nome, onde X representa o nmero da mquina virtual (que dever

CAPTULO 3. CONFIGURANDO O XEN

ter relao com a partio LVM vmX.raiz, como mostra o script na seo 3.2.3 e deve ser armazenado preferencialmente em /etc/xen/.

3.2.6

Ajustes importantes

Uma alterao de extrema importncia deve ser feita em /boot/grub/menu.lst. Na linha module, adicione o parmetro dom0_mem=196. Isso evitar travamentos aleatrios nas interfaces de rede.

3.3

XenU

Para preparar uma XenU, basta uma instalao limpa de um rewall antes de receber rotas e regra. Instalar o sistema nomeando-o como generico ajudar a no se confundir posteriormente; uma imagem chamada generico que esteja rodando, certamente no possuir nenhuma congurao. Aps o sistema devidamente instalado, deve ser feita uma cpia com os parmetros -av para um diretrio chamado genrico: mkdir /generico cd / ls -l /|egrep -v proc|generico|<outro> |awk {print $NF}|while read line; do cp -av $line generico/;done tar cjvf generico.tbz2 generico Esse arquivo deve ser transportado para a Xen0 e descomprimido em /, posteriormente criando os diretrios que foram excludos na gerao do pacote genrico: tar xvjf generico.tbz2 A raiz do sistema agora deve ser a imagem genrica. Para isso, usa-se o comando: chroot /generico Monta-se /proc: mount /proc A senha deve ser convertida para shadow: pwconv O arquivo /etc/udev/rules.d/30-net_persistent_names.rules deve ser editado e a linha contendo os MACs das placas reais do rewall modelo devem ser removidas. As linhas possuiro informaes do tipo: SUBSYSTEM=="net", ACTION=="add", SYSFS{address}=="00:15:c5:35:df:c8", IMPORT="/lib/udev/rename_netiface %k eth0" importante remover essa linha, caso contrrio, ao iniciar o sistema novas entradas sero criadas para as interfaces virtuais e conseqentemente as interfaces iniciaro a partir de eth2. Os servios desnecessrios devem ser removidos, incluindo dessa vez splash e kdb1 . Basta rodar o Yast, uma vez que a raiz do sistema passou a ser /generico. Deve-se remover tambm os arquivos relacionados congurao da interface no boot. Algo como ifcfg-eth-00:0F.... Estes arquivos estaro em /etc/syscong/network/. O nome de host pode ser mudado atravs do Yast, na opo Servios de Rede > DNS e Nome de Host, ou editando os arquivos /etc/HOSTNAME e /etc/hosts.
1 No

haver danos ao sistema, apesar da informao do Yast de que esse servio no deve ser desabi-

litado.

CAPTULO 3. CONFIGURANDO O XEN

10

Na mquina real, para se acessar consoles usa-se Alt+[F1-F6]. As domUs tambm sero acessadas pelo console e esse suporte a mltiplas ttys conitante. Deve-se ento desabilitar os consoles de 2 a 6, em /etc/inittab (do sistema genrico somente), comentado as linhas: 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 A tabela de sistemas de arquivos deve ser modicada, deixando apenas as entradas correspondentes a raiz, swap, proc e partio de backup , que ser citado mais adiante. Essa partio existir apenas na mquina virtualizada, no sendo necessrio cri-la na mquina de gerao do sistema genrico. Modelo do fstab: /dev/hda1 / reiserfs acl,user_xattr 11 /dev/hda2 swap swap defaults 00 /dev/hda3 /bkp reiserfs user,exec,auto,rw 1 1 proc /proc proc defaults 00 O diretrio /bkp deve ser criado no sistema genrico. Concludas as conguraes, desmonta-se /proc e naliza-se a jaula: umount /proc exit Para concluir, as libs do Xen devem ser copiadas para o sistema genrico: cp -av /lib/modules/*xen /generico/lib/modules/ Terminada a congurao, a genrica pode ser copiada para a partio do rewall que ser virtualizado, montando o LVM em /mnt, exemplicando o primeiro rewall, chamado frwexemplo: mount /dev/vm/vm1.raiz /mnt cp -av /generico/* /mnt/ As conguraes poderiam ser feitas nesse momento usando-se da jaula, ou aps o primeiro boot, como no exemplo deste documento.

Captulo 4 Controle das domUs


No console da mquina real, facilita-se a inicializao de um sistema virtual estando em /etc/xen, onde caro armazenados os scripts inicializadores dos sistemas virtuais, contando com a ajuda de auto-complete, porm todos os comandos podem ser executados de qualquer nvel de diretrio, indicando o caminho absoluto.

4.1

Iniciando um rewall

De dentro de /etc/xen: xm create -c vm1.frwexemplo A ag -c diz para iniciar o sistema em primeiro plano. O prexo vm1 til nesse momento, pois indica em que local do LVM se localiza o sistema. A inicializao deve ocorrer normalmente, apresentando falha apenas no clock do hardware, que em nada inuenciar nesse modelo. Aps efetuar o login no sistema, congura-se as interfaces de rede, que apresentaro uma mensagem de modulo no encontrado, bastando ignorar a mensagem.

4.2

Comandos do Xen

Para retornar ao console da mquina real, basta usar Ctrl+]. Para retornar a um console, usa-se xm console vmX.nome, exemplicando com o modelo criado: xm console vm1.frwexemplo Seguido de Enter. Para saber quais rewalls esto rodando, usa-se xm list. A lista apresentar o estado das mquinas, ou estado nenhum. -r: indica processamento -c: indica crash. A mquina virtual certamente no est rodando. -b: Se a mquina virtual no estiver processando, entrar em estado de bloqueio at que seja requisitado processamento. -p: Indica que dado domU foi pausado. Quando uma domU sofre um crash (por uma congurao que no permitiu o boot correto, por exemplo), ser necessrio destru-la. Para tal, usa-se o comando: xm destroy vm1.frwexemplo

11

CAPTULO 4. CONTROLE DAS DOMUS

12

Tm-se a possibilidade de pausar um domU em execuo. Isso interromper o processamento, mas no livrar recursos em uso. Para pausar: xm pause vm1.frwexemplo E para retomar: xm unpause vm1.frwexemplo Pode-se desligar uma domU com: xm shutdown vmX.nome Mais detalhes podem ser observados no manual do xm.

Captulo 5 Backups
Todos os script esto no pacote bkp.tbz2 em www.phantomsystem.com.br, no link superior esquerda.

5.1

Backup das domUs

Um rewall normalmente roda um pequeno conjunto de servios; regras de iptables, rotas e dhcp. As informaes necessrias esto contidas em um conjunto de arquivos como nome de mquina, interfaces de rede, script ps-boot etc. Se estas informaes forem acrescidas a um sistema genrico, tais conguraes sero assumidas em um boot posterior, portanto, o script de backup a seguir reunir os dados necessrias para reconstruir as domUs, caso a mquina real sofra algum dano irrecupervel. #!/bin/bash [ -d /bkp ] || mkdir /bkp if [ -f /bkp/$(date +%Y-%m-%d) ];then exit rm -rf /bkp/* 2>/dev/null DIR=/bkp/hostname -s rm -rfv $DIR mkdir -p $DIR cp -rfv parents /etc/HOSTNAME $DIR cp -rfv parents /etc/dhcpd.conf $DIR cp -rfv parents /root/* $DIR cp -rfv parents /etc/host* $DIR cp -rfv parents /etc/resolv.conf $DIR cp -rfv parents /etc/rc.d/after.local $DIR cp -rfv parents /etc/rc.d/frw* $DIR cp -rfv parents /etc/syscong/network $DIR cp -rfv parents /var/spool/cron/tabs/* $DIR echo "1" >/bkp/$(echo date +%Y-%m-%d) O script inicia vericando se h o diretrio de backup e a data do backup. Se a data do backup for inferior ao ltimo, ele no ser executado. Se for necessrio rodar o backup manualmente, basta remover o contedo de /bkp. Nesse script, a regra de rewall receber o mesmo nome do rewall (ambos no devem conter o prexo vmX). Desse modo, o backup se tornar genrico, dispensando

13

CAPTULO 5. BACKUPS

14

a criao de um script para cada rewall. Se necessrio for, basta adicionar ao script outros niveis de arquivos e diretrios. O script naliza adicionando a data do ltimo backup. Dessa forma, mesmo que agendado no cron com intervalos curtos, a execuo ser breve. O script after.local apenas um arquivo executvel (chmod 755) que, se existir, ser executado aps o rc - o ltimo a rodar antes do login. Quando o script roda e os arquivos so copiados, o domU compreende que est armazenando os dados em /dev/hda3, de poucos megas, apenas para armazenar os arquivos de congurao do sistema virtual em execuo. Para o Dom0, essa partio compreendida como um volume do LVM, contido em /dev/vm/vm1.bkp. Todo esse bkp seria intil se no pudesse ser armazenado remotamente, porm a mquina virtual no tem acesso mquina real de forma alguma. A soluo recolher o backup a partir da Dom0, por ser ela a controladora de todo o conjunto. A partio que corresponde ao bkp estar constantemente montada na domU em execuo, sendo inapropriado acessar uma partio montada mesmo que a partir da dom0. Para que seja possvel copiar os dados seguramente, o script que recolhe os backups tomar providncias - sincronizar o contedo do backup na mquina virtual, enviando um sinal para sincronsmo dos dados, descarregando o buffer do dispositivo e posteriormente espelhando o contedo do volume LVM para um arquivo. Finalizar copiando o contedo desse arquivo espelhado para o respectivo diretrio de backup, que ser /rewalls/vmX.nome, replicando o backup na rede dom0 atravs de uma leitura no arquivo defaults.rfs, contido no diretrio /root/bkp. Concludo, o arquivo de imagem removido do sistema. D-se a esse fato a importncia de criar um volume vmX.bkp de 16 ou 32 megabytes apenas, pois a imagem gerada bit a bit com um dump do dispositivo e poderia acarretar em consumo de recursos excessivos. No h como evitar o primeiro passo, que o espelhamento, mas a data do backup vericada da mesma forma que feito na domU. A replicao na rede feita por ssh usando-se de troca de chaves, que dispensar a senha. O script da dom0 que recolhe esse backup: #!/bin/sh #Djames Suhanko #Esse script monta a particao de bkp e copia para /rewalls e rede source /root/bkp/defaults.rfs [ ! -f /root/bkp/bkp.lock ] || exit 1 echo "1" >/root/bkp/bkp.lock roda_bkp(){ [ -d /mnt/bkp ] || mkdir /mnt/bkp /usr/sbin/ushb /dev/vm/$1\.bkp dd if=/dev/vm/$1\.bkp of=/mnt/$1\.bkp mount -o loop /mnt/$1\.bkp /mnt/bkp MAQUINA_LOCAL="/mnt/bkp" ARQUIVO=date +%Y-%m-%d [ -f /mnt/bkp/$ARQUIVO ] && { DIR=basename $(ls -d /mnt/bkp/*/|sed -e s/\///) cp -r /mnt/bkp/$DIR /mnt/$1\.$DIR DOMU_BKP=$1\.$DIR cp -rf /mnt/$DOMU_BKP /rewalls/ cp -f /etc/xen/vm[1-4].* /rewalls/les/ echo $GRUPO|sed -e s/,/\n/g; s/ //g|while read line;do if [ ! "$GRUPO" = "" ];then

CAPTULO 5. BACKUPS ping -c1 $line >/dev/null || ESTADO="no" if [ ! "$ESTADO" = "no" ];then scp -r /mnt/$DOMU_BKP root@$line\:/rewalls/ scp /rewalls/les/* root@$line:/rewalls/les/ ESTADO="ok" if [ ! "$ESTADO" = "ok" ] ;then echo "$1 $line" > >/root/bkp/nao_copiado_para_rede.err done rm -rf /mnt/$DOMU_BKP umount /mnt/bkp || echo "no umount $1" > >/root/bkp/umount_bkp.err rm -f /mnt/$1\.bkp } || umount /mnt/bkp } /usr/sbin/xm list|egrep vm|cut -f1 -d.|while read line; do roda_bkp $line done rm -f /root/bkp/bkp.lock

15

Dessa forma, todas as mquinas da rede dom0 tero em /rewalls uma cpia dos arquivos dos rewalls virtualizados em s e nas outras dom0s. Para restaurar um conjunto de domUs, necessrio saber quais domUs rodavam em que dom0. Essa informao est no arquivo defaultfs.rfs em /root/bkp. Por exemplo, as dom0s chamadas de mfXX (mf01, mf02,...), estariam no defaults.rfs como: MF01=vm1.frwexemplo,vm2.frwxxx,vm3.frwxxxxx,vm4.xxxxxxx MF02=...

5.2

Backup das Dom0s

Supe-se que a restaurao de um conjunto ser necessrio no momento em que um dom0 tiver um problema fsico, logo, o hardware dever ser substituido. Para tal, o modelo de backup descrito neste documento sugere que haja uma dom0 de backup em rede, recebendo a replicao dos arquivos de backup. Assim, se houver a morte de uma dom0, a substituio poder ser feita em alguns poucos minutos, rodando o script restaura_mf.sh na dom0 de backup: #!/bin/sh #Djames Suhanko - djames.suhanko@gmail.com #Restaurador de grupos source /root/bkp/defaults.rfs TODAS="" if [ "$1" = "remover" ];then LISTA=cat /root/bkp/defaults.rfs|egrep MFG|awk -F"=" {print $1" "$1} REMOVA=dialog stdout title "Remover grupo" menu "Selecione o grupo" 0 0 0 $LISTA if [ $? = 1 ];then exit

CAPTULO 5. BACKUPS

16

egrep -v "$REMOVA" /root/bkp/defaults.rfs > >/root/bkp/defaults.bkp mv -f /root/bkp/defaults.bkp /root/bkp/defaults.rfs exit if [ "$1" = "adicionar" ];then NUMERO_DE_MAQUINAS=dialog stdout title "Adicionar Grupo" inputbox "Entre com o numero de maquinas desejadas" 0 0 if [ $? = 1 ];then exit for i in seq 1 $NUMERO_DE_MAQUINAS;do NOME_DA_MAQUINA=dialog stdout title "Nomes" inputbox "Entre com o nome da maquina:" 0 0 if [ $? = 1 ];then exit TODAS_VIRGULA=$TODAS_VIRGULA$NOME_DA_MAQUINA"," done TODAS=echo $TODAS_VIRGULA|sed -e s/,$// for i in seq 1 100;do A=egrep "MFG$i" /root/bkp/defaults.rfs ||{ echo "MFG$i=\"$TODAS\"" break } done exit dialog stdout title "Maquina Despreparada" yesno "Deseja selecionar um grupo?" 00 if [ $? = 1 ];then exit egrep MFG /root/bkp/defaults.rfs >/tmp/grupos dialog stdout textbox /tmp/grupos 0 0 rm -f /tmp/grupos OPC=$(dialog stdout title "Selecione o MF" menu "Restaurar Grupo" 0 0 0 \ MF01 "MF01" \ MF02 "MF02" \ MF03 "MF03") [ $? = 1 ] && exit VMRUNNING=xm list|egrep vm|wc -l if [ $VMRUNNING -gt 0 ];then dialog stdout title "Ops" msgbox "Maquina virtual rodando. Pare-a primeiro" 0 0 exit case "$OPC" in MF01) [ -d /root/logs ] || mkdir -p /root/logs

CAPTULO 5. BACKUPS GRUPO_SELECIONADO=$MFG1 cp -rf /rewalls/dom0/mf01/* / 2> >/root/logs/copia_dom0 ;; MF02) [ -d /root/logs ] || mkdir -p /root/logs GRUPO_SELECIONADO=$MFG2 cp -rf /rewalls/dom0/mf02/* / 2> >/root/logs/copia_dom0 ;; MF03) exit #cp -rf /rewalls/dom0/mf03/* / 2> >/root/logs/copia_dom0 #GRUPO_SELECIONADO=$MFG3 ;; esac echo $GRUPO_SELECIONADO|sed -e s/,/\n/g; s/\"//g |while read line; do mount /dev/vm/$(echo $line|cut -f1 -d.).raiz /mnt [ -d /mnt/root ] ||{ cp -av /generico/* /mnt #dialog stdout msgbox "Generico copiado para o diretorio" 0 0 } cp -rv /rewalls/$line/* /mnt/ #servicos chroot /mnt/ chkcong add $(echo $line|cut -f2 -d.) if [ -f /mnt/etc/dhcpd.conf ];then chroot /mnt chkcong add dhcpd umount /mnt ln -sf /etc/xen/$line /etc/xen/auto/$line done dialog stdout title "Finalizado" msgbox "Reiniciarei o computador" 0 0 /sbin/reboot

17

Tambm permitido incluir ou remover um grupo no arquivo defaults.rfs, mas novos grupos no menu devem ser includos reeditando esse script. O defaults.rfs deve ser replicado a cada modicao. Como esse um arquivo comum em todas as dom0s, a replicao feita manualmente, para evitar desatualizaes ou sobrescries inoportunas. O script que replicar o defaults.rfs contm: #!/bin/sh source /root/bkp/defaults.rfs echo $GRUPO|sed -e s/^$//g; s/ //g; s/,/\n/g|while read line;do scp /root/bkp/defaults.rfs root@$line:/root/bkp/ done No apenas os backups das domUs so replicados, mas os da dom0 tambm, pois a mquina real possui algumas caractersticas especicas como seu nome, congurao de rede, etc. O script que faz o backup da dom0: #!/bin/bash [ -d /rewalls/dom0 ] || mkdir -p /rewalls/dom0

CAPTULO 5. BACKUPS rm -rf /rewalls/dom0/$(hostname -s) 2>/dev/null DIR=/rewalls/dom0/hostname -s rm -rfv $DIR mkdir -p $DIR cp -rfv parents /etc/HOSTNAME $DIR cp -rfv parents /root/* $DIR cp -rfv parents /etc/host* $DIR cp -rfv parents /etc/resolv.conf $DIR cp -rfv parents /etc/rc.d/after.local $DIR cp -rfv parents /etc/syscong/network $DIR cp -rfv parents /var/spool/cron/tabs/* $DIR cp -rfv parents /etc/xen/{vm[1-4]*,scripts/network-bridge} $DIR source /root/bkp/defaults.rfs echo $GRUPO|sed -e s/^$//g; s/ //g; s/,/\n/g|while read line;do scp -r /rewalls/dom0/$(hostname -s) root@$line:/rewalls/dom0/ done

18

Acontecendo o crash, a dom0 de backup substituir facilmente qualquer dom0 problemtica, porm ser necessrio preparar uma substituta, que far o papel de backup da rede novamente. Am de evitar o processo de congurao manual, gerar uma imagem da dom0 genrica sem a construo do LVM a soluo. Para tal, sugere-se o uso do Phantom, disponibilizado livremente em www.phantomsystem.com.br. Tendo uma imagem armazenada em qualquer ponto dessa rede, basta agora restaur-la para um novo hardware (que desempenhar o papel de dom0 genrica) e reconstruir o LVM.

Captulo 6 Consideraes nais


O ambiente descrito nesse documento foi testado tambm em desktops Dell Optiplex 740, onde foi possvel rodar 2 rewalls simultaneamente. A soluo apresentou alto desempenho e estabilidade, tendo todo o tempo dedicado congurao. Foi usado como referncia o documento do site www.eriberto.pro.br. Um canal de consultas no iRC - canal ##xen, no servidor FreeNode, onde pode-se encontrar ajuda (em ingls). Todas as caractersticas de um rewall esto conguradas nas domUs, tendo a dom0 como nica funo, gerenciar os sistemas virtualizados.
A Esse documento foi editado em LYX, front-end para o L TEX

19

Você também pode gostar