Recentemente, iniciei meus estudos em FreeBSD, com foco em segurança de sistemas e redes, explorando o conceito de jails, um dos recursos nativos mais poderosos e seguros para isolamento de processos no sistema BSD.
Me baseei ne artigo do site oficial: FreeBSD Handbook
Jails são ambientes isolados no FreeBSD que permitem executar processos e serviços de forma segura, como se estivessem em sistemas separados. Cada jail possui seu próprio sistema de arquivos, usuários e rede, mas compartilha o mesmo kernel com o host. São amplamente usadas para testes, servidores multi-tenant, isolamento de serviços e simulações de rede.
Como meu ambiente principal é o Manjaro Linux, decidi emular o FreeBSD usando o QEMU, que oferece uma boa flexibilidade para testes e desenvolvimento. Vou mostrar como eu fiz esse laboratório.
- Host: Manjaro Linux (x86_64)
- Virtualizador: QEMU + virtio
- ISO: FreeBSD 14.0-RELEASE
- Disco virtual:
.qcow2
🚨 FreeBSD não é Linux!
Criei um arquivo de configuração de máquina virtual para subir o FreeBSD em modo bridge, atrelado a uma interface de rede específica para tunelamento. A interface é tuntap, que permite — entre outras coisas — subir a VM em modo bridge e não NAT. Depois, mostrarei como criar isso no host (Manjaro Linux):
#!/bin/bash
# Iniciar FreeBSD com:
# - 2 GB RAM
# - 2 CPUs
# - acesso via terminal direto (sem GUI)
# - disco qcow2 com KVM para desempenho
# - bridge entre a VM e o host
qemu-system-x86_64 \
-m 2048 \
-smp 2 \
-cpu host \
-enable-kvm \
-drive file=FreeBSD.qcow2,format=qcow2 \
-boot c \
-serial mon:stdio \
-nographic \
-device virtio-net-pci,netdev=net0 \
-netdev tap,id=net0,ifname=tap0,script=no,downscript=noAntes disso, criei uma imagem de disco virtual para o QEMU, do tipo qcow2:
qemu-img create -f qcow2 FreeBSD.qcow2 20GDepois, executei a VM FreeBSD:
Mostrarei o erro que apareceu quando tentei subir a VM sem ter criado a interface de tunelamento antes:
- Ao tentar executar a VM com QEMU, o terminal mostra "operação não permitida";
- O comando
ip link showmostra todas as interfaces de rede do host; - A interface 3 é a wifi0 (minha interface de conexão com a internet).
Ou seja, ainda falta criar a interface tap0 no host.
💡 TUN/TAP são dispositivos de rede virtuais usados em sistemas Unix/Linux para criar interfaces de rede via software. São comuns em VPNs, containers e jails. TUN trabalha em nível IP, enquanto TAP em nível Ethernet.
- Criando a tuntap e adicionando como novo dispositivo para o usuário;
- Habilitada para uso após a criação;
- Adicionando um novo range de IP "/24" para usar na interface criada;
- Ainda está "Down", mas vou deixá-la "Up".
Ainda no host, habilitei o redirecionamento de pacotes IPv4 no kernel Linux e configurei o firewall iptables para redirecionar todo o tráfego recebido da VM em tap0 para a wifi0, de forma mascarada. ip_forwarding.
Depois, executei novamente a VM FreeBSD:
Uma vez dentro da VM, configurei a jail.
🚨 FreeBSD não é Linux!
PS: Eu já havia feito todo o processo inicial de instalação do sistema. A máquina já estava totalmente configurada e operante.
A VM FreeBSD está usando a subrede 192.168.100.0/24 criada com tap0 no host. O dispositivo vtnet0 faz a "ponte" (bridge) com o sistema host. A imagem mostra que a rota padrão para o gateway é 192.168.100.1.
Podemos confirmar que a comunicaçao com o host e com a internet está ok na imagem abaixo:
📌 Importante: o sistema operacional FreeBSD já estava configurado (
rc.conf,resolv.conf,pfctl, serviços, permissões root, etc.). Não abordarei isso aqui para manter o foco.
Nesse momento, se voltar ao host (Manjaro) e verificar, verá que o tap0, que antes estava "Down", agora está "Up":
ip addr show tap0Esses foram os comandos usados para criar o ambiente de testes dentro da VM e a base necessária para criar uma jail. A jail funciona criando uma nova userland — ou seja, um novo espaço separado em nível de ambiente de usuário, sem interação com o sistema host (neste caso, a VM FreeBSD).
mkdir -p /usr/jails/projeto_X
cd /usr/jails/projeto_X
fetch https://download.freebsd.org/ftp/releases/amd64/14.0-RELEASE/base.txz
tar -xvf base.txz -C .Link usado para baixar a base do sistema: amd64/14.0-RELEASE/base.txz
Após o download com fetch, extraí os arquivos com tar. Em seguida, excluí os arquivos desnecessários, mantendo apenas o essencial para subir a jail.
Arquivo de configuração em /etc/jail.conf:
Obs.: É um arquivo de configuração básica; existem muto mais no site oficial.
Obs2.: No meu caso, criei o nome de "project_X" mas pode ser qualquer nome.
Verificando se o serviço está ativo:
- Verificando se o serviço está ativo no sistema com service.
- Fazendo a mesma verificacao com a propria ferramenta do jail: jls.
Eu usei os seguintes comandos abaixo para iniciar o serviço jail e habilitar para iniciar com o boot da VM:
sysrc jail_enable="YES"
service jail startOs comandos abaixo acessa a jail criada, no caaso, project_X:
jexec project_X /bin/csh # Acessa a jail (usando o ID ou nome)Dentro da jail, testei comandos básicos e observei o isolamento de rede e sistema de arquivos.
Finalmente podemos acessar a jial criada e confirmar que se trada de outro ambienre, outra userland; totalmente isolada do host.
Vale notar que como nao configurei nada além do básico, a jail herdou o mesmo IP do host, mas isso pode ser totalmente configurado para ter as proprias configuraçoes de IP, DNS, etc. Da para deixar muito mais independente.
Estudar jails no FreeBSD tem sido uma ótima introdução prática aos conceitos de contenção leve, segurança por isolamento e administração de ambientes Unix-like para mim.
A vantagem de usar QEMU é poder experimentar com snapshots e modificar o ambiente sem comprometer o sistema principal.
- Criar ambientes com múltiplas jails
- Simular serviços de rede
- Aplicar regras com
pf(packet filter) - Explorar integrações com ferramentas de observabilidade como Prometheus













