ASIR2 DOC 2025/26

Assignmets docs for asir2

View on GitHub

Firewall.

Contexto

Los cortafuegos se utilizan con frecuencia para evitar que otros usuarios de Internet no autorizados tengan acceso a las redes privadas conectadas a Internet. Estos suelen actuar como un organismo de inspección que verifica las conexiones que se establecen entre una red y un equipo local. Un cortafuegos regula, por lo tanto, la comunicación entre ambos para proteger el ordenador contra programas maliciosos u otros peligros de Internet.

Objetivos

Netfilter

Netfilter es una infraestructura integrada en el kernel de linux que permite interceptar y manipular paquetes de red, actuando como el motor principal de un firewall para filter el tráfico y realizar NAT, utilizando herramientas como _iptables o nfttables para definir políticas y réglas sobre los interfaces de red, organizadas en tablas y cadenas. Netfilter maneja el trafico de red en diferentes puntos (hooks) a medida que pasa por el sistema. nftables y su antecesor iptables nos permite a nivel de usuario anclar una cadena de reglas (callback function) en cada uno de los hooks pudiendo descartar o aceptar paquetes según la política de seguridad deseada

Netfilter hooks -simple block diagram

nftables

Tip

Activa el autocompletado de comandos para el comando nft descargandote el siguiente fichero en la carpeta /etc/bash_completion.d/ wget -O /etc/bash_completion.d/nft-completion https://raw.githubusercontent.com/Zulugitt/bash_completion/refs/heads/main/nft-completion

Conceptos básicos de nftables

Para el correcto manejo de nftables, es necesario entender su estructura básica, incluyendo tablas, cadenas, reglas y conjuntos

tables, chains and rules

Essential Nfttables ruleset

Contrack: Seguimiento de paquetes

Note

TCP es un protocolo basado en conexión, por lo que una conexión ESTABLISHED esta bien definida. UDP es un protocolo no orientado a conexión, por lo que ESTABLISHED hace referencia a tráfico que ha tenido una respuesta y viceversa.

iptables_conntrack_2

iptables_conntrack_3

Nftables

Instalación

sudo apt-get -y install nftables
systemctl enable nftables.service
systemctl start nftables.service
systemctl status nftables.service

Listado reglas y persistencia

nft list ruleset
nft flush ruleset
nft list ruleset > /etc/nftables.conf

Creando tablas y cadenas.

nft list tables
nft list table ip filter
nft add table <family> <name>
nft add table ip filter 
nft delete table ip nat

nft list chains
nft add chain <family> <table> <chain>
nft add chain ip filter input
nft add table ip nat 
nft add chain ip nat postrouting { type nat hook postrouting priority 100 \; policy accept \; }
nft add chain family mytable mychain '{ policy drop; }'
nft delete chain ip nat postrouting

Creando conjuntos (sets)

nft add set inet example_table example_set { type ipv4_addr \; }
nft add set inet example_table example_set { type ipv4_addr \; flags interval \; } #permite rango ip
nft add element inet example_table example_set { 192.0.2.1, 192.0.2.2 }
nft add element inet example_table example_set { 192.0.2.0-192.0.2.255 }
nft list sets

Responde I. nfttables basics

  1. Crea una tabla denominada asir2_table para los paquets ipv4 e ipv6 , dentro de ella una cadena denomindada asir2_chain asociada al hook output con política por defecto reject
  2. ¿Qué significa esto?
  3. Propón algún ejemplo práctico con algún comando básico que permita demostrar el efecto de estas reglas.
  4. Crea un conjunto set de direcciones ipv4 denominado ip_admin, añade varias direcciones en él.
  5. Comprueba que efectivamente se han creando los conjuntos de valores.
  6. Propón y crea un conjunto de valores (no basado en direcciones ip) que creas puede ser de utilidad en la definición de reglas de un cortafuegos. Justifica tu respuesta.

Logging and rate limit

Podemos registar la actuación de las reglas del cortafuegos y limitar el número de paquetes con propósito de auditoria y evitar ciertos ataques.

sudo nft add rule inet my_filter_table input tcp dport 22 log prefix "SSH Drop:" level warning
sudo nft add rule inet my_filter_table input tcp dport 22 drop
sudo nft add rule inet my_filter_table input icmp type echo-request limit rate 10/second accept
sudo nft add rule inet my_filter_table input icmp type echo-request drop

Reglas. La Lógica

Match Expresion

Protocol matching
tcp dport 22 TCP destination port
udp sport 53 UDP source port
icmp type echo-request ICMP type
ip protocol tcp IP protocol
Address matching
ip saddr 192.168.1.0/24 Source IP range
ip daddr != 10.0.0.0/8 Destination IP (not)
ip saddr { 1.2.3.4, 5.6.7.8 } Multiple IP Interface matching
iif eth0 Input interface
oif "wlan*" Output interface (wildcard)
iifname "docker0" Interface by name
Connection tracking
ct state established Connection state
ct state new,related Multiple states
ct direction original Connection direction
Time-based matching
meta hour "09:00"-"17:00" Time range
meta day { "Monday", "Friday" } Specific days
Packet properties
meta length 40-100 Packet size range
meta mark 0x123 Packet mark
meta priority 0 Priority

Sentencias (Acciones)

Basic actions
accept Allow packet
drop Silent drop
reject Send rejection
return Return to calling chain
Logging
log Basic logging
log prefix "SSH: " With prefix
log level emerg Log level Counters and statistics
counter Count packets/bytes
counter packets 100 bytes 8000 Set initial values
Target modification
snat to 1.2.3.4 Source NAT
dnat to 192.168.1.10 Destination NAT
masquerade Dynamic SNAT
Packet modification
meta mark set 0x123 Set packet mark
meta priority set 0 Set priority
Rate limiting
limit rate 10/minute Basic rate limiting
limit rate over 100/minute drop Burst protection
Advanced actions
queue Send to userspace
dup to device eth1 Duplicate packet

Responde II. Reglas nftables

  1. Crea una regla que acepte las conexiones ssh del interfaz eth0
  2. Crea una regla que permita el tráfico entre el interfaz enp2s0 y enp1s0
  3. Crea un conjunto denominado inernal_nets con varias redes ipv4
  4. Crea una regla que acepte las conexiones ip provenientes del conjunto internal_nets creado en el paso anterior.
  5. Crea una regla que aplique masquerade a los paquetes salitenes por el interfaz "eth0"
  6. Crea una regla que aplique masquerade a los paquetes salitenes por el interfaz "eth0" y provenientes del conjunto internal_nets
  7. El servidor ldap se encuentra en la ip 10.10.10.11. Haz port-forwarding si el paquete proviene de la interfaz "wan" y va dirigido al puerto usado por el servicio ldap
  8. Crea una regla que cambie la dirección de destino a 10.1.0.10 si el paquete va dirigido a los puertos 80 o 443
  9. Crea una regla que accepte las conexiones cuyo esado sea new, established o related.
  10. Crea una regla para que el servidor web únicamente acepte 100 paquetes por minuto y ráfagas cortas de 200.
  11. Crea una regla que deniege las conexiones cuyo estado sea invalid.
  12. Crea una regla para que el servidor ssh acepte únicamente 50 paquetes por minuto.
  13. Crea una regla para que los paquetes ssh descartados se registren con el prefijo "SSH rate limit exceeded: ".
  14. Crea un conjunto denominado port_scanners e incluye varias ip de ejemplo
  15. Referencia el conjunto anterior en una regla que deniege el acceso si proviene de alguna de las ips del conjunto.
  16. Crea una cadena denominada input_wan que permita el tráfico icmp de tipo echo-request y el udp dirigido al puerto 68 (DHCP). Deniega el resto
  17. Crea en una tabla denominada asir2_table una cadena_base denominada asir2_input asocianda al punto (hook) input. Para todo el tráfico proveniente del interfaz "eth0" salta a la cadena creada en el paso anterior.

Añadir, insertar y eliminar reglas

nft add rule <family> <table> <chain> <match expresion> <action>
nft add rule inet filter input  iifname "eth0" tcp dport {443, 80} accept
# inserta reglas en una posición específica
nft -a list table inet filter
nft add rule inet filter input position 123 iifname "eth0" tcp dport {443, 80} accept #before position
nft insert rule inet filter input position 123 iifname "eth0" tcp dport {443, 80} accept #after position
nft delete rule inet filter input handle 178

Responde III. Estudio reglas nft-incus

  1. A partir del siguiente fichero de reglas usadas por el servidor incus
  2. Analiza las reglas indicando y enumerando el número de cadenas y tablas
  3. Explica a modo general y usando un lenguaje natural las reglas de la cadena in.incusbr0
  4. Explica en el contexto el propósito de la única regla en la cadena pstrt.incusbr0

Actividad I. Configuración de un cortafuegos con nftables

Para llevar a cabo la práctica necesitamos tres contenedores (firewall , lan1 y lan2) y un switch virtual (ovs-br0)

Diagrama de red

  1. Dibuja un diagrama de red hecho a mano del escenario propuesto, indicando los interfaces e ip's

Crea el cortafuegos y añadele un segundo interfaz de red denominado lan, renombra el interfaz eth0, creado por defecto a wan para mayor claridad.

$ incus launch images:ubuntu/noble firewall
$ incus config device override firewall eth0 name=wan
$ incus config device add firewall eth1 nic name=lan nictype=bridged parent=ovs-br0
# Aprovisionamiento básico del firewall
$ incus exec firewall -- bash -c 'apt-get update && apt-get -y install  aptitude wget bash-completion nano xsel vim dnsmasq nftables' 
$ incus exec firewall -- bash -c 'systemctl enable nftables.service'
# Creación de los clientes
$ incus launch images:ubuntu/noble lan1 --network ovs-br0

Basic firewall config

Pasos

  1. El interfaz eth1 que conecta con la LAN tiene que tener una ip estática. Lleva a cabo la configuración de red apropiada para dicha interfaz y aplicando los cambios mediante la utilidad netplan.
    • La ip para el interfaz lan(eth1) debe ser 10.10.82.1.
    • Los cambios en la configuración de red se llevarán a cabo creando un nuevo fichero (básate en /etc/netplan/10-lxc.yaml) /etc/netplan/20-firewall.yaml
  2. El firewall deberá implementar funcionalidad DHCP para proveer a sus clientes LAN de ip dinámica. Lleva a cabo la configuración del servidor DHCP usando dnsmasq. Lleva a cabo la configuración y comprueba que los clientes LAN obtienen una ip de la red 10.10.82/0

Warning

El servidor DNS de dnsmasq colisiona a hacer uso que el mismo puerto 53 que el servicio systemd-resolve, para evitar este problema y que ambos servidores DNS funcionen correctamente, deberás descomentar en el fichero /etc/dnsmasq.conf la linea bind-interfaces y asignar la interfaz lan como la interfaz de escucha de peticiones DNS y DHCP

Para que el firewall actue como enrutador y redirecciones los paquetes a la interfaz de salida apropiada, debemos activar forwarding De forma temporal mediante el comando

firewall# sysctl -w net.ipv4.ip_forward=1

Hacemos el cambio persistente editando el fichero /etc/sysctl.conf y descomenta la linea 28

firewall# vi /etc/sysctl.conf
28 net.ipv4.ip_forward=1

Aplica los cambios reiniciando el servicio systemd-sysctl

firewall# systemctl restart systemd-sysctl.service 

Firewall config II

Pasos

En este momento, y aunque hemos configurado el firewall como enroutador, NO es posible salir a internet con los clientes lan. Analiza y entiende el problema llevando a cabo las modificaciones necesarias en las reglas del firewall para permitir la salida de los clientes al exterior.

  1. Comprueba que los clientes lan obtienen ip del firewall en la red apropiada.
  2. Comprueba que en un principo no pueden salir al exterior
  3. ¿Porqué los clientes aunque obtienen ip y hemos activado el contenedor como enrutador no pueden acceder a la wan?
  4. Añade las reglas apropiadas el firewall para permitir a los clienes acceder a la wan

Las respuestas de las siguiente reglas se deben de acompañar con el comando y breve explicación que verifique que efectivamente, la regla tiene el efecto deseado.

Actividad 2. DMZ

Una DMZ Zona Desmilitarizada) es una red perimetral segura y aislada en una infraestructura de red, diseñada para alojar servidores y servicios que necesitan ser accesibles desde Internet (como servidores web, de correo, DNS) sin comprometer la seguridad de la red interna (LAN).

A las reglas del cortafuegos del ejercicio anterior, añade las siguientes relacionadas con la seguridad del la zona DMZ

Entrega

Envia un documento pdf firmado (creado con markdown) con los siguientes apartados

Propuestas de mejora

Las siguientes propuestas de mejora de la práctica se plantean al alumno como reto para que mejore sus destrezas y conocimientos de las herramientas de administrdor de sistemas y mejore notablemente su nota de la asignatura.


[NO TERMINADA]

Actividad 3. OpenWRT

Firewall - Reglas

network_diagram

Tip

Se metódico y cuidadoso a la hora de establecer las reglas. Crea un fichero (script) bien documentado con a medida que vas añadiendolas. Comprueba el efecto de cada una y ejecuta los tests de regresión para verificar que las reglas añadidas no rompen el estado anterior.

Redireccionamiento de puertos y apache2 ldap authentication.

En nuestra zona DMZ ubicaremos un servidor web, en el cual ciertas páginas estarán protegidas y únicamente se permitira el acceso a los usuarios autenticados. La autenticación se llevara a cabo mediante el servidor ldap que hay en la lan, alcanzable a través de las reglas del firewall. Para llevara a cabo la autenticación deberemos utilizar el módulo de apache mod_authnz_ldap. Otros recursos donde explica como llevar a cabo la autenticación son:

Note

Nuestro servidor web, ubicado en la máquina dmz deber responder con un dialogo de autenticación a la url:: ip:/sad_secure

Anexo I. Arquitectura IP-Tables

iptables chains

iptables-chains