Packet Filter en FreeBSD

Desde hace algún tiempo (Julio del 2003) el software de filtrado de paquetes más eficiente de todos los que conozco (olé la imparcialidad) ha sido portado a FreeBSD. Activarlo, dependiendo de la versión instalada, puede resultar no tan obvio como se desea.

Configurando kernel

En FreeBSD 6.2 es necesaria una recompilación de kernel para activar pf, con lo que debemos configurarlo primero. Copiamos el kernel activo (podemos mirar cual es con un uname -a) en el nuevo:
# cd /usr/src/sys/i368/conf/
# cp GENERIC MYKERNEL
Y editamos MYKERNEL con nuestro editor favorito, agregando las siguientes opciones:
# PF
device pf
device pflog
device pfsync

# ALTQ
options         ALTQ
options         ALTQ_CBQ        # Class Bases Queuing (CBQ)
options         ALTQ_RED        # Random Early Detection (RED)
options         ALTQ_RIO        # RED In/Out
options         ALTQ_HFSC       # Hierarchical Packet Scheduler (HFSC)
options         ALTQ_PRIQ       # Priority Queuing (PRIQ)
options         ALTQ_NOPCC      # Required for SMP build
Aprovechamos para habilitar también ALTQ (gestor de colas) por si algún día hiciera falta.

Compilando kernel

Una vez configurado toca compilar, dependiendo del procesador utilizado los tiempos cambiarán notablemente. Si tienes una máquina antigua no te desesperes:
# config MYKERNEL
# cd ../compile/MYKERNEL
# time make depend
 real    0m39.811s
 user    0m27.356s
 sys     0m6.668s

# time make
 real    11m45.862s
 user    10m26.758s
 sys     0m43.905s

# time make install
 real    0m29.533s
 user    0m5.498s
 sys     0m1.832s

Activando pf

El siguiente paso antes de reiniciar la máquina con el nuevo kernel es la activación de pf al inicio, para ello como siempre, tocamos rc.conf:
pf_enable="YES"                 # Enable PF (load module if required)
pf_rules="/etc/pf.conf"         # rules definition file for pf
pf_flags=""                     # additional flags for pfctl startup
pflog_enable="YES"              # start pflogd(8)
pflog_logfile="/var/log/pflog"  # where pflogd should store the logfile
pflog_flags=""                  # additional flags for pflogd startup

gateway_enable="YES"            # if NAT or forwarding is active
Una vez reiniciado el equipo tendremos funcionando el sistema de filtrado de paquetes, solo queda configurar las reglas en pf.conf(5)y familiarizarse con pfctl(8).
sysadmin freebsd

About the author

Óscar
has doubledaddy super powers, father of Hugo and Nico, husband of Marta, *nix user, Djangonaut and open source passionate.