Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ÍNDICE
1.- ENUNCIADO.................................................................................................................................3
2.- NFTABLES.....................................................................................................................................3
2.1.- INTRODUCCIÓN...................................................................................................................3
2.2.- FAMILIAS DE DIRECCIONES.............................................................................................4
2.3.- TABLAS..................................................................................................................................4
2.4.- CADENAS..............................................................................................................................5
2.5.- REGLAS..................................................................................................................................5
2.6.- ¿POR QUÉ ESTÁ SIENDO REEMPLAZADO IPTABLES?................................................6
2.7.- COMPARATIVA CON IPTABLES.........................................................................................7
2.7.1.- DIFERENCIAS PRINCIPALES.....................................................................................7
2.7.2.- FAMILIAS DE DIRECCIONES.....................................................................................7
2.7.3.- TABLAS..........................................................................................................................8
2.7.4.- CADENAS......................................................................................................................8
2.7.5.- REGLAS..........................................................................................................................8
3.- ESTUDIO DE LA VIABILIDAD, ¿DISPONGO DE LO NECESARIO?.....................................9
4.- MANUAL DE INSTALACIÓN.....................................................................................................9
4.1.- REQUISITOS MÍNIMOS PARA VIRTUALIZACIÓN.........................................................9
4.2.- INSTALACIÓN DEL SISTEMA OPERATIVO EN UNA MÁQUINA VIRTUAL.............12
4.3.- INSTALACIÓN DE NFTABLES.........................................................................................17
4.4.- CONFIGURACIÓN DE NFTABLES...................................................................................18
4.4.1.- ARCHIVO DE CONFIGURACIÓN.............................................................................18
4.4.2.- COMANDOS BÁSICOS...............................................................................................18
4.4.3.- TABLAS........................................................................................................................19
4.4.4.- CADENAS....................................................................................................................21
4.4.5.- REGLAS........................................................................................................................23
5.- MANUAL DE USUARIO............................................................................................................24
6.- PRUEBAS.....................................................................................................................................27
7.- CÓDIGO FUENTE.......................................................................................................................35
8.- IMPLANTACIÓN.........................................................................................................................37
2
nftables Proyecto Integrado 2ºASIR
1.- ENUNCIADO
¿Qué viene después de “iptables”? Es su sucesor, “nftables”. En este proyecto se desglosará la
novedosa herramienta de cortafuegos “nftables” por dentro, se hará una comparativa de ella con
“iptables”, el por qué de su sucesión y se implementarán algunas topologías con esta nueva
herramienta sucesora de “iptables”.
2.- NFTABLES
2.1.- INTRODUCCIÓN
Nftables es un proyecto de la comunidad netfilter1 que reemplaza el marco existente de tablas
{iptables, ip6tables, arptables y ebtables}. Nftables es una herramienta que se utiliza para la
implementación de cortafuegos.
Proporciona un nuevo marco de filtrado de paquetes, una nueva utilidad en el espacio de usuario
“nft” y una capa de compatibilidad para “iptables” e “ip6tables”. Utiliza los hooks2 existentes, el
sistema de seguimiento para las conexiones, los componentes de la línea de espera de los paquetes
de red del espacio de usuario y el subsistema de registro de netfilter.
1. Netfilter es una comunidad de desarrolladores de software e ingenieros conocidos principalmente por el framework
disponible en el núcleo de Linux que permite interceptar y manipular paquetes de red.
2. Los hooks son un conjunto de técnicas utilizadas para alterar o aumentar el comportamiento de un sistema operativo
interceptando llamadas de función o mensajes o eventos pasados entre componentes de software.
3
nftables Proyecto Integrado 2ºASIR
La familia por defecto que se usará si no se especifica ninguna familia a la hora de crear una tabla
es “ip”.
La familia “inet” no funciona para las cadenas NAT, solamente para las cadenas “filter”, es decir,
cuando vayamos a filtrar paquetes, pero no a la hora de hacer traducción de direcciones de red. Esta
nueva herramienta también permite realizar Source NAT y Destination NAT.
2.3.- TABLAS
Las tablas en nftables alojan las cadenas. En nftables no hay tablas integradas como en iptables. La
cantidad de tablas que tengamos y los nombres que les demos depende del usuario. Cada tabla solo
tiene una familia de direcciones, y sólo se aplica a los paquetes de dicha familia.
4
nftables Proyecto Integrado 2ºASIR
2.4.- CADENAS
Las cadenas se encargan de alojar las reglas que posteriormente definiremos. A diferencia de las
cadenas en iptables, no hay cadenas integradas en nftables. Esto significa que, si ninguna cadena
utiliza ningún type o hook en el marco de netfilter, los paquetes de red que fluyan a través de esas
cadenas no serán tocados por nftables, a diferencia de iptables.
2.5.- REGLAS
En el caso de nftables, las reglas se almacenan en cadenas, que a su vez se almacenan en tablas. Las
reglas de nftables son como las reglas de iptables, volátiles. Es decir, cuando se reinicia el sistema
los cambios no se guardan. Para que los cambios permanezcan, debemos guardar las reglas
directamente en el archivo de configuración.
Las reglas se construyen a través de expresiones, o bien a partir de declaraciones, y están contenidas
dentro de las cadenas. Hay una herramienta llamada iptables-translate que se encarga de traducir
las reglas iptables al formato nftables. Es muy útil sobre todo al comienzo, cuando no conoces muy
bien la sintaxis de nftables.
Las reglas en nftables incluyen una expresión de coincidencia, y luego, una declaración que
resuelva (si coinciden). Las coincidencias que tenemos disponibles en nftables son:
• meta (iif, iifname, oif, oifname): índice y nombre, de entrada y salida.
• icmp: type [tipo de icmp]
• icmpv6: type [tipo de icmpv6]
• ip: saddr y daddr (dirección de origen y destino; source and destination)
• ipv6: saddr y daddr (dirección de origen y destino; source and destination)
• tcp, udp y sctp: sport y dport (puerto de origen y destino; source and destination)
• ct: state [ new | established | related | invalid ]
• declaraciones resolutivas (accept, drop, queue, continue, return, [cadena] jump y [cadena]
goto)
5
nftables Proyecto Integrado 2ºASIR
A pesar del éxito que ha tenido y tiene, iptables tiene severas limitaciones de arquitectura que no
pueden ser resueltas sin cambios fundamentales de diseño. El principal problema surge del hecho de
que la representación del conjunto de reglas está compartida por herramientas de frontend como
iptables y el kernel. Esto tiene múltiples inconvenientes, como por ejemplo, cuando una regla es
añadida a un conjunto de reglas.
En este caso, la herramienta iptables necesita abandonar el actual conjunto de reglas y entonces
modificar este amasijo para contener la nueva regla y envía el conjunto de reglas entero de vuelta
al kernel. Esto también significa que cada operación de añadido y borrado es lenta, tanto como
que la tabla entera tiene que procesarla y reemplazarla con otra nueva.
El kernel no tiene idea de que regla se modificó, añadió o borró del conjunto de reglas en la tabla
que se está reemplazando. Todo lo que el kernel ve es que el nuevo conjunto de reglas está siendo
cargado, no detecta que parte del conjunto de reglas se borró o añadió y que parte del conjunto de
reglas ha cambiado.
Si dos reglas son añadidas al mismo tiempo, sólo una de ellas tomará efecto, como cada proceso
independiente manipula la tabla actual, entonces pregunta al kernel para cambiar la antigua con
la nueva, entonces el último proceso borrará cualquier cambio hecho entre su propia copia de
datos y la operación.
Este no era un problema cuando las iptables y sus predecesores fueron desarrollados originalmente
a final de los 90, como solo el administrador del sistema esperaba cambiar las reglas de filtrado
de paquetes. Ahora ha cambiado. Por ejemplo, aplicaciones como docker o libvirt tienen que
añadir reglas NAT para proveer conectividad para contenedores y máquinas virtuales.
6
nftables Proyecto Integrado 2ºASIR
Nftables mejora en este aspecto ya que comprime las tablas “iptables” e “ipt6tables” en una sola
tabla “inet” para reducir inconvenientes a la hora de trabajar.
7
nftables Proyecto Integrado 2ºASIR
2.7.3.- TABLAS
En nftables no hay tablas ya predefinidas como pasa en iptables con “nat, filter, raw o mangle”.
Aunque podemos recrear el estilo de iptables, somos libres de crear las tablas que queramos y
asignarles el nombre que nos plazca.
2.7.4.- CADENAS
A diferencia de las cadenas en iptables, no hay cadenas integradas en nftables. Al igual que ocurre
como con las tablas, tenemos libertad de crear las cadenas que necesitemos y asignarles el nombre
que queramos. Si ninguna cadena utiliza ningún tipo o hook, los paquetes de red que fluyan a través
de esas cadenas no serán tocados por nftables, a diferencia de iptables que sí los toca.
En nftables disponemos de 3 tipos de cadenas (filter, route y nat) y 5 tipos de hooks, que son los
mismos que en iptables (prerouting, input, forward, output, postrouting).
2.7.5.- REGLAS
En el caso de nftables, las reglas se almacenan en cadenas, que a su vez se almacenan en tablas. Las
reglas de nftables son como las reglas de iptables, volátiles. Es decir, cuando se asigna una regla
hay que guardarlas en el archivo de configuración ya que en el reinicio del sistema se pierden, en el
caso de nftables.
Las reglas especifican qué acción se debe tomar para los paquetes y dichas reglas pueden tener una
expresión para hacer coincidir paquetes y una o más acciones a realizar cuando se emparejan. Esta
es una de las diferencias principales respecto a iptables, es posible especificar varias acciones para
una regla.
Otra diferencia es que por defecto los contadores están desactivados, además, se debe especificar
explícitamente en las reglas, si se desea habilitar los contadores de paquetes y bytes.
8
nftables Proyecto Integrado 2ºASIR
Un equipo con sistema operativo Linux es fácil de conseguir, y el paquete necesario se puede
descargar desde los repositorios de Linux. Como disponemos de ambos requisitos, podemos
empezar a configurarlo.
Como software de virtualización hemos elegido Oracle VM VirtualBox, ya que hemos trabajado en
clase durante estos dos años atrás con él. Podemos descargarlo desde el siguiente enlace:
- https://www.virtualbox.org/wiki/Downloads
9
nftables Proyecto Integrado 2ºASIR
10
nftables Proyecto Integrado 2ºASIR
Una vez descargado, nos dirigimos al directorio de Descargas, o donde se haya guardado el
programa y damos click derecho a un espacio en blanco→ Abrir en una terminal.
11
nftables Proyecto Integrado 2ºASIR
12
nftables Proyecto Integrado 2ºASIR
13
nftables Proyecto Integrado 2ºASIR
14
nftables Proyecto Integrado 2ºASIR
Asignamos la ubicación y el tamaño del disco duro. Asignamos 10GB como mínimo.
(Recomendable 20GB).
15
nftables Proyecto Integrado 2ºASIR
16
nftables Proyecto Integrado 2ºASIR
17
nftables Proyecto Integrado 2ºASIR
18
nftables Proyecto Integrado 2ºASIR
Como ya sabemos, las reglas son volátiles. Para guardarlas permanentemente y que se ejecuten
con el reinicio del sistema, tendremos que ejecutar el siguiente comando:
- nft list ruleset > /etc/nftables.conf
Una vez hayamos guardado nuestras reglas, tendremos que reiniciar el servicio. Para ello nos
valemos del siguiente comando.
- systemctl restart nftables.service
4.4.3.- TABLAS
Para listar todas las tablas, se utiliza el comando:
- nft list tables
También se pueden ver con “nft list ruleset” pero no es recomendable si disponemos de muchas.
19
nftables Proyecto Integrado 2ºASIR
La sintaxis que se utiliza para listar las cadenas y reglas de una tabla en concreto es:
- nft list table [familia_de_direcciones] [nombre_tabla]
20
nftables Proyecto Integrado 2ºASIR
4.4.4.- CADENAS
Si queremos añadir una cadena normal, la sintaxis es la siguiente:
- nft add chain [familia_de_direcciones] [nombre_tabla] [cadena]
21
nftables Proyecto Integrado 2ºASIR
Familia Hook
ip / ip6 / inet prerouting,input,forward,output,postrouting
arp input,output
bridge prerouting,input,forward,output,postrouting
La prioridad es un valor entera. Las cadenas con números más bajos se procesan primero, pueden
ser negativos. Esto es ideal para facilitar la gestión de las cadenas.
La política puede ser:
• accept
• drop
• queue
• continue
• return
Ejemplo:
22
nftables Proyecto Integrado 2ºASIR
Para modificar una cadena lo que tenemos que hacer es llamarla por su nombre y definir la nueva
regla a cambiar. La sintaxis es la siguiente:
- nft chain [familia_de_direcciones] [nombre_tabla] [cadena] { type tipo hook hook priority
prioridad\; policy política\;}
4.4.5.- REGLAS
Podemos traducir reglas de iptables a nftables con la utilidad iptables-translate mediante la
siguiente sintaxis:
- iptables-translate [regla_iptable]
23
nftables Proyecto Integrado 2ºASIR
Para eliminar una regla debemos eliminarlas gracias al “handle” utilizado, o la posición donde
nftables la ha colocado. Seguimos la siguiente sintaxis:
- nft delete rule [nombre_tabla] [cadena] handle [identificador]
0 es el primer puesto.
No podemos modificar reglas, en el caso de que quisiéramos cambiarla, debemos eliminarla y
volverla a crear.
Un usuario inexperto es incapaz de redactar sus propias reglas de cortafuegos, ya que para estos es
difícil. Por eso, a continuación mostramos la configuración de un cortafuegos personal básico para
no tener que preocuparte por nada.
El usuario lo único que tendrá que hacer es instalar la herramienta (# apt-get install nftables) y
seguir los siguientes pasos:
24
nftables Proyecto Integrado 2ºASIR
- Abrimos una terminal pulsando Ctrl + Alt + T y nos conectamos como usuario root poniendo
“sudo su” y nuestra contraseña. Luego nos situamos en el directorio init.d y creamos el archivo
“cortafuegos.sh”
25
nftables Proyecto Integrado 2ºASIR
26
nftables Proyecto Integrado 2ºASIR
6.- PRUEBAS
A continuación se mostrará un ejemplo de una topología DMZ en la que se implementará un
cortafuegos con la herramienta “nftables”.
Para este ejemplo, seguiremos el siguiente esquema de red.
Servidor FTP
Instalamos el paquete “vsftpd” que nos permite configurar un servidor ftp.
27
nftables Proyecto Integrado 2ºASIR
Servidor Apache
Primero lo instalamos.
28
nftables Proyecto Integrado 2ºASIR
Servidor de vídeo
Podemos seguir la instalación y configuración del Media Center Emby desde el siguiente enlace:
- https://vivaubuntu.com/instalar-emby-en-ubuntu
29
nftables Proyecto Integrado 2ºASIR
Comprobamos.
Servidor DHCP
Lo instalamos.
30
nftables Proyecto Integrado 2ºASIR
31
nftables Proyecto Integrado 2ºASIR
Una vez funcionando todos los servicios correctamente tenemos que decidir que tipo de política de
empresa vamos a implementar. En mi caso será la siguiente:
• Por defecto, la política será DENEGAR las salidas y reenvío de paquetes y ACEPTAR las
entradas de paquetes.
• Los clientes de la red interna podrán acceder tanto a la DMZ como a Internet.
• La DMZ será accesible tanto por los clientes de la red interna como por los usuarios de
Internet, pero ésta no podrá establecer conexiones nuevas con los clientes de la LAN.
• Los usuarios de la red externa podrán acceder a los servicios de la zona desmilitarizada pero,
en cambio, no podrán establecer conexiones nuevas con los clientes de la red interna.
• En la red interna de la empresa hay un empleado que no puede acceder a los servicios de la
DMZ; este usuario será el equipo con la dirección IP 192.168.0.11
Sabiendo las políticas que vamos a implementar en nuestro cortafuegos, nos ponemos con la
configuración.
Primero creamos un script donde colocaremos todos los comandos necesarios para configurar el
cortafuegos. La siguiente imagen contiene la creación de una tabla y tres cadenas (entrada, reenvío
y salida).
32
nftables Proyecto Integrado 2ºASIR
Aquí vemos como el cliente de la red interna accede al servicio ftp del equipo de la DMZ
192.168.2.3, así como al equipo que simula Internet, con la dirección IP 192.168.1.2.
33
nftables Proyecto Integrado 2ºASIR
- El cliente de la red interna 192.168.0.11 no puede acceder a los servicios de la DMZ pero sí a
Internet.
- La DMZ es accesible tanto por la red interna como por la red externa, pero no puede establecer
conexiones nuevas hacia la red interna.
34
nftables Proyecto Integrado 2ºASIR
- Los usuarios de la red externa no podrán establecer conexiones nuevas con los clientes de la LAN.
Y aquí finaliza este ejemplo. Como hemos podido observar, podemos configurar un cortafuegos con
“nftables” sin muchas complicaciones. De hecho es más intuitivo que la anterior herramienta de
cortafuegos “iptables”.
35
nftables Proyecto Integrado 2ºASIR
36
nftables Proyecto Integrado 2ºASIR
8.- IMPLANTACIÓN
La herramienta de cortafuegos “nftables” se puede implementar en multitud de escenarios y
situaciones en cualquier sistema operativo moderno Linux. Se ha demostrado ya que es una
herramienta que supera a la actual herramienta de cortafuegos “iptables” en bastantes aspectos y es
una firme candidata a ser el principal mecanismo de seguridad en los sistemas Linux en el futuro.
37