Estas aquíBlogs / blog de calel / El uso de demoras en Exim4 para combatir SPAM

El uso de demoras en Exim4 para combatir SPAM


Por calel Enviado el 10 Enero 2010

Recientemente hice una modificación pequeña a la configuración de Exim4 para eliminar ataques de diccionario. La modificación fue tan exitosa que la publiqué en el Blog,

http://www.debianchile.org/?q=node/135

La configuración descrita impone una demora de dos minutos si el IP intenta repartir más de un correo a un receptor inexistente, dentro de ese lapso. En un periodo menor a una semana habían cesado todos los ataques de diccionario.

Quedé sorprendido que una simple demora de dos minutos hiciera desistir a spameros de atacar mi sitio. Esta demora debe ser costosa. ¿Por que? Este es mi razonamiento: Los spameros basan su éxito en la teoría de probabilidades. Si bien la probabilidad de éxito (lograr que un SPAM pase todos los escrutinios de Exim y Spamassassin) es bastante baja, la cantidad de pruebas, número bien grande, hace que al fin se cuelen uno que otro SPAM. En eso consiste el éxito de un spamero. El número importante es entonces el máximo de conexiones posible que el servidor del spamero puede establecer. Ese número es grande, pero no infinito. Si Exim mantiene por dos minutos la conexión abierta, a la espera, para después responder que deniega la conexión, el costo de la demora se torna inaceptable para el spamero si dentro de esos dos minutos puede en vez hacer miles de otros intentos. Ese es el motivo por el cual una pequeña demora se torna tan costosa.

He encontrado varios puntos en la configuración de Exim en donde insertar una leve demora hace desistir otros ataques recurrentes, o al menos disminuirlos.

Edita el archivo /etc/exim4/conf.d/acl/30_exim4-config_check_rcpt y modifica según descrito.

  1. DNSBL

    # DNS blacklist
    drop
       log_message = listed by $dnslist_domain
       dnslists = bl.spamcop.net : b.barracudacentral.org : zen.spamhaus.org : dnsbl.sorbs.net
       delay = 2m

    Esta modificación impone una demora de dos minutos si el sitio ya está marcado por una lista negra DNS y puede aplicarse en cualquier punto a partir de aceptar una conexión autenticada,

    accept
       authenticated = *
       control = submission/sender_retain

    Aplicarla antes de la autenticación puede bloquear a usuarios locales que envían correo desde redes dinámicas (que generalmente están todas en listas negras DNS).

  2. Intentos de relay.

    Modifica,

    require
       message = relay not permitted
       domains = +local_domains : +relay_to_domains

    por,

    drop
       message = relay not permitted
       !domains = +local_domains : +relay_to_domains
       delay = 2m

    Es en el fondo la misma regla, excepto a que bota inmediatamente el mensaje, imponiéndole la demora a quien intente usarnos ilegalmente como relay.

  3. Verificación de dirección.

    # .ifdef CHECK_RCPT_VERIFY_SENDER
       deny
         message = Sender verification failed
         !acl = acl_local_deny_exceptions
         !verify = sender
         delay = 2m
    # .endif

    Eficiente para aquellos intentos que usan emisor con dominio falso, inexistente o inventado.

  4. Receptor verificable.

    Modifica,

    require
       verify = recipient

    por,

    drop
       !verify = recipient
       delay = 2m

    Es en el fondo la misma regla, excepto a que bota inmediatamente el mensaje si el receptor no existe, imponiéndole además la demora.

Todas estas modificaciones hay que usarlas con cuidado, porque Exim tiene un máximo de 25 conexiones simultaneas. Si el sitio es atacado a una tasa alta, las demoras pueden fácilmente agotar las conexiones y botar no solo SPAM, sino también correo legítimo. Una buena práctica es ir insertando las modificaciones una a la vez e ir monitoriando el efecto, porque la tasa de ataques irá disminuyendo con cada una de ellas, pero a medida que transcurra el tiempo.

Hecha cualquier modificación, actualiza la configuración y reinicia el servidor,

# update-exim4.conf
# /etc/init.d/exim4 restart
Tu voto: Nada Promedio: 7 (2 votos)