Cómo configurar nftables sucesor de iptables
¡Hola a todos! Esta vez mostraré cómo instalar nftables en una caja de Linux para que sirva como firewall y puerta de enlace a Internet. Cómo construir el kernel de Linux con nftables habilita, cómo instalar nftables use-space y sus dependencias y cómo la utilidad nft para realizar el filtrado de red y la traducción de direcciones IP.
El proyecto nftables está destinado a reemplazar las herramientas de netfilter actuales como iptables, ebtables, arptables y la infraestructura de espacio del kernel por una renovada y una herramienta de espacio de usuario, nft, que tiene una sintaxis simplificada y más limpia, pero mantiene la esencia de las herramientas que usamos hoy en día.
Revisa tu kernel
Nftables está en el árbol del kernel de Linux desde el kernel 3.13 y solo necesita habilitar los símbolos relativos a nftables usando las herramientas habituales de configuración del kernel y compilarlo. Sin embargo, los destinos de traducción de direcciones de red de enmascaramiento y redireccionamiento se introdujeron en el kernel 3.18 y 3.19 respectivamente y son deseados para NAT.
Obtenga el número de versión de su kernel con el siguiente comando
uname -r
Para comprobar si el módulo nf_tables ya está compilado, intente esto
modinfo nf_tables
Debería ver información relevante para el módulo, pero si obtiene un error, necesitará otro kernel.
Construyendo un kernel compatible con nftables
Compilemos el kernel 4.2, es el último kernel estable mientras escribo esto y tiene todo lo que necesitamos para Nftables.
Ingrese / usr / src
cd /usr/src
Descargue el paquete xz del kernel de Linux desde kernel.org
wget --no-check-certificate https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.2.tar.xz
Extraiga las fuentes en el paquete xz
tar Jxvf linux-4.2.tar.xz
Mueva su antiguo árbol del kernel de Linux
mv linux linux-old
Cree un enlace al nuevo árbol de Linux
ln -s linux-4.2 linux
Copie su antiguo .config al nuevo árbol del kernel
cp linux-old/.config linux/.config
Y luego ingrese al árbol del kernel de Linux
cd linux
Ahora prepare su antiguo .config para el nuevo kernel con el olddefconfig target, que mantiene la configuración actual del kernel y establece nuevos símbolos por defecto.
make olddefconfig
Ahora, usa el menuconfig opción para navegar a través del menú tipo curses y seguir las opciones, que están relacionadas con nftables
make menuconfig
Soporte de redes
Opciones de red
Marco de filtrado de paquetes de red (Netfilter)
Configuración principal de Netfilter
Habilite la compatibilidad con Netfilter nf_tables y los módulos relacionados
Ahora suba un nivel, vuelva a la configuración principal de Netfilter e ingrese IP: Configuración de Netfilter
Allí habilita la cadena NAT para nf_tables y también enmascaramiento y redirección de objetivos.
Ahora ha terminado con nftables, recuerde verificar si no falta alguna configuración del kernel relativa a sus necesidades específicas y guarde su .config
Luego haz y haz los módulos
make && make modules
Instale su kernel en / boot manualmente, para que pueda usar su kernel anterior si se pierde algo que sale mal.
cp arch/x86_64/boot/bzImage /boot/vmlinuz-4.2
cp system.map /boot/system.map-4.2
cp .config /boot/config-4.2
Instalar módulos del kernel
make modules_install
Bota
Algunas configuraciones pueden necesitar un ramdisk inicial para arrancar, será el caso si su partición raíz está bajo LVM, RAID o el módulo del sistema de archivos raíz no fue construido en el kernel.
El siguiente ejemplo crea el archivo ramdisk comprimido /boot/initrd-4.2gz, que esperará 8 segundos para arrancar en la partición rootfs del grupo de volúmenes lógicos vgroup, cargará los módulos para los sistemas de archivos XFS y Ext4 desde el kernel 4.2.0
mkinitrd -w 8 -c -u -f ext4 -m ext4: xfs -L -r / dev / vgroup / rootfs -k 4.2.0 -o /boot/initrd-4.2.gz
Agregue una nueva opción a su cargador de arranque que apunte a su kernel y ramdisk, si tiene uno; en LILO debes agregar algo como esto en tu /etc/lilo.conf
image = /boot/vmlinuz-4.2 root = /dev/vgroup/rootfs label = linux-4.2 initrd = /boot/initrd-4.2.gz read-only
Una vez que su sistema se reinicie, verifique su módulo nuevamente.
modinfo nf_tables
Debería ver algo similar a la imagen de arriba; de lo contrario, intente revisar menuconfig los pasos anteriores e intente marcar todos los símbolos relacionados con netfilter como módulos.
Después de eso, cree e instale esos módulos
make modules && make modules install
Instalar la herramienta nft
Ahora es el momento de instalar la utilidad de espacio de usuario de Nftables, nft, el reemplazo de las iptables tradicionales y sus amigos, pero antes de que podamos hacer eso, necesitamos instalar las bibliotecas compartidas necesarias para construir nft.
GMP – La biblioteca aritmética de precisión múltiple de GNU
Descarga y extrae el paquete
wget https://gmplib.org/download/gmp/gmp-6.0.0a.tar.xz tar Jxvf gmp-*
Construir e instalar
cd gmp* && ./configure && make && make install
libreadline – La biblioteca Readline de GNU
Necesitará esta biblioteca si planea usar nft en modo interactivo, que es opcional y no se trata aquí.
Descargue, extraiga e ingrese al árbol de fuentes.
wget ftp://ftp.gnu.org/gnu/readline/readline-6.3.tar.gz && tar zxvf readline * && cd readline *
Configúrelo para usar ncurses, luego cree e instale.
./configure –with-curses && make && make install
libmnl – Biblioteca de espacio de usuario minimalista para desarrolladores de Netlink
Descarga, contacta e ingresa al árbol de fuentes
wget http://www.netfilter.org/projects/libmnl/files/libmnl-1.0.3.tar.bz2 && tar jxvf libmnl- * && cd libmnl- *
Configurar, hacer e instalar
./configure && make && make install
libnftnl
Descargar, extraer e ingresar al árbol de fuentes
wget http://www.netfilter.org/projects/libnftnl/files/libnftnl-1.0.3.tar.bz2 && tar jxvf libnftnl* && cd libnftnl*
Configure make e install.
./configure && make && make install
Construya e instale nft
Descargue, extraiga e ingrese al árbol de fuentes.
wget http://www.netfilter.org/projects/nftables/files/nftables-0.4.tar.bz2 && tar jxvf nftables*
Luego configure, cree e instale
./configure && make && make install
Tenga en cuenta que puede utilizar –sin-cli para el script de configuración, deshabilitará la interfaz de línea de comandos interactiva y la necesidad de la biblioteca readline.
Usando nftables
Lo primero que puede hacer es cargar las tablas de plantillas básicas para redes IPv4, que se pueden encontrar en el árbol de fuentes de la herramienta nft, por supuesto que puede hacerlo a mano, pero recuerde que siempre es una buena idea comenzar simple.
Cargar definiciones de tablas de filtros IPv4
nft -f files/nftables/ipv4-filter
Cargar tabla NAT
nft -f files/nftables/ipv4-nat
Es una buena idea cargar también mangle
nft -f files/nftables/ipv4-mangle
Ahora enumera tus tablas
nft list tables
Elimine cualquier paquete nuevo dirigido a esta máquina
nft add rule filter input ct state new drop
Aceptar paquetes que no estén relacionados con las conexiones establecidas.
nft add rule filter input ct state related,established accept
La mayoría de los sistemas Linux ejecutan OpenSSH, es una buena idea aceptar conexiones al puerto TCP 22, para que pueda acceder a su servicio SSH.
nft insert rule filter input tcp port 22 accept
Ahora enumere sus tablas y observe cómo van las cosas
nft list table filter
Realización de traducción de direcciones de red (NAT)
Cree una regla para traducir la dirección IP proveniente de la red 192.168.1.0/24 y cuéntela antes de enviarla.
nft add rule nat postrouting ip saddr 192.168.1.0/24 counter masquerade
Eche un vistazo a sus reglas, esta vez agregue la bandera ‘-a’ para obtener más detalles y verá
nft list table nat -a
Habilitar el reenvío
También necesitará habilitar el reenvío de IP en el kernel
sysctl -w net.ipv4.ip_forward=1
Para habilitar el reenvío al inicio, coloque la siguiente oración en el /etc/sysctl.conf archivo, que puede necesitar ser creado en algunas distribuciones.
net.ipv4.ip_forward=1
También puede habilitar el reenvío a través del sistema de archivos proc, ejecute el siguiente comando para hacerlo y colóquelo al final de un rc script como rc.local para habilitar el reenvío al inicio
echo 1 > /proc/sys/net/ipv4/ip_forward
Salvando tus mesas
Para guardar su configuración, simplemente redirija la salida del comando de listado a un archivo
Guardar tabla de filtros
nft list table filter -a > /etc/firewall.tables
Ahora agregue la tabla nat, tenga en cuenta que usamos el ‘>‘ dos veces.
nft list table nat -a >> /etc/firewall.tables
Luego agregue la tabla de mangle
nft list table mangle -a >> /etc/firewall.tables
Ahora solo necesita cargar este archivo cuando se inicie su sistema
nft -f /etc/firewall.tables
Conclusión
Su máquina Linux ahora puede servir Internet, todo lo que tiene que hacer ahora es apuntar su máquina Linux como puerta de enlace para que sus dispositivos compartan Internet. Por supuesto, hay muchos otros detalles y características en nftables, pero debería ser suficiente para que comprenda los conceptos básicos, proteja sus sistemas, comparta Internet y se prepare para despedirse de iptables y su familia.