1. ¿Qué es un Firewall?

Un firewall es un programa que controla qué tráfico de red entra y sale de tu ordenador o red.
Piensa en un firewall como un portero en la puerta de una discoteca:

  • Decide quién puede entrar.
  • Decide quién puede salir.
  • Decide quién no pasa ni de broma.

En Linux, los firewalls funcionan leyendo paquetes (información de red) y aplicando reglas para permitirlos o bloquearlos.


2. ¿Qué firewalls existen en Linux?

Hoy en día, el firewall moderno de Linux es:

✔️ nftables — el firewall nativo actual Desde 2014 reemplazó a iptables como estándar.

✔️ ufw (Uncomplicated Firewall) Es una interfaz sencilla para gestionar reglas sin complicarte con nftables o iptables.
→ Muy útil para PCs.


3. Conceptos básicos que DEBES entender

Antes de tocar nada, tienes que conocer estos pilares:

Tablas (tables)

Son "cajas" donde se guardan las reglas.
Tablas principales:

Tabla Para qué sirve
filter Filtrar tráfico (permitir/bloquear)
nat Traducción de direcciones (router)
mangle Modificaciones avanzadas de paquetes
raw Excepciones

Cadenas (chains)

Son como "carriles" por donde pasan los paquetes. En filtro:

Cadena Significado
input Lo que ENTRA a tu PC
output Lo que SALE de tu PC
forward Lo que PASA A TRAVÉS del PC (rol de router)

Reglas (rules)

Son declaraciones como:

“Si un paquete viene del puerto 22, lo bloqueo.”

Una regla tiene:

  • condición → qué tipo de tráfico mira
  • acción → accept, drop, reject

4. Empezando con nftables

Vamos paso a paso. ✔️ 4.1 Ver la configuración actual sudo nft list ruleset

✔️ 4.2 Activar el servicio nftables sudo systemctl enable --now nftables

✔️ 4.3 Crear un firewall básico para un PC de escritorio Queremos que:

  • se permita tráfico saliente
  • se bloquee tráfico entrante
  • excepto conexiones que tú iniciaste
  • y permitir SSH opcionalmente

Archivo /etc/nftables.conf

sudo nano /etc/nftables.conf

Añade este contenido:

table inet filter {
    chain input {
        type filter hook input priority 0;

        # Permitir conexiones ya establecidas
        ct state established,related accept

        # Permitir loopback
        iif lo accept

        # Permitir ping
        ip protocol icmp accept

        # Permitir SSH (opcional)
        tcp dport 22 accept

        # El resto, bloquear
        reject with icmp type admin-prohibited
    }

    chain output {
        type filter hook output priority 0;
        accept
    }
}

Activar: sudo nft -f /etc/nftables.conf


5. UFW: el firewall para principiantes

UFW es perfecto para PC de escritorio. ✔️ Activar ufw

sudo ufw enable

✔️ Permitir servicios comunes:

sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow 443/tcp

✔️ Bloquear algo:

sudo ufw deny 23/tcp

✔️ Ver estado:

sudo ufw status verbose

6. Diferencias entre nftables y UFW

nftables ufw
Completo y potente Interfaz sencilla
Reemplazo moderno de iptables Ideal para usuarios menos expertos
Permite firewalls complejos Reglas sencillas
Se usa en servidores y routers Perfecto para PCs

7. Configuración de un Firewall para una Red Completa (Router Linux)

Supongamos este escenario:

Internet <---> eth0 [Linux Router] eth1 <------> LAN 192.168.1.0/24

Objetivos:

  1. Hacer NAT (para compartir Internet).
  2. Bloquear tráfico extraño de Internet.
  3. Permitir tráfico interno.
  4. Registrar paquetes sospechosos.

✔️ Archivo completo de /etc/nftables.conf

table inet filter {
    chain input {
        type filter hook input priority 0;
        ct state established,related accept
        iif lo accept

        # Permitir SSH desde la LAN
        iifname "eth1" tcp dport 22 accept

        # Bloquear tráfico entrante desde Internet
        iifname "eth0" reject with icmp type admin-prohibited
    }

    chain forward {
        type filter hook forward priority 0;

        # Permitir tráfico de la LAN hacia Internet
        iifname "eth1" oifname "eth0" accept

        # Permitir respuestas desde Internet a la LAN
        ct state established,related accept

        # Bloquear cualquier otra cosa
        reject
    }

    chain output {
        type filter hook output priority 0;
        accept
    }
}

  
table ip nat {
    chain postrouting {
        type nat hook postrouting priority 100;

        # NAT (enmascaramiento)
        oifname "eth0" masquerade
    }
}

Activar:

sudo nft -f /etc/nftables.conf

Habilitar reenvío de paquetes:

echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-forward.conf
sudo sysctl -p /etc/sysctl.d/99-forward.conf

8. ¿Quieres usar UFW como Router?

También se puede:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw default allow routed

Y activar NAT en /etc/ufw/before.rules, pero nftables es mucho más limpio.

9. Resumen final para no olvidar nada

✔️ Conceptos clave

  • Tablas: filter, nat
  • Cadenas: input, output, forward
  • Reglas: accept, drop, reject
  • Estados: established, related ✔️ Herramientas
  • nftables → moderno y profesional
  • ufw → sencillo y rápido ✔️ Niveles
  • PC Escritorio → ufw o nftables básico
  • Servidor → nftables
  • Router / Red → nftables + NAT + forward