Criando servidores virtuais com FreeBSD Jail
Colaboração: Valdomiro de O. Souza Jr.
Data de Publicação: 08 de Agosto de 2007
Segundo uma pesquisa realizada pela AMD, a maioria dos servidores opera com menos de 15% da capacidade. Acredito que este seja um dos motivos que levaram o assunto virtualização ao topo dos projetos da área de TI para 2007.
Até setembro passado eu tinha uma pendência antiga na minha agenda, utilizar o FreeBSD Jail em algumas aplicações da empresa, mas se eu soubesse que era tão fácil e prático a virtualização de servidores utilizando o FreeBSD Jail, eu já teria feito isso há muito tempo.
O FreeBSD Jail permite a virtualização de sistemas operacionais de uma forma muito fácil, o que possibilita a criação de diversos servidores virtuais e independentes, em um único servidor FreeBSD, também possibilitando que todos estes servidores virtuais compartilhem todos os recursos de hardware (processadores, memórias, discos e placas de redes).
Bom, chega de papo furado! Vamos meter a mão na massa, criando e configurando os ambientes virtuais.
1. Criando uma máquina virtual
A) Crie um arquivo "criando_ambiente_jail.sh" com as linhas abaixo
D=/caminho/nome_do_jail # Exemplo: /virtual/intranet cd /usr/src mkdir -p $D make world DESTDIR=$D cd etc make distribution DESTDIR=$D mount_devfs devfs $D/dev cd $D ln -sf dev/null kernel
B) Execute o arquivo "criando_ambiente_jail.sh"
#> sh criando_ambiente_jail.sh
2. Configurando o servidor BASE
Servidor BASE é o sistema operacional principal onde serão instalados e inicializados os ambientes virtuais jail.
2.1. Editar o arquivo /etc/rc.conf
sendmail_enable="NO" inetd_flags="-wW -a <IP do sistema BASE>" rpcbind_enable="NO" syslogd_flags="-ss"
2.2. Editar o arquivo /etc/ssh/sshd_config
Este passo deve ser executado em todas as máquinas virtuais que rodarem o daemon do SSH, preenchendo o campo <IP DO SISTEMA> com o IP da máquina virtual.
Habilite as linhas abaixo:
Port 22 Protocol 2 ListenAddress <IP DO SISTEMA>
2.3. Criando, editando e copiando arquivos
2.3.1. Edite o arquivo /etc/sysctl.conf
#> echo security.jail.set_hostname_allowed=0 >> /etc/sysctl.conf
Mais informações sobre este parâmetro podem ser encontradas utilizando o "man jail"
2.3.2. Criando e copiando arquivos
#> cp -r /stand /caminho/nome_do_jail/ #> touch /caminho/nome_do_jail/etc/fstab #> cp /etc/resolv.conf /caminho/nome_do_jail/etc/
3. Configurando os arquivos da nova máquina virtual
#> vi /caminho/nome_do_jail/etc/rc.conf
Inserir a linha:
network_interfaces=""
Opcionais
rpcbind_enable="NO" sendmail_enable="NO" #> vi /caminho/nome_do_jail/etc/syslog.conf
Altere a linha:
de
*.err;kern.warning;auth.notice;mail.crit /dev/console
para
*.err;kern.warning;auth.notice;mail.crit /var/log/messages
Edite o rc.conf do sistema BASE e insira as linhas abaixo:
#> vi /etc/rc.conf jail_enable="yes" jail_list="NomeDoJail01 NomeDoJail02 ... NomeDoJailNN" # # As linhas abaixo devem ser criadas para cada máquina virtual # jail_NomeDoJail01_rootdir="/caminho/nome_do_jail_01/" # Jail's root directory jail_NomeDoJail01_hostname="nome_do_jail_01.exemplo.com" # Jail's hostname jail_NomeDoJail01_ip="<IP do Servidor Virtual01>" # Jail's IP number jail_NomeDoJail01_exec="/bin/sh /etc/rc" # command to execute in jail jail_NomeDoJail01_devfs_enable="YES" # mount devfs in the jail jail_NomeDoJail01_fdescfs_enable="YES" # mount fdescfs in the jail jail_NomeDoJail01_procfs_enable="YES" # mount procfs in jail jail_NomeDoJail01_fstab="" # fstab(5) for mount/umount jail_NomeDoJail01_flags="-l -U root" # flags for jail(8)
4. Acessando o ambiente virtual
4.1. Inicialização
#> ifconfig <interface de rede> inet alias <IP do Servidor Virtual>/32
Não esqueça de incluir as configurações do <IP do Servidor Virtual> na <interface de rede> no /etc/rc.conf do sistemas BASE.
#> mount -t procfs proc /caminho/nome_do_jail_XX/proc #> jail /caminho/nome_do_jail_XX nome_do_jail_01.exemplo.com <IP do Servidor Virtual> /bin/sh /etc/rc
4.2. Acessando o ambiente virtual
#> jail /caminho/nome_do_jail_XX nome_do_jail_XX.exemplo.com <IP do Servidor Virtual> /bin/sh
Pronto, agora é só instalar os pacotes necessários para o seu servidor web, banco de dados, email, ldap, arquivos, ...
5. Dicas:
5.1. Removendo um JAIL:
#> chflags -R noschg /caminho/jail #> rm -Rf /caminho/jail
5.2. Comandos de administração
jls, jail e jkill
5.3. Inicializando e parando um ou mais Jails
Para todos os Jails
# /etc/rc.d/jail stop # /etc/rc.d/jail start
Para um Jail
# /etc/rc.d/jail stop <nome do jail> # /etc/rc.d/jail start <nome do jail>