mail-gateway_amb_amavisd-new

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

mail-gateway_amb_amavisd-new [2012/06/06 12:15] (current)
Line 1: Line 1:
 +====== Comentaris dubtes i peticions ======
 +
 +Qualsevol cosa que volgueu demanar-me comentar, suggerir o simplement queixar-vos perquè no us funciona ho podeu fer a l'article [[http://oriol.joor.net/blog/?item=mailgateway-postfix-amavisd-clamav-spamassassin-sasl|mailgateway: postfix+amavisd+clamav+spamassassin+sasl]]
 +
 +
 +====== Changelog ======
 +
 +  * 12/06/2007 - Afegim la capacitat de verificar si existeixen els recipients d'un correu d'un domini local. Explicat a [[http://oriol.joor.net/blog/?item=postfix-verifiquem-recipients-des-del-mailgateway|Postfix: Verifiquem recipients des del mailgateway]]
 +
 +
 +====== Introducció i Objectiu ======
 +
 +Algunes empreses disposen de servidors de correu amb infraestructures internes realment complexes i que seguint la màxima de la informàtica el millor que podem fer és: __si alguna cosa va no la toquis__. El problema és que sovint aquestes estructures tan complexes no disposen de filtres de correu mailiciós. O sigui, no són capaces de passar antivirus al correu, filtrar l'//spam// i controlar altres enviaments maliciosos de correu. A més intentar afegir un software dins el propi servidor que ens fassi aquestes funcions sobre l'Mail Transport Agent (MTA) que ja tenim corrent és un risc innecessari i poc rentable moltes vegades.
 +
 +Una solució que s'usa sovint és afegir un servidor només per filtrar el correu que entre i surt de l'empresa i intentar eliminar amb aquest //mail-gateway// tots els correus no dessitjats. Bàsicament doncs el que fem és col·locar l'SMTP (Simple Mail Transport Protocol) del //mail-gateway// com a porta d'entrada del correu extern. Després modifiquem el servidor intern de correu perquè tots els correus que hagi d'enviar cap a fora ho fassi a través del //mail-gateway//. O sigui, posem com a servidor de //relay// fix del servidor intern la direcció del MTA del //gateway//.
 +
 +Amb aquest escenari els usuaris no han de canviar res de res, ja que només estem intervenint el port 25/tcp, o sigui, l'SMTP. A més al servidor intern de correu podem crear una compte de gestió de correo mailiciós, per exemple //mailgateway@exemple.com// (sent exemple.com el nostre domini). En aquest compte li creem dues carpetes una que es digui //spam// i l'altre que es digui //ham//. El que farem és sincronitzar el correu d'aquestes comptes amb una carpeta del //mail-gateway// (si les comptes són IMAP és bona idea sincronitzar-les amb l'[[http://www.quux.org/devel/offlineimap|offlineimap]]). Quan tinguem aquests correus al //mail-gateway// li direm als filtres //bayessians// de l'//antispam// que aprenguin com és el correu maliciós que no és capaç de filtrar i com és el correu que ha filtrat i que era legítim.
 +
 +Aquesta compte de correu (mailgateway@exemple.com) que hem creat al servidor intern, la podem configurar com a compte de correu secundaria a un administrador de la xarxa. Així aquest podrà gestionar el manteniment sense haver de tocar el //mail-gateway//. En cas de que hi hagi algún usuari de la xarxa que vulgui localitzar un correu que s'ha filtrat l'administrador ho podrà fer des d'aquesta compte.
 +
 +
 +A més pels usuaris que estan fora de l'empresa, delegacions o d'altres similars ens pot interessar autenticar l'SMTP per tal de que aquests usuaris puguin usar l'SMTP del //mailgateway// per enviar correu. Així doncs, aprofitarem el servei d'IMAP (Internet Message Access Protocol) del servidor intern per validar l'autenticació en l'SMTP. Sona una mica extrany però el mètode és ben senzill. Es tracta d'aprofitar la compte l'usuari i clau que tenen els usuaris en el servidor IMAP intern, llavors es configura el MUA perquè usi aquestes dades com a informació per autenticar l'SMTP i el servidor d'MTA quan rep una autenticació via SMTP el que fa és obrir una connexió IMAP contra el servidor intern i provar l'usuari i clau que el client l'hi ha enviat a l'SMTP si això és correcte l'MTA permet enviar correu al MUA amb l'origen i destí que vulgui.
 +
 +====== Diagrama de xarxa ======
 +
 +{{ http://oriol.joor.net/blog/wiki/media/mailgateway/diagrama-xarxa.png }}
 +
 +====== Esquema dels serveis i tractament del correu ======
 +
 +{{ http://oriol.joor.net/blog/wiki/media/mailgateway/esquema.png }}
 +
 +
 +En aquest esquema es poden observar els 3 ports TCP que publicarem per filtrar el correu i les principals opcions de configuració dels serveis que publiquen els ports.
 +
 +===== Fluxe dels correus =====
 +
 +Quan un servidor SMTP tan de la nostre xarxa com d'una xarxa externa envia un correu contra el //mail-gateway// lògicament ho fa pel port 25/TCP contra el servidor SMTP, en el nostre cas //postfix//. Aquest com podem veure en l'esquema re-envia el correu contra el port 10024 de la IP //localhost//. A més aquest port només és capaç de rebre peticions desde //localhost// per evitar problemes de seguretat. El port del que estem parlant si mirem a l'esquema podeu veure que l'esta publicant l'//amavis//
 +
 +L'//amavis// és el programa encarregat de supervisar els filtres //antispam// i //antivirus//, és el que farà les crides pertinents a tercers programes i el que s'encarregarà de capturar els errors i enviar els missatges de //log//, //email// i altres a qui correspongui. En cas de que no es detecti cap anomalia en el correu aquest es re-enviarà al port //localhost:10025/TCP//.
 +
 +Segons l'esquema el port 10025/TCP també l'esta plublicant el //postfix//. Concretament el que farà l'SMTP en aquest cas és buscar a qui va dirigit el correu si a un destí local (//local_relay//) o a un destí remot (//MX dns lookup//). 
 +
 +====== Configurant els serveis ======
 +
 +===== postfix =====
 +
 +El servidor SMTP bàsicament té dos fitxers de configuració principals. Que en el nostre cas no són especialment llargs. Així doncs, ens serà relativament senzill saber si algo no funciona.
 +
 +Fitxer **/etc/postfix/master.cf**:
 +
 +[[fitxer master.cf]]
 +
 +Com es pot comprovar en aquest fitxer és en el que s'explica quin serà el flux del correu, li diem al //postfix// quin serà l'ordre en que s'intentarà processar el correu i qui l'atendrà en cada moment.
 +
 +Fitxer **/etc/postfix/main.cf**:
 +
 +[[fitxer main.cf]]
 +
 +
 +Com podem veure en aquest fitxer apliquem sobretot filtres bàsics per evitar tenir el //relay// de correu obert. Permetem enviar correus des de i cap a on vulguem, sempre que estiguem dintre d'una xarxa pròpia. Però els SMTP que es connecten des d'altre xarxes tenen força restriccions com podem veure a partir del comentari //Filtres anti-spam//. La resta de configuracions són força típiques. Cal que ens adonem que si no volem que el //mail-gateway// es quedi amb cap correu hem de fer que el seu domini difereixi del domini del servidor intern de correu. Després pels correu que es generin localment si volem sobre-escriure aquest domini podem usar la variable //myorigin//.
 +
 +D'aquests fitxer de configuració se'n extreuen dos fitxers més, un on direm quins són els nostres dominis locals (els de la nostre xarxa, no del //mailgateway//) i l'altre on direm quin és el servidor que ha d'atendre explicitament els correus per al domini al que van destinats digui el que digui el DNS.
 +
 +El fitxer **/etc/postfix/relay_delays**:
 +
 +<code bash>
 +joor.net OK
 +oriol.joor.net OK
 +</code>
 +
 +El fitxer **/etc/postfix/transport**:
 +
 +<code bash>
 +local smtp:10.138.0.2:25
 +oriol.joor.net smtp:10.138.0.2:25
 +joor.net smtp:10.138.0.2:25
 +oriolrius.cat smtp:10.138.0.2:25 
 +</code>
 +
 +El domini //local// es refereix al domini definit a la variable de configuració //mydomain//. Així mai quedaràn correus enmagatzemats al //mailgateway//.
 +
 +===== amavisd =====
 +
 +L'//amavisd-new// bàsicament té un fitxer de configuració important. Aquest fitxer és llarguíssim i pesadíssim d'analitzar. En l'esquema anterior es resumeixen les seves opcions més importants. Malgrat això per configurar-lo bé s'ha de llegir detingudament i provar tot el que es va activant per comprobar que el comportament és l'esperat.
 +
 +[[fitxer de configuració]]
 +
 +Aquí definim coses tan importants, com decidir què fer quan rebem un correu amb virus: em d'avisar la persona que ens l'ha enviat? em d'avisar el destinatari? l'administrador del sistema? i si el correu era spam? i si simplement era un correu mal format?
 +
 +També hi ha altre coses definides com ara: quin port publica l'//amavis// per rebre el correu del //postfix// (127.0.0.1:10024/tcp). Quin programa antivirus usararem, el //clamav// en el nostre cas. I l'//spamassassin// com li passarem el correu perquè comprovi si el correu que estem tranctan porta virus.
 +
 +A més des d'aquí també es defineixen la majoria de paràmetres de l'//spamassassin//, com a ara les //whilelist, blacklist i spam_lovers list//. Concretament les hem re-enviat a fitxers //hash// externs: **/etc/amavis/whitelist**, **/etc/amavis/blacklist** i **/etc/amavis/spam_lovers**.
 +
 +És un bon consell perdre una bona estona jugant amb aquest fitxer, ja que és el que marcarà el comportament més important del //mailgateway//.
 +
 +===== clamav-daemon o clamd =====
 +
 +La configuració de l'antivirus és força senzilla, un cop llençat el dimoni aquest publicat un //socket unix// si fem un //netstat -lpn|grep clamd// podrem veure on esta exactament el //socket//, en el nostre cas:
 +
 +<code bash>
 +# netstat -lpn|grep clam
 +unix  2      [ ACC ]     STREAM     LISTENING     644309   29823/clamd         /var/run/clamav/clamd.ctl
 +</code>
 +
 +És important saber on és aquest //socket unix// perquè el fitxer **/etc/amavis/amavisd.conf** anterior en hi fa referència. Aquí podem veure que el tenim a **/var/run/clamav/clamd.ctl**.
 +
 +Després d'això només cal que llencem el dimoni //clamav-freshclam// que s'encarrega d'actualitzar les definicions de virus amb la periodicitat que nosaltres li indiquem i des del repositori que més ens convingui.
 +
 +===== spamassassin =====
 +
 +Es crida des de l'//amavisd-new// però no es publica cap port. Però també tenim un fitxer de configuració pròpi on l'hi indiquem on són les dades que necessita per treballar:
 +
 +<code bash>
 +# This is the right place to customize your installation of SpamAssassin.
 +#
 +# See 'perldoc Mail::SpamAssassin::Conf' for details of what can be
 +# tweaked.
 +#
 +###########################################################################
 +#
 +# rewrite_header Subject *****SPAM*****
 +# report_safe 1
 +# trusted_networks 212.17.35.
 +# lock_method flock
 +
 +report_safe 0
 +
 +use_bayes 1
 +bayes_path /var/lib/amavis/.spamassassin/bayes
 +
 +skip_rbl_checks 0
 +use_razor2 1
 +use_dcc 1
 +use_pyzor 0
 +
 +dns_available yes
 +
 +header LOCAL_RCVD Received =~ /.*\(\S+\.domain\.com\s+\[.*\]\)/
 +describe LOCAL_RCVD Received from local machine
 +score LOCAL_RCVD -50
 +
 +## Optional Score Increases
 +score DCC_CHECK 4.000
 +score SPF_FAIL 10.000
 +score SPF_HELO_FAIL 10.000
 +score RAZOR2_CHECK 2.500
 +score BAYES_99 4.300
 +score BAYES_90 3.500
 +score BAYES_80 3.000
 +</code>
 +
 +====== Provant el servidor ======
 +
 +===== Enviar un correu via SMTP a través de telnet/netcat =====
 +
 +A vegades ens insteressa fer proves directament contra el port SMTP i no haver de reconfigurar cada vegada el client de correu (MUA). Un exemple de com fer-ho:
 +
 +<code bash>
 + $ nc -vvv IP_SERVIDOR 25
 +(UNKNOWN) [IP_SERVIDOR] 25 (smtp) open
 +220 Mail Gateway
 +helo exemple.com
 +250 
 +mail from:<oriol@oriol.joor.net>
 +250 Ok
 +rcpt to:<oriol@oriol.joor.net>
 +250 Ok
 +data
 +354 End data with <CR><LF>.<CR><LF>
 +provant
 +.
 +250 Ok: queued as 0281C874FD
 +quit
 +221 Bye
 + sent 101, rcvd 140
 +</code>
 +
 +Arribats en aquest punt el sevidor ja esta enrutant el correu cap al seu destí, ja qu ens ha informat que l'ha posat en cua.
 +
 +===== Mirar els logs =====
 +
 +Per visualitzar els //logs// del correu que esta arribant i marxant del servidor cal mirar el fitxer **/var/log/mail.log** si volem visualitzar el fitxer en temps real podem usar l'ordre:
 +
 +<code bash>
 +$ tail -f /var/log/mail.log
 +</code>
 +
 +Per tal d'interpretar el //log// només cal tenir una mica de paciència i fixar-se bé qui és l'origen del registre. Si la traça l'ha enviat el //postfix//, l'//amavis//, etc. Després podrem veure els detalls de que ha fet aquesta aplicació i podrem seguir tots els salts entre aplicacions descrits anteriorment en aquest document.
 +
 +===== Llegint les capçaleres dels emails =====
 +
 +Poder llegir les capçaleres dels emails ens permet saber per on ha passat un correu. A més en el nostre cas ens serveix per veure els salts que ha fet per dintre del //mailgateway// concretament si mirem les //email headers// que han traspassat el nostre servidor antispam podem veure algo semblant a:
 +
 +
 +<code bash>
 +Received: from localhost (localhost.localdomain [127.0.0.1])
 + by mailgateway (Postfix) with ESMTP id 61D7E187508
 + for <desti@exemple2.com>; Tue,  2 May 2006 14:58:35 +0200 (CEST)
 +Received: from mailgateway ([127.0.0.1])
 + by localhost (mailgateway.subdomini.exemple1.com [127.0.0.1]) (amavisd-new, port 10024)
 + with ESMTP id 07387-13 for <desti@exemple2.com>;
 + Tue, 2 May 2006 14:58:33 +0200 (CEST)
 +Received: from mini2 (unknown [IP_PUBLICA_PROVES])
 + by mailgateway (Postfix) with ESMTP id 69D44187506
 + for <desti@exemple2.com>; Tue,  2 May 2006 14:58:33 +0200 (CEST)
 +</code>
 +
 +Obviament el correu té més capçaleres però aquestes sempre hi surten. Que son les dels filtres que explicabem anteriorment. A més dins dels TAGS de la capçalera també podrem veure això:
 +
 +<code bash>
 +X-Virus-Scanned: by amavisd-new-20030616-p10 at subdomini.exemple1.com
 +</code>
 +
 +És una marca d'aigua que deixe l'//amavisd-new// als correus que examina.
 +
 +Per saber interpretar les capçaleres dels email hi ha moltíssimes pàgines web que expliquen com fer-ho a continuació n'adjunto unes quantes:
 +
 +
 +  * [[http://www.stopspam.org/email/headers.html|Reading Email Headers]] - stopspam.org
 +  * [[http://www.uic.edu/depts/accc/newsletter/adn29/headers.html |Reading Email Headers ]]  - uic.edu
 +  * [[http://help.mindspring.com/docs/006/emailheaders/|Support Center]]
 +  * [[http://www.bath.ac.uk/bucs/email/anatomy.shtml|Anatomy of an Email Message]]
 +  * [[http://email.about.com/cs/spamgeneral/a/spam_headers.htm|What Email Headers Can Tell You About the Origin of Spam - About Email]]
 +  * [[http://abuse.msu.edu/email-tracking.html|Analyzing e-mail headers and tracking e-mail]]
 +
 +
 +
 +
 +===== Serveis actius =====
 +
 +<code bash>
 +Active Internet connections (only servers)
 +Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
 +tcp        0      0 127.0.0.1:10024         0.0.0.0:              LISTEN     6353/amavisd (maste
 +tcp        0      0 127.0.0.1:10025         0.0.0.0:              LISTEN     9371/master
 +tcp        0      0 127.0.0.1:783           0.0.0.0:              LISTEN     6370/spamd.pid
 +tcp        0      0 127.0.0.1:53            0.0.0.0:              LISTEN     10176/named
 +tcp        0      0 0.0.0.0:25              0.0.0.0:              LISTEN     9371/master
 +tcp6            0 :::22                   :::                   LISTEN     8444/sshd
 +udp        0      0 0.0.0.0:53              0.0.0.0:                         10176/named
 +udp        0      0 127.0.0.1:53            0.0.0.0:                         10176/named
 +udp6            0 :::39827                :::*                               10176/named
 +Active UNIX domain sockets (only servers)
 +Proto RefCnt Flags       Type       State         I-Node PID/Program name    Path
 +unix  2      [ ACC ]     STREAM     LISTENING     2598578  9371/master         private/smtp-amavis
 +unix  2      [ ACC ]     STREAM     LISTENING     2609624  10176/named         /var/run/ndc
 +unix  2      [ ACC ]     STREAM     LISTENING     2598589  9371/master         public/cleanup
 +unix  2      [ ACC ]     STREAM     LISTENING     2598596  9371/master         private/rewrite
 +unix  2      [ ACC ]     STREAM     LISTENING     2598600  9371/master         private/bounce
 +unix  2      [ ACC ]     STREAM     LISTENING     2598604  9371/master         private/defer
 +unix  2      [ ACC ]     STREAM     LISTENING     2598608  9371/master         public/flush
 +unix  2      [ ACC ]     STREAM     LISTENING     2598612  9371/master         private/proxymap
 +unix  2      [ ACC ]     STREAM     LISTENING     2598616  9371/master         private/smtp
 +unix  2      [ ACC ]     STREAM     LISTENING     2598620  9371/master         private/relay
 +unix  2      [ ACC ]     STREAM     LISTENING     2598624  9371/master         public/showq
 +unix  2      [ ACC ]     STREAM     LISTENING     644309   29823/clamd         /var/run/clamav/clamd.ctl
 +unix  2      [ ACC ]     STREAM     LISTENING     2598628  9371/master         private/error
 +unix  2      [ ACC ]     STREAM     LISTENING     2598632  9371/master         private/local
 +unix  2      [ ACC ]     STREAM     LISTENING     2598636  9371/master         private/virtual
 +unix  2      [ ACC ]     STREAM     LISTENING     2598640  9371/master         private/lmtp
 +unix  2      [ ACC ]     STREAM     LISTENING     1623569  32625/acpid         /var/run/acpid.socket
 +unix  2      [ ACC ]     STREAM     LISTENING     2598644  9371/master         private/maildrop
 +unix  2      [ ACC ]     STREAM     LISTENING     2598648  9371/master         private/trace
 +unix  2      [ ACC ]     STREAM     LISTENING     2598652  9371/master         private/verify
 +unix  2      [ ACC ]     STREAM     LISTENING     2598656  9371/master         private/tlsmgr
 +unix  2      [ ACC ]     STREAM     LISTENING     2598660  9371/master         private/anvil
 +unix  2      [ ACC ]     STREAM     LISTENING     2598664  9371/master         private/scache
 +unix  2      [ ACC ]     STREAM     LISTENING     2598668  9371/master         private/discard
 +unix  2      [ ACC ]     STREAM     LISTENING     2596380  8961/saslauthd      /var/run/saslauthd/mux
 +</code>
 +
 +
 +
 +
 +====== Gestionant la compte interna (mailgateway@exemple.com) ======
 +
 +===== Necessitats de la compte interna =====
 +
 +  * Crear dues carpetes a la compte:
 +    * ham - col·locarem el correu marcat com a falç positiu
 +    * spam - col·locarem el correu que era spam i el servidor no el va detectar
 +  * Poder-la consultar per IMAP
 +
 +===== Sincronitzem la compte IMAP amb el mailgateway =====
 +
 +Això ho farem amb l'//offlineimap//, aquest el podem fer correr com un usuari.
 +
 +<code bash>
 +$ cat .offlineimaprc
 +[general]
 +accounts = servidor_intern
 +
 +[Account servidor_intern]
 +localrepository = Local
 +remoterepository = Remote
 +
 +[Repository Local]
 +type = Maildir
 +localfolders = ~/mailgateway
 +sep=/
 +
 +[Repository Remote]
 +type = IMAP
 +remotehost = 172.16.0.8
 +remoteuser = mailgateway
 +remotepass = ___
 +</code>
 +
 +Podem veure que l'email es guardarà al //home// (~) de l'usuari que escollim concretament a la carpeta //mailgateway//.
 +
 +El fitxer és força simple es pot veure com definim la compte //servidor_intern// després definim el repositori //local// i //remot// d'aquest compte. El local serà un simple //maildir// i el remot un //imap//.
 +
 +====== Misc ======
 +
 +===== Eduquem el filtre anti-spam =====
 +
 +L'//spamassassin// quan més correus d'exemple d'spam té més bo és fent deteccions perquè aquestes es fan a través de funcions //bayessianes//. Això vol dir que quan més dades té a la BBDD més precís és. La comanda que s'usa per alimentar la BBDD de l'//spamassassin// és el **sa-learn**.
 +
 +===== Com crear un fitxer hash (.db) =====
 +
 +Sovint els fitxers de configuració de l'//amavis// i el //postfix// són en format //hash// per transformar un fitxer de configuració normal en la seva versió //hash// només cal fer el següent:
 +
 +<code bash>
 +postmap fitxer_de_configuració
 +</code>
 +
 +i després d'això obtindrem a més del nostre //fitxer_de_configuració// un altre fitxer anomenat //fitxer_de_configuració.db//, o sigui, el fitxer en format //hash//.
 +
 +
 +====== Referències ======
 +
 +  * [[http://networking.ringofsaturn.com/Protocols/imap.php | IMAP protocol]] //cookbook// de com usar el protocol IMAP des d'una sessió TCP.
 +
 +
 +
  
  • mail-gateway_amb_amavisd-new.txt
  • Last modified: 2012/06/06 12:15
  • (external edit)