Cómo configurar el cortafuegos IPFW en FreeBSD
El IPFIREWALL (IPFW) es una aplicación cortafuegos patrocinada por FreeBSD. Es un cortafuegos con estado escrito para el sistema FreeBSD y soporta tanto IPv4 como IPv6. El IPFW está incluido en la instalación básica de FreeBSD; sólo tienes que cargar el módulo a través del archivo ‘/etc/rc.conf’ para habilitarlo.
Este tutorial te mostrará cómo configurar el cortafuegos básico IPFW en FreeBSD 12.0. Primero configuraremos el cortafuegos con las reglas por defecto proporcionadas por FreeBSD y después con una regla personalizada.
Qué haremos
- Configuración básica IPFW
- Configurar IPFW con una regla personalizada
- Activar el registro
1. Configuración básica IPFW
En primer lugar, configuraremos el cortafuegos básico ipfw. Habilitaremos el ipfw con los tipos de cortafuegos por defecto proporcionados por FreeBSD.
A continuación se muestran los tipos de cortafuegos por defecto proporcionados por FreeBSD:
- abierto: pasa todo el tráfico.
- cliente: protege sólo esta máquina.
- simple: protege toda la red.
- cerrado: deshabilita completamente el tráfico IP excepto el de la interfaz loopback.
- estación de trabajo: protege sólo esta máquina utilizando reglas de estado.
- UNKNOWN: desactiva la carga de reglas del cortafuegos.
- filename: ruta completa del archivo que contiene el conjunto de reglas del cortafuegos.
Para esta sección, utilizaremos el tipo por defecto «estación de trabajo» y, a continuación, definiremos el puerto de servicios que se abrirá.
Para activar el cortafuegos ipfw, puedes añadir ‘firewall_enable=»YES»‘ al archivo ‘/etc/rc.conf’.
Edita el archivo ‘/etc/rc.conf’ utilizando el editor vim.
vim /etc/rc.conf
Habilita el cortafuegos ipfw.
# enable firewall firewall_enable="YES"
Define el tipo de cortafuegos por defecto que se utilizará.
# set the default rule and services firewall_type="workstation"
Define ahora los puertos que quieres abrir para tus servicios.
# services port firewall_myservices="22 80 443 67 10000" firewall_allowservices="any" firewall_logdeny="YES"
Activa el registro para el cortafuegos. Puedes utilizar el registro a través del archivo o el registro en la interfaz ‘ipfw0’.
# enable logging #firewall_logging="YES" firewall_logif="YES"
Guarda y cierra.
A continuación, inicia el servicio ipfw utilizando el siguiente comando de servicio.
service ipfw start
Y te desconectarás del servidor, ahora tienes que volver a iniciar sesión.
Después de iniciar sesión en el servidor, comprueba las reglas del cortafuegos utilizando el siguiente comando.
ipfw list
Y obtendrás el resultado que se indica a continuación.
Como resultado, el cortafuegos ipfw del sistema FreeBSD 12.0 se ha activado con el tipo por defecto «estación de trabajo». Y los puertos de servicios que se han definido están en la lista.
2. Configurar IPFW con reglas personalizadas
En este paso, vamos a configurar el cortafuegos ipfw con la configuración personalizada.
Edita el ‘/etc/rc.conf’ utilizando el editor vim.
vim /etc/rc.conf
Ahora activa el cortafuegos ipfw.
# enable firewall firewall_enable="YES"
Define el script del cortafuegos que quieras utilizar.
# custom rule script firewall_script="/usr/local/etc/ipfw.rules"
Habilita el registro para el cortafuegos en la interfaz ‘ipfw0’.
# enable logging firewall_logif="YES"
Guarda y cierra.
A continuación, tenemos que crear la configuración de reglas ipfw ‘/usr/local/etc/ipfw.rules’.
El archivo de configuración es un script bash que contiene la sintaxis de las reglas ipfw. Contiene el comando ipfw para añadir la regla, y la propia regla.
A continuación se muestra la sintaxis básica de las reglas del cortafuegos ipfw.
CMD RULE_NUMBER set SET_NUMBER ACTION log LOG_AMOUNT PROTO from SRC SRC_PORT to DST DST_PORT OPTIONS
Ahora, ve al directorio ‘/usr/local/etc/’ y crea el archivo ‘ipfw.rules’ utilizando el editor vim.
cd /usr/local/etc/ vim ipfw.rules
Define la primera regla del cortafuegos y define la variable de entorno para añadir la regla del cortafuegos y la interfaz de red externa.
#!/bin/sh # Flush out the list before we begin. ipfw -q -f flush
# Set rules command prefix
cmd=»ipfw -q add»
pif=»vtnet0″
Permite todo en la interfaz localhost ‘lo0’.
# Disable Restriction on localhost $cmd 0010 allow all from any to any via lo0
Permite la salida de internet a cualquiera, DHCP, y el ping ICMP desde internet.
# Allow Outgoing, DHCP, Ping $cmd 0011 allow all from any to any out keep-state $cmd 0012 allow log udp from any to any 67 out via $pif keep-state $cmd 0013 allow log icmp from any to me icmptype 0,8 in via $pif keep-state
Ahora comprueba el paquete con la tabla de estado dinámico.
# Allows the packet through if it matches an existing entry $cmd check-state
Permite el puerto de servicios básicos que quieras abrir.
# Allow Services FTP, SSH, MAIL, DNS, HTTP, HTTPS $cmd 110 allow tcp from any to any 21 in $cmd 120 allow log tcp from any to any 22 in $cmd 130 allow tcp from any to any 25 in $cmd 140 allow udp from any to any 53 in $cmd 150 allow tcp from any to any 80 in $cmd 160 allow tcp from any to any 443 in
Ahora deniega todo y registra todo.
# deny everything else and log it $cmd 001000 deny log ip from any to any in via $pif
Guarda y cierra.
Ahora inicia el servicio ipfw con el siguiente comando.
service ipfw start
Y te desconectarás del servidor.
Ahora vuelve a conectarte al servidor y comprueba las reglas ipfw.
ipfw list
Y se te mostrará el resultado como se indica a continuación.
Como resultado, se ha activado el cortafuegos ipfw con las reglas aduaneras definidas en la configuración ‘/usr/local/etc/ipfw.rules’.
3. Habilitar los Registros del Cortafuegos IPFW
El cortafuegos ipfw admite dos tipos de logs, el log de eventos y el pseudo log mediante la interfaz ‘ipfw0’. Y se puede habilitar a través del archivo ‘/etc/rc.conf’.
Para el registro de eventos normal, puedes utilizar la siguiente configuración.
https://www.howtoforge.com/images/how_to_setup_ipfw_firewall_on_freebsd_120/1.pngfirewall_logging="YES"
Y para el pseudo registro a través de la interfaz ‘ipfw0’, puedes utilizar la siguiente configuración.
firewall_logif="YES"
Después, necesitamos limitar el registro a través del parámetro del núcleo ‘/etc/sysctl.conf’.
Ejecuta el siguiente comando.
echo "net.inet.ip.fw.verbose_limit=5" >> /etc/sysctl.conf
Ahora reinicia el servidor.
sudo reboot
Y el registro del cortafuegos ipfw se habrá activado, y se registrarán todas las reglas que contengan la opción ‘log’.
Si estás utilizando el registro de eventos, puedes comprobar el registro en el archivo de registro ‘/var/log/security’.
tail -f /var/log/security
Y obtendrás el resultado que se muestra a continuación.
Y si estás utilizando la interfaz de pseudo-registro ‘ipfw0’, puedes comprobar los registros utilizando el siguiente comando tcpdump.
tcpdump -t -n -i ipfw0
Y obtendrás el resultado que se muestra a continuación.
Ahora la configuración básica del cortafuegos ipfw en FreeBSD 12.0 se ha completado con éxito.