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`.
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 nft | add chain | ip | filtradoUsuarios | traficoEntrada | {type filter | hook input | priority0\;} |
---|---|---|---|---|---|---|---|
comando nft | añadir cadena | ipv4 | nombre tabla | nombre de la cadena | tipo filtro | hook entrada | prioridad alta |
Gestión de reglas
- sudo nft add rule ip
NOMBRE_TABLA
NOMBRE_REGLA
ip saddr192.168.47.5
drop : Descarta (drop) paquetes cuya IP de origen (Source ADDRess) sea192.168.47.5
- sudo nft add rule ip
NOMBRE_TABLA
NOMBRE_REGLA
ip daddr10.45.10.10
drop : Descarta paquetes cuya IP de destino (Destination ADDRess) sea10.45.10.10
- sudo nft add rule ip
NOMBRE_TABLA
NOMBRE_REGLA
ip daddr10.45.10.0/24
drop : Descarta paquetes cuya IP de destino sea del tipo10.45.10.xxx
- sudo nft add rule ip
NOMBRE_TABLA
NOMBRE_REGLA
ip saddr192.168.47.5
daddr10.45.10.10
drop : Descarta los paquetes cuya IP de origen sea192.168.47.5
y vayan destinados a la IP10.45.10.10
. - sudo nft add rule ip
NOMBRE_TABLA
NOMBRE_REGLA
tcp dport80
drop : Descarta TODO EL TRÁFICO cuyo puerto de destino sea el80
- sudo nft add rule ip
NOMBRE_TABLA
NOMBRE_REGLA
tcp dport 80 drop ip saddr192.168.47.5
tcp dport443
: Descarta todo el tráfico cuyo IP de origen sea192.168.47.5
y cuyo puerto de destino sea el443
- sudo nft add rule ip
NOMBRE_TABLA
NOMBRE_REGLA
tcp dport 80 drop ip saddr192.168.1.0/24
tcp dport1-1024
: Descarta todo el tráfico cuyo IP de origen sea192.168.1.xxx
y cuyo puerto de destino esté entre1 y 1024
- sudo nft add rule ip
NOMBRE_TABLA
NOMBRE_REGLA
ip saddr192.168.1.45
limit rate over100kbytes/second
drop : Si se excede el límite de100kbytes/seg
entonces el tráfico se descarta - sudo nft add rule ip tablaNAT natEntrada tcp dport
80
dnat to192.168.100.10:80
: Cuando llegue una conexión al puerto80
de este cortafuegos redirigir la conexión hacia el puerto 80 de la IP192.168.100.10
- tcp sport {80,443} quota until
100 mbytes
accept : Poner límites o cuotas para no aceptar más de100MBytes
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
sudo nft flush ruleset
: Para limpiar el cortafuegos.sudo nft add table ip NOMBRE_TABLA
: Para añadir una nueva tabla.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\;}