Páginas

lunes, 8 de noviembre de 2021

ZFS FreeBSD en modo monousuario

Proceso de arranque

En el proceso de arranque, FreeBSD ofrece un menú de arranque beastie-start con algunas opciones simples de carga. Para iniciar el modo monousuario se pulsa el numero 2 (Boot single user).

Para que todos sus conjuntos de datos ZFS estén disponibles se utiliza zfs mount. También pueden montarse conjuntos de datos individuales por nombre.


 Enter root password, or ˆD to go multi-user
 Password: Enter full pathname of shell or RETURN for /bin/sh:

 zfs mount -a
 mount zroot/ROOT/default on / (zfs, local, noatime, read-ly, nfs4acls)

Montar conjunto de datos en modo rw

ZFS realizará sus comprobaciones de integridad habituales antes de montar los conjunto de datos.La mayoría de los conjuntos de datos serán exactamente tan accesibles como en el modo multiusuario, pero el conjunto de datos montado como raíz seguirá siendo de solo lectura. Montar el conjunto de datos raíz en modo lectura-escritura (rw)) en una instalación predeterminada de FreeBSD.


  zfs set readonly=off zroot/ROOT/default
 

Para tener conectividad de red en modo de usuario único, se ejecuta el shell script


 /etc/netstart.

Ejecutar scripts

Este script llama a los scripts apropiados para iniciar la red, proporciona direcciones IP a las interfaces y habilita el filtrado de paquetes y el enrutamiento. Si determina que hay un error tipográfico en /etc/fstab que confunde al sistema y lo hace no arrancable, puede editar /etc/fstab para resolver el problema. Si hay un programa que hace que el sistema entre en pánico al arrancar y hay que detener ese programa para que no se inicie de nuevo, puede editar


  vim /etc/rc.conf
 

Para configurar los permisos en el script de inicio y no se ejecute.


 chmod a-x /usr/local/etc/rc.d/nombredelprogram.sh

Reiniciar


 reboot
FreeBSD es genial!.

jueves, 28 de octubre de 2021

Crear particiones e instalar FreeBSD 13.0 zfs UEFI

A diferencia del valor predeterminado de bsdinstall para ZFS, no establece puntos de montaje explícitos para conjuntos de datos, sino que se basa en la herencia.

 Este conjunto de instrucciones configura partición freebsd-boot, una particion ESP para la instalacion UEFI, intercambio cifrado con GELI y un grupo raíz.  
 
Iniciar el instalador de FreeBSD


Elegir shell para el particionado manual.
 
Limpiar disco - Esta es una operación destructiva

# gpart destroy -F ada0
ada0 destroyed
Configurar nueva tabla de partición GPT.
Antes de poder crear particiones de disco, se debe marcar el disco con el tipo 
de esquema de partición que utilizará, gpart create con la marca -s y el esquema, como gpt o mbr. Aquí, el disco usa el esquema GPT
# gpart create -s gpt ada0
ada0 created
Añadir particiones con etiquetas (label -l) para acceder a ellas por su nombre.

Crear partición boot para arranque Legacy (aunque no será utilizada). No puede ser mayor de 545k.
# gpart add -t freebsd-boot -s 512k -l boot0 ada0
ada0p1 added
UEFI ESP arranque UEFI.
# gpart add -t efi -s 1m -l efi0 ada0
ada0p2 added
ESP debe ser vfat/fat32:
# newfs_msdos /dev/gpt/efi0
/dev/gpt/efi0: 2003 sectors in 2003 FAT12 clusters (512 bytes/cluster)
BytesPerSec=512 SecPerClust=1 ResSectors=1 FATs=2 RootDirEnts=512 Sectors=2048 
Media=0xf0 FATsecs=6 SecPerTrack=63 Heads=255 HiddenSecs=0

Partición swap

# gpart add -t freebsd-swap -l swap0 -a 1m -s 2048m ada0
Resto del disco
# gpart add -t freebsd-zfs -l zroot0 -a 1m ada0
Crear el root pool.
# zpool create -R /mnt -o cachefile=/tmp/zpool.cache -O mountpoint=/ \
    -O atime=off -O canmount=off -O compression=on \
    zroot gpt/zroot0
# zfs create -o canmount=off -o mountpoint=none zroot/ROOT
# zfs create -o mountpoint=/ zroot/ROOT/default

Definir el conjunto de datos de arranque predeterminado para este zpool:

# zpool set bootfs=zroot/ROOT/default zroot
Crear el resto de los sistemas de archivos

# zfs create -o canmount=off zroot/usr
# zfs create zroot/usr/home
# zfs create zroot/usr/local
# zfs create zroot/usr/obj
# zfs create zroot/usr/src
# zfs create zroot/usr/ports
# zfs create -o canmount=off zroot/var
# zfs create zroot/var/jail
# zfs create zroot/var/log
# zfs create zroot/var/tmp
# zfs create zroot/tmp
# zfs set setuid=off zroot/tmp
# zfs set setuid=off zroot/var
# zfs set exec=off zroot/var
# zfs set setuid=off zroot/usr/src 
# zfs set exec=off zroot/usr/src
# zfs set setuid=off zroot/usr/ports
# zfs set exec=on zroot/var/tmp

Copiar el caché de zpool
# mkdir -p /mnt/boot/zfs
# cp /tmp/zpool.cache /mnt/boot/zfs

No olvide tomar la opción shell para terminar la configuración al final de la instalación.

# exit

Elegir

 Install  

Keymap Selection

Set Hostname

Distribution Select 

Partitioning

En este punto elegir la opción:

open a shell and partition by hand

# exit

Fetching Distribution

Comprobing checksum

Archive Extraction 

New Password

Retype New Password

Network Configuration

Would you like to configure
IPv6..? No

Resolver Configuration

Select local or UTC (Greenwich Mean Time) clock

System Configuration 

System Hardening

Add User Accounts (Yes)

Final Configuration 

Exit (Apply configuration and exit installer) OK

Manual Configuration Yes

Elegir Yes para seguir con la configuración


# cat >> /boot/loader.conf<<EOF
zfs_load="YES"

zpool_cache_load="YES"
zpool_cache_name="/boot/zfs/zpool.cache"
zpool_cache_type="/boot/zfs/zpool.cache"

vfs.root.mountfrom="zfs:zroot/ROOT/default"
EOF

# cat >> /etc/rc.conf<<EOF
zfs_enable="YES"
zfsd_enable="YES"
EOF

# cat >> /etc/fstab<<EOF
/dev/gpt/efi0 /boot/efi0 msdosfs rw,late 0 0
/dev/swap.eli none swap sw 0 0
EOF
# mount -t devfs devfs /dev
# rm /dev/null
Crear punto de montaje y montar ESP:
# mkdir /boot/efi0
# mount -t msdosfs /dev/gpt/efi0 /boot/efi0

UEFI con nomenclatura de reserva:

mkdir -p /boot/efi0/efi/boot
cp /boot/loader.efi /boot/efi0/efi/boot/bootx64.efi

Llegados a este punto debería estar listo. 

# exit

Reboot


# zfs create zroot/usr/home/carlos

Enlace simbólico y permisos.

# ln -s /usr/home /home
# chmod 1777 /var/tmp
# chmod 1777 /tmp

Usar git para obtener el código fuente de FreeBSD 13.0
(Si necesita construir módulos del kernel)

# pkg install git
# git clone -b releng/13.0 https://git.freebsd.org/src.git /usr/src
Clonar colección de puertos con git
 # git clone https://git.freebsd.org/ports.git /usr/ports
Crear Directorios de usuario 
# pkg install xdg-user-dirs
$ xdg-user-dirs-update
# cat /etc/fstab
/dev/gpt/efi0 /boot/efi0 msdosfs rw,late 2 2
/dev/swap.eli none swap sw 0 0

# cat /boot/loader.conf
security.bsd.allow_destructive_dtrace=0
cryptodev_load="YES"
zfs_load="YES"
zpool_cache_load="YES"
zpool_cache_name="/boot/zfs/zpool.cache"
zpool_cache_type="/boot/zfs/zpool.cache"

vfs.root.mountfrom="zfs:zroot/ROOT/default"
# cat /etc/rc.conf
clear_tmp_enable="YES"
syslogd_flags="-ss"
sendmail_enable="NONE"
hostname="bsdzfs"
ifconfig_ue0="DHCP"
sshd_enable="YES"
ntpd_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="NO"
zfs_enable="YES"
zfsd_enable="YES"
# gpart show
=>       40  976773088  ada0  GPT  (466G)
         40       1088     1  freebsd-boot  (544K)
       1128       2048     2  efi  (1.0M)
       3176        920        - free -  (460K)
       4096    4194304     3  freebsd-swap  (2.0G)
    4198400  972574720     4  freebsd-zfs  (464G)
  976773120          8        - free -  (4.0K)
# zfs list
NAME                        USED  AVAIL     REFER  MOUNTPOINT
zroot                      1.83G   444G       96K  /
zroot/ROOT                 1011M   444G       96K  none
zroot/ROOT/default         1011M   444G     1011M  /
zroot/tmp                   104K   444G      104K  /tmp
zroot/usr                   863M   444G       96K  /usr
zroot/usr/home               96K   444G       96K  /usr/home
zroot/usr/local             191M   444G      191M  /usr/local
zroot/usr/obj                96K   444G       96K  /usr/obj
zroot/usr/ports             192K   444G       96K  /usr/ports
zroot/usr/ports/distfiles    96K   444G       96K  /usr/ports/distfiles
zroot/usr/src               672M   444G      672M  /usr/src
zroot/var                   432K   444G       96K  /var
zroot/var/jail               96K   444G       96K  /var/jail
zroot/var/log               144K   444G      144K  /var/log
zroot/var/tmp                96K   444G       96K  /var/tmp

https://wiki.freebsd.org/MasonLoringBliss/ZFSandGELIbyHAND

FreeBSD es genial!.

domingo, 24 de octubre de 2021

Actualizar zpool en FreeBSD 13.0 UEFI partition

Después de actualizar el pool el código de inicio del disco duro también se debe actualizar, de manera que se pueda iniciar el sistema sin problemas.

El instalador de FreeBSD 13.0 con zfs elige una partición de arranque BIOS tradicional freebsd-boot y una partición UEFI efi .

gpart show
=>        40  1953525088  ada0  GPT  (932G)
          40      532480    1   efi  (260M)
      532520        1024    2   freebsd-boot  (512K)
      533544         984        - free -  (492K)
      534528     4194304    3   freebsd-swap  (2.0G)
     4728832  1948794880    4   freebsd-zfs  (929G)
  1953523712        1416        - free -  (708K)
# zpool upgrade -a
This system supports ZFS pool feature flags.

Enabled the following features on 'zroot':
  allocation_classes

If you boot from pool 'zroot', don't forget to update boot code.
Assuming you use GPT partitioning and da0 is your boot disk
the following command will do it:

        gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 2 da0

Si el arranque de su sistema es UEFI al ejecutar el código anterior y hacer un reboot el sistema no se iniciará.
    
Para actualizar una partición EFI:
# mount -t msdosfs /dev/ada0p1 /mnt
# mv /mnt/boot/efi0/efi/boot/bootx64.efi /mnt/efi/boot/bootx64.efi-old
# cp /boot/loader.efi /mnt/boot/efi0/efi/boot/bootx64.efi
# umount /mnt
# reboot

FreeBSD es genial!.

martes, 19 de octubre de 2021

ZFS Local Replication en FreeBSD

Disco ZFS Local Send Receive Snapshots en FreeBSD La replicación de ZFS consta de dos partes: zfs send que serializa una instantánea o una serie de instantáneas en un flujo de datos mezclado, y zfs receive, que convierte ese flujo en un sistema de archivos ZFS. La replicación basada en instantáneas significa que puede hacer una replicación incremental, enviando sólo los bloques que han cambiado; los mismos datos nunca se envían dos veces. El conjunto de datos ZFS transmitido es totalmente coherente, a diferencia del volcado o rsyncing de un sistema de archivos en vivo. Crear un punto de montaje # mkdir /mnt/zbackupsConectar la unidad usb # lsblk


 DEVICE         MAJ:MIN SIZE TYPE                          LABEL MOUNT
ada0             0:96  112G GPT                               - -
  ada0p1         0:97  260M efi                          gpt/efiboot0 /boot/efi
  ada0p2         0:98  512K freebsd-boot                 gpt/gptboot0 -
  free         -:-   492K -                                       - -
  ada0p3         0:99  2.0G freebsd-swap                    gpt/swap0 SWAP
  ada0p3.eli     0:93  2.0G freebsd-swap                           - SWAP
  ada0p4         0:100 110G freebsd-zfs                      gpt/zfs0 zfs
  free         -:-   452K -                                       - -
da0              1:164 932G GPT                               - -
  da0p1          1:166 932G freebsd-zfs                             - zfs

# geom disk list


Geom name: ada0
Providers:
1. Name: ada0
   Mediasize: 120034123776 (112G)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r3w3e6
   descr: Samsung SSD 850 EVO 120GB
   lunid: 5002538d4010a7f6
   ident: S21UNXAG517311N
   rotationrate: 0
   fwsectors: 63
   fwheads: 16

Geom name: da0
Providers:
1. Name: da0
   Mediasize: 1000204886016 (932G)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0
   descr: HGST HTS 541010A9E680
   lunname: HGST HTS541010A9E680    160324JD1042ZF1J
   lunid: 3016032414104216
   ident: 160324A41042A61A4543
   rotationrate: unknown
   fwsectors: 63
   fwheads: 255

Particionar el disco externo. Esta es una operación destructiva e irreversible


# gpart destroy -F da0 
  # gpart create -s gpt da0
  da0 created 
  # gpart add -t freebsd-zfs -s 900G -l zbackups da0
  da0p1 added 
  # gpart show da0
=>        40  1953525088  da0  GPT  (932G)
          40  1887436800    1  freebsd-zfs  (900G)
  1887436840    66088288       - free -  (32G)

gpart show -p da0
=>        40  1953525088    da0  GPT  (932G)
          40  1887436800  da0p1  freebsd-zfs  (900G)
  1887436840    66088288         - free -  (32G)

# zpool create zbackups da0p1

Establecer el punto de montaje


# zfs set mountpoint=/mnt/zbackups zbackups

Crear conjunto de datos (dataset) en la unidad zbackups - los puntos de montaje se crean automáticamente.


# zfs create zbackups/carlos
# zfs create zbackups/vm
# zfs create zbackups/vm/alpine
# zfs create zbackups/vm/arch
# zfs create zbackups/vm/freebsd
# zfs list

NAME                           USED  AVAIL     REFER  MOUNTPOINT
zbackups                      1.02M   868G       96K  /mnt/zbackups
zbackups/carlos                104K   868G      104K  /mnt/zbackups/carlos
zbackups/vm                    384K   868G       96K  /mnt/zbackups/vm
zbackups/vm/alpine              96K   868G       96K  /mnt/zbackups/vm/alpine
zbackups/vm/arch                96K   868G       96K  /mnt/zbackups/vm/arch
zbackups/vm/freebsd             96K   868G       96K  /mnt/zbackups/vm/freebsd
...

Listar snapshot

# zfs list -t snapshot

Enviar el conjunto de datos del directorio personal a la unidad externa zbackups.

Primero crear la instantánea para después enviar


(snap_`date +%d%m%y%H%M`)
zfs snapshot zroot/usr/home@/carlos@snap_`date +%d%m%y%H%M`
# zfs snapshot zroot/usr/home/carlos@snap_1910211203

Enviar el conjunto de datos a zbackups/carlos


# zfs send -v zroot/usr/home/carlos@snap_1910211203 | zfs receive -F \ 
zbackups/carlos

# zfs snapshot zroot/vm@snap_1910211203

# zfs send -v zroot/vm@snap_1910211203 | zfs receive -F zbackups/vm

# zfs snapshot zroot/vm/alpine@snap_1910211203

# zfs send -v zroot/vm/alpine@snap_1910211203 | zfs receive -F \ 
zbackups/vm/alpine

# zfs snapshot zroot/vm/arch@snap_1910211203

# zfs send -v zroot/vm/arch@snap_1910211203 | zfs receive -F zbackups/vm/arch

# zfs snapshot zroot/vm/freebsd-12-2@snap_1910211203
# zfs snapshot zroot/vm/freebsd-12-2/disk1@snap_1910211203

# zfs send -Rv zroot/vm/freebsd-12-2@snap_1910211203 | zfs receive \
-F zbackups/vm/freebsd

snapshot del pool completo zroot


# zfs snapshot -r zroot@snap1_021121

Crear dataset zbackups


# zfs create zbackups/snap1full

Enviar recursivamente las snpashots


# zfs send -vR zroot@snap_021121 | zfs receive zbackups/snap1full

Los conjuntos de datos de las instantáneas recibidas deben estar impecables para que los zfs reciban aceptar actualizaciones incrementales o diferenciales. La bandera -F le dice a zfs Receive que revierte cualquier cambio que impida aceptar esto instantánea.


# zfs send -vR zroot@snap_021121 | zfs receive -F zbackups/snap1full 
# grc zfs list -t all -r zbackups

Instantáneas incrementales

Crear las instantánea(s)


# zfs snapshot zroot/usr/home/carlos@snap_20102112020

Enviar instantáneas incrementales.


# zfs send -i zroot/usr/home/carlos@snap_1910211203 \ 
zroot/usr/home/carlos@snap_20102112020 | zfs receive \ 
-F zbackups/carlos

% smartctl -a /dev/ada0


smartctl 7.2 2020-12-30 r5155 [FreeBSD 13.0-RELEASE-p4 amd64] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Samsung based SSDs
Device Model:     Samsung SSD 850 EVO 120GB
Serial Number:    S21UNXAG517311N
LU WWN Device Id: 5 002538 d4010a7f6
Firmware Version: EMT01B6Q
User Capacity:    120.034.123.776 bytes [120 GB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    Solid State Device
TRIM Command:     Available
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ACS-2, ATA8-ACS T13/1699-D revision 4c
SATA Version is:  SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Wed Oct 20 00:00:26 2021 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
...

% smartctl -a /dev/da0
martctl 7.2 2020-12-30 r5155 [FreeBSD 13.0-RELEASE-p4 amd64] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     HGST Travelstar 5K1000
Device Model:     HGST HTS541010A9E680
Serial Number:    160324JD1042ZF1J45DS
LU WWN Device Id: 5 000cca 887d56d1c
Firmware Version: JA0OA5M0
User Capacity:    1.000.204.886.016 bytes [1,00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    5400 rpm
Form Factor:      2.5 inches
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA8-ACS T13/1699-D revision 6
SATA Version is:  SATA 2.6, 3.0 Gb/s (current: 3.0 Gb/s)
Local Time is:    Wed Oct 20 00:02:24 2021 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART Status not supported: Incomplete response, ATA output registers missing
SMART overall-health self-assessment test result: PASSED
...

FreeBSD es genial!.

domingo, 3 de octubre de 2021

FreeBSD vm-bhyve X11 Forwarding usando SSH

Ejecutar aplicaciones X11 desde invitado vm-bhyve en host.

La(s) aplicacion(es) se ejecutan en la máquina virtual invitada, sin embargo, se muestra en el host. La importancia de esto radica en que puede ejecutar una aplicación en una lugar y mostrar la ventana en el host.

Si una aplicación no es soportada en la máquina host pero bien soportada en la vm podrá ejecutarse en una ventana del host.

Ejecutar Firefox en una vm y mostrarlo en el host FreeBSD 13.0
basado en el reenvío X11 usando ssh.

# vm list
NAME          DATASTORE  LOADER     CPU  MEMORY  VNC  AUTOSTART  STATE
alpine        default    grub       1    512M    -    No         Stopped
arch          default    grub       1    512M    -    No         Stopped
freebsd-12-2  default    bhyveload  1    256M    -    No         Stopped

Iniciar y conectarse a la máquina virtual para permitir el reenvío X11.

# vm start alpine
# vm console alpine

# vm switch info

------------------------
Virtual Switch: public
------------------------
  type: standard
  ident: vm-public
  vlan: -
  physical-ports: re0
  bytes-in: 673338 (657.556K)
  bytes-out: 602940 (588.808K)

  virtual-port
    device: tap2
    vm: alpine

# vm info

------------------------
Virtual Machine: alpine
------------------------
  state: running (25889)
  datastore: default
  loader: grub
  uuid: 3dfa8278-1ca9-11ec-b451-fc3fdbd15275
  uefi: default
  cpu: 1
  memory: 512M
  memory-resident: 123006976 (117.308M)

  console-ports
    com1: /dev/nmdm-alpine.1B

  network-interface
    number: 0
    emulation: virtio-net
    virtual-switch: public
    fixed-mac-address: 58:9c:fc:03:37:ea
    fixed-device: -
    active-device: tap2
    desc: vmnet-alpine-0-public
    mtu: 1500
    bridge: vm-public
    bytes-in: 291480 (284.648K)
    bytes-out: 2158 (2.107K)

  virtual-disk
    number: 0
    device-type: file
    emulation: virtio-blk
    options: -
    system-path: /zroot/vm/alpine/disk0.img
    bytes-size: 10737418240 (10.000G)
    bytes-used: 1160348672 (1.080G)

  snapshots
    zroot/vm/alpine@snap1_300921	452K	jue. sept. 30 17:31 2021

------------------------
Virtual Machine: arch
------------------------
  state: running (43467)
  datastore: default
  loader: grub
  uuid: a923082e-1deb-11ec-9f91-fc3fdbd15275
  uefi: default
  cpu: 1
  memory: 512M
  memory-resident: 164139008 (156.535M)

  console-ports
    com1: /dev/nmdm-arch.1B

  network-interface
    number: 0
    emulation: virtio-net
    virtual-switch: public
    fixed-mac-address: 58:9c:fc:0e:36:e4
    fixed-device: -
    active-device: tap0
    desc: vmnet-arch-0-public
    mtu: 1500
    bridge: vm-public
    bytes-in: 15132 (14.777K)
    bytes-out: 0 (0.000B)

  virtual-disk
    number: 0
    device-type: file
    emulation: virtio-blk
    options: -
    system-path: /zroot/vm/arch/disk0.img
    bytes-size: 9663676416 (9.000G)
    bytes-used: 4176012288 (3.889G)

  snapshots
    zroot/vm/arch@snap1_300921	2.55M	jue. sept. 30 17:31 2021

------------------------
Virtual Machine: freebsd-12-2
------------------------
  state: running (52279)
  datastore: default
  loader: bhyveload
  uuid: e7d636e0-236b-11ec-8cb5-fc3fdbd15275
  uefi: default
  cpu: 1
  memory: 256M
  memory-resident: 138010624 (131.617M)

  console-ports
    com1: /dev/nmdm-freebsd-12-2.1B

  network-interface
    number: 0
    emulation: virtio-net
    virtual-switch: public
    fixed-mac-address: 58:9c:fc:0b:f1:00
    fixed-device: -
    active-device: tap1
    desc: vmnet-freebsd-12-2-0-public
    mtu: 1500
    bridge: vm-public
    bytes-in: 300815 (293.764K)
    bytes-out: 1947 (1.901K)

  virtual-disk
    number: 0
    device-type: file
    emulation: virtio-blk
    options: -
    system-path: /zroot/vm/freebsd-12-2/disk0.img
    bytes-size: 9663676416 (9.000G)
    bytes-used: 2805482496 (2.612G)

# /etc/hosts

# Host Database
#
# This file should contain the addresses and aliases for local hosts that
# share this file.  Replace 'my.domain' below with the domainname of your
# machine.
#
# In the presence of the domain name service or NIS, this file may
# not be consulted at all; see /etc/nsswitch.conf for the resolution order.
#
#
::1                     localhost localhost.my.domain
127.0.0.1               localhost localhost.my.domain
192.168.88.183          fbsd
192.168.88.149          arch
192.168.88.150          alpine
192.168.88.151          freebsd-12-2
#
# Imaginary network.
#10.0.0.2               myname.my.domain myname

carlos@freebsd:~ % ssh carlos@alpine

The authenticity of host 'alpine (192.168.88.150)' can't be established.
ECDSA key fingerprint is SHA256:SwvwUhTBiIMr4IdzZ4yvaIcu21Xf4WSF2B5+tABLHz0.
No matching host key fingerprint found in DNS.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'alpine' (ECDSA) to the list of known hosts.
carlos@alpine's password:
Welcome to Alpine!

The Alpine Wiki contains a large amount of how-to guides and general
information about administrating Alpine systems.
See <http://wiki.alpinelinux.org/>.

You can setup the system with the command: setup-alpine

You may change this message by editing /etc/motd.

alpine:~$ su
Password:
alpine:/home/carlos# 

alpine:/home/carlos#  apk update
fetch http://dl-cdn.alpinelinux.org/alpine/v3.14/main/x86_64/APKINDEX.tar.gz
v3.14.2-68-gbf3cc5c973 [http://dl-cdn.alpinelinux.org/alpine/v3.14/main]
OK: 4791 distinct packages available

alpine:/home/carlos#  apk add vim
OK: 1008 MiB in 146 packages

Cambiar en el archivo /etc/ssh/sshd_config

alpine:/home/carlos# vim /etc/ssh/sshd_config

X11Forwarding no
por
X11Forwarding yes

Guardar y salir

alpine:/home/carlos# vim /etc/apk/repositories 

#/media/cdrom/apks
#http://dl-cdn.alpinelinux.org/alpine/v3.14/main
#http://dl-cdn.alpinelinux.org/alpine/v3.14/community
http://dl-cdn.alpinelinux.org/alpine/edge/main
http://dl-cdn.alpinelinux.org/alpine/edge/community
http://dl-cdn.alpinelinux.org/alpine/edge/testing

alpine:/home/carlos# apk update
fetch http://dl-cdn.alpinelinux.org/alpine/edge/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/edge/testing/x86_64/APKINDEX.tar.gz
v3.15.0_alpha20210804-3464-gdb0fea5e0a [http://dl-cdn.alpinelinux.org/alpine/edge/main]
v3.15.0_alpha20210804-3463-g250f668bc0 [http://dl-cdn.alpinelinux.org/alpine/edge/community]
v3.15.0_alpha20210804-3457-g949ce4d971 [http://dl-cdn.alpinelinux.org/alpine/edge/testing]
OK: 20227 distinct packages available

alpine:/home/carlos# reboot

alpine:/home/carlos# Connection to alpine closed by remote host.
Connection to alpine closed.
carlos@freebsd:~ %

carlos@freebsd:~ % ssh carlos@alpine
carlos@alpine's password:
Welcome to Alpine!

The Alpine Wiki contains a large amount of how-to guides and general
information about administrating Alpine systems.
See <http://wiki.alpinelinux.org/>.

You can setup the system with the command: setup-alpine

You may change this message by editing /etc/motd.

alpine:~$ 

En la máquina host, (freebsd), utilizando xhost se habilita sólo al usuario autorizado.

carlos@freebsd:~ % xhost
access control enabled, only authorized clients can connect

Se añade la dirección IP de Alpine:

carlos@freebsd:~ % xhost +inet:192.168.88.150
192.168.88.150 being added to access control list
carlos@freebsd:~ %

Ejecutar la aplicación Firefox
dentro de la máquina virtual, pero sólo se muestra en el host:

Se ejecuta usando ssh:

carlos@freebsd:~ % ssh carlos@alpine -X "firefox no-remote"
carlos@alpine's password:
Welcome to Alpine!

The Alpine Wiki contains a large amount of how-to guides and general
information about administrating Alpine systems.
See <http://wiki.alpinelinux.org/>.

You can setup the system with the command: setup-alpine

You may change this message by editing /etc/motd.

/usr/bin/xauth:  file /home/carlos/.Xauthority does not exist
alpine:~$

Para no introducir más contraseñas se generan las claves pública y privada nuevamente:

carlos@freebsd:~ % ssh-keygen -t rsa -b 4096 -C "carlos@freebsd"
Generating public/private rsa key pair.
Enter file in which to save the key (/usr/home/carlos/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /usr/home/carlos/.ssh/id_rsa.
Your public key has been saved in /usr/home/carlos/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:RkURbfj//UwqDmVOhVOQQ1qMae69/DZueCzFliRdHZc carlos@freebsd
The key's randomart image is:
+---[RSA 4096]----+
|         .=X+=.o+|
|         .=oO oEo|
|        .o.= =   |
|       .  o B    |
|        S. O o   |
|       .  o B .  |
|           Oo. .o|
|          o.Oo +o|
|           +.oo +|
+----[SHA256]-----+

Arch Linux instalar openssh
# vim /etc/pacman.conf

[multilib]
Include = /etc/pacman.d/mirrorlist

Guardar y salir

# pacman -Syu

# pacman -S openssh

[root@arch ~]# systemctl status sshd
* sshd.service - OpenSSH Daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; vendor pre>
     Active: inactive (dead)
     
[root@arch ~]# systemctl start sshd
[root@arch ~]# ls -a
.   .bash_history  .config  .lesshst  Desktop	 Downloads  Pictures  Templates
..  .cache	   .gnupg   .viminfo  Documents  Music	    Public    Videos

[root@arch ~]# systemctl status sshd
* sshd.service - OpenSSH Daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; vendor pre>
     Active: active (running) since Mon 2021-10-04 19:03:03 CEST; 37s ago

Iniciar el servicio sshd con el arranque del sistema:

[root@arch ~]# systemctl enable sshd

Copiar a las vm

carlos@freebsd:~ % ssh-add
Identity added: /usr/home/carlos/.ssh/id_rsa (carlos@freebsd)
carlos@freebsd:~ % ssh-copy-id carlos@alpine
carlos@alpine's password: 
carlos@freebsd:~ % 

El procedimiento es el mismo para las demás máquinas virtuales

carlos@freebsd:~ % ssh-copy-id carlos@arch
carlos@alpine's password: 
carlos@freebsd:~ %      
           
carlos@freebsd:~ % ssh-copy-id carlos@freebsd-12-2
carlos@alpine's password: 
carlos@freebsd:~ %                           
                  
Llegados a este punto la conexión ssh se realiza mediante clave.

carlos@freebsd:~ % ssh carlos@alpine -X "firefox no-remote" &
[1] 96751
carlos@freebsd:~ %

carlos@freebsd:~ % su
Password:

root@freebsd:/usr/home/carlos # vm list
NAME          DATASTORE  LOADER     CPU  MEMORY  VNC  AUTOSTART  STATE
alpine        default    grub       1    512M    -    No         Running (40797)
arch          default    grub       1    512M    -    No         Stopped
freebsd-12-2  default    bhyveload  1    256M    -    No         Stopped
root@freebsd:/usr/home/carlos # vm stop alpine
Sending ACPI shutdown to alpine
root@freebsd:/usr/home/carlos # vm list
NAME          DATASTORE  LOADER     CPU  MEMORY  VNC  AUTOSTART  STATE
alpine        default    grub       1    512M    -    No         Stopped
arch          default    grub       1    512M    -    No         Stopped
freebsd-12-2  default    bhyveload  1    256M    -    No         Stopped
root@freebsd:/usr/home/carlos # 

FreeBSD es genial!.

lunes, 27 de septiembre de 2021

FreeBSD checkpoint ZFS


FreeBSD posee una característica muy interesante llamada 'zpool checkpoint'.

https://sdimitro.github.io/post/zpool-checkpoint/
https://oshogbo.vexillium.org/blog/79/
https://zedfs.com/zpool-checkpoints/

Los puntos de control de zpool o checkpoint, en lugar de tomar una única instantánea (snapshot) del conjunto de datos, toma una instantánea de todo el pool. Eso significa que no sólo se revierten los datos sino también todos los metadatos.

Esta característica es increíblemente útil, especialmente cuando se actualiza un sistema operativo, o cuando necesite experimentar con conjuntos de datos adicionales.

El punto de control zpool recuerda todo el grupo de transacciones (TXG). Eso significa que ningún dato desaparecerá mientras exista el punto de control.

Recuerda todo el estado del grupo en el momento en que fue tomado y el usuario puede volver a él más tarde o descartarlo. 

Un caso de uso genérico es un administrador/a que está a punto de realizar un conjunto de acciones destructivas para ZFS como parte de un procedimiento crítico. Ella toma un punto de control del grupo antes de realizar las acciones, luego retrocede a él si uno de ellos falla o pone el grupo en un estado inesperado.

# zpool status -x
all pools are healthy

# zpool list

NAME      SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
backups    37G  6.63G  30.4G        -         -     0%    17%  1.00x    ONLINE  -
zroot     109G  20.7G  88.3G        -         -     4%    18%  1.00x    ONLINE  -
Crear checkpoint
# zpool checkpoint zroot

# zpool list
NAME      SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
backups    37G  6.63G  30.4G        -         -     0%    17%  1.00x    ONLINE  -
zroot     109G  20.7G  88.3G     240K         -     4%    18%  1.00x    ONLINE  -

En el menú del cargador (loader menu) tiene una nueva entrada acompañada de un número, en este caso 8. Si pulsa la tecla 8 se revertirán los cambios y Rewind ZFS checkpoint pasará de Rewind ZFS checkpoint: NO a Rewind ZFS checkpoint: YES.

Todo estará tal y como estaba en el momento de la creación del checkpoint.

Listar zpool
# zpool list


Ahora no aparece el checkpoint, ya se ha utilizado. De lo contrario si no pulsa el número correspondiente en la mencionada entrada el checkpoint aún permanece.


Zpool Checkpoint funciones:


 Para crear un checkpoint:

# zpool checkpoint <pool>


 Retrocede el estado al punto de control y elimina el checkpoint:

# zpool import -- rewind-to-checkpoint <pool>


 Eliminar el checkpoint:

# zpool checkpoint --discard <pool> o zpool checkpoint -d <pool>

FreeBSD es genial!.

sábado, 25 de septiembre de 2021

Virtualizacion bhyve zfs FreeBSD 13.0

Virtualización BSD bhyve zfs FreeBSD 13.0

https://wiki.freebsd.org/bhyve
https://github.com/churchers/vm-bhyve

FreeBSD como anfitrión con bhyve

De forma predeterminada, bhyve proporciona acceso a la consola serie y no emula una consola gráfica. 

Comprobar si el procesador Intel soporta virtualización:

# dmesg | grep vt
[drm]   - kern.vt.fb.modes.DP-1
[drm]   - kern.vt.fb.default_mode
...

El primer paso para crear una máquina virtual en bhyve es configurar el sistema host cargando  el módulo del kernel de bhyve.

# kldload vmm

# kldstat|grep vmm
26    1 0xffffffff83200000   53a420 vmm.ko

El módulo se cargará automáticamente al iniciar el sistema agregando vmm a la linea kld_list del archivo /etc/rc.conf.

# sysrc kld_list+="vmm"

kld_list="fusefs /boot/modules/i915kms.ko vmm"

El siguiente paso es instalar bhyve virtual machine vm-bhyve, bhyve-firmware y grub2-bhyve. Este último para entornos linux o máquinas virtuales que requieran grub.

# pkg install vm-bhyve bhyve-firmware grub2-bhyve

Crear un conjunto de datos zfs llamado vm donde estarán almacenadas las máquinas virtuales. El grupo de almacenamiento se llama zroot.

# zfs create zroot/vm

# zfs list

NAME                               USED  AVAIL     REFER  MOUNTPOINT
zroot                             16.9G  88.6G       96K  /zroot
zroot/ROOT                        8.60G  88.6G       96K  none
zroot/ROOT/default                8.60G  88.6G     8.56G  /
zroot/ROOT/system_freebsd_180921     8K  88.6G     8.53G  /
zroot/export                       416K  88.6G       96K  /zroot/export
zroot/tmp                          312K  88.6G      192K  /tmp
zroot/usr                         7.65G  88.6G       96K  /usr
zroot/usr/home                    6.84G  88.6G     1.76G  /usr/home
zroot/usr/home/carlos             3.40G  88.6G     3.40G  /usr/home/carlos
zroot/usr/ports                    832M  88.6G      832M  /usr/ports
zroot/usr/src                      104K  88.6G       96K  /usr/src
zroot/var                         1.78M  88.6G       96K  /var
zroot/var/audit                    104K  88.6G       96K  /var/audit
zroot/var/crash                    104K  88.6G       96K  /var/crash
zroot/var/log                     1.10M  88.6G      752K  /var/log
zroot/var/mail                     216K  88.6G      128K  /var/mail
zroot/var/tmp                      164K  88.6G      100K  /var/tmp
zroot/vm                           686M  88.6G      133M  /zroot/vm
Habilitar vm-bhyve en /etc/rc.conf y configurar el conjunto de datos que se utilizará

# sysrc vm_enable="YES"
# sysrc vm_dir="zfs:zroot/vm"

En este punto guardar y reiniciar el sistema.

Debe tener los módulos vmm ejecutándose en segundo plano:

# kldstat | grep vmm
26    1 0xffffffff83200000   53a420 vmm.ko

Ejecutar el comando vm init crea los directorios necesarios en $vm_dir.

# vm init

Crear un directorio llamado .templates

# mkdir -p /vm/.templates
# ls /vm/.templates/

Listando los archivos de configuración para todos los posibles sistemas operativos compatibles que pueden ejecutarse como invitado:
# ls /usr/local/share/examples/vm-bhyve/
alpine.conf       coreos.conf       freepbx.conf      ubuntu.conf
arch.conf         debian.conf       linux-zvol.conf   windows.conf
centos6.conf      default.conf      netbsd.conf
centos7.conf      dragonfly.conf    openbsd.conf
config.sample     freebsd-zvol.conf resflash.conf

Crear un conmutador virtual (switch) llamado public y adjuntar la interfaz de 
red Ethernet a él.
# vm switch create public # vm switch add public re0 # vm switch list NAME TYPE IFACE ADDRESS PRIVATE MTU VLAN PORTS public standard vm-public - no - - re0

Firewall IPFW:

Permitir el paso de paquetes bhyve

net.link.bridge.ipfw=1
# sysctl net.link.bridge.ipfw=1

Hacer el cambio permanente
net.link.bridge.ipfw=1

Instalar y ejecutar sistemas operativos invitados virtualizados

FreeBSD virtualizacion vm-bhyve - Arch Linux

Descargar Arch Linux

# vm iso https://mirror.cyberbits.eu/archlinux/iso/2022.06.01/archlinux-2022.06.01-x86_64.iso

Copiar la plantilla para Arch Linux - arch.conf
# cp /usr/local/share/examples/vm-bhyve/arch.conf /zroot/vm/.templates/

# vm iso
DATASTORE           FILENAME
default             archlinux-2022.06.01-x86_64.iso
default             fetch.out

Importante: Cambiar los parámetros vmlinuz, archiso y archisobasedir a sus valores correctos:

# cat /zroot/vm/.templates/arch.conf
loader="grub"
cpu=1
memory=512M
network0_type="virtio-net"
network0_switch="public"
disk0_type="virtio-blk"
disk0_name="disk0.img"
grub_install0="linux /arch/boot/x86_64/vmlinuz-linux archisobasedir=arch archisolabel=ARCH_202206 ro"
grub_install1="initrd /arch/boot/x86_64/initramfs-linux.img"

Crear vm -t template -s size nombre
# vm create -t arch -s 9G arch

Instalar en primer plano vm -f dentro de arch una vm con arhivo iso
# vm install -f arch archlinux-2021.09.01-x86_64.iso

Particionar el disco:

# cfdisk
Elegir dos para BIOS

 
root@archiso ~ # fdisk -l
Disk /dev/vda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 131072 bytes
I/O size (minimum/optimal): 131072 bytes / 131072 bytes
Disklabel type: dos
Disk identifier: 0xae1d35ff

Device     Boot    Start      End  Sectors  Size Id Type
/dev/vda1  *        2048  1050623  1048576  512M 83 Linux
/dev/vda2        1050624 16779263 15728640  7.5G 83 Linux
/dev/vda3       16779264 17827839  1048576  512M 82 Linux swap / Solaris

Disk /dev/loop0: 662.69 MiB, 694882304 bytes, 1357192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Crear los sistemas de ficheros:

root@archiso ~ # mkfs.ext2 /dev/vda1
mke2fs 1.46.4 (18-Aug-2021)
Creating filesystem with 262144 1k blocks and 65536 inodes
Filesystem UUID: 0b6850ec-379f-4be5-ac4f-fcafae08fbbc
Superblock backups stored on blocks: 
	8193, 24577, 40961, 57345, 73729, 204801, 221185

Allocating group tables: done                            
Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done 

root@archiso ~ # mkfs.ext4 /dev/vda2
mke2fs 1.46.4 (18-Aug-2021)
Creating filesystem with 2555648 4k blocks and 638976 inodes
Filesystem UUID: 34353334-88c2-40b9-930a-8c788705545e
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done 

root@archiso ~ # mkswap /dev/vda3
root@archiso ~ # swapon /dev/vda3

Montando las particiones:

root@archiso ~ # mount /dev/vda2 /mnt
root@archiso ~ # mkdir -p /mnt/boot
root@archiso ~ # mount /dev/vda1 /mnt/boot

El comando pacstrap para indicar donde queremos instalar los paquetes desde los repositorios arch, y lo que queremos instalar

root@archiso ~ # pacstrap /mnt base base-devel grub ntfs-3g networkmanager xdg-user-dirs linux linux-firmware vim dhcpcd openssh

Generar fstab
root@archiso ~ # genfstab -pU /mnt >> /mnt/etc/fstab

Entrar en arch chroot

root@archiso ~ # arch-chroot /mnt
[root@archiso /]#

Establecer la zona horaria:
[root@archiso /]# ln -sf /usr/share/zoneinfo/Europe/Madrid /etc/localtime

[root@archiso /]# echo rioarch > /etc/hostname

[root@archiso /]# nano /etc/locale.gen
es_ES.UTF-8 UTF-8

[root@archiso /]# echo LANG=es_ES.UTF-8 > /etc/locale.conf

Generar el archivo locale.gen con el siguiente comando:
[root@archiso /]# locale-gen

Cuando GNU/Linux arranca, el sistema está configurado para leer el reloj interno del equipo, después el reloj del sistema, que es independiente. Usaremos el comando hwclock -w para ajustar el reloj interno.
[root@archiso /]# hwclock -w

Configurar distribución de teclado
[root@archiso /]# echo KEYMAP=la-latin1 > /etc/vconsole.conf

Instalar grub

Ahora procedamos a instalar el grub y usar el comando correcto, sin UEFI
[root@archiso /]# grub-install /dev/vda
Installing for i386-pc platform.
Installation finished. No error reported.

Actualizar grub

Creamos el archivo grub.cfg
[root@archiso /]# grub-mkconfig -o /boot/grub/grub.cfg

[root@archiso /]# passwd
New password:
Retype new password:
passwd: password updated successfully

Agregar usuario no privilegiado
useradd -m -g users -G storage,wheel,power -s /bin/bash carlos

Establecer contraseña del usuario
[root@archiso /]# passwd carlos

Antes de salir de root:

[root@arch ~]# cat /boot/grub/grub.cfg |grep vmlinuz-linux
	linux	/vmlinuz-linux root=UUID=781ccb0f-c524-402e-a2a8-e32a50371223 rw  loglevel=3 quiet
		linux	/vmlinuz-linux root=UUID=781ccb0f-c524-402e-a2a8-e32a50371223 rw  loglevel=3 quiet
		linux	/vmlinuz-linux root=UUID=781ccb0f-c524-402e-a2a8-e32a50371223 rw  loglevel=3 quiet


Este UUID lo necesitará:
781ccb0f-c524-402e-a2a8-e32a50371223 rw
para sustituirlo por el creado por la vm en esta ruta /zroot/vm/arch/arch.conf en el host FreeBSD.

root@freebsd:/zroot/vm/arch # cat arch.conf

loader="grub"
cpu=1
memory=512M
network0_type="virtio-net"
network0_switch="public"
disk0_type="virtio-blk"
disk0_name="disk0.img"
grub_install0="linux /arch/boot/x86_64/vmlinuz-linux archisobasedir=arch archisolabel=ARCH_202109 ro"
grub_install1="initrd /arch/boot/x86_64/initramfs-linux.img"
uuid="a923082e-1deb-11ec-9f91-fc3fdbd15275"
network0_mac="58:9c:fc:0e:36:e4"
grub_run0="linux /vmlinuz-linux root=UUID=781ccb0f-c524-402e-a2a8-e32a50371223 rw"
grub_run1="initrd /initramfs-linux.img"
uuid="9eb191c3-1e01-11ec-a508-fc3fdbd15275" 
Saliendo de chroot
Ya terminado esto, salimos de chroot
[root@archiso /]# exit

Desmontar particion /boot
# umount /mnt/boot/

Desmontar particion Raíz
# umount /mnt

# dhcpcd enp0s5

dhcpcd-9.4.0 starting
DUID 00:04:a9:23:08:2e:1d:eb:11:ec:9f:91:fc:3f:db:d1:52:75
enp0s5: waiting for carrier
enp0s5: carrier acquired
enp0s5: IAID fc:0e:36:e4
enp0s5: adding address fe80::f2ad:f194:fe94:3e97
enp0s5: soliciting a DHCP lease
enp0s5: soliciting an IPv6 router
enp0s5: offered 192.168.88.165 from 192.168.88.1
enp0s5: probing address 192.168.88.165/24
enp0s5: leased 192.168.88.165 for 600 seconds
enp0s5: adding route to 192.168.88.0/24
enp0s5: adding default route via 192.168.88.1
forked to background, child pid 242
Reiniciar
# reboot

[root@arch ~]# ip addr
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s5:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 58:9c:fc:0e:36:e4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.88.165/24 brd 192.168.88.255 scope global dynamic noprefixroute enp0s5
       valid_lft 329sec preferred_lft 254sec
    inet6 fe80::f2ad:f194:fe94:3e97/64 scope link 
       valid_lft forever preferred_lft forever










FreeBSD es genial!

martes, 14 de septiembre de 2021

Firewall IPFW Freebsd

 https://docs.freebsd.org/en/books/handbook/firewalls/#firewalls-ipfw

Nota: Extensiones imprescindibles Firefox 78.14.0 esr (64-bit)

IPFW - proteger una estación de trabajo freeBSD y permitir acceso remoto vía SSH.

IPFW es un cortafuegos stateful escrito para FreeBSD que soporta tanto IPv4 como IPv6. Está formado por varios componentes: el procesador de reglas de filtrado del kernel y su función integrada de contabilidad de paquetes, la función de registro, NAT, el conformador de tráfico dummynet(4), una función de reenvío, una función de puente y una función ipstealth.

# sysrc firewall_enable="YES"
# sysrc firewall_script="/etc/ipfw.rules"
# sysrc firewall_logging="YES"
# echo "net.inet.ip.fw.verbose_limit=5" >> /etc/sysctl.conf
# sysrc firewall_logif="YES"
# service ipfw start
# sysctl net.inet.ip.fw.verbose_limit=5
% cat /etc/ipfw.rules
###################################
#!/bin/sh
ipfw -q -f flush

LAN="192.168.88.0/24"
cmd="/sbin/ipfw -q add"
pif="re0"

$cmd 00100 allow ip from any to any via lo0
$cmd 00200 deny ip from any to 127.0.0.0/8
$cmd 00300 deny ip from 127.0.0.0/8 to any
$cmd 00400 deny ip from any to ::1
$cmd 00500 deny ip from ::1 to any
$cmd 00600 allow ipv6-icmp from :: to ff02::/16
$cmd 00700 allow ipv6-icmp from fe80::/10 to fe80::/10
$cmd 00800 allow ipv6-icmp from fe80::/10 to ff02::/16
$cmd 00900 allow ipv6-icmp from any to any icmp6types 1
$cmd 01000 allow ipv6-icmp from any to any icmp6types 2,135,136
$cmd 01100 check-state :default
$cmd 01200 allow tcp from me to any established
$cmd 01300 allow tcp from me to any setup keep-state :default
$cmd 01400 allow udp from me to any keep-state :default
$cmd 01500 allow icmp from me to any keep-state :default
$cmd 01600 allow ipv6-icmp from me to any keep-state :default
$cmd 01700 allow udp from 0.0.0.0 68 to 255.255.255.255 67 out
$cmd 01800 allow udp from any 67 to me 68 in
$cmd 01900 allow udp from any 67 to 255.255.255.255 68 in
$cmd 02000 allow udp from fe80::/10 to me 546 in
$cmd 02100 allow icmp from any to any icmptypes 8
$cmd 02200 allow ipv6-icmp from any to any icmp6types 128,129
$cmd 02300 allow icmp from any to any icmptypes 3,4,11
$cmd 02400 allow ipv6-icmp from any to any icmp6types 3
$cmd 02500 allow tcp from $LAN to me 22 in via $pif setup limit src-addr 2
$cmd 65000 count ip from any to any
$cmd 65100 deny { tcp or udp } from any to any 135-139,445 in
$cmd 65200 deny { tcp or udp } from any to any 1026,1027 in
$cmd 65300 deny { tcp or udp } from any to any 1433,1434 in
$cmd 65400 deny ip from any to 255.255.255.255
$cmd 65500 deny ip from any to 224.0.0.0/24 in
$cmd 65500 deny udp from any to any 520 in
$cmd 65500 deny tcp from any 80,443 to any 1024-65535 in
$cmd 65500 deny ip from any to any
$cmd 65535 deny ip from any to any
###################################




FreeBSD es genial!.

jueves, 26 de agosto de 2021

Entornos de Arranque en FreeBSD

 Gestión de entornos de arranque

Un entorno de arranque ZFS es un clon de arranque de los conjuntos de datos necesarios para arrancar el sistema operativo.

Los boot environment funcionan en base a los clone de ZFS. Los snapshot son archivos de solo lectura y los clone de lectura escritura.

Después de crear un boot environment se crea un nuevo datase ZFS.

Directorios excluidos del boot enviroment

/tmp  
/usr/home  
/usr/ports  
/usr/src  
/var/audit  
/var/crash  
/var/log  
/var/mail  
/var/tmp
bectl es la utilidad para gestionar entornos de arranque en ZFS. El comando bectl se utiliza para configurar e interactuar con entornos de arranque ZFS. Los entornos de arranque permiten actualizar el sistema conservando el entorno del sistema antiguo en un conjunto de datos ZFS separado. Incluye el soporte de jaulas (man bectl).

Este comando lista los BEs disponibles.

# bectl list
ZBE         Active Mountpoint Space Created
bectl-boot -      -          17.8M 2021-08-22 16:23
default    NR     /          4.21G 2021-08-20 18:46
La columna Activo muestra si este entorno de arranque está en uso. indica si el entorno de arranque está activo ahora. Una N significa que el entorno se está ejecutando. Una R significa que el entorno de arranque se activará al reiniciar. El entorno de arranque utilizado en el reinicio proviene de la propiedad bootfs del pool.

La opción create
crea un nuevo entorno de arranque, que es un clon del BE actualmente arrancado:
# bectl create prueba
# bectl list
BE         Active Mountpoint Space Created
bectl-boot -      -          17.8M 2021-08-22 16:23
default    NR     /          4.21G 2021-08-20 18:46
prueba     -      -          8K    2021-08-26 06:58

El entorno prueba no tiene letras activas, ya que no es el BE actualmente arrancado tampoco está configurado para ser el predeterminado en el próximo arranque.Actualmente estamos utilizando el entorno de arranque por defecto, y este mismo entorno de arranque se iniciará en nuestro próximo arranque. Sin embargo, el entorno de la versión prueba está disponible. En cualquier momento puede decirle a FreeBSD que arranque el entorno prueba y obtener el sistema tal y como estaba cuando creó el entorno.


Al reinicio de este sistema el menú de arranque tiene una nueva entrada
8. Boots Environments


Para para entrar en el submenú pulse 8

Para recorrer la lista de BEs Presione 2. Una vez que encuentre el que quiere arrancar, presione a o enter y arrancar en el BE seleccionado.  Seleccionado el BE prueba:


Una vez arrancado el listado cambia a:

# bectl list
BE         Active Mountpoint Space Created
bectl-boot -      -          17.8M 2021-08-22 16:23
default    R      -          4.21G 2021-08-20 18:46
prueba     N      /          1.32M 2021-08-26 06:58

El sistema seguirá arrancando en el BE por defecto ya que la R sigue en el BE default. Para establecer permanentemente el BE de prueba como el nuevo predeterminado, utilice el interruptor de activación:
# bectl activate prueba
Successfully activated boot environment prueba

root@freebsd:~ # bectl list
BE         Active Mountpoint Space Created
bectl-boot -      -          17.8M 2021-08-22 16:23
default    -      -          1.36M 2021-08-20 18:46
prueba     NR     /          4.21G 2021-08-26 06:58
Actualización de paquetes en BE

Creando un BE con un nombre referente:
# bectl create update_`date +%d%m%y`
Monte ese BE y realice la actualización dentro de ese BE, puede reiniciar en el nuevo Boot Environments para probar la actualizacion.
Para montar el BE se utiliza el nombre:
root@freebsd:~ # bectl list
BE            Active Mountpoint Space Created
bectl-boot    -      -          17.8M 2021-08-22 16:23
default       -      -          1.41M 2021-08-20 18:46
prueba        NR     /          4.21G 2021-08-26 06:58
update_260821 -      -          8K    2021-08-26 07:41
# bectl mount update_260821
Successfully mounted update_260821 at /tmp/be_mount.RoCg

El punto de montaje es: /tmp/be_mount.RoCg y se tiene que pasar al comando pkg para actualizar repositorios y realizar la actualización.
# pkg -r /tmp/be_mount.RoCg update -f
Updating FreeBSD repository catalogue...
Fetching meta.conf: 100%    163 B   0.2kB/s    00:01    
Fetching packagesite.txz: 100%    6 MiB   1.3MB/s    00:05    
Processing entries: 100%
FreeBSD repository update completed. 30742 packages processed.
All repositories are up to date.

# pkg -r /tmp/be_mount.RoCg update
Checking for updates (57 candidates): 100%.

Number of packages to install: 8
Number of packages to update: 44
Number of packages to reinstall: 5
The process will require 16 MiB more space.
91 MiB to download.
Proceed with this action? [yes/no]: yes
Una vez completada la actualización arranque en ese BE. Una vez que compruebe que todo funciona, puede activar ese BE.

# bectl activate update_260821
Successfully activated boot environment update_260821
root@freebsd:~ # bectl list
BE                      Active Mountpoint Space Created
bectl-boot              -      -          17.8M 2021-08-22 16:23
default                 N      /          1.53M 2021-08-20 18:46
prueba                  -      -          1.39M 2021-08-26 06:58
update_260821           R      -          4.24G 2021-08-26 07:41
Reiniciar el sistema:


# bectl list
BE                      Active Mountpoint Space Created
bectl-boot              -      -          17.8M 2021-08-22 16:23
default                 -      -          1.53M 2021-08-20 18:46
prueba                  -      -          1.80M 2021-08-26 06:58
update_260821           NR     /          4.24G 2021-08-26 07:41
Parchear el Sistema Operativo.

Actualizacion de seguridad.

Crear un BE, montar y tomar nota del nombre del punto de montaje:
# bectl create security_update_`date +%d%m%y`
root@freebsd:~ # bectl list
BE                     Active Mountpoint         Space Created
bectl-boot             -      -                  17.8M 2021-08-22 16:23
default                -      -                  1.53M 2021-08-20 18:46
prueba                 -      -                  1.52M 2021-08-26 06:58
security_update_260821 -      /tmp/be_mount.qzJ3 152K  2021-08-26 10:42
update_260821          NR     /                  4.24G 2021-08-26 07:41
# bectl mount security_update_260821
Successfully mounted security_update_260821 at /tmp/be_mount.qzJ3

El punto de montaje de security_update_260821 es /tmp/be_mount.qzJ3

En primer lugar, obtenga las actualizaciones
utilizando el punto de montaje del BE como basedir -b y la base de datos del BE como workdir -d
# freebsd-update -b /tmp/be_mount.qzJ3 -d /tmp/be_mount.qzJ3/var/db/freebsd-update fetch
src component not installed, skipped
Looking up update.FreeBSD.org mirrors... 2 mirrors found.
Fetching metadata signature for 13.0-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata patches.. done.
Applying metadata patches... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 32 patches.....10....20....30. done.
Applying patches... done.
The following files will be updated as part of updating to
13.0-RELEASE-p4:
/bin/freebsd-version
/boot/kernel/kernel
Para que freebsd-update no utilice su base de datos por defecto en el Boot Environmentes actual:

# rm -rf /var/db/freebsd-update

Crear un nuevo directorio para los parches
# mkdir /var/db/freebsd-update  

Ejecute la herramienta freebsd-update utilizando el punto de montaje del BE como basedir -b y la base de datos del BE como workdir -d.

A continuación, repita ese comando con install:
# freebsd-update -b /tmp/be_mount.qzJ3 -d /tmp/be_mount.qzJ3/var/db/freebsd-update install
src component not installed, skipped
Installing updates...Scanning /tmp/be_mount.qzJ3/usr/share/certs/blacklisted for certificates...
Scanning /tmp/be_mount.qzJ3/usr/share/certs/trusted for certificates...
Scanning /tmp/be_mount.qzJ3/usr/local/share/certs for certificates...
done.
Antes de reiniciar en el BE parcheado, verifique la versión del BE actualmente arrancado:
# freebsd-version -u
13.0-RELEASE-p3

Repita la comprobación de la versión después de reiniciar en el BE security_update_260821:
# freebsd-version -u
13.0-RELEASE-p4
# bectl list
BE                     Active Mountpoint Space Created
bectl-boot             -      -          17.8M 2021-08-22 16:23
default                -      -          1.53M 2021-08-20 18:46
prueba                 -      -          1.52M 2021-08-26 06:58
security_update_260821 N      /          249M  2021-08-26 10:42
update_260821          R      -          4.25G 2021-08-26 07:41


Una vez comprobado
que todo marcha como debiera, puede activarlo.

 # bectl activate security_update_260821
Successfully activated boot environment security_update_260821
root@freebsd:~ # bectl list
BE                     Active Mountpoint Space Created
bectl-boot             -      -          17.8M 2021-08-22 16:23
default                -      -          1.53M 2021-08-20 18:46
prueba                 -      -          1.52M 2021-08-26 06:58
security_update_260821 NR     /          4.49G 2021-08-26 10:42
update_260821          -      -          1.40M 2021-08-26 07:41

Destruir un boot environment
# bectl destroy update_260821

Renombrar un boot enviroment
este no puede estar activo.
# bectl rename nombreactual nuevo nombre

Actualización del Sistema Operativo lo haré desde otra máquina con SO FreeBSD-12.2-RELEASE y actualizar a FreeBSD-13-RELEASE:

Version actual del SO
# freebsd-version -u
12.2-RELEASE-p10
root@freebsd:~ # bectl list
BE                     Active Mountpoint Space Created
bectl-boot             -      -          17.8M 2021-08-22 16:23
default                -      -          1.53M 2021-08-20 18:46
prueba                 -      -          1.52M 2021-08-26 06:58
security_update_260821 NR     /          4.49G 2021-08-26 10:42
update_260821          -      -          1.40M 2021-08-26 07:41
Crear un nuevo BE y montarlo:
# bectl create release-13.0

root@fbsd12:~ # bectl list
BE           Active Mountpoint Space Created
default      NR     /          4.00G 2021-08-26 12:27
release-13.0 -      -          8K    2021-08-26 14:40

root@fbsd12:~ # bectl mount release-13.0
Successfully mounted release-13.0 at /tmp/be_mount.yUsy

root@fbsd12:~ # bectl list
BE           Active Mountpoint         Space Created
default      NR     /                  4.00G 2021-08-26 12:27
release-13.0 -      /tmp/be_mount.yUsy 232K  2021-08-26 14:40
root@fbsd12:~ # 
Especifique la versión (-r 13.0-RELEASE) a la que se va a actualizar en el comando freebsd-update:

# freebsd-update -b  /tmp/be_mount.yUsy -d /tmp/be_mount.yUsy/var/db/freebsd-update -r 13.0-RELEASE upgrade
src component not installed, skipped
Looking up update.FreeBSD.org mirrors... 2 mirrors found.
Fetching metadata signature for 12.2-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.
Fetching 1 metadata files... done.
Inspecting system... done.

The following components of FreeBSD seem to be installed:
kernel/generic kernel/generic-dbg world/base world/doc world/lib32

The following components of FreeBSD do not seem to be installed:
world/base-dbg world/lib32-dbg

Does this look reasonable (y/n)? y

Fetching metadata signature for 13.0-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.
Fetching 1 metadata patches. done.
Applying metadata patches... done.
Fetching 1 metadata files... done.
nspecting system... done.
Fetching files from 12.2-RELEASE for merging... done.
Preparing to download files... done.
Fetching 10107 patches.....10....20....30....40...
10090....10100... done.
Applying patches...
Applying patches... done.
Fetching 634 files... ....10....20....30
salida cortada
...610....620....630.. done.
Attempting to automatically merge changes in files... done.

The following file will be removed, as it no longer exists in
FreeBSD 13.0-RELEASE: /etc/motd
Does this look reasonable (y/n)? y
To install the downloaded upgrades, run "/usr/sbin/freebsd-update install"

# freebsd-update -b /tmp/be_mount.yUsy -d /tmp/be_mount.yUsy/var/db/freebsd-update -r 13.0-RELEASE install
src component not installed, skipped
Installing updates...

Se han instalado las actualizaciones del kernel. Por favor, reinicie y ejecute
"/usr/sbin/freebsd-update install" de nuevo para terminar de instalar las actualizaciones.

# freebsd-update -r 13.0-RELEASE install
src component not installed, skipped
Installing updates...Scanning /tmp/be_mount.yUsy/usr/share/certs/blacklisted for certificates...
Scanning /tmp/be_mount.yUsy/usr/share/certs/trusted for certificates...
Scanning /tmp/be_mount.yUsy/usr/local/share/certs for certificates...

Completing this upgrade requires removing old shared object files.
Please rebuild all installed 3rd party software (e.g., programs
installed from the ports tree) and then run "/usr/sbin/freebsd-update install"
again to finish installing updates.

Despues de reiniciar con el Boot Environments release-13.0
compruebe la version del SO:

# freebsd-version -u
13.0-RELEASE-p4
# bectl list
BE           Active Mountpoint Space Created
default      R      -          4.00G 2021-08-26 12:27
release-13.0 N      /          1.93G 2021-08-26 14:40

Active el nuevo BE release-13.0

# bectl activate release-13.0
Successfully activated boot environment release-13.0
# bectl list
BE           Active Mountpoint Space Created
default      -      -          827M  2021-08-26 12:27
release-13.0 NR     /          5.93G 2021-08-26 14:40


Al reiniciar, se cargará el BE release-13.0. Dado que ahora ha reiniciado en ese BE, no tiene que montarlo y puede teclear el comando install para completar el proceso de instalación:

# freebsd-update install

Una vez que haya terminado de probar la actualización, puede activar el BE.

# bectl activate release-13.0

Si la actualización no funciona, o no activa el BE 13.0, al reiniciar volverá al BE anterior por defecto.

Si aparece el temido mensaje mountroot> que detiene el proceso de arranque del SO. En este caso, arranque en un BE bueno, monte el BE que da problemas, identifique su punto de montaje. 

A medida que investigue posibles soluciones, los cambios puede realizarlo dentro del punto de montaje. Por ejemplo, si el punto de montaje del BE es /tmp/be_mount.b5ID y necesita editar el archivo fstab del Boot Environments, edite en /tmp/be_mount.b5ID/etc/fstab.

FreeBSD es genial!.



viernes, 23 de julio de 2021

Wireshark con Privilegios de Administrador MacOS


macOS High Sierra Versión 10.13.6 
MacBook Pro 13 pulgadas
Memoria: 16 GB 1600 MHz DDR3
Procesador: 2,5 GHz Intel Core i5
Gráficos: Intel HD Graphics 4000 1536 MB

Desde el sitio web del desarrollador (www.wireshark.org) es posible descargar para MacOS (.dmg) el instalador para el analizador de red Wireshark. Después de instalado si salta un error al intentar capturar el tráfico con un mensaje como "La sesión de captura no se pudo iniciar en la interfaz 'en0' (usted no tiene permiso para capturar en ese dispositivo"):


Puede optar por iniciar la aplicación con privilegios de Administrador utilizando la solución publicada, en su momento, por el usuario gmale en ask.wireshark.org.

Como saber el nombre de usuario?:

MacBook-Pro-de-Carlos:~ carlosc$ whoami 

carlosc


Abrir el editor de Scripts y desde Archivo Elegir NUEVO
En la ventana abierta escriba:

do shell script "/Applications/Wireshark.app/Contents/MacOS/Wireshark" user name "carlosc" password "password" with administrator privileges


Luego, exportar la secuencia de comandos como Aplicación, -> Archivo -> Exportar, y cambiar el Formato de archivo a la aplicación, escriba un nombre para su archivo y guárdelo. Ejecutar el script:




FreeBSD es Genial!