Cómo configurar el cortafuegos pf y Fail2ban en FreeBSD 12.0

PF (Filtro de Paquetes) es un filtro de paquetes con estado con licencia BSD. Fue desarrollado para OpenBSD y ha sido portado a muchos sistemas operativos BSD, incluido FreeBSD. El cortafuegos pf filtra el tráfico TCP/IP, puede realizar NAT (Traducción de Direcciones de Red) y proporciona control de ancho de banda y priorización de paquetes.

Este tutorial te mostrará cómo configurar el cortafuegos PF en un sistema FreeBSD 12.0. Habilitaremos el cortafuegos de FP, crearemos la configuración básica y, a continuación, instalaremos y configuraremos Fail2ban con el cortafuegos de FP para prohibir direcciones IP.

Requisitos previos

Para esta guía, utilizaremos la última versión de FreeBSD 12.0 con 1GB de RAM y 2 CPUs. Y asegúrate de que tienes privilegios de root en el sistema.

Qué haremos

  • Activar el Cortafuegos pf
  • Configuración básica del Cortafuegos pf
  • Instalar y configurar Fail2ban
  • Configurar Fail2ban y pf Firewall

Paso 1 – Habilitar el cortafuegos pf

Por defecto, el sistema FreeBSD está integrado con el cortafuegos pf. Está integrado en el kernel de FreeBSD, pero el servicio aún no se ejecuta en el servidor.

El cortafuegos pf puede habilitarse añadiendo la configuración al archivo ‘/etc/rc.conf’. Ejecuta el siguiente comando para habilitar el cortafuegos pf.

echo 'pf_enable="YES"' >> /etc/rc.conf
echo 'pf_rules="/usr/local/etc/pf.conf"' >> /etc/rc.conf

A continuación, habilita el registro pf para el registro del cortafuegos pf.

echo 'pflog_enable="YES"' >> /etc/rc.conf
echo 'pflog_logfile="/var/log/pflog"' >> /etc/rc.conf

Ahora se ha habilitado el cortafuegos pf en FreeBSD 12.0, pero no podemos iniciarlo inmediatamente. Porque tenemos que añadir nuestros servicios a las reglas pf.

Paso 2 – Configuración básica del cortafuegos pf

En este paso, vamos a hacer una configuración básica del cortafuegos pf. Vamos a crear la configuración del cortafuegos pf, definir los servicios y permitir el acceso a nuestros servicios.

Ahora ve al directorio ‘/usr/local/etc’ y crea una nueva configuración llamada ‘pf.conf’ utilizando el editor vim.

cd /usr/local/etc/
vim pf.conf

Define ahora la interfaz externa y la dirección IP.

# Define External Interface and IP Address
ext_if="vtnet0"
ext_ip="SERVER-IP-ADDRESS"

Define los servicios TCP y UDP a los que quieres permitir el acceso.

# Define TCP and UDP Services
ext_tcp_ports="{ ssh, smtp, smtps, imaps, http, https, domain }"
ext_udp_ports="{ domain, ntp }"

Confía siempre en la interfaz local y la dirección IP.

# Skip the localhost
set skip on lo0

Configura la interfaz de registro.

# Log interface
set loginterface $ext_if

Configura la política por defecto para bloquear todas las conexiones al servidor y pasar todas las conexiones salientes del servidor.

# Default Policy
block in all
pass out all keep state

Ahora permite el protocolo ICMP para hacer ping al servidor.

# Allow Ping
pass inet proto icmp icmp-type echoreq

Permite nuestros servicios en los puertos TCP y UDP definidos en la parte superior.

# Allow Services and Log
pass in proto tcp from any to any port $ext_tcp_ports
pass in proto udp from any to any port $ext_udp_ports

Registra todos los accesos de los protocolos SSH y HTTP en el pflog.

pass log quick proto tcp from any to any port { ssh,http }

Guarda y cierra.

A continuación se muestra la configuración básica completada.

# Define External Interface and IP Address
ext_if="vtnet0"
ext_ip="139.180.220.96"

# Define TCP and UDP Services
ext_tcp_ports="{ ssh, smtp, smtps, imaps, http, https, domain }"
ext_udp_ports="{ domain, ntp }"

# Skip the localhost
set skip on lo0

# Log interface
set loginterface $ext_if

# Default Policy
block in all
pass out all keep state

# Allow Ping
pass inet proto icmp icmp-type echoreq

# Allow Services
pass in proto tcp from any to any port $ext_tcp_ports
pass in proto tcp from any to any port $ext_udp_ports

# Log access for ssh and http
pass log quick proto tcp from any to any port { ssh,http }

Ahora comprueba la regla del cortafuegos pf antes de iniciar el servicio y asegúrate de que no hay ningún error.

service pf check

Ahora inicia los servicios pflog y pf utilizando el siguiente comando.

service pflog start
service pf start

El servicio pf se ha iniciado, y tu conexión SSH con el servidor se interrumpirá. Puedes volver a conectarte al servidor con SSH de nuevo con el puerto 22 que ha abierto el cortafuegos pf.

Además, puedes comprobar la lista de reglas pf utilizando la línea de comandos ‘pfctl’ como se indica a continuación.

pfctl -s rules

Y obtendrás el resultado que se indica a continuación.

Paso 3 – Instalar y Configurar Fail2ban

En este paso, vamos a instalar fail2ban, habilitar el bloqueo para el servicio SSH y, a continuación, configurar la acción de prohibición de fail2ban con el cortafuegos pf.

Instala fail2ban utilizando el comando pkg que se indica a continuación.

pkg install py27-fail2ban py27-pyinotify

Una vez completada la instalación, ve al directorio ‘/usr/local/etc/fail2ban’ y crea una nueva jaula para el servicio SSH en el directorio ‘jail.d’.

cd /usr/local/etc/fail2ban
vim jail.d/sshd-pf.conf

Pega la configuración de abajo.

[ssh]
enabled  = true
filter   = sshd
action   = pf

logpath  = /var/log/auth.log
findtime  = 600
maxretry = 3
bantime  = 3600

Guarda y cierra.

A continuación, haz una copia de seguridad de la configuración predeterminada de la acción pf en el directorio ‘action.d’ y crea otra.

mv action.d/pf.conf action.d/pf.conf.orig
vim action.d/pf.conf

Pega la siguiente configuración.

[Definition]
actionstart = 
actionstop = 
actioncheck = 
actionban = /sbin/pfctl -t <tablename> -T add <ip>/32
actionunban = /sbin/pfctl -t <tablename> -T delete <ip>/32

[Init]
tablename = fail2ban

Guarda y cierra.

Ahora añade el servicio fail2ban al arranque del sistema.

sysrc fail2ban_enable=yes

Inicia el servicio y comprueba su estado.

service fail2ban start
service fail2ban status

El servicio fail2ban está funcionando en FreeBSD 12.0 con el cortafuegos pf como acción de prohibición.

Paso 4 – Configurar Fail2ban y el cortafuegos pf

Para habilitar la acción de prohibición para fail2ban con el cortafuegos pf, necesitamos añadir la configuración adicional de bloqueo a la configuración pf ‘pf.conf’.

Ve al directorio ‘/usr/local/etc’ y edita el archivo ‘pf.conf’.

cd /usr/local/etc/
vim pf.onf

Añade la configuración que aparece a continuación al final de la línea.

# Fail2Ban
table <fail2ban> persist
block quick proto tcp from <fail2ban> to $ext_if port ssh

Guárdalo y ciérralo.

Ahora vuelve a cargar la configuración del cortafuegos

service pf reload

Como resultado, se ha completado la configuración del cortafuegos pf y de fail2ban. Y todas las direcciones IP capturadas por el fail2ban serán baneadas con el cortafuegos pf.

Paso 5 – Adicional

A continuación se muestran algunos comandos que puedes utilizar para gestionar el cortafuegos pf.

Comprobar el Estado del cortafuegos pf

service pf status

Mostrar Reglas del cortafuegos pf

pfctl -s rules
pfctl -v -s rules

Mostrar estado Conexión a la Interfaz pf

pfctl -s state

Mostrar la dirección IP bloqueada en la tabla ‘fail2ban

pfctl -t fail2ban -T show

Mostrar el archivo pflog usando tcpdump

tcpdump -n -e -ttt -r /var/log/pflog

Referencia

https://www.openbsd.org/faq/pf/index.html

https://www.freebsd.org/doc/handbook/firewalls-pf.html

a

a

También te podría gustar...