Ir al contenido principalIr al pie de página
Noticias sobre seguridad

Proteger un clúster de servidores con ReportedIP

Patrick Schlesinger
Diagrama que muestra cómo los nodos de los clústeres de correo, Edge y aplicaciones consultan la lista de bloqueo ReportedIP (bl.reportedip.de) y reciben una respuesta con la entrada 127.0.0.2.

Un clúster de servidores multiplica la superficie de ataque: cada nodo web, servidor de retransmisión de correo y proxy perimetral es objeto de pruebas de forma independiente, pero la mayoría de las configuraciones asignan a cada nodo sus propias reglas de bloqueo a medio configurar. ReportedIP todo el clúster comparta una única fuente de información sobre amenazas de la comunidad; además, gracias a la zona DNS/RBL, cada nodo puede acceder a ella a través de DNS sin cifrar, sin necesidad de código de integración específico para cada nodo.

La zona DNS/RBL es un complemento de pago disponible en los planes PRO y superiores. Suscríbete desde tu panel de control y, a continuación, configura cada nodo para que apunte a una cadena de zona.

Por qué un clúster necesita una fuente de información sobre amenazas compartida

Cuando diez nodos mantienen cada uno su propia lista de bloqueados, una dirección IP bloqueada en el nodo 1 sigue llegando a los nodos del 2 al 10 hasta que cada uno de ellos se entera de ello por su cuenta. Esa brecha es precisamente donde prosperan los ataques de «credential stuffing» y las campañas de spam: se propagan por los nodos más rápido de lo que tarda un solo nodo en actualizar sus reglas.

Un feed compartido acorta la distancia. ReportedIP las direcciones IP a partir de una red comunitaria en tiempo real (con un nivel de confianza ≥ 75 % antes de incluir una dirección en la lista, y un periodo de espera de 48 horas para falsos positivos), y todos los nodos de tu clúster reciben la misma respuesta. Un nuevo atacante detectado en cualquier punto de la red queda bloqueado en todo tu clúster en un solo ciclo de caché.

Consultar la lista de bloqueados a través de DNS desde cada nodo

La zona DNS/RBL convierte la lista negra de la comunidad en una lista negra de DNS estándar en bl.reportedip.de. Un nodo busca la dirección IP del cliente invertida en tu token y lee la respuesta —la misma convención que utilizan Spamhaus y todas las demás listas negras de DNS—, por lo que cualquier software compatible con RBL funciona sin necesidad de código personalizado. A continuación RFC 5782, admite tanto IPv4 como IPv6, y devuelve 127.0.0.x códigos:

RespuestaSignificadoAcción
127.0.0.2Incluido en la lista, alto nivel de confianza (≥ 90)Rechazar
127.0.0.3Incluido en la lista, nivel de confianza medio (75-89)Rechazar o puntuar
NXDOMAINLimpioAceptar
127.255.255.251Se ha alcanzado la cuota diariaAñadir un token
127.255.255.252Token no válido / inactivoComprobar la factura

Un único token para todo el clúster: el uso se suma, no se duplica

No es necesario un token por cada nodo. Configura cada servidor de retransmisión de correo para que apunte a la misma cadena de zona. Cada token incluye 100 000 consultas DNS al día, y el uso se acumula como la suma de todos los nodos: si el nodo A atiende 40 000 consultas y el nodo B, 35 000, el total asciende a 75 000 dentro de la cuota diaria. En la práctica, el almacenamiento en caché del resolutor te permite mantenerte muy por debajo de ese límite: una respuesta almacenada se guarda en caché durante 30 minutos y una NXDOMAIN para 5, por lo que la mayoría de las consultas repetidas nunca salen de tu red.

Cuando un clúster con mucha actividad se acerque al límite, añade un segundo token y distribúyelo entre los grupos de nodos: las cuotas son independientes. Un límite de velocidad por token de aproximadamente 50 consultas por segundo protege contra picos repentinos; los picos sostenidos que superen ese límite se gestionan con REFUSED.

Relés de correo: una línea en Postfix o Rspamd

En cada servidor MX y en cada servidor de retransmisión de salida del clúster, añade la zona a tus restricciones. Postfix genera automáticamente la consulta inversa para los remitentes IPv4 e IPv6 (versión 2.6 y posteriores):

# main.cf (same on every mail node)
smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_rbl_client <your-token>.bl.reportedip.de=127.0.0.[2..3]

# keep the token out of bounces and logs:
rbl_reply_maps = texthash:/etc/postfix/rbl_reply

Los usuarios de Rspamd habilitan ambas familias de direcciones y asocian los códigos de retorno a símbolos:

# local.d/rbl.conf
rbls {
  reportedip {
    rbl = "<your-token>.bl.reportedip.de";
    ipv4 = true;
    ipv6 = true;
    returncodes {
      REPORTEDIP_HIGH   = "127.0.0.2";
      REPORTEDIP_MEDIUM = "127.0.0.3";
    }
  }
}

La configuración completa, incluida la anulación de la respuesta de rechazo que evita que tu token aparezca en los mensajes de rebote SMTP, se encuentra en la documentación de la zona DNS/RBL. El token es una credencial privada: trátalo como si fuera una contraseña y cámbialo desde el panel de control si se filtra.

Subzonas de categoría para el filtrado por servicio

Añade un slug de categoría para filtrar por tipo de amenaza, de modo que cada nodo bloquee únicamente lo que le sea relevante. Un nivel de aplicaciones con muchas sesiones de inicio de sesión puede consultar la lista de ataques de fuerza bruta; un nivel de correo electrónico puede dar prioridad a la lista de spam:

<reversed-ip>.<your-token>.brute-force.bl.reportedip.de
<reversed-ip>.<your-token>.spam.bl.reportedip.de

Entre las babosas se incluyen spam, brute-force, cms-login, web-attacks, malware, ddos, fraud, infrastructure, y apt. Solo se devuelve un resultado si la dirección IP figura en esa categoría.

Nodos periféricos y web: el feed y la API

No todos los niveles son compatibles con DNSBL. Los proxies inversos, los cortafuegos y los servidores web funcionan mejor con el feed de la lista negra de la comunidad — una exportación actualizada en formato texto/JSON/CSV que se obtiene mediante una tarea programada y se carga en fail2ban, un iptables ipset o un mapa de denegación de Nginx. Cada nodo periférico del clúster ejecuta el mismo cron y bloquea las mismas direcciones.

En el caso de las aplicaciones y los backends de API que necesitan una respuesta en el momento de la solicitud, el API REST devuelve un desglose completo de la confianza por IP (añadir verbose=true (para ver todos los componentes de la puntuación). Una cuenta gratuita incluye 1.000 comprobaciones y 50 informes al día; las operaciones masivas están disponibles en el plan Pro y superiores.

Una estructura de referencia para un clúster de tres niveles

Nivel de clústerCómo lee el feedReportedIP
MX / servidores de retransmisión de correo salienteConsulta de DNSBL en el momento de la conexión SMTPZona DNS / RBL
Proxies inversos / WAF / perímetroExportación de la lista de bloqueados a nginx / iptables / fail2banCanal de la lista negra
Servidores de aplicaciones y APIComprobación de la puntuación por solicitudAPI pública
Nodos señuelo / honeypotNotificar las direcciones IP de los atacantes a la redServidor trampa

Cada nivel lee datos de una base de datos comunitaria, por lo que un atacante detectado por un nodo trampa queda bloqueado en tus servidores de retransmisión de correo y proxies perimetrales en el siguiente ciclo de caché. Cerrar el círculo —es decir, comunicar lo que ven tus propios nodos— es lo que garantiza que la fuente compartida sea precisa para todos.

Lo que necesitas para empezar

Preguntas frecuentes

¿Necesito un token diferente para cada servidor?

No. Un solo token cubre todo el clúster; las 100 000 consultas diarias se suman en todos los nodos que lo utilizan. Añade un segundo token solo cuando un clúster grande necesite más margen, y luego distribúyelo entre los grupos de nodos.

¿Funciona la zona DNS/RBL con servidores de correo IPv6?

Sí. La zona cumple con el RFC 5782 y responde por igual a las consultas IPv4 e IPv6. Postfix 2.6+ y Rspamd generan automáticamente la consulta inversa para cualquiera de las dos familias de direcciones; una misma directiva cubre ambas.

¿Qué ocurre si un nodo alcanza el límite diario?

Una vez que el total diario acumulado del token alcanza su límite, la zona vuelve a 127.255.255.251 y deja de resolver hasta el siguiente reinicio a medianoche (UTC). Añade otro token para aumentar la capacidad. Dado que las respuestas se almacenan en caché durante un máximo de 30 minutos en cada resolutor, la mayoría de los clústeres nunca se acercan al límite.

Deja un comentario

Tu dirección de correo electrónico no se publicará. Los campos obligatorios están marcados con *

Rellena este campo
Rellena este campo
Introduce una dirección de correo electrónico válida.
Debes aceptar los términos para continuar