De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
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>