mail-gateway_amb_amavisd-new

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 mailgateway: postfix+amavisd+clamav+spamassassin+sasl

Changelog

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'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

Esquema dels serveis i tractament del correu

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.

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

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:

joor.net	OK
oriol.joor.net	OK

El fitxer /etc/postfix/transport:

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 

El domini local es refereix al domini definit a la variable de configuració mydomain. Així mai quedaràn correus enmagatzemats al mailgateway.

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.

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:

# netstat -lpn|grep clam
unix  2      [ ACC ]     STREAM     LISTENING     644309   29823/clamd         /var/run/clamav/clamd.ctl

É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.

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:

# 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

Provant el servidor

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:

 $ 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

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.

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:

$ tail -f /var/log/mail.log

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.

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:

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)

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ò:

X-Virus-Scanned: by amavisd-new-20030616-p10 at subdomini.exemple1.com

É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:

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      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      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

Gestionant la compte interna (mailgateway@exemple.com)

  • 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

Això ho farem amb l'offlineimap, aquest el podem fer correr com un usuari.

$ 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 = ___

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

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.

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:

postmap fitxer_de_configuració

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

  • 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)