9.9 KiB
title | date | draft | image | categories | tags | ||||
---|---|---|---|---|---|---|---|---|---|
Cortafuegos II: Perimetral con nftables | 2023-02-17T11:58:43+01:00 | false | featured.png |
|
|
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
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
Activar el bit de forward
En el cortafuegos, activo el bit de forwarding
SNAT
sudo nft add rule inet nat postrouting oifname "ens3" ip saddr 192.168.100.0/24 counter masquerade
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
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
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:
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
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
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
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
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
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
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
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)
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
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
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
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
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
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
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