visca.com

La lluita contra spam

Índex

Introducció
El programari lliure
Els programes anti-spam

Conclusions
Autor

Introducció

En aquest document descriurem el programi lliure que fem servir per a rebutjar els missatges spam. Durant 2004, el nostre servidor va rebre entre 300.000 i 400.000 connexions SMTP cada mes, el 72.13% de les quals van ser rebutjades abans que el remitent enviés la comanda DATA (vegeu http://www.ietf.org/rfc/rfc0821.txt). Heus ací el gràfic:

Graph

Considerem que és millor rebutjar com més aviat millor la connexió amb l'ordinador que ens vol enviar spam, idealment abans que el remitent enviï la comanda DATA, ja que així no es malgasta ample de banda acceptant els missatges ni responent-los. A més, tot i que tenim l'obligació moral d'explicar als clients rebutjats el motiu del rebuig, mai no volem enviar tals explicacions (bounces) a les adreces que apareixen com a remitents ens els camps Return-Path i From, ja que són fàcilment falsificades.

Principi de la pàgina | Els programes anti-spam


El programari lliure

El programi lliure que fem servir és el següent:

Principi de la pàgina | Els programes anti-spam


Els programes anti-spam

Els programes responsables per a rebutjar connexions de spam són:

rblsmtpd

rblsmtpd, que forma part del programari ucspi-tcp, controla les connexions a port 25 (SMTP). Abans d'acceptar cap connexió, el rblsmtpd consulta una o més llistes DNSBL (DNS Blackhole Lists o Llistes negres de servidors de dominis), les quals consten de les adreces IP d'ordinadors que tenen fama d'enviar spam. Si la IP s'hi troba, la connexió es talla i l'ordinador del remitent rep una resposta explanatòria.

Heus ací els noms de les quatre llistes DNSBL que fem servir i exemples de les respostes que donen:

Notem que es pot fer excepcions a aquestes llistes. Per exemple, el bloc d'adreces 213.4.0.0/16 (terra.es) es troba a moltes llistes negres: 213.4.129.129 a nou, 213.4.129.49 a quatorze, etc. (vegeu http://www.dnsstuff.com/tools/ip4r.ch?ip=). Però molts usuaris que no envien mai spam no tenen opcions sinó fer servir aquests servidors de terra i, per tant, no volem rebutjar-los. Així podem incloure la línia següent com a regla per a tcpserver per tal que les connexions d'aquest bloc s'acceptin:

213.4.:allow,RBLSMTPD=""

Com veurem en la secció següent, també podem aprofitar aquest arxiu de configuració per enviar una resposta a les IPs que rebutgem, en lloc de disconnectar-les a seques.

Principi de la pàgina | Els programes anti-spam


tcpserver

tcpserver accepta o rebutja connexions TCP seguint les instruccions compilades per tcprules. Aquestes instruccions consten de línies de text com les següents:

  1. 127.0.0.:allow,RELAYCLIENT=""
    Accepta connexions dels usuaris locals perquè puguin enviar missatges a qualsevol adreça.
  2. 209.150.128.170:allow,NOMFCHECK="1"
    Accepta connexions des de 209.150.128.170 encara que no existeixi el domini del seu remitent (envelope sender address). Per a més detalls, vegeu mfcheck.
  3. 213.4.:allow,RBLSMTPD=""
    Accepta connexions des del bloc 213.4.0.0/16 encara que les adreces IP formen part d'una llista negra tipus DNSBL.
  4. 141.52.27.52:allow,RBLSMTPD="Connection rejected: see http://visca.com/rej/?141.52.27.52"
    Rebutja connexions des de 141.52.27.52, enviant a l'ordinador del remitent un missatge explanatori.
  5. 18.23.0.32:deny
    Rebutja connexions des de 18.23.0.32 sense donar cap explicació.

El nostre procés per afegir IPs a la llista de rebutjades és el següent:

  1. Cada 60 minuts s'executa un programa que compta el nombre de connexions al port 25 que cada IP ha fet durant les últimes 24 hores. Si aquesta xifra sobrepassa el soft limit (500 connexions), s'envia a l'administrador un avís; si sobrepassa el hard limit (1000), la IP s'afegeix automàticament a la llista que tcpserver rebutja (IP::allow,RBLSMTPD="Connection rejected: see http://visca.com/rej/?IP).
  2. Cada 24 hores s'executa un programa que compta el nombre de connexions al port 25 que cada IP ha fet durant les últimes 24 hores i envia a l'administrador un informe com el següent (Explicació):
    216.136.204.119 => 280 => mx2.freebsd.org
      freebsd-user@visca.com
    85.136.2.203 => 118 Rejected by badrcptto
    202.138.195.203 => 72 dropped connection
    71.35.105.27 => 72 => 71-35-105-27.tukw.qwest.net
      ****@remote.com
      *****@remote.com
      *****@remote.com
    127.0.0.1 => 49 => localhost
    65.122.27.205 => 36 Denied in tcp.smtp file
    83.33.163.190 => 46 dropped connection
    141.52.27.52 => 42 => fzkmail2.fzk.de 
      localuser@visca.com
    213.97.182.177 => 38 Rejected by badrcptto
    80.32.82.150 => 34 => (correu legítim)
    217.126.126.59 => 28 dropped connection
    213.97.33.124 => 21 => (correu legítim)

    Tot és correu vàlid excepte els 42 missatges enviats des de 141.52.27.52 a localuser@visca.com. Després de comprovar que eren missatges spam, vam afegir aquesta IP a la llista llegida per tcprules per denegar accés a 141.52.27.52.

Per acabar aquest apartat, veurem un intent de connectar al servidor des d'una IP rebutjada per tcpserver/tcprules:

$ telnet visca.com 25
Trying 69.41.171.207...
Connected to visca.com.
Escape character is '^]'.
220 rblsmtpd.local
helo petonets.com
250 rblsmtpd.local
mail from: user@petonets.com
250 rblsmtpd.local
rcpt to: user@visca.com
250 rblsmtpd.local
data
451 Connection rejected: see http://visca.com/rej/?213.97.34.143

El nostre diari de visites SMTP mostra el següent:

2005-02-27 16:39:22.343981500 tcpserver: pid 26381 from 213.97.34.143
2005-02-27 16:39:22.344302500 tcpserver: ok 26381 :69.41.171.207:25 :213.97.34.143::61242
2005-02-27 16:39:22.346300500 rblsmtpd: 213.97.34.143 pid 26381: \
451 Connection rejected: see http://visca.com/rej/?213.97.34.143

Principi de la pàgina | Els programes anti-spam


mfcheck

El mfcheck només comprova que existeixen records DNS tipus 'A' (Address Records) i 'MX' (Mail Exchange Records) per al domini que intenta connectar al nostre servidor (vegeu http://support.algx.net/cst/dns/dns2.html#A i http://support.algx.net/cst/dns/dns2.html#MX). Si no n'hi ha, el missatge es rebutja.

Heus ací un intent de connectar al servidor utilitzant un domini que no existeix:

$ telnet visca.com 25
Trying 69.41.171.207...
Connected to visca.com.
Escape character is '^]'.
220 server.visca.com ESMTP
helo petonets.com
250 server.visca.com
mail from: lou@pepepepepepepepepepep
553 sorry, your envelope sender domain must exist (#5.7.1)

El nostre diari de visites SMTP mostra el següent:

2005-02-13 20:06:25.128602500 tcpserver: pid 3391 from 213.97.34.143
2005-02-13 20:06:25.143097500 tcpserver: ok 3391 :69.41.171.207:25 :213.97.34.143::62530
2005-02-13 20:06:51.904363500 pid 3391 \
mfcheck permanent lou@pepepepepepepepepepep

Principi de la pàgina | Els programes anti-spam


badhelo

Aquest program ens permet rebutjar connexions especificades en un arxiu a /var/qmail/control/badhelo. L'única entrada que tenim a l'arxiu és la nostra pròpia IP 69.41.171.207, ja que si un altre intenta connectar al nostre servidor dient que tingui la nostra IP, sabem que no és cert.

Aquí sota tenim un intent de connectar al servidor des d'una màquina remota utilitzant la salutació helo 69.41.171.207:

$ telnet visca.com 25
Trying 69.41.171.207...
Connected to visca.com.
Escape character is '^]'.
220 server.visca.com ESMTP
helo 69.41.171.207
250 server.visca.com
mail from: user@petonets.com
250 ok
rcpt to: user@visca.com
553 sorry, your helo parameter is in my badhelo list (#5.7.1)

El nostre diari de visites SMTP mostra el següent:

2005-02-13 19:59:37.671821500 tcpserver: pid 12283 from 213.97.34.143
2005-02-13 19:59:37.674522500 tcpserver: ok 12283 :69.41.171.207:25 :213.97.34.143::62404
2005-02-13 19:59:52.084769500 pid 12283 badhelo 69.41.171.207

Principi de la pàgina | Els programes anti-spam


badrcptto

El programa badrcptto rebutja tot missatge dirigit a adreces en l'arxiu ./badrcptto. Hi ha dues raons importants que hem de tenir aquesta capacitat: per a rebutjar correctament missatges a adreces no existents i per a defensar-nos contra els joe-jobs.

1) Rebutjant correctament missatges a adreces no existents

Un cop que una adreça de correu electrònic formi part de les llistes dels spammers no hi ha res a fer per treure'n. L'adreça rebrà spam per a sempre més i considerem que val més donar-la de baixa. Però donant de baixa a una adreça no atura l'arribada cada dia de centenars de missatges al servidor dirigits a aquesta adreça obsoleta.

El badrcptto rebutja tots aquests missatges en el moment de veure que el destinatari ja no és vàlid, sense gastar l'ample de banda necessari per a acceptar el missatge sencer ni, encara més important, sense retornar un resposta de rebuig (bounce) als innocents que poden aparèixer en els camps Return-Path i From.

2) Defensant-se contra els joe-jobs

Un joe-job és l'acte d'enviar milions de missatges spam utilitzant l'adreça d'una víctima innocent en els camps Return-Path o From. Si els qui reben aquest spam no miren atentament les capçaleres, podran pensar que la víctima innocent n'és l'autèntic originador i denunciar-lo. Però potser encara pitjor, una part important dels missatges spam va dirigida a adreces no existents, així provocant respostes de rebuig (bounces) que poden arribar a inundar el servidor de la víctima. En casos extrems --milers de missatges cada hora-- no hi ha res a fer sinó afegir temporalment l'adreça de la víctima a l'arxiu badrcptto.

També hi ha casos en què el joe-job va dirigit contra un domini, amb les adreces falsificades creades a l'atzar (aba@victima.com, abd@victima.com, etc.). En aquest cas, si el volum de missatges de rebuig fa que el servidor no pot funcionar amb normalitat, la millor solució és la instal·lació dels pedaços goodrcptto, realrcptto o validrctptto, els quals rebutgen missatges a usuaris no existents. També podem eliminar aquests missatges amb qmail-qfilter.

Aquí sota tenim un intent d'enviar un missatge a una adreça que forma part de l'arxiu badrcpttto:

$ telnet visca.com 25
Trying 69.41.171.207...
Connected to visca.com.
Escape character is '^]'.
220 server.visca.com ESMTP
helo petonets.com
250 server.visca.com
mail from: user@petonets.com
250 ok
rcpt to: lou@visca.com
553 sorry, this recipient is in my badrecipientto list (#5.7.1)

El nostre diari de visites SMTP mostra el següent:

2005-02-13 19:58:12.293372500 tcpserver: pid 26485 from 213.97.34.143
2005-02-13 19:58:12.296056500 tcpserver: ok 26485 :69.41.171.207:25 :213.97.34.143::62377
2005-02-13 19:59:16.155637500 qmail-smtpd: badrcptto: lou@visca.com at 213.97.34.143

Principi de la pàgina | Els programes anti-spam


badmailfrom

El programa badmailfrom rebutja tot missatge si el envelope sender (Return-Path) troba en l'arxiu ./badmailfrom.

Aquí sota tenim un intent d'enviar un missatge des d'una adreça que forma part de l'arxiu badmailfrom:

$ telnet visca.com 25
Trying 69.41.171.207...
Connected to visca.com.
Escape character is '^]'.
220 server.visca.com ESMTP
helo there
250 server.visca.com
mail from: success4U@opportunity.com
250 ok
rcpt to: user@visca.com
553 sorry, your envelope sender is in my badmailfrom list (#5.7.1)

El nostre diari de visites SMTP mostra el següent:

2005-02-13 20:09:35.094038500 tcpserver: pid 2647 from 213.97.34.143
2005-02-13 20:09:35.106705500 tcpserver: ok 2647 :69.41.171.207:25 :213.97.34.143::62589
2005-02-13 20:09:53.687669500 pid 2647 badmailfrom success4U@opportunity.com

Principi de la pàgina | Els programes anti-spam


qmail-qfilter

El programa qmail-qfilter permet filtrar el envelope o el cos del missatge; també pot tallar la connexió i enviar a l'ordinador del remitent un missatge explicant el motiu del rebuig. Òbviament, per a fer això cal acceptar el missatge, però podem fer que els missatges de rebuig --una sola línia de text, no tot el missatge sencer-- van directament a l'ordinador del remitent, no als innocents que poden aparèixer en els camps Return-Path i From.

Per exemple, es pot rebutjar missatges a usuaris no-existents o bé missatges que tenen vinculacions amb una extensió perillosa per als usuaris de Windows.

Aquí sota tenim un intent d'enviar un missatge a un usuari no-existent:

$ telnet visca.com 25
Trying 69.41.171.207...
Connected to visca.com.
Escape character is '^]'.
220 server.visca.com ESMTP
helo petonets.com
250 server.visca.com
mail from: user@petonets.com
250 ok
rcpt to: djdjdj@visca.com
250 ok
data
354 go ahead
Hi.
.
554 mail rejected: recipient address does not exist (#5.3.0)

El nostre diari de visites QFILTER mostra el següent:

TIME=02-13 20:50:03
TCPREMOTEIP=213.97.34.143
QMAILHOST=petonets.com
QMAILUSER=lou
QMAILRCPTS=djdjdj@visca.com
Non-existent: djdjdj@visca.com

Aquí sota tenim un intent d'enviar un missatge amb una vinculació que té una extensió prohibida:

$ telnet visca.com 25
Trying 69.41.171.207...
Connected to visca.com.
Escape character is '^]'.
220 server.visca.com ESMTP
helo petonets.com
250 server.visca.com
mail from: user@petonets.com
250 ok
rcpt to: user@visca.com
250 ok
data
354 go ahead
Subject: Imatge falsa
From: sexi-sexi@meuca.com
Content-Type: image/jpeg
Content-Disposition: attachment; filename=pervers.jpeg.scr

/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAA0JCgsKCA0LCwsPDg0QFCEVFBISFCgdHhghMCoyMS8q
Li00O0tANDhHOS0uQllCR05QVFVUMz9dY1xSYktTVFH/2wBDAQ4PDxQRFCcVFSdRNi42UVFRUVFR
UVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVH/wAARCAKcBE4DASIA
AhEBAxEB/8QAGwAAAgMBAQEAAAAAAAAAAAAAAAECAwQFBgf/xABJEAACAgEDAgQDAwgFCgYDAQEB
etc.
.
554 mail rejected: attachment has banned extension (#5.3.0)

El nostre diari de visites QFILTER mostra el següent:

TIME=02-13 20:50:03
TCPREMOTEIP=213.97.34.143
QMAILHOST=petonets.com
QMAILUSER=lou
QMAILRCPTS=user@visca.com
Subject: Imatge falsa
From: sexi-sexi@meuca.com
Checking filename...
File named pervers.jpeg.scr matched a banned extension!

Principi de la pàgina | Els programes anti-spam


Conclusions

  1. Podem rebutjar connexions SMTP al nostre servidor abans que el remitent enviï la comanda DATA si:
    1. la IP del remitent forma part d'una llista negra
    2. el seu domini no té ni records DNS A ni MX
    3. el remitent diu que té la nostra pròpia IP
    4. el recipient del missatge forma part de la nostra llista badrctptto
    5. el Return-Path del missatge forma part de la nostra llista badmailfrom
  2. Cal enviar un missatge de rebuig a l'ordinador del remitent explicant per què l'hem rebutjat.
  3. Un cop que rebem el contingut del missatge, encara som a temps de rebutjar el missatge per altres motius (usuari no-existent, extesions perilloses, etc.).
  4. Hauríem d'evitar tant com podem l'enviament de respostes de rebuig a les adreces que apareixen en els camps Return-Path i From.

Principi de la pàgina | Els programes anti-spam


Autor

Martin Louis Hevly és administrador de sistems del servidor visca.com, on s'allotja uns cinquanta dominis. També és autor dels cinc volums de Gramàtica anglesa i de la web Anglès fàcil, un mètode per a aprendre l'anglès on-line. Finalment, podeu seguir els enllaços següents per a escoltar la seva música:
Ni Quarts Ni Hores
La música d'en Lou Hevly
Robert the Robot and Lou the Human

Principi de la pàgina | Els programes anti-spam


contacte / email


visca.com