Essa é uma revisão anterior do documento!
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: ## 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 <jails> persist nat on $ext_if from <jails> 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 <interface> 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