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