Reglas de nftables para redes públicas

Reglas de nftables para redes públicas

Table of contents

Hace unos días me compré un portátil para poder trabajar en mis cosas en cualquier sitio, por eso de cambiar de aires de vez en cuando. Como esas cosas van a incluir Podman y el portátil va a tener pods ejecutándose de manera habitual, he pensado que sería buena idea recuperar un antiguo script de IPtables que usaba hace años durante mis días de estudiante. He aquí el script en cuestión:

#!/bin/bash

# Flushing all rules
iptables -F
iptables -X


# Setting the default filter policy
iptables -P INPUT DROP
iptables -P OUTUT ACCEPT
iptables -P FORWARD DROP

# Allow unlimited traffic on loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Como resumen muy rápido, con este script se eliminan todas las reglas que puedan estar definidas en el cortafuegos para, a continuación, definir el comportamiento por defecto en las chain INPUT, OUTPUT y FORWARD. Luego se permite el tráfico sin restricciones en la interfaz de loopback y finalmente se acepta todo el tráfico entrante de conexiones que hayamos iniciado nosotros.

nftables

Han pasado ya muchos años y hoy se recomienda el uso de nftables. Aunque no sea un script como tal, el siguiente fichero sería equivalente al de IPtables:

flush ruleset

table inet DEFAULT {
    chain INPUT {
        type filter hook input priority filter; policy drop;
        ct state established,related accept
        iif "lo" accept
    }
}

Para aplicarlo de manera manual se puede utilizar directamente el siguiente comando:

nft -f <fichero nftables>

De todas formas lo ideal es que se aplique de manera totalmente automática al arrancar el equipo, y la forma de conseguirlo dependerá de cómo esté configurado el servicio en nuestros sistemas. Para ello solo hay que verificar el contenido del fichero donde esté definido dicho servicio, habitualmente:

/usr/lib/systemd/system/nftables.service

Dentro del fichero, habrá una línea similar a la siguiente:

ExecStart=/usr/bin/nft -f /etc/nftables.conf

A partir de este punto solo es cuestión de modificar el fichero original de configuración o utilizar uno nuevo con nuestro contenido y, si no lo estaba ya, habilitar el servicio del cortafuegos.

Red Hat y SElinux

En Red Hat, nftables tiene varios scripts base en la carpeta /etc/nftables , y por defecto tienen asignado un perfil de seguridad determinado. Cuando creé mi script y lo guardé en la carpeta mencionada, el servicio fallaba al arrancar porque SElinux no le permitía leerlo. Para arreglar este detalle, tuve que igualar su perfil de seguridad al de los ficheros existentes con el comando chcon, y para ver el perfil de seguridad de un fichero determinado podemos usar ls -Z. Por supuesto esto no es exclusivo de Red Hat, si no que podría suceder en cualquier sistema que tenga habilitado SElinux.