You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

9.9 KiB

title date draft image categories tags
Cortafuegos II: Perimetral con nftables 2023-02-17T11:58:43+01:00 false featured.png
documentación
Seguridad y Alta Disponibilidad
Cortafuegos
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