1276 palabras
6 minutos
Cortafuegos II: Perimetral con nftables

Enunciado#

Realiza con nftables el ejercicio de la página https://fp.josedomingo.org/seguridadgs/u03/perimetral_iptables.html documentando las pruebas de funcionamiento realizadas.

Debes añadir después las reglas necesarias para que se permitan las siguientes operaciones:

Preparación#

El escenario es el siguiente

escenario

Instalo nftables en el cortafuegos

sudo apt update
sudo apt install nftables

Creo las tablas de filter y nat

sudo nft add table inet filter
sudo nft add table inet nat

creo las cadenas de filter

sudo nft add chain inet filter input { type filter hook input priority 0 \; counter \; policy accept \; }
sudo nft add chain inet filter output { type filter hook output priority 0 \; counter \; policy accept \; }
sudo nft add chain inet filter forward { type filter hook forward priority 0 \; counter \; policy accept \; }

creo las cadenas de nat

sudo nft add chain inet nat prerouting { type nat hook prerouting priority 0 \; }
sudo nft add chain inet nat postrouting { type nat hook postrouting priority 100 \; }

SSH al cortafuegos#

Ahora acepto el tráfico ssh entrante al router-fw

sudo nft add rule inet filter input ip saddr 172.22.0.0/16 tcp dport 22 ct state new,established counter accept
sudo nft add rule inet filter output ip daddr 172.22.0.0/16 tcp sport 22 ct state established counter accept

y entrante desde la VPN

sudo nft add rule inet filter input ip saddr 172.29.0.0/16 tcp dport 22 ct state new,established counter accept
sudo nft add rule inet filter output ip daddr 172.29.0.0/16 tcp sport 22 ct state established counter accept

Política por defecto#

Y pongo la política por defecto a drop:

sudo nft chain inet filter input { policy drop \; }
sudo nft chain inet filter output { policy drop \; }

Ahora compruebo que puedo hacer ssh

ssh

ssh2

Activar el bit de forward#

En el cortafuegos, activo el bit de forwarding

bitforward

SNAT#

sudo nft add rule inet nat postrouting oifname "ens3" ip saddr 192.168.100.0/24 counter masquerade

snat

SSH desde el cortafuego a la LAN#

sudo nft add rule inet filter output oifname "ens4" ip daddr 192.168.100.0/24 tcp dport 22 ct state new,established counter accept
sudo nft add rule inet filter input iifname "ens4" ip saddr 192.168.100.0/24 tcp sport 22 ct state established counter accept

ssh3

Tráfico para la interfaz loopback#

sudo nft add rule inet filter output oifname "lo" counter accept
sudo nft add rule inet filter input iifname "lo" counter accept

loopback

Peticiones y respuestas protocolo ICMP#

Desde el cortafuegos a internet

sudo nft add rule inet filter input iifname "ens3" icmp type echo-request counter accept
sudo nft add rule inet filter output oifname "ens3" icmp type echo-reply counter accept

Ahora desde mi portátil hago un ping al cortafuegos:

icmp

Reglas forward#

ping desde la LAN#

Desde el cortafuegos a la LAN

sudo nft add rule inet filter input iifname "ens4" icmp type echo-reply counter accept
sudo nft add rule inet filter output oifname "ens4" icmp type echo-request counter accept

icmp

Consultas y respuestas DNS desde la LAN#

sudo nft add rule inet filter forward iifname "ens4" oifname "ens3" ip saddr 192.168.100.0/24 udp dport 53 ct state new,established counter accept
sudo nft add rule inet filter forward iifname "ens3" oifname "ens4" ip daddr 192.168.100.0/24 udp sport 53 ct state established counter accept

dns

Permitimos la navegación web desde la LAN#

sudo nft add rule inet filter output oifname "ens3" ip protocol tcp tcp dport { 80,443 } ct state new,established counter accept
sudo nft add rule inet filter input iifname "ens3" ip protocol tcp tcp sport { 80,443 } ct state established counter accept

web

Permitimos el acceso a nuestro servidor web de la LAN desde el exterior#

sudo nft add rule inet filter forward iifname "ens3" oifname "ens4" ip daddr 192.168.100.0/24 tcp dport 80 ct state new,established counter accept
sudo nft add rule inet filter forward iifname "ens4" oifname "ens3" ip saddr 192.168.100.0/24 tcp sport 80 ct state established counter accept
sudo nft add rule inet nat prerouting iifname "ens3" tcp dport 80 counter dnat ip to 192.168.100.10

web2

Reglas del enunciado#

Permite poder hacer conexiones ssh al exterior desde la máquina cortafuegos#

sudo nft add rule inet filter output oifname "ens3" tcp dport 22 ct state new,established counter accept
sudo nft add rule inet filter input iifname "ens3" tcp sport 22 ct state established counter accept

Ahora pruebo accediendo a otra máquina desde el cortafuegos por ssh

ssh

Permite hacer consultas DNS desde la máquina cortafuegos sólo al servidor 192.168.202.2. Comprueba que no puedes hacer un dig @1.1.1.1.#

Creo la regla

sudo nft add rule inet filter output ip daddr 192.168.202.2 udp dport 53 ct state new,established counter accept
sudo nft add rule inet filter input ip saddr 192.168.202.2 udp sport 53 ct state established counter accept

Compruebo que no puedo hacer un dig @1.1.1.1 y si uno con @192.168.202.2

dns

Permite que la máquina cortafuegos pueda navegar por internet.#

sudo nft add rule inet filter output oifname "ens3" ip protocol tcp tcp dport { 80,443 } ct state new,established counter accept
sudo nft add rule inet filter input iifname "ens3" ip protocol tcp tcp sport { 80,443 } ct state established counter accept

Compruebo que puedo navegar por internet

web

Los equipos de la red local deben poder tener conexión al exterior.#

Este paso lo realicé en la preparación en el siguiente apartado: Reglas forward

Permitimos el ssh desde el cortafuego a la LAN#

Este paso lo realicé en la preparación en el siguiente apartado: SSH desde el cortafuego a la LAN

Pruebo que funciona (usando mi clave privada)

ssh2

Permitimos hacer ping desde la LAN a la máquina cortafuegos#

sudo nft add rule inet filter input iifname "ens4" icmp type echo-request counter accept
sudo nft add rule inet filter output oifname "ens4" icmp type echo-reply counter accept

Compruebo que funciona

icmp

Permite realizar conexiones ssh desde los equipos de la LAN#

sudo nft add rule inet filter forward iifname "ens4" oifname "ens3" ip saddr 192.168.100.0/24 tcp dport 22 ct state new,established counter accept
sudo nft add rule inet filter forward iifname "ens3" oifname "ens4" ip daddr 192.168.100.0/24 tcp sport 22 ct state established counter accept

Ahora, tras copiar mi clave privada a la máquina LAN, accedo a alfa por ssh

ssh3

Instala un servidor de correos en la máquina de la LAN. Permite el acceso desde el exterior y desde el cortafuego al servidor de correos. Para probarlo puedes ejecutar un telnet al puerto 25 tcp#

Permite poder hacer conexiones ssh desde exterior a la LAN#

sudo nft add rule inet filter forward iifname "ens3" oifname "ens4" ip daddr 192.168.100.0/24 tcp dport 22 ct state new,established counter accept
sudo nft add rule inet filter forward iifname "ens4" oifname "ens3" ip saddr 192.168.100.0/24 tcp sport 22 ct state established counter accept
sudo nft add rule inet nat prerouting iifname "ens3" tcp dport 22 counter dnat ip to 192.168.100.10

Compruebo que al acceder a la IP del firewall entro en la maquina LAN

ssh4

Modifica la regla anterior, para que al acceder desde el exterior por ssh tengamos que conectar al puerto 2222, aunque el servidor ssh este configurado para acceder por el puerto 22#

sudo nft add rule inet nat prerouting iifname "ens3" tcp dport 2222 counter dnat ip to 192.168.100.10:22

Ahora entro usando el puerto 2222

ssh5

Permite hacer consultas DNS desde la LAN sólo al servidor 192.168.202.2. Comprueba que no puedes hacer un dig @1.1.1.1#

Como ya tengo una regla para las consultas dns desde la lan,busco los handles que tiene para borrarla

sudo nft -a list ruleset 

dns2

son el 22 y el 23. Ahora los borro:

sudo nft delete rule inet filter forward handle 22
sudo nft delete rule inet filter forward handle 23

Ahora añado las reglas para la LAN

sudo nft add rule inet filter forward iifname "ens4" oifname "ens3" ip saddr 192.168.100.0/24 ip daddr 192.168.202.2 udp dport 53 ct state new,established counter accept
sudo nft add rule inet filter forward iifname "ens3" oifname "ens4" ip saddr 192.168.202.2 ip daddr 192.168.100.0/24 udp sport 53 ct state established counter accept

dns3

Permite que los equipos de la LAN puedan navegar por internet.#

Este paso lo realicé en la preparación en el siguiente apartado: Permite que los equipos de la LAN puedan navegar por internet.

Compruebo que funciona

web2

Cortafuegos II: Perimetral con nftables
https://www.robertops.com/posts/2023-02-17_cortafuegos2/
Autor
Roberto Rodríguez
Publicado el
2023-02-17