Saltar al contenido principal

Cortafuegos

Comandos Básicos

  • sudo nft list ruleset > FICHERO : Muestra toda la configuración del cortafuegos.
  • sudo cp ficheronftables.conf /etc/nftables.conf : Pone la configuración nueva primero.
  • tablas : comandos tablas.
  • nft flush ruleset : Borrar todas las tablas.
  • nft flush chain ip NOMBRE_TABLA NOMBRE_CADENA : Borrar la cadena.
  • crear reglas : reglas.

Instalación de cortafuegos. Ubicación.

  • sudo apt-get remove iptables
  • sudo apt-get install nftables
Cuidado

El comando nft debe ejecutarse SIEMPRE como administrador, con sudo.

Hooks

  • Prerouting : Aún no ha entrado.
  • Input : El paquete es para nosotros pero aún no ha entrado.
  • Output : El paquete sale pero no se sabe que hacer con el.
  • Postrouting : Sale y ya ha cruzado la tabla de enrutamiento.
  • Forwarding : Cruzan pero no son para nosotros.

Tablas

tip

Indica el protocolo que queremos analizar (ip, ip6, arp, bridge).

  • nft list tables : Examinar qué hemos hecho con los distintos protocolos.
  • sudo nft add table ip NOMBRE : Crear una tabla.
  • sudo nft delete table ip NOMBRE : Borrar una tabla.

Es decir, la pauta es:

sudo nft add/remove table `familia` `NombreDeLaTabla`.

Más gestión de tablas

Cadena

info

Reglas que nft irá examinando por orden para decidir qué hacer con un paquete.

  • base : Ve todo el tráfico TCP.
  • no base : Al principio no ve nada.

Hay que indicar:

  • Tipo de manipulación : filter/route/nat
  • Etapa o hook
  • Prioridad
  • Política : accept/drop

Regla

Aclaración

Dentro de una cadena.

  • Identificador o código de regla
  • Posición
  • Match : Para crear condiciones con una sentencia para decir que se hace en ese caso.

Gestión de tablas

  • nft add table ip NOMBRE : Tabla que trabaja con ipv4.
  • nft add table inet NOMBRE : Tabla con ip (ipv4/ipv6).
  • nft list tables : Ver las tablas.
  • sudo nft delete table ip/inet NOMBRE : Borrar una tabla.

Gestión de cadenas

Examinar el tráfico cuyo destino sera algún servidor que esté instalado en el mismo ordenador del cortafuegos. Dicha cadena se llamará traficoEntrada:

sudo nftadd chainipfiltradoUsuariostraficoEntrada{type filterhook inputpriority0\;}
comando nftañadir cadenaipv4nombre tablanombre de la cadenatipo filtrohook entradaprioridad alta

Gestión de reglas

  • sudo nft add rule ip NOMBRE_TABLA NOMBRE_REGLA ip saddr 192.168.47.5 drop : Descarta (drop) paquetes cuya IP de origen (Source ADDRess) sea 192.168.47.5
  • sudo nft add rule ip NOMBRE_TABLA NOMBRE_REGLA ip daddr 10.45.10.10 drop : Descarta paquetes cuya IP de destino (Destination ADDRess) sea 10.45.10.10
  • sudo nft add rule ip NOMBRE_TABLA NOMBRE_REGLA ip daddr 10.45.10.0/24 drop : Descarta paquetes cuya IP de destino sea del tipo 10.45.10.xxx
  • sudo nft add rule ip NOMBRE_TABLA NOMBRE_REGLA ip saddr 192.168.47.5 daddr 10.45.10.10 drop : Descarta los paquetes cuya IP de origen sea 192.168.47.5 y vayan destinados a la IP 10.45.10.10.
  • sudo nft add rule ip NOMBRE_TABLA NOMBRE_REGLA tcp dport 80 drop : Descarta TODO EL TRÁFICO cuyo puerto de destino sea el 80
  • sudo nft add rule ip NOMBRE_TABLA NOMBRE_REGLA tcp dport 80 drop ip saddr 192.168.47.5 tcp dport 443 : Descarta todo el tráfico cuyo IP de origen sea 192.168.47.5 y cuyo puerto de destino sea el 443
  • sudo nft add rule ip NOMBRE_TABLA NOMBRE_REGLA tcp dport 80 drop ip saddr 192.168.1.0/24 tcp dport 1-1024 : Descarta todo el tráfico cuyo IP de origen sea 192.168.1.xxx y cuyo puerto de destino esté entre 1 y 1024
  • sudo nft add rule ip NOMBRE_TABLA NOMBRE_REGLA ip saddr 192.168.1.45 limit rate over 100kbytes/second drop : Si se excede el límite de 100kbytes/seg entonces el tráfico se descarta
  • sudo nft add rule ip tablaNAT natEntrada tcp dport 80 dnat to 192.168.100.10:80 : Cuando llegue una conexión al puerto 80 de este cortafuegos redirigir la conexión hacia el puerto 80 de la IP 192.168.100.10
  • tcp sport {80,443} quota until 100 mbytes accept : Poner límites o cuotas para no aceptar más de 100MBytes descargados

Acciones sobre paquetes

  • drop : Descartar.
  • counter : Recuento de bytes/paquetes que cumplen una cierta regla.
  • accept : Si una cadena utiliza por defecto drop es posible que nos interese permitir algunos paquetes.

Pruebas de funcionamiento. Sondeo.

  • netcat : Herramienta genérica de gestión de redes.
  • nmap : Herramienta específica de comprobación de puertos.
  • log : Ficheros de log para registrar la actividad de la red.

Registro de sucesos de un cortafuegos

  • sudo nft add rule ip tablaFiltrado cadenaEntrada log : Esto registra absolutamente todo el tráfico que circule por esa cadena.
  • sudo nft add rule ip tablaFiltrado cadenaEntrada tcp dport 80 log : Esto registra solo el tráfico de entrada HTTP.
Cuidado

Los registros del cortafuegos van al fichero /etc/syslog.

Resolución de problemas

  • Lanza el comando nft siempre como superusuario : sudo nft
  • Asegúrate de que pones la regla en el hook correcto.
  • Si no puedes enrutar : haz sudo nano /etc/sysctl.conf. La línea que controla el forwarding debe ser así: net.ipv4.forward=1

Como empezar

  1. sudo nft flush ruleset : Para limpiar el cortafuegos.
  2. sudo nft add table ip NOMBRE_TABLA : Para añadir una nueva tabla.
  3. sudo nft list table ip NOMBRE_TABLA : Para listar las cadenas de la tabla.

Extra

  • Si es tarjeta (enp0s3/enp0s8) : iifname enp0s8 tcp
  • Tráfico web : sudo nft add chain ip filtradoWeb prohibicionEntrada {type filter hook input priority 0\; policy accept\;}
  • Tráfico web prohibido a todos : sudo nft add chain ip filtradoWeb prohibicionEntrada {type filter hook input priority 0\; policy drop\;}