===== Algumas Configurações do Bastille =====
--- Texto ---
----
## Configuração do /etc/jail.conf -- Funcional, porém com muitas limitações
jail1 {
jid = 1;
# ip4 = inherit;
ip4.addr += "lo1|127.0.1.12/32";
ip4.addr += "em0|192.168.1.90/24";
host.hostname = "http10";
mount.devfs;
mount.procfs;
mount.fdescfs;
exec.start = "sh /etc/rc";
exec.stop = "sh /etc/rc.shutdown jail";
path = "/usr/local/etc/jails/hppd10";
interface = em0;
##### Resolvem problema para ping
allow.raw_sockets;
allow.socket_af;
#allow.reserved_ports;
### Resolvem problema para instalar Postgres
sysvsem = "new";
sysvmsg = "new";
sysvshm = "new";
###########################
exec.clean;
exec.system_user = "root";
exec.jail_user = "root";
}
## Comandos para verificar consumo de recursos de jails:
Ativar o rctl no /boot/loader.conf, adicionar ao arquivo
kern.racct.enable=1
rctl -u -h jail:bdpost
top -J bdpost
Configurações Recomendadas:
## /etc/devfs.rules (NOT .conf)
[bastille_vnet=13]
add include $devfsrules_hide_all
add include $devfsrules_unhide_basic
add include $devfsrules_unhide_login
add include $devfsrules_jail
add include $devfsrules_jail_vnet
add path 'bpf*' unhide
Lastly, you may want to consider these three sysctl values:
## Efetuar upgrade de uma jail para outra
Após atualizar para versão 14.2-RELEASE a partir de uma versão 13.2-RELEASE, perdesse o acessoa ao console via bastille, solução usar o comando
bastille cmd TARGET sed -i '' '/pam_opie*/d' /etc/pam.d/*
Após isto pkg upgrade -f
#####
## ee /etc/sysctl.conf
net.link.bridge.pfil_bridge=0
net.link.bridge.pfil_onlyip=0
net.link.bridge.pfil_member=0
-- Novas opções, falta testar
# Common configs for all jails
path = "/jails/$name";
host.hostname = "$name";
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.clean;
persist;
ip4 = inherit;
ip6 = inherit;
mount.devfs;
mount.fdescfs;
allow.mount;
allow.mount.devfs;
allow.mount.fdescfs;
allow.mount.nullfs;
allow.mount.tmpfs;
allow.mount.procfs;
allow.mount.zfs;
enforce_statfs=1;
children.max=100;
allow.socket_af;
allow.raw_sockets;
allow.chflags;
allow.sysvipc;
a {
devfs_ruleset="20";
}
/etc/devfs.rules
[a=20]
add include $devfsrules_hide_all
add include $devfsrules_unhide_basic
add include $devfsrules_unhide_login
add path 'mixer*' unhide
add path 'dsp*' unhide
add path 'zfs*' unhide
-------------------------------------------------------------
#### Arquivo de configuração do pf.conf -- Funcional
ext_if="em0"
set block-policy return
scrub in on $ext_if all fragment reassemble
set skip on lo
table persist
nat on $ext_if from to any -> ($ext_if:0)
rdr-anchor "rdr/*"
# Redirecionar tráfego na porta 80 para a jail1
rdr pass on em0 proto tcp from any to 192.168.1.30 port 80 -> 192.168.1.99 port 80
block in all
pass out quick keep state
antispoof for $ext_if inet
pass in inet proto tcp from any to any port 22 flags S/SA modulate state
## Regras para liberar o acesso aos serviços das jails
pass in inet proto tcp from any to any port 80 flags S/SA modulate state # permite regras no porta 80 para todos os hosts
pass in inet proto tcp from any to 192.168.1.77 port 8080 flags S/SA modulate state # permite regras somente para um ip especifico
---------------
COnfiguração VNET
www {
devfs_ruleset = 13;
enforce_statfs = 2;
exec.clean;
exec.consolelog = /var/log/bastille/www_console.log;
exec.start = '/bin/sh /etc/rc';
exec.stop = '/bin/sh /etc/rc.shutdown';
host.hostname = www;
mount.devfs;
mount.fstab = /usr/local/bastille/jails/www/fstab;
path = /usr/local/bastille/jails/www/root;
securelevel = 2;
vnet;
vnet.interface = e0b_bastille0;
exec.prestart += "jib addm bastille0 re0";
# exec.prestart += "ifconfig e0a_bastille0 description \"vnet host interface for Bastille jail www\""; # Linha original, desativada
exec.prestart += "ifconfig e0a_bastille0 description \"POSTGRES-SERVER\""; # Mudei a descricao da NIC
exec.prestart += "ifconfig e0a_bastille0 10.0.0.1/24 up"; ## Acrescentei para adicionar IP na interface na inicializacao
exec.poststop += "jib destroy bastille0";
}
#####################
pf.conf para o vtnet0
ext_if="vtnet0" # Lembrar de alterar essa linha com o nome da sua interface
nat on $ext_if from 10.0.0.0/24 to any -> ($ext_if)
rdr-anchor "rdr/*"
pass all
########################
Log primeiros testes com linux com bastille
# bastille bootstrap focal
fdescfs not enabled in /boot/loader.conf, Should I do that for you? (N|y)
y
Persisting module: fdescfs
fdescfs_load: -> YES
linprocfs not enabled in /boot/loader.conf, Should I do that for you? (N|y)
y
Loading kernel module: linprocfs
Loaded linprocfs, id=27
Persisting module: linprocfs
linprocfs_load: -> YES
linsysfs not enabled in /boot/loader.conf, Should I do that for you? (N|y)
y
Loading kernel module: linsysfs
Loaded linsysfs, id=30
Persisting module: linsysfs
linsysfs_load: -> YES
tmpfs not enabled in /boot/loader.conf, Should I do that for you? (N|y)
y
Persisting module: tmpfs
tmpfs_load: -> YES
Loading kernel module: linux
Loaded linux, id=31
Loading kernel module: linux64
Loaded linux64, id=32
linux_enable: NO -> YES
Debootstrap not found. Should it be installed? (N|y)
y
------------------ Samba em Jail -----------
1 - Acrescentar no arquivo jail.conf
allow.mount.fdescfs;
sysvsem = "new";
sysvmsg = "new";
sysvshm = "new";
2 - A versão funcional do backup foi samba413-4.13.17_5
3 - Lembrar de criar a jail com placa -V vnet:
4 - Comando para rolar o backup online (offline ainda não funcionou):
samba-tool domain backup online --targetdir=/root/backup --server=dc1.mundobsd.local -UAdministrator
5 - Restore, lembrar que não pode por o nome do mesmo servidor, por exemplo, meu DC tinha o nome de dc1.mundobsd.local, tive que mudar para dc2.mundobsd.local:
samba-tool domain backup restore --backup-file=/root/backup/samba-online-mundobsd.local-2023-07-13T08-56-54.154119.tar.bz2 --targetdir=/var/db/samba4 --newservername=dc2.mundobsd.local
6 - Após o restore do backup, mover ou copiar o arquivo smb.conf que está agora em /var/db/samba4/etc e com o nome smb.conf para /usr/local/etc com nome de smb4.conf:
cd /var/db/samba4/etc/
cp smb.conf /usr/local/etc/smb4.conf
7 - Mudar as permissões de pasta do samba4 para 0755:
chmod 0755 /var/db/samba4/
8 - Rodar o servidor samba e testar:
9 - Ainda falta testar mais, mas até aqui o servidor voltou normalmente
--------------------------- ZFS -------------------------------
Procedimento para criar dataset zfs dentro de uma jail
1 - Ativar as opções no jail.conf
allow.mount=1;
allow.mount.zfs=1;
enforce_statfs=1;
2 - Mudar o enforce_statfs=2 dentro da jail.conf para
# enforce_statfs=2
3 - Criar o pool com o zfs
# zfs create /tank
4 - Criar o ponto de montagem do host para a jail
# zfs create -o mountpoint=/zroot/tank -o canmount=noauto zroot/tank
# zfs set jailed=on zroot/tank
5 - Dentro do jail.conf da jail acrescentar:
exec.poststart = 'zfs jail bh1 zroot/tank';
Essa opção acima deve ficar abaixo do exec.start = '/bin/sh /etc/rc'; e acima do exec.stop = '/bin/sh
/etc/rc.shutdown';
Da seguinte forma
exec.start = '/bin/sh /etc/rc';
exec.poststart = 'zfs jail bh1 zroot/tank';
exec.stop = '/bin/sh /etc/rc.shutdown';
6 - Entrar na jail e ativar o ZFS:
sysrc zfs_enable=YES
7 - Sair da jail e reiniciala
bastille stop bh1
bastille start bh1
8 - Quando entrar provavelmente com o zfs list o comanho já estará visível. Caso precise use
#zfs mount zroot/tank
####
Criar rede com jails usando -V e -B: Pontos Importates
1 - Se for criar uma jail com a opção -V (vtnet), é importante garantir que ela seja inicializada primeiro. Isso ocorre porque, caso queira adicionar uma jail com a opção -B, ela dependerá da interface de bridge criada pela jail -V. Se a ordem for invertida, a nova jail não encontrará a interface de bridge corretamente.
2 - Após a criação da jail com a opção -V, as demais jails que utilizam a bridge podem ser iniciadas em qualquer ordem, desde que as interfaces de bridge já tenham sido configuradas na inicialização da primeira jail com -V.
3 - Jails com bancos de dados também devem ser inicializadas primeiro, antes das aplicações caso fiquem em outras jails
Exemplo para transformar uma jail -V para -B, caso seja necessário.
JAIL NETB criada como -V:
vnet;
vnet.interface = e0b_bastille1;
exec.prestart += "jib addm bastille1 vtnet0";
#exec.prestart += "ifconfig e0a_bastille1 description \"vnet host interface for Bastille jail netb\"";
exec.prestart += "ifconfig e0a_bastille1 description \"SERVER NETBOX\"";
exec.prestart += "ifconfig e0a_bastille1 10.120.0.1/24 up";
exec.poststop += "jib destroy bastille1";
}
JAIL NETB agora como -B:
vnet; # Habilita o modo VNET, permitindo que a jail tenha uma pilha de rede isolada.
vnet.interface = e0b_netb; # Define a interface de rede dentro da jail como "e0b_netb".
exec.prestart += "ifconfig epair1 create"; # Cria um par de interfaces virtuais "epair1".
# Isso gera automaticamente "epair1a" (para o host) e "epair1b" (para a jail).
exec.prestart += "ifconfig vtnet0bridge addm epair1a"; # Substitua 'bridge0' pelo nome correto da bridge existente criada com a opcao -V da sua jail
exec.prestart += "ifconfig epair1a up name e0a_netb"; # Ativa "epair1a" e a renomeia para "e0a_netb" no host.
# Isso facilita a identificação da interface.
exec.prestart += "ifconfig epair1b up name e0b_netb"; # Ativa "epair1b" e a renomeia para "e0b_netb" dentro da jail.
# Essa sera a interface principal usada pela jail.
exec.prestart += "ifconfig e0a_netb description \"SERVER NETBOX\""; # Adiciona uma descricao a interface "e0a_netb" no host para facilitar a identificacao
exec.poststop += "ifconfig vtnet0bridge deletem e0a_netb"; # Apos a jail ser desligada, remove "e0a_netb" da bridge "vtnet0bridge"
# Isso evita que a interface fique presa na bridge quando a jail parar.
exec.poststop += "ifconfig e0a_netb destroy"; # Destroi a interface "e0a_netb" no host ao desligar a jail.
# Isso libera recursos e evita interfaces orfas
}
ifconfig destroy
OBS: Ao final da configuração, configurar o /etc/rc.conf da jail para o novo nome da interface
ifconfig_e0b_netb_name="vnet0" # mudar o nome para o nome da nova interface
Para inicializar as JAILs em ordem:
-- Crie um arquivo chamado "rc.local" em /etc:
# touch rc.local
-- Acrescente o comando para subir na seguinte ordem:
/usr/local/bin/bastille start mysql
/usr/local/bin/bastille start netb
/usr/local/bin/bastille start dcim
-- Dê as permissões de execução para o arquivo criado:
# chmod +x rc.local