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.

Referencia

https://www.freebsd.org/doc/

También te podría gustar...