E-mail Linux amb Postfix
Contingut
- 1 Intro
- 2 Configuració Lloc d'Internet
- 3 Enviament amb la comanda mail
- 4 Comprovació de la cua de missatges pendents d'enviar
- 5 Client en línia de comandes Alpine
- 6 Configuració utilitzant compte extern gmail
- 7 Configuració en Maildirs enlloc de Mailboxes
- 8 Habilitant fetchmail per a clients com Thunderbird
- 9 Creant aliases
- 10 Encriptant els emails sortints (SMTP)
- 11 Assegurant els clients amb autenticació SASL
- 12 Utilitzant túnel SSH per enviar via SMTP
Intro
Postfix és un servei de correu electrònic de codi obert força estàndard en servidors i hostings. Correspon a la part del MTA del sistema de correu electrònic, pel que s'ocupa d'enviar emails a altres servidors, i guardar els missatges entrants en les carpetes dels usuaris pertinents.
Postfix NO gestiona les connexions de bústia de correu POP3 o IMAP (necessàries per poder accedir des dels clients Thunderbird, Outlook o des de dispositius mòbils). D'això se n'ocupen els mòduls fetchmail del sistema de correu, i en Linux es sol implementar amb els paquets Dovecot o Courier.
La configuració del sistema de correu es pot fer bàsicament de dues maneres:
- Mailbox: un arxiu per usuari, típicament anomenat mbox i que sol estar al home directory de cada usuari. És el sistema per defecte.
- Maildirs: enlloc d'un arxiu es guarden tots els emails de cada usuari en la carpeta Mailbox dins de cada home directory, i dins d'aquesta hi ha les possibles subcarpetes per organitzar el correu. És imprescindible si volem utilitzar el servei IMAP.
Algunes referències:
- Podeu seguir aquesta documentació oficial d'Ubuntu sobre Postfix.
- Per poder tenir un servidor d'email cal complir una sèrie de requisits relatius a la IP i xarxa, llegiu-los aquí.
Configuració Lloc d'Internet
És la més senzilla de realitzar. Només podem utilitzar aquesta configuració si tenim una IP fixa (no dinàmica) per part del nostre ISP. Si tenim una IP dinàmica els servidors d'Internet ens refusaran com a remitent, ja que solen ser spammers.
Quan s'instal·la Postfix només cal tirar aquesta opció "Lloc d'Internet", introduir el domini en el què estem (indicarà el remitent) i ja podem enviar missatges.
Si en algun moment volem reconfigurar-ho sempre es pot fer:
# dpkg-reconfigure postfix
Enviament amb la comanda mail
Podem enviar emails des de la shell amb la comanda mail. Cal que instal·lem el paquet mailutils.
# apt-get install mailutils
Podem comprovar si s'envien exitosament fent:
$ mail [email protected] Cc: <Enter> Subject: prova 1 <Enter> aquest es el cos del missatge Atentament Enric <Ctrl+D>
...i mirem la nostra bústia aviam si ens ha arribat. Pot trigar alguns minuts depenent de la configuració del sistema (el correu no sempre s'envia immediatament).
Si posem la comanda mail sense destinatari entrarem en un programa interactiu per llegir els missatges entrants.
Comprovació de la cua de missatges pendents d'enviar
Si experimentem problemes en l'enviament d'emails podem chequejar-ho al logfile corresponent:
$ tail -f /var/log/mail.log
Enviament erroni
Si trobem una sortida d'aquest tipus és que el servidor destinatari ens està ignorant. status=deferred indica que s'abandona l'enviament d'aquest missatge.
Nov 12 15:38:10 xinxan postfix/smtp[3941]: connect to ALT2.ASPMX.L.GOOGLE.COM[74.125.68.26]:25: Connection timed out Nov 12 15:38:10 xinxan postfix/smtp[3941]: connect to ALT1.ASPMX.L.GOOGLE.COM[2a00:1450:4010:c07::1a]:25: Network is unreachable Nov 12 15:38:10 xinxan postfix/smtp[3941]: E7FC2201589: to=<[email protected]>, relay=none, delay=61, delays=0.18/0.03/61/0, dsn=4.4.1, status=deferred (connect to ALT1.ASPMX.L.GOOGLE.COM[2a00:1450:4010:c07::1a]:25: Network is unreachable)
Això sol indicar que tenim una IP dinàmica i que ens ignora expressament tal i com hem indicat abans. Si volem poder enviar correus des d'aquesta ubicació, haurem de configurar Postfix per utilitzar un smarthost o accedint a un compte remot.
Enviament exitós
En canvi, si tot ha anat bé, trobarem aquest registre. status=sent indica que el missatge s'ha enviat correctament (i per tant després apareix "removed" de la cua d'enviament):
Nov 12 15:43:58 beach postfix/smtp[25869]: Host offered STARTTLS: [ASPMX.L.GOOGLE.COM] Nov 12 15:43:58 beach postfix/smtp[25869]: 27179BC006F: to=<[email protected]>, relay=ASPMX.L.GOOGLE.COM[74.125.133.26]:25, delay=1.4, delays=0.52/0.02/0.66/0.23, dsn=2.0.0, status=sent (250 2.0.0 OK 1447339415 u8si18997094wja.11 - gsmtp) Nov 12 15:43:58 beach postfix/qmgr[1272]: 27179BC006F: removed
Per suposat la darrera comprovació és que aparegui a la nostra bústia d'entrada de destí. Vigileu que de vegades pot haver anat a parar a la carpeta Spam.
Client en línia de comandes Alpine
Instal·leu el client de correu electrònic alpine per fer una gestió més còmoda dels correus des de la shell.
# apt-get install alpine
Configuració utilitzant compte extern gmail
Aquesta configuració és interessant en els casos:
- tenim una IP dinàmica: normalment les IPs dinàmiques estan a una blacklist i tots els servidors del món passen de rebre els teus correus
- tens restringit l'accés al port 25 de sortida (típica configuració dels firewalls dels instituts per evitar spammers)
Si no és el teu cas, pots passar a l'apartat següent.
Primer caldrà configurar Postfix amb dpkg-reconfigure (explicat més amunt) com a "site d'internet" (per exemple, no és gaire rellevant).
Caldrà configurar l'arxiu /etc/postfix/main.cf afegint les següents línies:
relayhost = [smtp.gmail.com]:587 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_tls_CAfile = /etc/postfix/cacert.pem smtp_use_tls = yes
Creeu el següent arxiu /etc/postfix/sasl_passwd i poseu el següent contingut:
[smtp.gmail.com]:587 [email protected]:password
Li donem els permisos (perquè ningú tafaneji la contrasenya) i el convertim al format .db
# chmod 400 /etc/postfix/sasl_passwd # postmap /etc/postfix/sasl_passwd
Validem el nostre certificat de confiança:
# cat /etc/ssl/certs/Thawte_Premium_Server_CA.pem | sudo tee -a /etc/postfix/cacert.pem
Recarreguem el nostre el servei
# sudo service postfix reload
Habilitant apps menys segures en Gmail
Les darreres mesures de seguretat de Google impedeixen que utilitzis "aplicacions menys segures". Aquest és el cas de postfix, que no permet una 2-step authentication via web browser com demana ara Google.
Podem habilitar l'ús d'aplicacions menys segures en aquest link:
https://www.google.com/settings/security/lesssecureapps
...i val a dir que és dificil de trobar en els menus de configuració del compte de Google. Ufuf per trobar això...
Configuració en Maildirs enlloc de Mailboxes
Configurar en mode maildirs enlloc de mailboxes és necessari si volem permetre un accés tipus fetchmail, per exemple per accedir amb Thunderbird.
Podeu seguir els passos d'aquest tutorial, però hi ha algunes coses que no son del tot correctes:
- Cal crear la carpeta
~/Maildir/
en cada usuari manualment amb els subdirectoriscur , new , tmp
a dintre.- OJU amb els permisos! L'usuari ha de ser el propietari de les carpetes indicades.
- Canviar l'arxiu de conf /etc/postfix/mail.conf pertinentment.
home_mailbox = Maildir/
mailbox_command =
Habilitant fetchmail per a clients com Thunderbird
Abans d'aquest pas cal haver configurat Postfix en mode maildirs (veure apartat anterior).
Algunes referències:
- Podeu seguir aquesta documentació d'Ubuntu: https://help.ubuntu.com/community/PostfixBasicSetupHowto
- Us permetrà configurar el POP3 i el IMAP, i connectar-vos amb el Thunderbird
- Un tutorial molt clar de DigitalOcean.
- Per accedir externament des d'un client de correu cal utilitzar Courier (explicat al link anterior).
- Configurar Courier amb SSL.
Realitza al menys tres comptes d'usuari i envia correus entre ells i també als comptes d'un company de classe.
Creant aliases
Podem desviar el correu que va a una adreça concreta cap a un altre usuari del sistema. Per fer-ho, normalment cal crear i configurar l'arxiu
/etc/postfix/virtual
...on hi ha la informació dels àlies, i configurar Postfix perquè se'l miri.
Fes-li un cop d'ull al tutorial d'Ubuntu i realitza 3 aliases als 3 comptes "reals" que tens.
Encriptant els emails sortints (SMTP)
Normalment voldrem encriptar les comunicacions dels emails sortints per tal de fer-les més segures. Si no ho fem, en emails públics com gmail veurem que al missatge ens surt una icona d'un candau obert advertint-nos que aquell email no s'ha enviat amb seguretat.
Aquest post resol aquest problema.
Resumint el què he provat:
smtp_use_tls=yes
andsmtp_enforce_tls=yes
are deprecated- smtp_enforce_tls=yes : em dona error de certificats del destinatari, no els reconeix. Suposo que caldria alguna configuració addicional d'aquests.
- smtp_tls_security_level=encrypt : no dóna error de certificats, però en cas que el destinatari no tingui TLS ens fallaria l'enviament.
- smtp_tls_security_level=may : és la millor opció, ja que utilitza TLS només si és possible, i si no ho envia sense encriptar.
Assegurant els clients amb autenticació SASL
Si el que volem és enviar correu des de la pròpia màquina on tenim el servidor (per exemple, via SSH amb mail o alpine, o bé des d'alguna aplicació web) no hi ha cap problema i podem utilitzar la configuració que hem explicat.
En canvi, si volem enviar correu des d'un client Thunerbird (màquina remota) la cosa es complica. Primer de tot caldrà permetre l'accés al servidor SMTP (Postfix) a través del port 25, a través de la directiva
mynetworks = 0.0.0.0/32
Però això és extremament insegur ja que qualsevol persona pot enviar correu amb el remitent que li sembli bé.
Per assegurar el sistema cal configurar la autenticació del client mitjançant SASL i TLS.
Referències:
Utilitzant túnel SSH per enviar via SMTP
Segons aquest article podem configurar el nostre postfix per enviar email a través d'un túnel SSH. Això és útil si estem darrera d'un tallafocs que ens impedeix l'accés als ports 25 remots o similars de correu sortint. És molt habitual trobar-se això com a mesura de seguretat i evitar spammers des del nostre lloc de treball.
Necessitem, això sí, una màquina remota amb accés SSH i que tingui una configuració de Postfix funcionant (ja sigui com a lloc d'internet amb IP fixa o bé a través d'un correu extern com descrit més amunt).
Un ordinador ha de fer el túnel:
$ ssh -L 0.0.0.0:8025:localhost:25 usuari@maquina_remota
0.0.0.0 permet les connexions des de qualsevol màquina de la xarxa local. La resta redirigeix el port 8025 de la màquina al 25 de la màquina remota.
Si el Postfix remot té una configuració correcta, els Postfix locals poden accedir-hi afegint aquesta configuració a /etc/postfix/main.conf:
default_transport = smtp:<ip_pc_profe>:8025
En el fons el què fem és fer servir la màquina remota com un smarthost. Si tenim una màquina a la nostra xarxa amb el túnel fet (per exemple, el PC del profe), podeu configurar Postfix a través de smarthost fent, senzillament:
# dpkg-reconfigure postfix
...i seguir el wizard adequadament. En el fons, el què farà és simplement afegir la línia
relayhost = <pc_del_profe>:8025
...que ve a ser el mateix que configurar el default_transport (feu una o l'altra, no les dues!)
Configuració Postfix remot (smarthost)
Això sí, el Postfix remot ha de permetre les connexions no-només-locals, cosa que és molt insegura. Ho podem permetre sempre i quan estigui darrera d'un firewall i només podem accedir al port 25 a través del tunel. És qüestió d'afegir un element més a mynetworks del servidor Postfix remot:
mynetworks = ... 192.168.1.0/24
(per exemple de xarxa local)