Diferència entre revisions de la pàgina «E-mail Linux amb Postfix»

De Cacauet Wiki
Salta a la navegació Salta a la cerca
 
(Hi ha 9 revisions intermèdies del mateix usuari que no es mostren)
Línia 10: Línia 10:
  
 
Algunes referències:
 
Algunes referències:
* Podeu seguir aquesta documentació d'Ubuntu: https://help.ubuntu.com/community/PostfixBasicSetupHowto
+
* Podeu seguir aquesta [https://help.ubuntu.com/community/PostfixBasicSetupHowto documentació oficial d'Ubuntu sobre Postfix].
 +
* Per poder tenir un servidor d'email cal complir una sèrie de [https://cacauet.org/wiki/index.php/Correu_electr%C3%B2nic#Requisits_per_tenir_un_servidor_d.27email requisits relatius a la IP i xarxa, llegiu-los aquí].
  
 
<br>
 
<br>
Línia 117: Línia 118:
  
 
Podeu seguir els passos d'aquest tutorial, però hi ha algunes coses que no son del tot correctes:
 
Podeu seguir els passos d'aquest tutorial, però hi ha algunes coses que no son del tot correctes:
# Cal crear la carpeta <code>~/Mailbox/</code> en cada usuari manualment amb els subdirectoris <code>cur , new , tmp</code> a dintre.
+
# Cal crear la carpeta <code>~/Maildir/</code> en cada usuari manualment amb els subdirectoris <code>cur , new , tmp</code> a dintre.
 
#: OJU amb els permisos! L'usuari ha de ser el propietari de les carpetes indicades.
 
#: OJU amb els permisos! L'usuari ha de ser el propietari de les carpetes indicades.
# Canviar l'arxiu de conf pertinentment.
+
# Canviar l'arxiu de conf /etc/postfix/mail.conf pertinentment.
# ...
+
#: <pre>home_mailbox = Maildir/</pre>
 +
#: <pre>mailbox_command = </pre>
 +
 
  
 
<br>
 
<br>
Línia 144: Línia 147:
  
 
Fes-li un cop d'ull al [https://help.ubuntu.com/community/PostfixBasicSetupHowto#Postfix_virtual_Aliases_for_separate_domains_and_Linux_system_accounts tutorial d'Ubuntu] i realitza 3 aliases als 3 comptes "reals" que tens.
 
Fes-li un cop d'ull al [https://help.ubuntu.com/community/PostfixBasicSetupHowto#Postfix_virtual_Aliases_for_separate_domains_and_Linux_system_accounts tutorial d'Ubuntu] i realitza 3 aliases als 3 comptes "reals" que tens.
 +
 +
<br>
 +
 +
== 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.
 +
 +
[http://serverfault.com/questions/120123/forcing-smtp-outgoing-mail-encryption-on-postfix Aquest post resol aquest problema].
 +
 +
Resumint el què he provat:
 +
* <code>smtp_use_tls=yes</code> and <code>smtp_enforce_tls=yes</code> 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.
  
 
<br>
 
<br>
Línia 151: Línia 167:
  
 
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
 
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
+
  mynetworks = 0.0.0.0/0
 
Però això és extremament insegur ja que qualsevol persona pot enviar correu amb el remitent que li sembli bé.
 
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.
 
Per assegurar el sistema cal configurar la autenticació del client mitjançant SASL i TLS.
  
...TODO...
+
Referències:
 +
* https://help.ubuntu.com/community/Postfix
 +
* https://help.ubuntu.com/lts/serverguide/postfix.html
  
 
<br>
 
<br>
Línia 169: Línia 187:
 
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.
 
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 aquest configuració a '''/etc/postfix/main.conf''':
+
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:localhost:8025
+
  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:
 
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'''
 
  mynetworks = ... '''192.168.1.0/24'''
  
 
(per exemple de xarxa local)
 
(per exemple de xarxa local)

Revisió de 18:05, 19 gen 2017

Intro[modifica]

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:


Configuració Lloc d'Internet[modifica]

É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[modifica]

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[modifica]

Si experimentem problemes en l'enviament d'emails podem chequejar-ho al logfile corresponent:

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

Enviament erroni[modifica]

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[modifica]

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[modifica]

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[modifica]

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[modifica]

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[modifica]

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:

  1. Cal crear la carpeta ~/Maildir/ en cada usuari manualment amb els subdirectoris cur , new , tmp a dintre.
    OJU amb els permisos! L'usuari ha de ser el propietari de les carpetes indicades.
  2. Canviar l'arxiu de conf /etc/postfix/mail.conf pertinentment.
    home_mailbox = Maildir/
    mailbox_command = 



Habilitant fetchmail per a clients com Thunderbird[modifica]

Abans d'aquest pas cal haver configurat Postfix en mode maildirs (veure apartat anterior).

Algunes referències:

Realitza al menys tres comptes d'usuari i envia correus entre ells i també als comptes d'un company de classe.


Creant aliases[modifica]

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)[modifica]

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 and smtp_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[modifica]

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

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[modifica]

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)[modifica]

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)