Páginas

Mostrando entradas con la etiqueta PF. Mostrar todas las entradas
Mostrando entradas con la etiqueta PF. Mostrar todas las entradas

viernes, 11 de abril de 2025

Configuración de Zerotier Acceso a Servidor LAN vía SSH FreeBSD 14.2

Configuración para conectar clientes a un servidor FreeBSD via Zerotier y SSH

Instalación y configuración de Zerotier en el servidor FreeBSD

Instalación y puesta en marcha de Zerotier

 pkg install net/zerotier
 sysrc zerotier_enable=YES
 service zerotier start

Unirse a la Red Zerotier (192.168.192.0-24):

 zerotier-cli join <Network ID>

Reemplaza <Network ID> con el ID de tu red Zerotier (puedes verlo en Zerotier central).

Autorizar el servidor en Zerotier, aparecerá en la lista de miembros con su ID

Asigna una IP fija al servidor en la red Zerotier (por ej: 192.168.192.133).

Configuración del cortafuegos PF en el servidor FreeBSD

Habilitar IP Forwarding (Reenvío de paquetes):

echo "net.inet.ip.forwarding=1" >> /etc/sysctl.conf

Aplicar los cambios:

sysctl net.inet.ip.forwarding=1
net.inet.ip.forwarding: 1

Reglas PF (/etc/pf.conf)

# Macros
wan_if = "re0"               # Interfaz conectada al MikroTik (LAN)
lan_net = "192.168.88.0/24"  # Red local
zt_if = "zt1ocu1pr8e2sac"    # Interfaz ZeroTier
zt_net = "192.168.192.0/24"  # Red ZeroTier

# Opciones generales
set block-policy drop
set skip on { lo0, $zt_if }  # ZeroTier no necesita filtrado estricto
scrub in all fragment reassemble

# Reglas predeterminadas
block all
pass out quick keep state

# Permitir tráfico entre redes LAN y ZeroTier
pass quick from $lan_net to $zt_net
pass quick from $zt_net to $lan_net

# Permitir servicios desde la LAN (Samba, NFSv4, SSH)
pass in on $wan_if proto { tcp, udp } from $lan_net to any port { 139, \
445, 111, 2049, 22 }

# Permitir SSH desde ZeroTier (clientes externos)
pass in on $zt_if proto tcp from $zt_net to ($wan_if) port 22

# Reglas para ZeroTier (puerto UDP 9993 y comunicación entre peers)
pass in on $zt_if proto udp from any to any port 9993

# Permitir ICMP (pings y mensajes de error)
pass in inet proto icmp all icmp-type { echoreq, unreach }

Configuración de clientes Zerotier:

Instalar Zerotier en los dispositivos cliente

Unirlos a la red Zerotier

zerotier-cli join <Network ID> o mediante la app

Autoriza los clientes en Zerotier y asígnales IPs fijas si es necesario

Acceso SSH al servidor

Conectarse desde un cliente usando la IP de Zerotier del servidor

 ssh usuario@192.168.192.133

Ruta estática entre la red local (192.168.88.0/24) y Zerotier (192.168.192.0/24)

¿Por qué es necesaria?

Los clientes en Zerotier (192.168.192.0/24) no saben como llegar a la red local del servidor (192.168.88.0/24) por defecto.

La ruta estática indica a Zerotier que el servidor actúa como puerta de enlace para la red local.

Configuración en Zerotier Central:

Ir a su red en Zerotier
En Advanced > Managed Routes,
añadir:

 - Destination: 192.168.88.0/24
 - Via: 192.168.192.133 (IP Zerotier del servidor)

Explicación Técnica

Zerotier como VPN Layer 2:

Crea una red virtual donde todos los dispositivos aparecen como si estuvieran en la misma LAN, evitando la necesidad de port forwarding

Ruta estática:

Dirige el tráfico desde Zerotier hacia la red local a través del servidor, que actúa como router.

Regla de Cortafuegos en Mikrotik

Agregar una regla que permita el tráfico SSH desde la red ZeroTier hacia el servidor FreeBSD

# En Mikrotik (RouterOS CLI)

/ip firewall filter add chaind=filter action=accept protocol=tcp \
dst-port=22 src-address=192.168.192.0/24 comment="Permitir SSH desde ZeroTier"

El servidor usa la IP de ZeroTier para SSH, asegúrese de que SSH está configurado para escuchar en esa IP

# En /etc/ssh/sshd_config
ListenAddress 192.168.192.133

Reiniciar SSH después

service sshd restart

Verificaión:

Desde un cliente Zerotier, por ej: desactivo la conexión wifi de mi teléfono móvil y activo los datos para conectarme desde una red externa:

 ssh carlos@192.168.192.133


Captura de tráfico

 tcpdump -i zt1ocu1pr8e2sac

Optimizar ZeroTier:

- En /usr/local/etc/zerotier-one/zerotier-one.conf, configura allowManaged y allowGlobal para controlar el acceso a rutas:

   {
     "settings": {
       "allowManaged": true,
       "allowGlobal": false
     }
   }

Diagrama de Flujo

Esta configuración garantiza que solo los servicios necesarios estén expuestos, y la comunicación entre redes se realice de manera segura y controlada.

FreeBSD es genial!.

jueves, 26 de octubre de 2023

NFSv4 FreeBSD 14.2

NFSv4 - NFS Version 4 Protocol FreeBSD 14.2

Como administrador de un servidor NFS, puede configurarlo para que sólo admita NFSv4, lo que minimiza el número de puertos abiertos y servicios en ejecución en el sistema.

Opcionalmente, también puede deshabilitar la escucha de las llamadas de protocolo RPCBIND, MOUNT, y NSM, que no son necesarias en el caso de sólo NFSv4.

En este momento, es posible habilitar NFSv3 y/o NFSv4 sobre TCP, pero no NFSv3 sobre UDP, de todas maneras, NFSv3 sobre UDP está en desuso. Esto significa que la opción "-u" No se puede especificar para nfs_server_flags en el archivo /etc/rc.conf.

sharenfs=off|on Controla si el sistema de archivos se comparte a través de NFS y que acciones van a ser utilzadas. Un sistema de archivos con una sharenfs=off es administrado con el comando exportfs y entradas en el archivo /etc/exports. Por ejemplo

zfs get sharenfs zroot/usr/backup/dellhome
NAME                       PROPERTY  VALUE     SOURCE
zroot/usr/backup/dellhome  sharenfs  off       local

El archivo exports especifica puntos de montaje remotos para el protocolo NFS. Cada linea especifica el punto de montaje e indicadores de exportacion dentro de un sistema de archivos del servidor local o la raiz del arbol NFSv4 para uno o mas hosts.

En el servidor NFSv4 archivo /etc/rc.conf

sysrc nfs_server_enable="YES"
sysrc nfsv4_server_enable="YES"
sysrc nfs_server_flags="-u -t -n 24"
sysrc hostid_enable="YES"
sysrc hostid_file="/etc/hostid"
sysrc rpcbind_enable="YES"
sysrc rpcbind_flags="-h 192.168.88.160"
sysrc mountd_enable="YES"
sysrc mountd_flags="-r -p 892"
sysrc statd_flags="-p 32766"
sysrc lockd_flags="-p 32767"

Iniciar servicio hostid

service hostid start

Parametros des sysctl (/etc/sysctl.conf)

sysctl vfs.nfs.enable_uidtostring="1"      # Hacer que NFS siempre envíe nombres de propietario numéricos
sysctl vfs.nfsd.enable_stringtouid="1"     # Habilitar nfsd para aceptar nombres de propietario numéricos
sysctl vfs.nfsd.server_max_nfsvers="4"     # Fuerza NFSv4 max
sysctl vfs.nfsd.server_min_nfsvers="4"     # Fuerza NFSv4 min
sysctl vfs.nfsd.issue_delegations="1"      # Habilita delegaciones (mejora rendimiento)
sysctl vfs.nfsd.enable_locallocks="1"      # Bloqueos locales (compatible con ZFS)
sysctl kern.ipc.somaxconn="1024"           # Max conexciones pendientes (por defecto 128)
sysctl net.inet.tcp.delayed_ack="0"        # Mejora rendimiento TCP

Hacer que los cambios sean permanentes

echo vfs.nfs.enable_uidtostring="1" >> /etc/sysctl.conf
echo vfs.nfsd.enable_stringtouid="1" >> /etc/sysctl.conf
echo vfs.nfsd.server_max_nfsvers="4" >> /etc/sysctl.conf
echo vfs.nfsd.server_min_nfsvers="4" >> /etc/sysctl.conf
echo vfs.nfsd.issue_delegations="1" >> /etc/sysctl.conf
echo vfs.nfsd.enable_locallocks="1" >> /etc/sysctl.conf
echo kern.ipc.somaxconn="1024" >> /etc/sysctl.conf
echo net.inet.tcp.delayed_ack="0" >> /etc/sysctl.conf

Usamos el archivo /etc/hosts como resolución de nombres en la red local

...
192.168.88.160		tormenta
192.168.88.51		solaris
...

Configurar PF para permitir el tráfico NFS

...
lan_net ="{ 192.168.88.0/24 10.10.10.0/24 }"
nfs_puertos="{ 111, 892, 2049 }"
statd_lockd_puertos="{ 32766, 32767 }"

pass in proto { tcp } from $lan_net to any port ssh
pass in proto { tcp udp } from $lan_net to any port $statd_lockd_puertos
pass in proto { tcp udp } from $lan_net to any port $samba_puertos
pass in quick proto { tcp udp } from $lan_net to any port $nfs_puertos
...

Reiniciar servicios

tormenta: # service nfsd restart
Stopping nfsd.
Waiting for PIDS: 1391 1394.
Starting nfsd.

tormenta: # service rpcbind restart
Stopping rpcbind.
Waiting for PIDS: 1285.
Starting rpcbind.

tormenta: # service mountd restart
Stopping mountd.
Waiting for PIDS: 1382.
Starting mountd.

Crear los conjunto de datos en el servidor

zfs create -o mountpoint=/nfsv4/dellhome -p zroot/nfsv4/dellhome
zfs create -o mountpoint=/nfsv4/poolrecovery -p zroot/nfsv4/poolrecovery
zfs create -o mountpoint=/nfsv4/docs -p zroot/nfsv4/docs
zfs create -o mountpoint=/nfsv4/desarrollo -p zroot/nfsv4/desarrollo
zfs create -o mountpoint=/nfsv4/confsolaris -p zroot/nfsv4/confsolaris
zfs create -o mountpoint=/nfsv4/conftormenta -p zroot/nfsv4/conftormenta

Archivo de ejemplo /etc/exports, directorios compartidos en redes LAN

tormenta: # cat /etc/exports
V4: /nfsv4 # Define /nfsv4 como raiz global
/nfsv4/dellhome -alldirs -network 192.168.88.0/24,10.10.10.0/24
/nfsv4/poolrecovery -alldirs -maproot=root -network 192.168.88.0/24
/nfsv4/docs -alldirs -maproot=root -network 192.168.88.0/24,10.10.10.0/24
/nfsv4/desarrollo -alldirs -maproot=root -network 192.168.88.0/24
/nfsv4/confsolaris -alldirs -maproot=root -network 192.168.88.0/24
/nfsv4/conftormenta -alldirs -maproot=root -network 192.168.88.0/24

Puertos a la escucha (en el servidor)

root@tormenta:~ # netstat -an | grep -i listen     
tcp6       0      0 *.2049                 *.*                    LISTEN     
tcp4       0      0 *.2049                 *.*                    LISTEN     
tcp4       0      0 *.892                  *.*                    LISTEN     
tcp6       0      0 *.892                  *.*                    LISTEN          
tcp4       0      0 *.111                  *.*                    LISTEN     
tcp6       0      0 *.111                  *.*                    LISTEN 
carlos@tormenta:~ % sockstat -l4 | grep -E 'nfsd|rpcbind|mountd'
root     nfsd        1391 5   tcp4   *:2049                *:*
root     mountd      1382 8   udp4   *:892                 *:*
root     mountd      1382 9   tcp4   *:892                 *:*
root     rpcbind     1285 9   udp4   *:111                 *:*
root     rpcbind     1285 10  udp4   *:898                 *:*
root     rpcbind     1285 11  tcp4   *:111                 *:*

Programar mantenimiento

# crontab -e
@daily /sbin/service mountd reload
@daily /sbin/service nfsd restart

Logs de errorres:

 tail /var/log/messages | grep nfs

Capturar tráfico NFS:

 tcpdump -i re0 port 2049 -w nfs-captura.pcap

Leer paquetes capturados del archivo nfs-captura.pcap

root@tormenta:~ # tcpdump -r nfs-captura.pcap
...
21:14:42.658371 IP solaris.960 > tormenta.nfsd: Flags [P.], seq 976297794:976297922, \
ack 2292617495, win 4352, options [nop,nop,TS val 2858673986 ecr 2537679775], length 128: \
NFS request xid 755722369 124 getattr fh 0,5/2
21:14:42.658440 IP tormenta.nfsd > solaris.960: Flags [.], ack 128, win 29128, options \
[nop,nop,TS val 2537739395 ecr 2858673986], length 0
21:14:42.658497 IP tormenta.nfsd > solaris.960: Flags [P.], seq 1:93, ack 128, win 29128, \
options [nop,nop,TS val 2537739395 ecr 2858673986], length 92: NFS reply xid 755722369 \
reply ok 88 getattr LNK 12231267145 ids 1/53 sz 0
21:14:42.658797 IP solaris.960 > tormenta.nfsd: Flags [.], ack 93, win 4352, options \
[nop,nop,TS val 2858673987 ecr 2537739395], length 0
...

Configurar cliente FreeBSD

cat /etc/hosts...
192.168.88.160		tormenta
192.168.88.51		solaris
...

Para que el servicion nfs client se inicie con el sistema

solaris:~ # sysrc nfs_client_enable=YES
solaris:~ # sysrc nfsv4_client_enable="YES"
solaris:~ # sysrc hostid_enable="YES"
solaris:~ # sysrc hostid_file="/etc/hostid"
solaris:~ # sysrc rpc_statd_enable="YES"
solaris:~ # sysrc rpc_lockd_enable="YES"

Iniciar servicio hostid

service hostid start

Iniciar el servicio nfsclient

solaris:~ # service nfsclient start
NFS access cache time=60
solaris:~ nc -v tormenta 2049
  Connection to tormenta 2049 port [tcp/nfsd] succeeded!
solaris:~ nc -v tormenta 111
Connection to tormenta 111 port [tcp/sunrpc] succeeded!

Montar manualmente un directorio compartido (en el cliente)

solaris:~ # mkdir /mids4
# mount -t nfs -o nfsv4 tormenta:/docs /mids4

Archivo /etc/fstab para un montaje permanente y automático

# Device	Mountpoint	FStype	Options		Dump	Pass#
/dev/gpt/efiboot0	/boot/efi	msdosfs	rw		2	2
/dev/nvd0p3	 none	  	swap	sw			0	0
# 
fdesc		/dev/fd			fdescfs	rw		0	0
#
proc			/proc		procfs	rw		0	0
# nfsv4 shared
tormenta:/poolrecovery     /nisc4    nfs     rw,nfsv4,noatime,bg    0  0
tormenta:/development      /nixs4    nfs     rw,nfsv4,noatime,bg    0  0
tormenta:/docs             /nids4    nfs     rw,nfsv4,noatime,bg    0  0
tormenta:/dellhome 	   /nihs4    nfs     ro,nfsv4,noatime,bg    0  0

Archivo /etc/auto_master

cat /etc/auto_master
#
# Automounter master map, see auto_master(5) for details.
#
/net		-hosts		-nobrowse,nosuid,intr

Configurar el montaje automatico para montar dinámicamente cuando alguien acceda al recurso compartido NFS.

echo 'autofs_enable="YES"' >> /etc/rc.conf
service automountd start

Vamos a comprobar que podemos escribir en el directorio

 cd /nids4
 vim script-while-files.sh 
#!/bin/sh
i=0
while [ $i -le 10 ]
do
	 echo 'creando archivos con contenido'
	i=$(($i+1))
	echo Hola > "file$i.txt"
done
:wq

 chmod +x script-while-files.sh
 ./script-while-files.sh
 ls
 file3.txt             file8.txt
file1.txt             file4.txt             file9.txt
file10.txt            file5.txt             script-while-files.sh
file11.txt            file6.txt
file2.txt             file7.txt

solaris:~ % mount

...
map -hosts on /net (autofs)
tormenta:/poolrecovery on /nisc4 (nfs, nfsv4acls)
tormenta:/dellhome on /nihs4 (nfs, read-only, nfsv4acls)
tormenta:/docs on /nids4 (nfs, nfsv4acls)
tormenta:/development on /nics4 (nfs, nfsv4acls)
...

Verificar PF y reglas en tiempo real

 pfctl -f /etc/pf.conf
 pfctl -s rules
FreeBSD es genial!.

martes, 11 de julio de 2023

Servidor VPN con ZeroTier FreeBSD Raspberry Pi

Para crear una VPN se necesita:

1.- Un Servidor VPN
2.- Configuración de los clientes VPN
3.- Servicio DDNS (para conocer la IP pública de nuestro servidor)
4.- Abrir los puertos en el Router y poder acceder desde el exterior al servidor VPN
5.- No estar detrás de un CG-NAT.

Como acceder a nuestra red de una manera segura, cifrada (cifrado de 256 bits), saltándonos el CG-NAT en caso de que nuestro proveedor de Internet lo utilice, sin abrir puertos y sin servicio DDNS?.

La respuesta es el servicio ZeroTier, (SD-WAN), gratuito para uso personal (25 dispositivos). Con ZeroTier podremos unir equipos, unir redes, tanto si están dentro de la red como fuera de la misma. Podremos acceder desde cualquier ordenador, teléfono, cualquer dispositivo que tengamos dentro de nuestra red pero desde fuera de la red.

Para conseguirlo utilizaremos una raspberrypi (Raspberry Pi 3B) y la convertimos en un servidor VPN. Instalamos el sistema operativo raspbian en un disco externo SSD Intel de 40GB. No es necesario configurar una dirección estática porque no se usa el reenvío de puertos en el Router. Y sí, necesitamos el acceso vía SSH por lo que lo habilitaremos.

La red virtual asignada por ZeroTier es la 192.168.192.0/24, también puede crear su propia red o elegir otra red de las ofrecidas por ZeroTier desde su panel dec control. Debe ser una subred diferente a la subred que tenemos. Por ejemplo, yo tengo la subred 192.168.88.0/24 que no coincide con la red virtual de ZeroTier, la 192.168.192.0/24.

La dirección IP de mi servidor VPN es 192.168.8.12 accedemos a través de un portátil FreeBSD a la Raspberry Pi a través de la red.


% ssh carlos@192.168.88.12

ifconfig servidor VPN

ifconfig solaris FreeBSD

Como utilizaremos Zerotier para construir nuestro propio servidor VPN nos vamos a la página principal de ZeroTier, nos registramos (gratuito para uso personal y menos de 25 computadoras), habilitamos 2 factor authentication, creamos una Red y utilizamos el Network ID o identificador de red para conectar los clientes a esa red.


 

ZeroTier permite enrutar entre una red física y una red privada virtual para que los dispositivos remotos puedan acceder a los recursos locales a través de Internet.

Instalar Zerotier


carlos@raspberrypi3:~ $ sudo apt install zerotier-one

Unirse a la red


carlos@raspberrypi3:~ $ sudo zerotier-cli join 565799d8f6259736
	
carlos@raspberrypi3:~ $ sudo zerotier-cli status
200 info 7dd6...... 1.10.6 ONLINE

Listar redes


carlos@raspberrypi3:~ $ sudo zerotier-cli listnetworks
200 listnetworks <nwid> <name> <mac> <status> <type> <dev> <ZT assigned ips>
200 listnetworks 565799d8f6259736 home_arpa 4e:0c:37:66:55:d8 OK PRIVATE zt2lrsbp44 fccc:d2b0:827d:d6b6:9b19::1/40,192.168.192.119/24

Mostrar información de estado


carlos@raspberrypi3:~ $ sudo zerotier-cli info
200 info 7dd....... 1.10.6 ONLINE

Conexión peer to peer listar peers


carlos@raspberrypi3:~ $ sudo zerotier-cli listpeers

A continuación vamos a la página de Zerotier nos logueamos y permitimos que esa computadora se una a la red de zerotier (autorizar - Auth?) y le ponemos un nombre para identificarlo. Repetimos lo mismo para los demás dispositivos (teléfono móvil, iPads, PC, etc.).

Instalar ZeroTier en FreeBSD 13.1


# pkg install zerotier
# sysrc zerotier_enable=YES

Iniciar el servicio


# service zerotier start

Unirse a la red


# zerotier-cli join 565799d8f6259736

Comprobar estado


# zerotier-cli status
200 info 6a58..... 1.10.2 ONLINE

Salir de la red


# zerotier-cli leave 565799d8f6259736

Para configuración adicional consulte la página de zerotier


https://www.zerotier.com/manual.shtml

Crear las rutas

A continuación enrute entre las dos redes; física y red virtual zerotier para que las computadoras remotas puedan acceder a la red local utilizando la computadora de destino.

Rango de mi red local 192.168.88.0/24


192.168.88.0/24 a través de la ip asignada a la raspberrypi3 (VPN) por ZetoTier -> 192.168.192.119

Add Routes 
Destination		    Via
192.168.88.0/24		192.168.192.119

FIGURA zerotier-rutas-4.png 

 


Ahora se configura el reenvío de puertos en la raspberrypi3 y activar el reenvío de tráfico entre las dos interfaces de red, la interface eth0 y la interfaz de red de Zerotier. Para ello:

Habilitar el reenvio de paquetes entre dos interfaces (IP forwarding), la interfaz de red fisica y la interfaz de zerotier


echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf

$ sudo sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

Y finalmente estos comandos para permitir el paso de tráfico entre las dos interfaces

https://zerotier.atlassian.net/wiki/spaces/SD/pages/224395274/Route+between+ZeroTier+and+Physical+Networks

PHY_IFACE=eth0; ZT_IFACE=zt2lrsbp44

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o zt2lrsbp44 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i zt2lrsbp44 -o eth0 -j ACCEPT

sudo apt install iptables-persistent
# bash -c iptables-save > /etc/iptables/rules.v4

1.- Apague el wifi en tu teléfono
2.- Únase a la red zerotier, autorízalo
3.- Intente acceder a algo en la LAN física

Desde mi iPhone descargo las App Zerotier y Termius: Terminal & SSH client

Estoy conectado a Internet a través de la VPN que acabo de crear, también puedo entrar vía SSH a los dispositivos configurados para ese fin.










 

 

Reglas del Firewall PF FreeBSD


###################################################################
int_if = "em0"
lan_net = "192.168.88.0/24"

rfc1918 = "{ 127.0.0.0/8, 172.16.0.0/12, \
169.254.0.0/16, 192.0.2.0/24, \
0.0.0.0/8, 240.0.0.0/4, 224.0.0.0/3 }"

#tcp_pass="{ 22 53  80 123 111 443 832 1110 1651 2049 3000 8000 8080 20049 }"
#udp_pass="{ 53 111 832 1110 1651 2049 20049 }"
#tcp_pass="{ 22 53  80 123 111 443 1110 3000 8000 8080 }"
#udp_pass="{ 53 111 1110 9993}"

# scrub incoming packets
scrub in all

# setup a default deny policy
block in all
block out all

# pass traffic on the loopback interface in either direction
pass quick on lo0 all

# activate spoofing protection for the internal interface.
antispoof quick for $int_if inet

############
block drop in quick on $int_if from $rfc1918 to any
block drop out quick on $int_if from any to $rfc1918
############

# only allow ssh connections from the local network if it‘s from the
# trusted computer, 192.168.0.15. use "block return" so that a TCP RST is
# sent to close blocked connections right away. use "quick" so that this
# rule is not overridden by the "pass" rules below.
# block return in quick on $int_if proto tcp from ! 192.168.0.15 \
# to $int_if port ssh flags S/SA
block return in quick proto tcp from ! 192.168.192.0/24 port ssh flags S/SA

# pass all traffic to and from the local network
pass in on $int_if from $lan_net to any
pass out on $int_if from any to $lan_net

# pass out on se refiere al trafico de salida
#pass out quick on $int_if proto tcp to any port $tcp_pass keep state
#pass out quick on $int_if proto udp to any port $udp_pass keep state

# pass tcp, udp, and icmp out on the external (Internet) interface.
# keep state on udp and icmp and modulate state on tcp.
pass out on $int_if proto tcp all modulate state flags S/SA
pass out on $int_if proto { udp, icmp } all keep state

# allow ssh connections in on the external interface as long as they‘re
# NOT destined for the firewall (i.e., they‘re destined for a machine on
# the local network). log the initial packet so that we can later tell
# who is trying to connect. use the tcp syn proxy to proxy the connection.
#pass in log on $ext_if proto tcp from any to { !$ext_if, !$int_if } \
#port ssh flags S/SA synproxy state
pass in log proto tcp from any to { !$int_if } port ssh flags S/SA synproxy state
#################################################################################
FreeBSD es genial!.

martes, 21 de febrero de 2023

FreeBSD Instalar Wordpress

Instalar Wordpress en la jail

1.- Creación de la Jail www con Bastille

2.- Instalar Apache MySQL PHP

3.- Instalar Wordpress. Activar rdr en Firewall PF

Creación de la base de datos para Wordpress


bastille console www

root@www: #

Instalación de Wordpress

Inicicar sesión en mysql como usuario root


root@www: # mysql -h 127.0.0.1 -u root -p
Password:

root@127.0.0.1 [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY 'su_password';
Query OK, 0 rows affected (0.01 sec)

root@127.0.0.1 [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

Crear un usuario, una base de datos para Wordpress y una contraseña, otorgar los derechos en la base de datos al usuario creado.


CREATE DATABASE db_wp;
Query OK, 1 row affected (0.00 sec)

USE db_wp;

CREATE USER 'db_wp'@'localhost' IDENTIFIED BY '57rMvRbev&5o$eE*sV';

GRANT ALL PRIVILEGES ON db_wp.* TO 'db_wp'@'localhost' IDENTIFIED BY \
'57rMvRbev&5o$eE*sV';
Query OK, 0 rows affected (0.00 sec)

Recargar las cachés internas de MySQL con el comando FLUSH


FLUSH PRIVILEGES;

Salir de mysql


root@localhost [(none)]> exit
Bye
root@www: #

Descargar y descomprimir la última version de Wordpress


root@www: # fetch https://wordpress.org/latest.tar.gz

Descomprimir el archivo


tar -zxvf latest.tar.gz

Entrar en el directorio de wordpress y copiar wp-config-sample.php a wp-config.php


cd wordpress
cp wp-config-sample.php wp-config.php

Edite el archivo wp-config.php e introduzca DB_NAME, DB_USER y DB_PASSWORD


 vim wp-config.php

define( 'DB_NAME', 'db_wp' );^M
^M
/** Database username */^M
define( 'DB_USER', 'db_wp' );^M
^M
/** Database password */^M
define( 'DB_PASSWORD', '57rMvRbev&5o$eE*sV' );^M

Reiniciar mysql-server


root@www: # service mysql-server restart

Mover el contenido del directorio de Wordpress a la ubicación reservada a los sitios de FreeBSD, /usr/local/www/apache24/data


 cp -r ~/wordpress/* /usr/local/www/apache24/data

Cambiar el propiepario y grupo de los archivos a www


 chown -R www:www /usr/local/www/apache24/data

Llegados a este punto, vamos a crear el archivo rdr.conf para hacer las reglas de redirección de puertos persistentes. Las reglas que se encuentran en este archivo (una por línea) se cargarán para la jail cada vez que se inicie, y se borran automáticamente cuando se detenga la jail.


cd /usr/local/bastille/jails/www
fstab     jail.conf     root

vim .conf
 tcp 80 80
 tcp 443 443
ls /usr/local/bastille/jails/www/
fstab     jails.conf    rdr.conf    root
FIGURA rdr.conf

Cambios en el archivo pf.conf

rdr pass inet proto tcp from any to any port {80, 443} -> $www_ip.
Redirigir, dejar pasar todo el tráfico TCP de cualquier origen, que tenga como destino los puertos 80 y 443, a la IP de la jail, utilizando la macro $www_ip que define la dirección IP 10.10.10.2

Firewall PF


carlos@solaris:~ $ cat /etc/pf.conf
#
ext_if="em0"
www_ip="10.10.10.2"

set skip on lo
set block-policy return
scrub in on $ext_if all fragment reassemble

table <jails> persist
nat on $ext_if from <jails> to any -> ($ext_if:0)
rdr-anchor "rdr/*"
rdr pass inet proto tcp from any to any port {80, 443} -> $www_ip

block in all
pass out quick keep state
antispoof for $ext_if inet

pass in inet proto tcp from any to any port ssh flags S/SA keep state

Reiniciar la jail


 bastille restart www

Apuntar Firefox a la dirección IP o nombre de dominio para proceder a la instalación de Wordpress


http://10.10.10.2:80/wp/wp-admin/install.php

Sólo falta instalar Wordpress usando el asistente de instalación y un nombre de usuario y una contraseña para la administración del sitio web.


FreeBSD es genial!.

lunes, 20 de febrero de 2023

FAMP Freebsd Apache MySQL PHP

Instalar la pila FAMP que significa FreBSD Apache MySQL PHP en la jail www

1.- Creación de la Jail www con Bastille

2.- Instalar Apache MySQL PHP

3.- Instalar Wordpress. Activar rdr en Firewall PF


pkg search apache2
apache24-2.4.55                Version 2.4.x of Apache web server
p5-Apache2-SOAP-0.73_4         Apache2 mod_perl2 SOAP Server
p5-Apache2-SiteControl-1.05_3  Perl web site authentication/authorization system

Instalar el servidor web Aapache


 pkg install apache24

Activar Apache usando sysrc


 sysrc apache24_enable=YES
 apache24_enable: NO -> YES

Iniciar el servicio


 service apache24 onestart
 starting apache24

Editar el archivo de configuración de Apache


 cd /usr/local/etc/apache24

Hacer una copia del archivo original


 cp httpd.conf httpd.conf-original

Editar /usr/local/etc/apache24/httpd.conf


ServerName 10.10.10.2

Listen 80

Reiniciar Apache


 service apache24 restart

Comprobar que esta funcionando


 ps aux | grep httpd
root   10186   0.0  0.2  195432  30168  -  SsJ  15:27      0:00.07 /usr/local/sbin/httpd -DNOHTTPACCEPT
www    10195   0.0  0.2  195432  30180  -  IJ   15:27      0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
www    10196   0.0  0.2  195432  30180  -  IJ   15:27      0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
www    10198   0.0  0.2  195432  30180  -  IJ   15:27      0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
www    10199   0.0  0.2  195432  30180  -  IJ   15:27      0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
www    10200   0.0  0.2  195432  30180  -  IJ   15:27      0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT

Status de Apache


 apachectl status
apache24 is running as pid 12118.

Instalar el sistema de gestión de base de datos MariaDB, MySQL, o Percona


 pkg install mariadb104-server

Activar MySQL


 sysrc mysql_enable=YES
 mysql_enable: NO -> YES

Iniciar el servicio


 service mysql-server onestart
Installing MariaDB/MySQL system tables in '/var/db/mysql' ...
OK

Comprobar que está en marcha


 ps aux | grep mysql
mysql 16574  0.0  0.0  13596  3132  -  IsJ  07:28   0:00.01 /bin/sh /usr/local/bin
mysql 29646  0.0  0.5 601752 83468  -  IJ   07:28   0:00.10 /usr/local/libexec/mar
root  34451  0.0  0.0  12840  2324  4  S+J  07:30   0:00.00 grep mysql

Proceder con la correcta instalación y despliegue de la base de datos. Como es la primera instalación, se establece la contraseña raíz de la base de datos y responder las preguntas con los valores predeterminados.


 mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

Set root password? [Y/n] y

New password:

Re-enter new password:

Password updated successfully!

Reloading privilege tables..

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Instalar PHP Scripting Language


 pkg install php80

Configurar PHP


 cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

Instalar módulos o dependencias de PHP para que Wordpress funcione correctamente


 pkg install mod_php80 php80-bz2 php80-ctype php80-curl php80-dom php80-exif \
 php80-extensions php80-fileinfo php80-filter php80-gd  php80-iconv php80-intl \
 php80-mbstring php80-mysqli php80-opcache php80-pdo php80-pdo_mysql php80-pdo_sqlite \
 php80-pear php80-pear-Services_JSON php80-pecl-mcrypt php80-phar php80-posix \
 php80-session php80-simplexml php80-sqlite3 php80-tokenizer php80-xmlphp80-xmlreader \
 php80-xmlwriter php80-zip php80-zlib

Puede listar los módulos instalados con el comando


 php -m

La instalación de mod_php80 contiene un mensaje para usar el módulo de forma correcta, editando el archivo de configuración principal de Apache.


 cd /usr/local/etc/apache24

Editar /usr/local/etc/apache24/httpd.conf cerca de la línea 285 añadir index.php


 vim /usr/local/etc/apache24/httpd.conf

# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
284 <IfModule dir_module>
285     DirectoryIndex index.html
286 </IfModule>

Quedaría como se ve a continuación


<IfModule dir_module>
        DirectoryIndex index.php index.html
</IfModule>

Agregar las líneas de configuración que le permiten a Apache comunicarse con PHP


cd /usr/local/etc/apache24/modules.d/
touch 001_mod-php.conf
vim 001_mod-php.conf

<FilesMatch "\.php$">

SetHandler application/x-httpd-php

</FilesMatch>

<FilesMatch "\.phps$">

SetHandler application/x-httpd-php-source

</FilesMatch>

Listar el directorio


root@www:/usr/local/etc/apache24/modules.d # ls
001_mod-php.conf        README_modules.d

Comprobar errores de sintaxis en el archivo de configuración de Apache


 apachectl configtest
...
Syntax OK

Reiniciar Aapache


 apachectl graceful
...
Performing a graceful restart

Cambiar AllowOverride none por AllowOverride All httpd.conf, cerca de la línea número 272


# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   AllowOverride FileInfo AuthConfig Limit
#
#AllowOverride None
     AllowOverride All

Habilitar modulo rewrite


cat /usr/local/etc/apache24/httpd.conf | nl | grep rewrite
 177 #LoadModule rewrite_module libexec/apache24/mod_rewrite.so

LoadModule rewrite_module libexec/apache24/mod_rewrite.so

LoadModule alias_module libexec/apache24/mod_alias.so

LoadModule rewrite_module libexec/apache24/mod_rewrite.so

LoadModule php_module       libexec/apache24/libphp.so

Activar módulo PHP-FPM, para que PHP pueda comunicarse con el servidor Apache


 sysrc php_fpm_enable=YES
 php_fpm_enable:  -> YES

 service php-fpm start
Performing sanity check on php-fpm configuration:
[23-Jan-2023 09:20:27] NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful

Realizamos la comprobación


 ps aux | grep php
root  53873  0.0  0.2 193764 28628  -  SsJ  10:17   0:00.06 php-fpm: master proces
www   54234  0.0  0.2 193764 28640  -  IJ   10:17   0:00.00 php-fpm: pool www (php
www   54393  0.0  0.2 193764 28640  -  IJ   10:17   0:00.00 php-fpm: pool www (php
root  30063  0.0  0.0  12840  2312  1  S+J  10:47   0:00.00 grep php

Revisar archivo de configuración de Apache


 apachectl configtest
Performing sanity check on apache24 configuration:
Syntax OK

Creamos el archivo info.php para asegurarnos que todo funciona como debería


vim /usr/local/www/apache24/data/info.php
<?php phpinfo(); ?>

Salir del jail www


root@www: # exit
logout

Desde Firefox


http://10.10.10.2/info.php


 FreeBSD es genial!.

Gestión de Jails con Bastille FreeBSD

Jails con Bastille FreeBSD

https://docs.freebsd.org/en/books/handbook/jails/
https://bastille.readthedocs.io/en/latest/

1.- Creación de la Jail www con Bastille

2.- Instalar Apache MySQL PHP

3.- Instalar Wordpress. Activar rdr en Firewall PF

Información sobre el sistema


% uname -mrs
FreeBSD 13.1-RELEASE-p6 amd64

La virtualización es algo así como un entorno cliente-servidor. El hardware y su instancia central del sistema operativo es el host, mientras que los clientes son instancias virtualizadas del sistema operativo. Una jail contiene una zona de usuario completa del sistema operativo que se ejecuta sobre un sistema FreeBSD existente. La jail no tiene su propio kernel, en cambio, se ejecuta en una porción restringida del kernel del host.

Un sistema enjaulado sólo puede acceder a una parte limitada del sistema de archivos y no puede ver procesos fuera de la jaula. A cada jaula se le asigna una dirección IP dedicada, y la jaula sólo puede ver el tráfico a esa IP en particular. Cada jaula necesita un directorio raíz dedicado

La cuenta root en una jaula controla completamente esa jaula pero no tiene acceso a nada más allá de la jaula, está confinado. El usuario puede instalar el software que desee sin interferir con el sistema anfitrión ni con otras jaulas.



Bastille es un gestor de jails escrito en Bourne Shell.


Soporta ZFS
VNET
Automatización de jails por medio de templates
Control de recursos (rctl)
Firewall dinámico - redirección dinámica de puertos, etc.
La red interna de la jail hará nat a través de PF

El comando ping está deshabilitado dentro de los contenedores, porque el acceso sin procesar al socket es un agujero de seguridad. En su lugar, se puede instalar y probar con wget.


 pkg install bastille

Habilitar las opciones para utilizar ZFS en bastille


 sysrc -f /usr/local/etc/bastille/bastille.conf bastille_zfs_enable=YES
 sysrc -f /usr/local/etc/bastille/bastille.conf bastille_zfs_zpool=zroot

Activar bastille


 sysrc bastille_enable=YES

Iniciar bastille


service bastille start

Descargar los ficheros base de la última versión de FreeBSD que vamos a utilizar y aplicar parches de seguridad.


# bastille bootstrap 13.1-RELEASE update

Bucle invertido bastille0

loopback (bastille0)

Crear una interfaz loopback clonada (bastille0) y asignar direcciones privadas (rfc1918) a todos las jails en esa interfaz. Se puede usar cualquier dirección dentro de ese rango porque hemos creado nuestra propia red privada.

Desde el sistema host el cortafuegos (PF), permite y deniega tráfico. Con esta configuración los contenedores se mantienen fuera de la red, hasta que se permita el acceso.

El NAT del cortafuegos del sistema saca el tráfico de los contenedores y puede redirigir selectivamente el tráfico a los contenedores en función de los puertos de conexión (es decir, 80, 443, etc.)

Crear la interfaz loopback


 sysrc cloned_interfaces+=lo1
 sysrc ifconfig_lo1_name="bastille0"

Aplicar la configuración


 service netif cloneup

PF es una herramienta de manipulacion TCP/IP

Permitir conexiones SSH


$ cat /etc/pf.conf
#
ext_if="em0"

set skip on lo
set block-policy return
scrub in on $ext_if all fragment reassemble

table <jails> persist
nat on $ext_if from <jails> to any -> ($ext_if:0)
rdr-anchor "rdr/*"

block in all
pass out quick keep state
antispoof for $ext_if inet

pass in inet proto tcp from any to any port ssh flags S/SA keep state

Habilitar PF


# sysrc pf_enable=YES

Iniciar PF


 service pf start

Consultar las reglas de PF

pfctl -sr

scrub in on em0 all fragment reassemble
block return in all
pass out quick all flags S/SA keep state
block drop in on ! em0 inet from 192.168.88.0/24 to any
block drop in inet from 192.168.88.51 to any
pass in inet proto tcp from any to any port = ssh flags S/SA keep state

Crear la jail www y asignarle la dirección IP 10.10.10.2


bastille create www 13.1-RELEASE 10.10.10.2
Valid: (10.10.10.2).
...
Creating a thinjail...

Listar las jails


solaris: # bastille list
 JID             IP Address      Hostname       Path
 www             10.10.10.2      www            /usr/local/bastille/jails/www/root

Entrar en la jail www para ver su dirección IP


 bastille console www
[www]:
root@www:~ #
root@www:~ # uname -mrs
FreeBSD 13.1-RELEASE-p6 amd64

Ejecutar ifconfig



Crear un usuario no privilegiado para Habilitar conexiones SSH desde el host

Entrar en la jail


 bastille console www
 root@www:~ # adduser
 ...
SSH Secure Shell

Salir de la jail


root@www:~ # exit
logout

Habilitar e iniciar el servicio SSH en la jail


 bastille sysrc www sshd_enable=YES
 bastille service www sshd start

Establecer el Port 23 y la ListenAddress 10.10.10.2 en el archivo de configuración /etc/ssh/sshd_config


Port 23
ListenAddress 10.10.10.2

Reiniciar el servicio


 service sshd restart

Se puede saber si el socket está a la escucha ejecutando

bastille cmd www sockstat -4


[www]:
USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS
root     sshd       55610 3  tcp4   10.10.10.2:23         *:*
[www]: 0

También podemos entrar en la jail y lanzar el comando nc localhost 23


 bastille console www
root@www:~ # nc localhost 23 SSH-2.0-OpenSSH_8.8 FreeBSD-20211221

SSH le permite generar una huella digital de clave, que es una representación mucho más corta de una clave. No puedes encriptar el tráfico o negociar con la huella dactilar. Para generar una huella de clave pública, introduzca el comando ssh-keygen -lf keyfile.pub.


root@www:~ # ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub

Salir de la jail


root@www:~ # exit
logout

En el host agregar al archivo .ssh/config los datos de conexión


carlos@solaris:~ cat .ssh/config
Host www
    HostName 10.10.10.2
    User carlos
    Port 23
    AddressFamily inet
    BindInterface em0
    IdentityFile ~/.ssh/id_rsa

    CASignatureAlgorithms ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,rsa-sha2-512,rsa-sha2-256

    Ciphers  chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com

    CheckHostIP yes

Entrar a la jail www a través de SSH


carlos@solaris:~/.ssh % ssh www
The authenticity of host '[10.10.10.2]:23 ([10.10.10.2]:23)' can't be established.
ED25519 key fingerprint is SHA256:KEnjnUTz7FPyq2c+ZcEzKvu+s5diszqxff+DmFJ+0sI.
No matching host key fingerprint found in DNS.
This host key is known by the following other names/addresses:
    ~/.ssh/known_hosts:45: www
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[10.10.10.2]:23' (ED25519) to the list of known hosts.

Dentro de la jail www


carlos@www:~ $

Cambiar al usuario root


carlos@www:~ $ su
root@www: #

Instalar wget para comprobar que tenemos acceso a Internet


 pkg install wget
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y

En este punto tenemos la jail instalada y con conexion a Internet.

Detener la jail


bastille stop www

Iniciar la jail


bastille start www

[www]:
www: created

Archivos de configuracion de Bastille jails


ls /usr/local/bastille/jails/www
fstab     jail.conf root

Archivo jails.conf de bastille


# cat /usr/local/bastille/jails.conf
www {
  devfs_ruleset = 4;
  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;

  interface = bastille0;
  ip4.addr = 10.10.10.2;
  ip6 = disable;
}
FreeBSD es genial!.

sábado, 22 de octubre de 2022

FreeBSD 13.1 Como Sistema Operativo de Escritorio

Fuente

https://www.daemonology.net/blog/2020-05-22-my-new-FreeBSD-laptop-Dell-7390.html


Dell Latitude 7390 Intel i5 8th Gen
CPU: Intel(R) Core(TM) i5-8350U CPU @ 1.70GHz (L3 cache 6M)
FreeBSD/SMP: Multiprocessor System Detected: 8 CPUs
Memoria 16 GB RAM
Disco 500 GB Pcie M.2 Nvme
Una pantalla 13.3" 1920x1080 (non-touch)
Intel(R) Wireless WiFi based driver for FreeBSD
iwm0: Intel(R) Dual Band Wireless AC 8265
Una Bateria 60 W-hour

Instalación

Enlace de descargas de FreeBSD

Elija la arquitectura correcta para su sistema, por lo regular, amd64

Descargar una imagen completa para grabar en una memoria USB

Grabar la imagen utilizando disk destroyer (dd)


$ xunz FreeBSD-13.1-RELEASE-amd64-memestick.img.xz
$ sudo dd if=./FreeBSD-13.1-RELEASE-amd64-memestick.img of=/dev/sdx status=progress
$ sudo pkg install eject
$ rehash
$ sudo eject /dev/sdx

Antes de instalar


- Deshabilitar arranque seguro desde la BIOS
- Habilitar el arranque USB
- Seleccione el dispositivo de arranque en el momento del inicio

Iniciar instalación

FreeBSD tiene un instalador controlado por menús que guía al usuario a través de varios pasos:


1. establecer mapa del teclado
2. establecer nombre de host
3. seleccionar conjuntos

Hay muchos conjuntos para elegir. Los nuevos usuarios probablemente quieran instalarlos todos. Por lo general, solo instalo el lib32 establecer y agregar el resto más tarde.

Particionado

bsdinstall facilita la partición de sus unidades. La opción Auto (ZFS) es probablemente lo que desea.

En el Auto (ZFS) menú, para una instalación de un solo disco duro. Seleccione su disco duro.

Si quiere el cifrado de disco completo, seleccione el Encrypt Disks opción.

También aumente el tamaño de intercambio swap. El tamaño del intercambio igual a la RAM física (16 GB en este caso).

Si seleccionó Encrypt Disks, también debe seleccionar Encrypt Swap

Cuando haya terminado, continúe con la instalación. Recibirá un mensaje de confirmación que le preguntará si desea destruir el disco que seleccionó. Esta es tu última oportunidad de volver atrás.

Si seleccionó Encrypt Disks se le presentará una solicitud de contraseña. Esta es la contraseña de cifrado del disco, no una contraseña de usuario.

Espere a que se instalen los conjuntos

Configurar usuario raíz

Después de instalar los conjuntos, establecerá una contraseña de root.

Configuración de red

Si su tarjeta inalámbrica es compatible, todas las partes difíciles ya están listas. Si su tarjeta inalámbrica no es compatible, conecte un cable ethernet para compilar los controladores en el kernel.

Seleccione su tarjeta (em0 ethernet, las tarjetas wifi llevan el nombre de sus controladores)

Si elige wifi, el instalador buscará redes y le dará un menú para seleccionar una. Si la red está encriptada, se le presentará una solicitud de contraseña.

Configuración de fecha y hora

Configuración de servicio

Se le presentará un menú que habilita/deshabilita servicios al iniciar el sistema. Seguramente no desea local_unbound.

Configuración de seguridad

El siguiente menú habilita/deshabilita las funciones de seguridad seleccione
disable_sendmail y clear_tmp

Agregar usuarios

Simplemente agregue su usuario y agregar lo al grupo wheel si planea usar sudo.

Configuré mi shell en tcsh, cambiaré a zsh más adelante.

Configuración final

Cuando haya terminado, aplique la configuración y salga.

Reiniciar


# reboot

Configuración manual

Antes de reiniciar el sistema y salir del instalador, se le brinda una última oportunidad para realizar cualquier configuración manual pero rara vez es necesario para el usuario de escritorio.

Inicie sesión como root y actualice el sistema:


# freebsd-update fetch
# freebsd-update install
# reboot

Apagar el pitido de la consola


# echo kern.vt.enable_bell=0 >> /etc/sysctl.conf

Instalar paquetes


# pkg bootstrap
# pkg update
# pkg install vim

# pkg install sudo
# visudo

En esta línea quitar la almohadilla (#) para permitir al grupo wheel realizar acciones como root.


# %wheel ALL=(ALL:ALL) ALL

Interfaz gráfica de usuario

Esto varía dependiendo de su GPU.


# pkg install drm-kmod

Después de instalar este paquete, verá un mensaje sobre cómo habilitar el controlador para su hardware específico:


For amdgpu: kld_list="amdgpu"
For Intel: kld_list="i915kms"
For radeonkms: kld_list="radeonkms"

Para habilitar uno de estos, deberá agregar una línea a su /etc/rc.conf. Cuanto antes coloque esta línea en el archivo, antes se cargarán los kmods.

Cargar el controlador de video Intel:


sysrc kld_list=i915kms

Para cargar el kmod ahora, ejecute


kldload i915kms

También deberá agregar su usuario no root al grupo video


# pw groupmod video -m carlos


Instalar Xorg


# pkg install xorg

Entorno de escritorio


# sysrc dbus_enable="YES" 
# service dbus start
# pkg install -y plasma5-plasma
# pkg install -y konsole
# pkg install -y xf86-video-intel
# pkg install -y sddm
# pw groupmod video -m carlos
# pkg install -y plasma5-sddm-kcm
# pkg install -y sddm-freebsd-black-theme
# printf 'proc\t/proc\tprocfs\trw\t0\t0\n' >> /etc/fstab
# printf 'fdesc\t/dev/fd\tfdescfs\trw\t0\t0\n' >> /etc/fstab
# sysrc sddm_enable="YES"

Xorg, que use dispositivos expuestos a través de libinput (es decir, el touchpad)


# cp /usr/local/share/X11/xorg.conf.d/40-libinput.conf \
    /usr/local/etc/X11/xorg.conf.d/

Sonido

Para que el sonido vaya a los altavoces de forma predeterminada, y cambie a la toma de auriculares y silenciar los altavoces automáticamente si conecto los auriculares.


# echo 'hint.hdaa.0.nid33.config="as=1 seq=15"' >> /boot/loader.conf

Un error en el códec HDMI genera advertencias molestas una solución alternativa que permite silenciar las advertencias:


# echo 'compat.linuxkpi.i915_disable_power_well="0"' >> /boot/loader.conf

Teclas control volumen


Fn+F1 silenciar, Fn+F2 bajar volumen, Fn+F3 subir volumen

Que el cargador de arranque sólo espere 2 segundos en caso de que quiera cambiar la forma en que arranque, y que el kernel de FreeBSD no espere a los dispositivos USB antes de montar el sistema de archivos raíz (sé que mi sistema de archivos raíz está en el disco Nvme):


 # echo 'autoboot_delay="2"' >> /boot/loader.conf
 # echo 'hw.usb.no_boot_wait="1"' >> /boot/loader.conf

# ntpdate y ntp /etc/rc.conf


ntpd_enable="YES"
ntpd_config="/etc/ntp.conf"
netwait_enable="YES"

Tomar el control del brillo de la pantalla con las teclas Fn+Up, Fn+Down


# pkg install intel-backlight
# echo 'acpi_video_load="YES"' >> /boot/loader.conf
# cp /usr/local/share/examples/intel-backlight/acpi-video-intel-backlight.conf \
    /usr/local/etc/devd/

Reiniciar


# reboot

Otros paquetes


# sudo pkg install coreutils emacs gcc gmake firefox libreoffice thunderbird \
chromium automake libtool vlc obs-studio htop

Si instala un entorno de escritorio grande, la mayoría de las aplicaciones también se incorporan. Si no, siempre puede usar xargs para obtener cientos de gigabytes de programas:

Listar los paquetes que coincidan con kde


$ sudo pkg search kde | cut -d ' ' -f 1

Instalar los paquetes que coincidan con kde


$ sudo pkg search kde | cut -d ' ' -f 1 | xargs sudo pkg install -y

A veces, los escritorios se comportan de forma inesperada en FreeBSD (es decir, los usuarios no pueden administrar la configuración de energía, reiniciar el sistema, etc.). Asegúrese de que su usuario de inicio de sesión esté en el grupo de wheel y la mayoría de los problemas se resolverán. Para los usuarios que no desea en el grupo de wheel, deberá escribir algunas reglas de polkit.

Además, los escritorios grandes generalmente se compilan sin los componentes gráficos para modificar las conexiones de red.

Shells

FreeBSD usa tcsh(1) como shell predeterminado e incluye sh(1) para compatibilidad similar a Bourne

Instalar zsh con Oh-my-zsh


$ sh -c "$(curl -fsSL \
https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"


Redes


# /etc/rc.conf
ifconfig_em0="ether e4:b9:7a:6b:96:cd"
wlans_iwm0="wlan0"
cloned_interfaces="lagg0"
ifconfig_lagg0="laggproto failover laggport em0 laggport wlan0 SYNCDHCP"
create_args_wlan0="country ES regdomain ETSI"
ifconfig_wlan0="WPA"
wpa_supplicant_program="/usr/sbin/wpa_supplicant"
defaultroute_delay="0"
background_dhclient="YES"

Las interfaces de red se configuran clásicamente usando ifconfig(8). Si desea que una interfaz de red persista durante los reinicios, agregue la información en /etc/rc.conf.

WiFi se gestiona con wpa_supplicant


$ dmesg|grep -i wireless
Intel(R) Wireless WiFi based driver for FreeBSD
iwm0: <Intel(R) Dual Band Wireless AC 8265> mem 0xef100000-0xef101fff at \
device 0.0 on pci2

Archivo /etc/wpa_supplicant FreeBSD

Encriptar password de la contraseña wifi


$ wpa_passphrase MikroTik-39F9C1 contraseñawifi
psk=c35edacaf6c649c6df522451c801f98e918bc376d335d0dedd686770dad7f6c0

Para utilizar la versión de puertos de WPA Supplicant en lugar de la base, agregue


wpa_supplicant_program="/usr/sbin/wpa_supplicant" a /etc/rc.conf

$ cat /etc/rc.conf|grep wpa_supplicant | grep wpa_supplicant
wpa_supplicant_program="/usr/sbin/wpa_supplicant"

Aspecto final del archivo wpa_supplicant


$ cat /etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant

network={
 ssid="MikroTik-39F9C1"
 scan_ssid=1
 psk=c35edacaf6c649c6df522451c801f98e918bc376d335d0dedd686770dad7f6c0
}

Gestión de paquetes

Hay dos formas principales de administrar software: paquetes binarios y puertos. No los mezcle si no sabe lo que está haciendo, puede causar problemas.

Para ser breve: los puertos son como Gentoo. Pasas mucho tiempo viendo la salida del compilador. Los siguientes programas ayudan: synth, portmaster, poudriere para ser detallado: Guía rápida sobre el uso del sistema de administración de paquetes binarios:


pkg update
pkg upgrade
pkg search foobar
pkg install foobar
pkg remove foobar
pkg autoremove

Proceso General de Actualización


pkg update 
pkg upgrade
freebsd-update upgrade -r 13.1-RELEASE
freebsd-update fetch
reboot
freebsd-update install
pkg update 
pkg upgrade
freebsd-update install
reboot

Sistema de archivos

La jerarquía de FreeBSD es ligeramente diferente a la de un sistema Linux. Consulte man hier(7) para obtener más información.
La mayor diferencia es que FreeBSD es un sistema organizado lógicamente. En FreeBSD, el sistema está más organizado. Por ejemplo:
/bin contiene todo lo necesario para iniciar el sistema y /sbin contiene todo lo necesario para la administración fundamental.

/usr/bin contiene casi todo lo demás

/usr/local contiene todo lo instalado por el sistema de administración de paquetes.

Los programas instalados por el usuario se configuran en /usr/local/etc. Puede ser confuso al principio, pero lo dominarás.

Esta separación lógica puede causar confusión al compilar software desde la fuente en FreeBSD, pero no es demasiado difícil de resolver si ya conoce las opciones del enlazador y la modificación del archivo MAKE.

Montar unidades fat32

Crear directorio de montaje


# mkdir /media/usbFAT32

Montar usb fat32 como usuario carlos


% mount -t msdosfs /dev/da0p2 /media/usbFAT32

Montar un dispositivo conectado via usb fs linux ext4

Instalar paquetes


# pkg install fusefs-ext2 fusefs-lkl

Verificar nombre del dispostivo


% gpart show da0
=>     2048  976771087  da0  GPT  (466G)
       2048  362371072    1  linux-data  (173G)
  362373120   40960000    2  ms-basic-data  (20G)
  403333120  573440015       - free -  (273G)

Montar el dispositivo sistema de ficheros ext4 /dev/da0p1


% lklfuse -o type=ext4,rw /dev/da0p1 /media/linuxEXT4/

Automount montar sistemas de ficheros automáticamente.

Cuando se llama sin opciones, el comando automount analiza el auto_master(5) archivo de configuración y cualquier mapa directo al que haga referencia, y monta o desmonta los sistemas de archivos autofs(5) para que coincidan. Estas opciones están disponible


      -D Definir una variable. Solo es útil con -L.

      -L No montar ni desmontar nada.

      -c Vaciar cachés, descartando información posiblemente obsoleta obtenida 
         de mapas y servicios de directorio.

      -f Forzar desmontar, para ser usado con -u.

      -o Especifique las opciones de montaje que se utilizarán junto con las 
         especificadas en los mapas. Solo es útil con -L.

      -u Intenta desmontar los sistemas de archivos montados por automountd.

      -At Para desmontar todos los montajes de autofs use unmount -At

      -v Aumentar la verbosidad.

Instalar automount


# pkg install automount
# cp /usr/local/etc/automount.conf.sample /usr/local/etc/automount.conf

Esta archivo contiene una linea que permite al usuario montar particiones que el sistema reconozca

El demonio de la cámara web ya está instalado (kde5 lo incorpora como una dependencia), para habilitado y que el usuario carlos pueda acceder a él:


# echo 'cuse_load="YES"' >> /boot/loader.conf
# sysrc webcamd_enable="YES"
# pw groupmod webcamd -m carlos

$ pkg info


FreeBSD es genial!.