Marcio Cunha

Cómo bloquear escaneos de puertos en el borde con nftables

Aprenda a crear reglas eficientes en nftables para detectar y mitigar escaneos de puertos antes de que alcancen sus servicios de red internos.

Marcio Cunha•5 min
También disponible en:PortuguêsEnglish
Resumen
  • Los escaneos de puertos mapean vulnerabilidades al sondear servicios de red activos antes de ataques dirigidos.
  • Nftables reemplaza a iptables con una sintaxis unificada y mejora el rendimiento de filtrado en el núcleo de Linux.
  • Los conjuntos dinámicos almacenan IPs sospechosas en tiempo de ejecución sin inflar el archivo de configuración.
  • El conteo de conexiones simultáneas identifica bots automatizados al monitorear el comportamiento de escaneo.
  • Las reglas de límite de tasa descartan paquetes excesivos y protegen los recursos informáticos contra el agotamiento.

El peligro invisible de los escaneos de puertos en internet

Imagine que su casa tiene cientos de puertas y ventanas hacia la calle, y alguien pasa probando cada una de ellas para ver cuáles están sin cerrojo. En la arquitectura de redes, este sondeo automatizado se llama escaneo de puertos, un proceso donde software malicioso envía paquetes de datos a decenas de miles de direcciones numéricas en busca de servicios vulnerables. En la práctica, esto significa que cualquier servidor conectado a internet sufre intentos de intrusión silenciosos decenas de veces al día, mucho antes de que ocurra un ataque real.

Para blindar su infraestructura contra este mapeo previo, su primera línea de defensa debe ser el enrutador o el cortafuegos en el borde de la red. Cuando combinamos esta barrera con prácticas avanzadas de cómo bloquear tráfico malicioso en el borde con eBPF y XDP, reducimos drásticamente el riesgo de compromiso de los servidores internos. El objetivo es impedir que el atacante descubra qué puertos están abiertos, haciendo que su sistema sea invisible para los bots de escaneo.

Por qué nftables reemplaza al legado iptables con ventajas

Durante muchos años, la utilidad iptables fue el rey absoluto del filtrado de paquetes en el sistema operativo Linux. Sin embargo, su estructura sufría de duplicación de código para IPv4 e IPv6, además de caídas severas de rendimiento cuando se añadían reglas complejas en secuencia. Nftables surgió para unificar toda esta lógica en una arquitectura moderna que interactúa directamente con el subsistema de red del núcleo, procesando reglas de forma mucho más rápida y elegante.

En la práctica, esto significa que podemos escribir conjuntos de reglas más limpios, fáciles de leer y que consumen menos memoria del procesador al inspeccionar el tráfico de red. Esta eficiencia es vital cuando manejamos miles de paquetes por segundo de direcciones IP sospechosas intentando sondar puertos aleatorios. Si ya ha utilizado herramientas más simples como cómo liberar puertos en el firewall de Linux con UFW para la gestión básica de reglas, notará que nftables ofrece un control quirúrgico y de muy bajo nivel sobre cada paquete que cruza la interfaz de red.

Configurando la tabla base y las cadenas en nftables

Antes de crear bloqueos sofisticados, necesitamos estructurar el esqueleto de nuestro cortafuegos utilizando la herramienta de línea de comandos de nftables. El ecosistema de nftables trabaja con tablas que contienen cadenas, y estas cadenas organizan el momento exacto en que los paquetes de red son inspeccionados, ya sea justo en la entrada de la interfaz o antes de llegar a las aplicaciones.

Para iniciar la configuración de nuestro mecanismo de defensa en el borde, ejecute la siguiente secuencia de comandos en la terminal de su servidor Linux con privilegios administrativos:

  1. Crear la tabla principal inet para abarcar tanto el tráfico IPv4 como IPv6:
    nft add table inet firewall
  2. Añadir la cadena de entrada para interceptar paquetes que llegan desde el exterior:
    nft add chain inet firewall input { type filter hook input priority filter \; policy accept \; }
  3. Definir una cadena dedicada para registrar y tratar paquetes sospechosos de escaneo:
    nft add chain inet firewall varredura

Detectando el comportamiento de escaneo con conjuntos dinámicos

Un escaneo de puertos clásico se delata por la prisa: el atacante intenta abrir conexiones en decenas de puertos diferentes en cuestión de segundos. Para atrapar este comportamiento con las manos en la masa, nftables permite crear conjuntos dinámicos que almacenan temporalmente las direcciones IP que superan un umbral razonable de intentos de conexión.

En la práctica, le decimos al cortafuegos que monitoree solicitudes en puertos cerrados y, si una IP alcanza más de cinco intentos en diez segundos, la agregue automáticamente a una lista negra temporal. Este enfoque se asemeja a estrategias robustas aplicadas en cómo bloquear ataques de fuerza bruta en SSH con Fail2Ban, pero operando directamente en el espacio del núcleo para máxima velocidad de respuesta y menor consumo de recursos.

Escribiendo reglas prácticas de mitigación en nftables

Con los conceptos y la estructura base definidos, es el momento de aplicar las reglas que harán el trabajo pesado de filtrado y bloqueo. Configuraremos nftables para identificar patrones repetitivos de sondeo y descartar los paquetes correspondientes antes de que consuman procesamiento de nuestros servicios internos.

Para aplicar estas reglas de protección de forma permanente y funcional, utilice los siguientes comandos en su entorno de producción:

  1. Crear un conjunto dinámico llamado 'port_scanners' que expira tras un minuto de bloqueo:
    nft add set inet firewall port_scanners { type ipv4_addr\; flags dynamic, timeout\; timeout 1m\; size 65535\; }
  2. Añadir la regla que inserta las IPs infractoras en el conjunto dinámico al superar el límite de escaneo:
    nft add rule inet firewall input tcp flags \& (syn\|ack) == syn add @port_scanners { ip saddr ct count over 5 } drop
  3. Garantizar que cualquier paquete procedente de una IP ya presente en la lista negra sea sumariamente ignorado:
    nft add rule inet firewall input ip saddr @port_scanners drop

Validando y monitoreando la eficacia del cortafuegos

Implementar reglas de seguridad sin probarlas es como poner un candado en la puerta sin comprobar si la llave realmente gira. Tras configurar nftables, es fundamental realizar auditorías simulando escaneos desde una máquina externa para asegurar que el cortafuegos responde exactamente como se espera.

Puede utilizar herramientas legítimas de auditoría de red para disparar paquetes de prueba contra su IP pública y luego inspeccionar el comportamiento del conjunto dinámico con el comando de listado de nftables. Si nota que el tráfico legítimo se ve afectado por falsos positivos, simplemente ajuste el límite numérico de intentos o el tiempo de expiración del conjunto en su script de configuración.

Consideraciones Finales

Bloquear escaneos de puertos en el borde de la red usando nftables transforma un servidor expuesto en una fortaleza silenciosa, capaz de repeler sondeos automatizados antes de que comprometan la estabilidad de los servicios. Al unir conjuntos dinámicos, conteo inteligente de paquetes y el rendimiento nativo del núcleo de Linux, construimos una barrera impenetrable contra el mapeo diario de internet.

Mantener esta defensa activa requiere un monitoreo continuo y ajustes finos en los umbrales de bloqueo para equilibrar seguridad rígida y accesibilidad legítima. Con una arquitectura de cortafuegos bien planificada, protege sus recursos informáticos y gana la tranquilidad operativa necesaria para centrarse en el crecimiento de sus proyectos tecnológicos.