Activitats

Quota de mercat dels servidors de correu

L’objectiu de l’activitat és conèixer la quota de mercat dels servidors de correu.

Esbrineu la quota de mercat dels principals servidors de correu i identifiqueu clarament amb quins paràmetres s’ha mesurat.

Solució oberta.

No és el mateix tenir un servidor de correu amb 100.000 usuaris que tenir-ne tres amb 1.000 usuaris cadascun. Per tant, el concepte de quota de mercat és força elàstic. Algunes dades són difícils d’obtenir (algunes empreses no volen revelar segons quines dades). Aquestes estadístiques sempre s’han de contextualitzar.

Al web Security Space podem trobar diferents informes sobre estadístiques d’ús de programari (apartat Research Reports). En concret, teniu el que fa referència a l’ús dels servidors de correu.

Aquesta estadística s’ha fet mirant tots els registres MX públics del servei DNS. Els tres més usats són:

  1. Exim
  2. Postfix
  3. Sendmail

S’observa també la seva evolució al llarg dels anys. Sendmail va ser un dels primers a tenir molta popularitat (també és el més antic dels tres, de l’any 1983). Exim (1995) i Postfix (1998) han tingut una evolució força paral·lela, si bé el primer sempre ha tingut més quota de mercat.

Servidor de correu Sendmail

L’objectiu d’aquesta activitat és aprendre a instal·lar i configurar el servidor SMTP Sendmail i el servidor IMAP Courier.

Sendmail és un dels diversos agents de transport de correu (MTA, Mail Transfer Agent) de programari lliure que permet l’encaminament i l’enviament de correus electrònics a través d’internet amb el protocol SMTP (Simple Mail Transfer Protocol).

Realitzeu les següents tasques:

  1. Instal·leu Sendmail en el sistema operatiu Linux.
  2. Configureu el programari Sendmail.
  3. Realitzeu proves amb el servidor de correu per tal de verificar l’enviament de correus.
  4. Instal·leu i configureu el protocol IMAP (Internet Message Access Protocol) amb el programari Courier per tal de permetre l’accés a la bústia de correu de forma remota (MDA, Mail Delivery Agent).
  5. Encripteu les comunicacions per proveir seguretat al servei de correu electrònic.

1. Instal·lació del servidor Sendmail

Per instal·lar el programari, accedim al terminal i executem:

  1. # apt-get install sendmail
  2. S'està llegint la llista de paquets… Fet
  3. S'està construint l'arbre de dependències
  4. S'està llegint la informació de l'estat… Fet
  5. Els paquets següents s'han instal·lat automàticament i ja no seran necessaris:
  6. apache2-bin apache2-data apache2-utils default-mysql-server galera-3 libaio1 libapache2-mod-php7.0 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap
  7. libcgi-fast-perl libcgi-pm-perl libconfig-inifiles-perl libdbd-mysql-perl libdbi-perl libfcgi-perl libhtml-template-perl libjemalloc1 libmariadbclient18 libreadline5
  8. libterm-readkey-perl mariadb-client-10.1 mariadb-client-core-10.1 mariadb-common mariadb-server-10.1 mariadb-server-core-10.1 mysql-common php-common php7.0 php7.0-cli
  9. php7.0-common php7.0-json php7.0-mysql php7.0-opcache php7.0-readline rsync socat
  10. Empreu «sudo apt autoremove» per a suprimir-los.
  11. S'instal·laran els següents paquets extres:
  12. liblockfile1 lockfile-progs m4 procmail sendmail-base sendmail-bin sendmail-cf sensible-mda
  13. Paquets suggerits:
  14. m4-doc sendmail-doc rmail logcheck resolvconf sasl2-bin
  15. S'instal·laran els paquets NOUS següents:
  16. liblockfile1 lockfile-progs m4 procmail sendmail sendmail-base sendmail-bin sendmail-cf sensible-mda
  17. 0 actualitzats, 9 nous a instal·lar, 0 a suprimir i 316 no actualitzats.
  18. S'ha d'obtenir 2178 kB d'arxius.
  19. Després d'aquesta operació s'empraran 4848 kB d'espai en disc addicional.
  20. Voleu continuar? [S/n]

En un moment de la instal·lació es generen els certificats TLS/SSL per encriptar les comunicacions i s’indica com activar-ho (es realitzarà més endavant):

Creating/Updating SSL(for TLS) information
Creating /etc/mail/tls/starttls.m4...
Creating SSL certificates for sendmail.
Generating DSA parameters, 2048 bit long prime
This could take some time
....+......+++++++++++++++++++++++++++++++++++++++++++++++++++*
...................+................+.+.................+.....................+............+.............+...........+....+..............+............+.......................................+...+........+.+.....+....+...+...+.............+..+................+..+.......+.+.+.+..+...+.+........+.....+..................+......+................+................+..+...........+.+..........+..........+.....+.......+..................+............................................................+.....+.+......+...+....+...+..............+..+...........+..................+++++++++++++++++++++++++++++++++++++++++++++++++++*
Generating RSA private key, 2048 bit long modulus
.............+++
................+++
e is 65537 (0x010001)

*** *** *** WARNING *** WARNING *** WARNING *** WARNING *** *** ***

Everything you need to support STARTTLS (encrypted mail transmission
and user authentication via certificates) is installed and configured
but is *NOT* being used.

To enable sendmail to use STARTTLS, you need to:
1) Add this line to /etc/mail/sendmail.mc and optionally
   to /etc/mail/submit.mc:
  include(`/etc/mail/tls/starttls.m4')dnl
2) Run sendmailconfig
3) Restart sendmail

El programari Sendmail en la distribució de Linux està estructurat en diversos paquets de forma jeràrquica. Les dependències del paquet principal són:

  1. # apt-cache depends sendmail
  2. sendmail
  3. Depèn: sendmail-base
  4. Depèn: sendmail-bin
  5. Depèn: sendmail-cf
  6. Depèn: sensible-mda
  7. Suggereix: sendmail-doc
  8. Suggereix: rmail

Per trobar la configuració del servei cerquem la paraula init.d als diferents paquets:

  1. # dpkg -L sendmail | grep init.d
  2. # dpkg -L sendmail-base | grep init.d
  3. # dpkg -L sendmail-bin | grep init.d
  4. /etc/init.d
  5. /etc/init.d/sendmail

Els arxius per a la configuració del servei es troben al paquet sendmail-bin.

2. Configuració del servidor Sendmail

Per tal de configurar el servidor utilitzarem la comanda sendmailconfig des del terminal amb les opcions que ens proposa per defecte.

  1. # sendmailconfig
  2. Configure sendmail with the existing /etc/mail/sendmail.conf? [Y]
  3. Reading configuration from /etc/mail/sendmail.conf.
  4. Validating configuration.
  5. Writing configuration to /etc/mail/sendmail.conf.
  6. Writing /etc/cron.d/sendmail.
  7. Configure sendmail with the existing /etc/mail/sendmail.mc? [Y]
  8. Updating sendmail environment ...
  9. Reading configuration from /etc/mail/sendmail.conf.
  10. Validating configuration.
  11. Writing configuration to /etc/mail/sendmail.conf.
  12. Writing /etc/cron.d/sendmail.
  13. Reading configuration from /etc/mail/sendmail.conf.
  14. Validating configuration.
  15. Writing configuration to /etc/mail/sendmail.conf.
  16. Writing /etc/cron.d/sendmail.
  17. Could not open /etc/mail/databases(No such file or directory), creating it.
  18. Reading configuration from /etc/mail/sendmail.conf.
  19. Validating configuration.
  20. Creating /etc/mail/databases...
  21. ...
  22. etc/mail/aliases: 0 aliases, longest 0 bytes, 0 bytes total
  23. Reload the running sendmail now with the new configuration? [Y] Reloading sendmail ...

Pot trigar una estona. D’aquesta manera es configuren diferents fitxers que es troben a /etc/mail.

Si comprovem l’estat del servei, aquest ja es troba actiu:

  1. # service sendmail status
  2. ● sendmail.service - LSB: powerful, efficient, and scalable Mail Transport Agent
  3. Loaded: loaded (/etc/init.d/sendmail; generated; vendor preset: enabled)
  4. Active: active (running) since Wed 2019-09-25 19:06:14 CEST; 5s ago
  5. Docs: man:systemd-sysv-generator(8)
  6. Process: 1776 ExecStop=/etc/init.d/sendmail stop (code=exited, status=0/SUCCESS)
  7. Process: 1810 ExecStart=/etc/init.d/sendmail start (code=exited, status=0/SUCCESS)
  8. Tasks: 1 (limit: 4915)
  9. CGroup: /system.slice/sendmail.service
  10. └─1859 sendmail: MTA: accepting connections
  11.  
  12. set 25 19:06:12 server.ioc.cat systemd[1]: Starting LSB: powerful, efficient, and scalable Mail Transport Agent...
  13. set 25 19:06:12 server.ioc.cat su[1842]: Successful su for smmsp by root
  14. set 25 19:06:12 server.ioc.cat su[1842]: + ??? root:smmsp
  15. set 25 19:06:12 server.ioc.cat su[1842]: pam_unix(su:session): session opened for user smmsp by (uid=0)
  16. set 25 19:06:13 server.ioc.cat sm-mta[1853]: gethostbyaddr(10.0.2.15) failed: 2
  17. set 25 19:06:13 server.ioc.cat sm-mta[1859]: starting daemon (8.15.2): SMTP+queueing@00:10:00
  18. set 25 19:06:14 server.ioc.cat sendmail[1810]: Starting Mail Transport Agent (MTA): sendmail.
  19. set 25 19:06:14 server.ioc.cat systemd[1]: Started LSB: powerful, efficient, and scalable Mail Transport Agent.

Amb la comanda nmap comprovem quin ports ha obert el servidor:

  1. # nmap localhost
  2.  
  3. Starting Nmap 7.40 ( https://nmap.org ) at 2019-09-25 19:08 CEST
  4. Nmap scan report for localhost (127.0.0.1)
  5. Host is up (0.000011s latency).
  6. Other addresses for localhost (not scanned): ::1
  7. Not shown: 997 closed ports
  8. PORT STATE SERVICE
  9. 25/tcp open smtp
  10.  
  11. Nmap done: 1 IP address (1 host up) scanned in 1.71 seconds

S’ha obert el port 25, que és el que correspon al port del protocol SMTP.

3. Proves amb el servidor de correu

Instal·lem el paquet mailutils per poder usar la comanda mail. Aquesta és una comanda molt senzilla que permet enviar correus electrònics des de la línia de comanda i, per tant, verificar el funcionament més bàsic del servidor. Aquesta comanda es troba al paquet mailutils.

Per tal d’enviar un correu des del nostre usuari a un altre usuari del sistema operatiu:

  1. apt-get install mailutils
  2. echo "Correu de prova" | mail -s "PROVA" usuari@server.ioc.cat

Per annexar fitxers:

  1. echo "Annex de prova" > annex.txt
  2. echo "Correu de prova" | mail -s "PROVA" usuari@server.ioc.cat -A annex.txt

Per a més informació sobre el paràmetres de la comanda, es pot consultar el manual:

  1. man mail

Els correus per defecte a Sendmail s’emmagatzemen a /var/mail en forma d’un fitxer per a cada usuari.

  1. # ls /var/mail -alis
  2. total 16
  3. 246 4 drwxrwsrwt 2 root mail 4096 set 25 19:20 .
  4. 12 4 drwxr-xr-x 12 root root 4096 jul 10 15:56 ..
  5. 134 4 -rw------- 1 root mail 2297 set 25 19:19 root
  6. 31796 4 -rw-rw---- 1 usuari mail 627 set 25 19:20 usuari
  7. # cat /var/mail/usuari
  8. From root@server.ioc.cat Wed Sep 25 19:20:11 2019
  9. Return-Path: <root@server.ioc.cat>
  10. Received: from server.ioc.cat (localhost [127.0.0.1])
  11. by server.ioc.cat (8.15.2/8.15.2/Debian-8) with ESMTP id x8PHKATb002455
  12. for <usuari@server.ioc.cat>; Wed, 25 Sep 2019 19:20:10 +0200
  13. Received: (from root@localhost)
  14. by server.ioc.cat (8.15.2/8.15.2/Submit) id x8PHKAY5002454;
  15. Wed, 25 Sep 2019 19:20:10 +0200
  16. Date: Wed, 25 Sep 2019 19:20:10 +0200
  17. From: root <root@server.ioc.cat>
  18. Message-Id: <201909251720.x8PHKAY5002454@server.ioc.cat>
  19. Subject: PROVA
  20. To: <usuari@server.ioc.cat>
  21. X-Mailer: mail (GNU Mailutils 3.1.1)
  22.  
  23. Correu de prova

Per poder enviar i llegir els correus d’una forma més agradable es pot utilitzar un client de correu de text. En aquest cas, utilitzem el programari Mutt.

Per instal·lar Mutt:

  1. # apt-get install mutt

Per iniciar el programa (s’autoconfigura al principi):

  1. # mutt

Podem veure la llista de correus que hem rebut:

Si entrem en un, podem veure el missatge:

Amb la tecla v veiem els fitxers annexats:

I podem seleccionar el fitxer annexat:

Capturem amb l’snifer Wireshark l’enviament d’un correu electrònic

Si anem al primer paquet i cliquem el botó dret, Follow, TCP Stream, podem veure tot el diàleg:

4. Accés remot al correu amb IMAP mitjançant el programari Courier

Courier és un altre programari de correu de codi obert. Conté de forma separada la part de transport (MTA) de la part de lliurament (MDA, Mail Delivery Agent). Ens interessa aquesta última on hi ha el servei IMAP. Aquest es pot configurar de forma individual per tal de treballar amb altres servidors de correu, com Sendmail, Exim i Postfix.

Cerquem el paquet a instal·lar amb apt-cache:

  1. # apt-cache search courier | grep imap
  2. courier-imap - Courier mail server - IMAP server
  3. courier-imap-ssl - Courier mail server - IMAP over TLS [transitional]
  4. imapcopy - IMAP backup, copy and migration tool

Instal·lem el programari courier per a IMAP amb les opcions per defecte:

  1. # apt-get install courier-imap
  2. S'està llegint la llista de paquets… Fet
  3. S'està construint l'arbre de dependències
  4. S'està llegint la informació de l'estat… Fet
  5. El paquets següents s'han instal·lat automàticament i ja no serà necessaris:
  6. apache2-bin apache2-data apache2-utils default-mysql-server galera-3 libaio1 libapache2-mod-php7.0 libapr1 libaprutil1
  7. libaprutil1-dbd-sqlite3 libaprutil1-ldap libconfig-inifiles-perl libdbd-mysql-perl libdbi-perl libhtml-template-perl
  8. libjemalloc1 libreadline5 libterm-readkey-perl mariadb-client-10.1 mariadb-client-core-10.1 mariadb-common
  9. mariadb-server-10.1 mariadb-server-core-10.1 php-common php7.0 php7.0-cli php7.0-common php7.0-json php7.0-mysql
  10. php7.0-opcache php7.0-readline rsync socat
  11. Empreu «apt autoremove» per suprimir-los.
  12. S'instal·laran els següents paquets extres:
  13. courier-authdaemon courier-authlib courier-authlib-userdb courier-base expect gnutls-bin libcourier-unicode1 libfam0
  14. libgnutls-dane0 libgnutls30 libopts25 libtcl8.6 libtk8.6 libunbound2 tcl-expect tcl8.6 tk8.6
  15. Paquets suggerits:
  16. courier-doc fam dns-root-data tcl-tclreadline
  17. S'instal·laran els paquets NOUS següents:
  18. courier-authdaemon courier-authlib courier-authlib-userdb courier-base courier-imap expect gnutls-bin libcourier-unicode1
  19. libfam0 libgnutls-dane0 libopts25 libtcl8.6 libtk8.6 libunbound2 tcl-expect tcl8.6 tk8.6
  20. S'actualitzaran els paquets següents:
  21. libgnutls30
  22. 1 actualitzats, 17 nous a instal·lar, 0 a suprimir i 311 no actualitzats.
  23. S'ha d'obtenir 5078 kB d'arxius.
  24. Després d'aquesta operació s'empraran 12,3 MB d'espai en disc addicional.
  25. Voleu continuar? [S/n]

Un cop instal·lat, tornem a executar nmap per veure quins ports hi ha oberts. Aquest cop amb els paràmetres -A i -T4 que ens proporcionaran més informació, com el programari que implementa els protocols i la seva versió.

  1. # nmap -A -T4 localhost
  2.  
  3. Starting Nmap 7.40 ( https://nmap.org ) at 2019-09-26 17:24 CEST
  4. Nmap scan report for localhost (127.0.0.1)
  5. Host is up (0.000046s latency).
  6. Other addresses for localhost (not scanned): ::1
  7. Not shown: 996 closed ports
  8. PORT STATE SERVICE VERSION
  9. 25/tcp open smtp Sendmail 8.15.2/8.15.2/Debian-8
  10. | smtp-commands: server.ioc.cat Hello localhost [127.0.0.1], pleased to meet you, ENHANCEDSTATUSCODES, PIPELINING, EXPN, VERB, 8BITMIME, SIZE, DSN, ETRN, AUTH DIGEST-MD5 CRAM-MD5, STARTTLS, DELIVERBY, HELP,
  11. |_ 2.0.0 This is sendmail version 8.15.2 2.0.0 Topics: 2.0.0 HELO EHLO MAIL RCPT DATA 2.0.0 RSET NOOP QUIT HELP VRFY 2.0.0 EXPN VERB ETRN DSN AUTH 2.0.0 STARTTLS 2.0.0 For more info use "HELP <topic>". 2.0.0 To report bugs in the implementation see 2.0.0 http://www.sendmail.org/email-addresses.html 2.0.0 For local information send email to Postmaster at your site. 2.0.0 End of HELP info
  12. | ssl-cert: Subject: commonName=debian/organizationName=Sendmail
  13. | Not valid before: 2019-09-25T16:48:39
  14. |_Not valid after: 2029-09-22T16:48:39
  15. |_ssl-date: ERROR: Script execution failed (use -d to debug)
  16. 143/tcp open imap Courier Imapd (released 2016)
  17. |_imap-capabilities: completed STARTTLSA0001 THREAD=REFERENCES ACL2=UNION ACL IMAP4rev1 SORT CAPABILITY UIDPLUS CHILDREN OK QUOTA THREAD=ORDEREDSUBJECT IDLE NAMESPACE
  18. | ssl-cert: Subject: commonName=localhost/organizationName=Courier Mail Server/stateOrProvinceName=NY/countryName=US
  19. | Subject Alternative Name: email:postmaster@example.com
  20. | Not valid before: 2019-09-26T04:08:11
  21. |_Not valid after: 2020-09-25T04:08:11
  22. |_ssl-date: 2019-09-26T15:23:50+00:00; -17s from scanner time.
  23.  
  24. Host script results:
  25. |_clock-skew: mean: -17s, deviation: 0s, median: -17s
  26.  
  27. Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
  28. Nmap done: 1 IP address (1 host up) scanned in 9.71 seconds

Courier no és capaç de llegir els correus de les bústies tradicionals (/var/mail). Hem de fer que els correus es redireccionin i s’emmagatzemin a HOME/MailDir amb procmail.

Instal·lem el programari procmail:

  1. # apt-get install procmail
  2. S'està llegint la llista de paquets… Fet
  3. S'està construint l'arbre de dependències
  4. S'està llegint la informació de l'estat… Fet
  5. procmail ja està en la versió més recent (3.22-25+deb9u1).
  6. S'ha marcat procmail com instal·lat manualment.
  7. El paquets següents s'han instal·lat automàticament i ja no serà necessaris:
  8. apache2-bin apache2-data apache2-utils default-mysql-server galera-3 libaio1 libapache2-mod-php7.0 libapr1 libaprutil1
  9. libaprutil1-dbd-sqlite3 libaprutil1-ldap libconfig-inifiles-perl libdbd-mysql-perl libdbi-perl libhtml-template-perl
  10. libjemalloc1 libreadline5 libterm-readkey-perl mariadb-client-10.1 mariadb-client-core-10.1 mariadb-common
  11. mariadb-server-10.1 mariadb-server-core-10.1 php-common php7.0 php7.0-cli php7.0-common php7.0-json php7.0-mysql
  12. php7.0-opcache php7.0-readline rsync socat
  13. Empreu «apt autoremove» per a suprimir-los.
  14. 0 actualitzats, 0 nous a instal·lar, 0 a suprimir i 311 no actualitzats.

Creem el fitxer /etc/procmailrc on especifiquem que els correus es desin a HOME/MailDir:

  1. # file: /etc/procmailrc
  2. # system-wide settings for procmail
  3. SHELL="/bin/bash"
  4. SENDMAIL="/usr/sbin/sendmail -oi -t"
  5. LOGFILE="/var/log/procmail.log"
  6. DEFAULT="$HOME/Maildir/"
  7. MAILDIR="$HOME/Maildir/"
  8. DROPPRIVS=yes
  9. :0
  10. * ^X-Spam-Status: Yes
  11. .spam/

La directiva DROPPRIVS fa que els correus que es copïin a la carpeta dels usuaris es “processin” com si ho fes l’usuari. Altrament podríem trobar que no podem llegir els correus perquè no tenim permisos. Segons el manual, ”if set to ‘yes’ procmail will drop all privileges it might have had (suid or sgid). This is only useful if you want to guarantee that the bottom half of the /etc/procmailrc file is executed on behalf of the recipient”.

Comprovem que funciona des de la línia de comandes, enviant un correu i comprovant que s’ha desat a la carpeta corresponent:

  1. # echo "Correu de prova procmail" | mail -s "PROCMAIL" usuari@server.ioc.cat
  2. # ls /home/usuari/Maildir/
  3. cur new tmp
  4. # ls /home/usuari/Maildir/new
  5. 1569472219.1751_0.server.ioc.cat
  6. # cat /home/usuari/Maildir/new/1569472219.1751_0.server.ioc.cat
  7. Return-Path: <root@server.ioc.cat>
  8. Received: from server.ioc.cat (localhost [127.0.0.1])
  9. by server.ioc.cat (8.15.2/8.15.2/Debian-8) with ESMTP id x8Q4UJFm001749
  10. for <usuari@server.ioc.cat>; Thu, 26 Sep 2019 06:30:19 +0200
  11. Received: (from root@localhost)
  12. by server.ioc.cat (8.15.2/8.15.2/Submit) id x8Q4UJRK001748;
  13. Thu, 26 Sep 2019 06:30:19 +0200
  14. Date: Thu, 26 Sep 2019 06:30:19 +0200
  15. From: root <root@server.ioc.cat>
  16. Message-Id: <201909260430.x8Q4UJRK001748@server.ioc.cat>
  17. Subject: PROCMAIL
  18. To: <usuari@server.ioc.cat>
  19. X-Mailer: mail (GNU Mailutils 3.1.1)
  20.  
  21. Correu de prova procmail

Comprovem que funciona IMAP amb el client Mutt:

  1. # mutt -f imap://usuari@server.ioc.cat

Els primer cop ens demanarà d’acceptar el certificat:

Seguidament, com que és una connexió remota, ens demana la contrasenya:

I finalment, accedim als correus:

Finalment, instal·lem un client gràfic com KMail:

  1. # apt-get install kmail

Iniciem i cancel·lem l’assistent. Anem a Settings, Configure Kmail, Comptes, Add, Servidor de correu IMAP i introduim les dades necessàries:

Fem Check mail i obtenim el correu:

5. Seguretat en el correu

Fins ara tot l’enviament del correu electrònic del servidor instal·lat es realitza en text pla, és a dir, que els paquets no duen cap tipus de xifratge i qualsevol ens podria espiar. Sendmail, com la majoria de servidors de correu, permet fer ús dels mètodes moders d’encriptació per tal de proveir seguretat a les nostres comunicacions.

Cal llegir els comentaris del fitxer /etc/mail/tls/starttls.m4 per tal d’afegir a Sendmail el suport TLS.

  1. # cat /etc/mail/tls/starttls.m4
  2. divert(-1)dnl
  3. ####################################################################
  4. ##### This file is automagically generated -- edit at your own risk
  5. #####
  6. ##### Copyright (c) 2002-2010 Richard Nelson. All Rights Reserved.
  7. #####
  8. ##### file: /etc/mail/tls/starttls.m4
  9. ##### STARTTLS Configuration for Debian Sendmail
  10. ##### generated via: (/usr/bin/perl v5>24.1)
  11. ##### /usr/share/sendmail/update_tlsm4
  12. ##### version: 8.15.2 2016-12-08 18:43:49 cowboy
  13. ##### by: jciberta@debian
  14. ##### on: Wed Sep 25 18:59:14 2019
  15. ##### in: /home/jciberta
  16. ##### input files: /etc/mail/databases
  17. #####
  18. ##### Usage:
  19. ##### 1) To get *ANY* STARTTLS support for sendmail you
  20. ##### A) *MUST* Add this line to /etc/mail/sendmail.mc
  21. ##### `include(`/etc/mail/tls/starttls.m4')dnl'
  22. ##### B) *MAY* Add the same line to /etc/mail/submit.mc
  23. ##### to get MSP<->MTA authentication/encryption
  24. ##### 2) You may modify the marked portions of this file, those
  25. ##### deal with the cert/key filenames and TLS options.
  26. ##### If you need finer control of TLS options, use the access
  27. ##### database.
  28. #####
  29. ####################################################################
  30. divert(0)dnl
  31. ...

Afegim les línies que es demanen als apartats A i B. Un cop modificats els fitxers cal regenerar la configuració tal com ens indica el fitxer /etc/mail/sendmail.mc:

  1. # cat /etc/mail/sendmail.mc
  2. divert(-1)dnl
  3. #-----------------------------------------------------------------------------
  4. # $Sendmail: debproto.mc,v 8.15.2 2016-12-08 18:43:49 cowboy Exp $
  5. #
  6. # Copyright (c) 1998-2010 Richard Nelson. All Rights Reserved.
  7. #
  8. # cf/debian/sendmail.mc. Generated from sendmail.mc.in by configure.
  9. #
  10. # sendmail.mc prototype config file for building Sendmail 8.15.2
  11. #
  12. # Note: the .in file supports 8.7.6 - 9.0.0, but the generated
  13. # file is customized to the version noted above.
  14. #
  15. # This file is used to configure Sendmail for use with Debian systems.
  16. #
  17. # If you modify this file, you will have to regenerate /etc/mail/sendmail.cf
  18. # by running this file through the m4 preprocessor via one of the following:
  19. # * make (or make -C /etc/mail)
  20. # * sendmailconfig
  21. # * m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
  22. # The first two options are preferred as they will also update other files
  23. # that depend upon the contents of this file.
  24. #
  25. # The best documentation for this .mc file is:
  26. # /usr/share/doc/sendmail-doc/cf.README.gz
  27. #
  28. #-----------------------------------------------------------------------------
  29. divert(0)dnl

L’opció més senzilla és amb la utilitat sendmailconfig.

  1. # sendmailconfig
  2. ...

Per comprovar-ho, tornem a capturar els paquets amb el Wireshark i enviem un altre correu de prova:

  1. # echo "Correu segur de prova" | mail -s "Correu SSL/TLS" usuari@server.ioc.cat

Si anem al Wireshark i seguim l’stream de la conversa, podrem veure que al diàleg ja s’indica que les comunicacions estaran encriptades (a partir de STARTTLS):

Referències

Podeu ampliar la informació consultant les webs del programari utilitzat:

Sendmail

IMAP

Mutt

Wireshark

Kmail2

Servidor de correu Exim

L’objectiu d’aquesta activitat és aprendre a instal·lar i configurar el servidor SMTP Exim i el servidor IMAP Dovecot.

Exim és un altre agent de tranport de correu (MTA) de programari lliure desenvolupat per la universitat de Cambridge. Dovecot és un servidor de POP3 i IMAP per a sistemes UNIX/Linux amb el focus principalment posat en la seguretat.

Realitzeu les següents tasques:

  1. Instal·leu Exim en el sistema operatiu Linux.
  2. Configureu el programari Exim.
  3. Realitzeu proves amb el servidor de correu per tal de verificar l’enviament de correus.
  4. Instal·leu i configureu el protocol IMAP (Internet Message Access Protocol) amb el programari Dovecot per tal de permetre l’accés a la bústia de correu de forma remota (MDA, Mail Delivery Agent).
  5. Realitzeu proves amb la comanda Telnet per tal de comprovar el funcionament de protocol IMAP.

1. Instal·lació del servidor Exim.

Per tal d’instal·lar el programari, haurem d’accedir al terminal. Comprovem primer com s’anomena el paquet a instal·lar:

  1. # apt-cache search exim | grep exim
  2. exim4 - metapackage to ease Exim MTA (v4) installation
  3. exim4-base - support files for all Exim MTA (v4) packages
  4. exim4-config - configuration for the Exim MTA (v4)
  5. exim4-daemon-heavy - Exim MTA (v4) daemon with extended features, including exiscan-acl
  6. exim4-daemon-heavy-dbg - debugging symbols for the Exim MTA "heavy" daemon
  7. exim4-daemon-light - lightweight Exim MTA (v4) daemon
  8. exim4-daemon-light-dbg - debugging symbols for the Exim MTA "light" daemon
  9. exim4-dbg - debugging symbols for the Exim MTA (utilities)
  10. exim4-dev - header files for the Exim MTA (v4) packages
  11. eximon4 - monitor application for the Exim MTA (v4) (X11 interface)
  12. exim4-doc-html - documentation for the Exim MTA (v4) in html format
  13. exim4-doc-info - documentation for the Exim MTA (v4) in info format
  14. geximon - a monitor for the exim MTA
  15. rexima - simple ncurses/command-line mixer
  16. sa-exim - SpamAssassin filter for Exim

Veiem que hi ha dues versions de MTA del programari Exim, una de lleugera (light) i una altra de pesada (heavy). També existeix un metapaquet que facilita la instal·lació de la lleugera.

Si mirem els detalls del paquet exim4-daemon-heavy a l’apartat description-en veurem quines característiques porta de més:

  1. # apt-cache show exim4-daemon-heavy
  2. Package: exim4-daemon-heavy
  3. Source: exim4
  4. Version: 4.92-8+deb10u3~bpo9+1
  5. Installed-Size: 1525
  6. Maintainer: Exim4 Maintainers <pkg-exim4-maintainers@lists.alioth.debian.org>
  7. Architecture: i386
  8. Replaces: exim4-base (<= 4.61-1), mail-transport-agent
  9. Provides: exim4-localscanapi-2.0, mail-transport-agent
  10. Depends: exim4-base (>= 4.92), debconf (>= 0.5) | debconf-2.0, libc6 (>= 2.16), libdb5.3, libgnutls-dane0 (>= 3.5.7), libgnutls30 (>= 3.5.7), libldap-2.4-2 (>= 2.4.7), libmariadbclient18 (>= 10.1.41-0+deb9u1), libpam0g (>= 0.99.7.1), libpcre3, libperl5.24 (>= 5.24.0), libpq5, libsasl2-2, libsqlite3-0 (>= 3.5.9)
  11. Conflicts: mail-transport-agent
  12. Breaks: clamav-daemon (<< 0.95)
  13. Description-en: Exim MTA (v4) daemon with extended features, including exiscan-acl
  14. Exim (v4) is a mail transport agent. This package contains the exim4
  15. daemon with extended features. In addition to the features already
  16. supported by exim4-daemon-light, exim4-daemon-heavy includes LDAP,
  17. sqlite, PostgreSQL and MySQL data lookups, SASL and SPA SMTP authentication,
  18. embedded Perl interpreter, and the content scanning extension
  19. (formerly known as "exiscan-acl") for integration of virus scanners
  20. and spamassassin.

Instal·lem per al nostres propòsits la versió lleugera:

  1. # apt-get install exim4
  2. S'està llegint la llista de paquets… Fet
  3. S'està construint l'arbre de dependències
  4. S'està llegint la informació de l'estat… Fet
  5. S'instal·laran els següents paquets extres:
  6. exim4-base exim4-config exim4-daemon-light guile-2.0-libs libgc1c2 libgsasl7 libkyotocabinet16v5
  7. libmailutils5 libmariadbclient18 libntlm0 mailutils mailutils-common mysql-common
  8. Paquets suggerits:
  9. eximon4 exim4-doc-html | exim4-doc-info spf-tools-perl swaks mailutils-mh mailutils-doc
  10. S'instal·laran els paquets NOUS següents:
  11. exim4 exim4-base exim4-config exim4-daemon-light guile-2.0-libs libgc1c2 libgsasl7 libkyotocabinet16v5
  12. libmailutils5 libmariadbclient18 libntlm0 mailutils mailutils-common mysql-common
  13. 0 actualitzats, 14 nous a instal·lar, 0 a suprimir i 322 no actualitzats.
  14. S'ha d'obtenir 7919 kB d'arxius.
  15. Després d'aquesta operació s'empraran 26,3 MB d'espai en disc addicional.
  16. Voleu continuar? [S/n]

2. Configuració del servidor Exim.

Quan s’instal·la el servidor Exim, aquest ho fa amb una configuració per defecte. Per canviar-la i adequar-la a les nostres necessitats cal executar:

  1. dpkg-reconfigure exim4-config

Afegim la nostra IP:

Les següents opcions per defecte, fins que ens demana el format de la bústia.

Els principals formats de bústia que suporta Exim són:

  • mbox: tot el correu està centralitzat al directori /var/mail.
  • Maildir: el correu està descentralitzat i cada usuari té la seva bústia en una carpeta del seu directori home.

Seleccionem el format Maildir:

La configuració un cop realitzada queda desada al fitxer /etc/exim4/update-exim4.conf.conf

Si donem un cop d’ull a aquest fitxer veurem la configuració realitzada i a la capçalera ens indica les formes en que es pot configurar Exim, és a dir, editant directament aquest fitxer per posteriorment actualitzar la configuració o simplement executant la comanda dpkg-reconfigure exim4-config.

  1. # /etc/exim4/update-exim4.conf.conf
  2. #
  3. # Edit this file and /etc/mailname by hand and execute update-exim4.conf
  4. # yourself or use 'dpkg-reconfigure exim4-config'
  5. #
  6. # Please note that this is _not_ a dpkg-conffile and that automatic changes
  7. # to this file might happen. The code handling this will honor your local
  8. # changes, so this is usually fine, but will break local schemes that mess
  9. # around with multiple versions of the file.
  10. #
  11. # update-exim4.conf uses this file to determine variable values to generate
  12. # exim configuration macros for the configuration file.
  13. #
  14. # Most settings found in here do have corresponding questions in the
  15. # Debconf configuration, but not all of them.
  16. #
  17. # This is a Debian specific file
  18.  
  19. dc_eximconfig_configtype='internet'
  20. dc_other_hostnames='server.ioc.cat'
  21. dc_local_interfaces='127.0.0.1; 10.0.2.15'
  22. dc_readhost=''
  23. dc_relay_domains=''
  24. dc_minimaldns='false'
  25. dc_relay_nets=''
  26. dc_smarthost=''
  27. CFILEMODE='644'
  28. dc_use_split_config='false'
  29. dc_hide_mailname=''
  30. dc_mailname_in_oh='true'
  31. dc_localdelivery='maildir_home'
  32. root@server:/etc/exim4#

Reiniciem el servei i comprovem que s’està executant correctament.

  1. # service exim4 restart
  2. # service exim4 status
  3. ● exim4.service - LSB: exim Mail Transport Agent
  4. Loaded: loaded (/etc/init.d/exim4; generated; vendor preset: enabled)
  5. Active: active (running) since Sun 2019-09-29 18:47:12 CEST; 4s ago
  6. Docs: man:systemd-sysv-generator(8)
  7. Process: 14719 ExecStop=/etc/init.d/exim4 stop (code=exited, status=0/SUCCESS)
  8. Process: 14730 ExecStart=/etc/init.d/exim4 start (code=exited, status=0/SUCCESS)
  9. Tasks: 1 (limit: 4915)
  10. CGroup: /system.slice/exim4.service
  11. └─14979 /usr/sbin/exim4 -bd -q30m
  12.  
  13. set 29 18:47:12 server.ioc.cat systemd[1]: Stopped LSB: exim Mail Transport Agent.
  14. set 29 18:47:12 server.ioc.cat systemd[1]: Starting LSB: exim Mail Transport Agent...
  15. set 29 18:47:12 server.ioc.cat exim4[14730]: Starting MTA: exim4.
  16. set 29 18:47:12 server.ioc.cat systemd[1]: Started LSB: exim Mail Transport Agent.

La comanda exim permet fer una varietat d’operacions, des de llegir la cua del correu a executar el servei en diverses modalitats. L’opció -bV, apart de donar-nos informació de versions, dates, etc. també realitza una verificació estàtica dels fitxers de configuració, útil per detectar possibles errors.

  1. # man exim
  2. ...
  3. -bV This option causes Exim to write the current version number, compilation number, and com
  4. pilation date of the exim4 binary to the standard output. It also lists the DBM library
  5. that is being used, the optional modules (such as specific lookup types), the drivers that
  6. are included in the binary, and the name of the run time configuration file that is in
  7. use.
  8.  
  9. As part of its operation, -bV causes Exim to read and syntax check its configuration file.
  10. However, this is a static check only. It cannot check values that are to be expanded. For
  11. example, although a misspelt ACL verb is detected, an error in the verb's arguments is
  12. not. You cannot rely on -bV alone to discover (for example) all the typos in the configu
  13. ration; some realistic testing is needed. The -bh and -N options provide more dynamic
  14. testing facilities.
  15. ...

No obstant, si el servei s’està executant correctament, és que no hi ha errors en la configuració (almenys estàtica).

  1. # exim -bV
  2. Exim version 4.89 #2 built 03-Sep-2019 18:01:38
  3. Copyright (c) University of Cambridge, 1995 - 2017
  4. (c) The Exim Maintainers and contributors in ACKNOWLEDGMENTS file, 2007 - 2017
  5. Berkeley DB: Berkeley DB 5.3.28: (September 9, 2013)
  6. Support for: crypteq iconv() IPv6 GnuTLS move_frozen_messages DKIM DNSSEC Event OCSP PRDR SOCKS TCP_Fast_Open
  7. Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmjz dbmnz dnsdb dsearch nis nis0 passwd
  8. Authenticators: cram_md5 plaintext
  9. Routers: accept dnslookup ipliteral manualroute queryprogram redirect
  10. Transports: appendfile/maildir/mailstore autoreply lmtp pipe smtp
  11. Fixed never_users: 0
  12. Configure owner: 0:0
  13. Size of off_t: 8
  14. Configuration file is /var/lib/exim4/config.autogenerated

Podem acabar comprovant que el servei s’està executant i que té el port SMTP obert amb nmap:

  1. # nmap -T4 -A localhost
  2.  
  3. Starting Nmap 7.40 ( https://nmap.org ) at 2019-09-29 19:16 CEST
  4. Nmap scan report for localhost (127.0.0.1)
  5. Host is up (0.000017s latency).
  6. Not shown: 997 closed ports
  7. PORT STATE SERVICE VERSION
  8. 25/tcp open smtp Exim smtpd 4.89
  9. | smtp-commands: server.ioc.cat Hello localhost [127.0.0.1], SIZE 52428800, 8BITMIME, PIPELINING, PRDR, HELP,
  10. |_ Commands supported: AUTH HELO EHLO MAIL RCPT DATA BDAT NOOP QUIT RSET HELP
  11. Device type: general purpose
  12. Running: Linux 3.X|4.X
  13. OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
  14. OS details: Linux 3.8 - 4.6
  15. Network Distance: 0 hops
  16. Service Info: Host: server.ioc.cat
  17.  
  18. OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
  19. Nmap done: 1 IP address (1 host up) scanned in 146.90 seconds

3. Proves amb el servidor de correu

Crearem un usuari anomenat alumne per fer les proves. Si el volem crear de forma no interactiva i directament des de comanda farem servir useradd:

  1. # useradd -m alumne -s /bin/bash
  2. # passwd alumne
  3. Introduïu la nova contrasenya d'UNIX:
  4. Torneu a escriure la nova contrasenya d'UNIX:
  5. passwd: s'ha actualitzat la contrasenya satisfactòriament

Enviem un correu des del nostre usuari a l’usuari alumne@server.ioc.cat amb la comanda mail (del paquet mailutils). Per acabar el correu es fa amb CTRL+D:

  1. # mail alumne@server.ioc.cat
  2. Cc:
  3. Subject: 1a prova de correu amb Exim
  4. Aquesta és la 1a prova de correu

Sense llegir el correu encara, podem observar com s’emmagatzema a la bústia corresponent i veiem que el correu és un simple fitxer.

L’estructura del Maildir està composta per tres carpetes: la actual (cur), la nova (new) i la temporal (tmp).

  1. # ls /home/alumne/Maildir/
  2. cur new tmp
  3. # ls /home/alumne/Maildir/new
  4. 1569776612.H693982P15236.server.ioc.cat
  5. # cat /home/alumne/Maildir/new/1569776612.H693982P15236.server.ioc.cat
  6. Return-path: <root@server.ioc.cat>
  7. Envelope-to: alumne@server.ioc.cat
  8. Delivery-date: Sun, 29 Sep 2019 19:03:32 +0200
  9. Received: from root by server.ioc.cat with local (Exim 4.89)
  10. (envelope-from <root@server.ioc.cat>)
  11. id 1iEcbc-0003xi-K1
  12. for alumne@server.ioc.cat; Sun, 29 Sep 2019 19:03:32 +0200
  13. To: <alumne@server.ioc.cat>
  14. Subject: 1a prova de correu amb Exim
  15. X-Mailer: mail (GNU Mailutils 3.1.1)
  16. Message-Id: <E1iEcbc-0003xi-K1@server.ioc.cat>
  17. From: root@server.ioc.cat
  18. Date: Sun, 29 Sep 2019 19:03:32 +0200
  19.  
  20. Aquesta és la 1a prova de correu
  21. root@server:~#

Instal·lem un client de correu en mode text, per exemple Mutt.

  1. # apt-get install mutt
  2. S'està llegint la llista de paquets… Fet
  3. S'està construint l'arbre de dependències
  4. S'està llegint la informació de l'estat… Fet
  5. El paquets següents s'han instal·lat automàticament i ja no serà necessaris:
  6. alpine-doc mlock
  7. Empreu «apt autoremove» per a suprimir-los.
  8. S'instal·laran els següents paquets extres:
  9. libgmime-2.6-0 libgpgme11 libnotmuch4 libtokyocabinet9
  10. Paquets suggerits:
  11. gpgsm urlview mixmaster
  12. S'instal·laran els paquets NOUS següents:
  13. libgmime-2.6-0 libgpgme11 libnotmuch4 libtokyocabinet9 mutt
  14. 0 actualitzats, 5 nous a instal·lar, 0 a suprimir i 322 no actualitzats.
  15. S'ha d'obtenir 2497 kB d'arxius.
  16. Després d'aquesta operació s'empraran 8927 kB d'espai en disc addicional.
  17. Voleu continuar? [S/n]

Mutt per defecte llegeix el correu en format mbox. Li haurem d’indicar que ha de llegir la bústia amb el format Maildir, però primer passarem a ser l’usuari alumne:

  1. # su alumne
  2. $ cd /home/alumne
  3. $ mutt -f ./Maildir

4. Accés remot al correu amb IMAP mitjançant el programari Dovecot

Dovecot és un programari servidor POP3 i IMAP de correu de codi obert, principalment per a sistemes UNIX/Linux.

Cerquem el nom del paquet a instal·lar amb apt-cache:

  1. # apt-cache search dovecot | grep imap
  2. dovecot-imapd - secure POP3/IMAP server - IMAP daemon

Instal·lem el programari per a IMAP.

  1. # apt-get install dovecot-imapd
  2. S'està llegint la llista de paquets… Fet
  3. S'està construint l'arbre de dependències
  4. S'està llegint la informació de l'estat… Fet
  5. El paquets següents s'han instal·lat automàticament i ja no serà necessaris:
  6. alpine-doc mlock
  7. Empreu «apt autoremove» per a suprimir-los.
  8. S'instal·laran els següents paquets extres:
  9. dovecot-core libstemmer0d
  10. Paquets suggerits:
  11. ntp dovecot-gssapi dovecot-sieve dovecot-pgsql dovecot-mysql dovecot-sqlite dovecot-ldap dovecot-pop3d
  12. dovecot-lmtpd dovecot-managesieved dovecot-solr dovecot-lucene ufw
  13. S'instal·laran els paquets NOUS següents:
  14. dovecot-core dovecot-imapd libstemmer0d
  15. 0 actualitzats, 3 nous a instal·lar, 0 a suprimir i 322 no actualitzats.
  16. S'ha d'obtenir 4439 kB d'arxius.
  17. Després d'aquesta operació s'empraran 11,2 MB d'espai en disc addicional.
  18. Voleu continuar? [S/n]

Els arxius de configuració estan a /etc/dovecot i el principal és /etc/dovecot/dovecot.conf. En aquest descomentem la directiva listen fent que escolti només per a IPv4:

  1. listen = *

En aquest mateix fitxer queda especificat a través d’un include els protocols a escoltar:

  1. # ls /usr/share/dovecot/protocols.d
  2. imapd.protocol
  3. # cat /usr/share/dovecot/protocols.d/imapd.protocol
  4. protocols = $protocols imap

S’ha d’indicat també el mecanisme d’autenticació a través del fitxer /etc/dovecot/conf.d/10-auth.conf:

  1. ##
  2. ## Authentication processes
  3. ##
  4.  
  5. # Disable LOGIN command and all other plaintext authentications unless
  6. # SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
  7. # matches the local IP (ie. you're connecting from the same computer), the
  8. # connection is considered secure and plaintext authentication is allowed.
  9. # See also ssl=required setting.
  10. disable_plaintext_auth = no
  11.  
  12. ...
  13.  
  14. # Space separated list of wanted authentication mechanisms:
  15. # plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi otp skey
  16. # gss-spnego
  17. # NOTE: See also disable_plaintext_auth setting.
  18. auth_mechanisms = plain login

Configurem el format de la bústia al fitxer /etc/dovecot/conf.d/10-mail.conf, que està plenament autodocumentat i amb exemples per als principals formats:

  1. ##
  2. ## Mailbox locations and namespaces
  3. ##
  4.  
  5. # Location for users' mailboxes. The default is empty, which means that Dovecot
  6. # tries to find the mailboxes automatically. This won't work if the user
  7. # doesn't yet have any mail, so you should explicitly tell Dovecot the full
  8. # location.
  9. #
  10. # If you're using mbox, giving a path to the INBOX file (eg. /var/mail/%u)
  11. # isn't enough. You'll also need to tell Dovecot where the other mailboxes are
  12. # kept. This is called the "root mail directory", and it must be the first
  13. # path given in the mail_location setting.
  14. #
  15. # There are a few special variables you can use, eg.:
  16. #
  17. # %u - username
  18. # %n - user part in user@domain, same as %u if there's no domain
  19. # %d - domain part in user@domain, empty if there's no domain
  20. # %h - home directory
  21. #
  22. # See doc/wiki/Variables.txt for full list. Some examples:
  23. #
  24. # mail_location = maildir:~/Maildir
  25. # mail_location = mbox:~/mail:INBOX=/var/mail/%u
  26. # mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n
  27. #
  28. # <doc/wiki/MailLocation.txt>
  29. #
  30. mail_location = maildir:~/Maildir

Reiniciem el servei:

  1. # service dovecot restart
  2. # service dovecot status
  3. ● dovecot.service - Dovecot IMAP/POP3 email server
  4. Loaded: loaded (/lib/systemd/system/dovecot.service; enabled; vendor preset: enabled)
  5. Active: active (running) since Sun 2019-09-29 19:46:57 CEST; 3s ago
  6. Docs: man:dovecot(1)
  7. http://wiki2.dovecot.org/
  8. Process: 19961 ExecStop=/usr/bin/doveadm stop (code=exited, status=0/SUCCESS)
  9. Process: 19966 ExecStart=/usr/sbin/dovecot (code=exited, status=0/SUCCESS)
  10. Main PID: 19968 (dovecot)
  11. Tasks: 4 (limit: 4915)
  12. CGroup: /system.slice/dovecot.service
  13. ├─19968 /usr/sbin/dovecot
  14. ├─19969 dovecot/anvil
  15. ├─19970 dovecot/log
  16. └─19972 dovecot/config
  17.  
  18. set 29 19:46:57 server.ioc.cat systemd[1]: Starting Dovecot IMAP/POP3 email server...
  19. set 29 19:46:57 server.ioc.cat systemd[1]: dovecot.service: PID file /var/run/dovecot/master.pid not readable
  20. set 29 19:46:57 server.ioc.cat dovecot[19968]: master: Dovecot v2.2.27 (c0f36b0) starting up for imap (core du
  21. set 29 19:46:57 server.ioc.cat systemd[1]: Started Dovecot IMAP/POP3 email server.
  22. lines 1-19/19 (END)

Tornem a executar nmap per veure quins ports hi ha oberts:

  1. # nmap -A -T4 localhost
  2.  
  3. Starting Nmap 7.40 ( https://nmap.org ) at 2019-09-29 19:52 CEST
  4. Nmap scan report for localhost (127.0.0.1)
  5. Host is up (0.000019s latency).
  6. Not shown: 996 closed ports
  7. PORT STATE SERVICE VERSION
  8. 25/tcp open smtp Exim smtpd 4.89
  9. | smtp-commands: server.ioc.cat Hello localhost [127.0.0.1], SIZE 52428800, 8BITMIME, PIPELINING, PRDR, HELP,
  10. |_ Commands supported: AUTH HELO EHLO MAIL RCPT DATA BDAT NOOP QUIT RSET HELP
  11. |_smtp-ntlm-info: ERROR: Script execution failed (use -d to debug)
  12. 143/tcp open imap Dovecot imapd
  13. |_imap-capabilities: AUTH=LOGINA0001 more ID LITERAL+ AUTH=PLAIN have IDLE IMAP4rev1 listed LOGIN-REFERRALS ENABLE capabilities Pre-login SASL-IR OK post-login
  14. Device type: general purpose
  15. Running: Linux 3.X|4.X
  16. OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
  17. OS details: Linux 3.8 - 4.6
  18. Network Distance: 0 hops
  19. Service Info: Host: server.ioc.cat
  20.  
  21. OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
  22. Nmap done: 1 IP address (1 host up) scanned in 155.06 seconds

I comprovem que funciona IMAP amb mutt:

  1. # mutt -f imap://alumne@server.ioc.cat

Ens demanarà la contrasenya i se’ns mostrarà seguidament el correu entrant:

Per acabar, instal·lem i configurem un client de correu gràfic. Aquest cop Mozilla Thunderbird:

  1. # apt-get install thunderbird
  2. S'està llegint la llista de paquets… Fet
  3. S'està construint l'arbre de dependències
  4. S'està llegint la informació de l'estat… Fet
  5. El paquets següents s'han instal·lat automàticament i ja no serà necessaris:
  6. alpine-doc mlock
  7. Empreu «apt autoremove» per a suprimir-los.
  8. S'instal·laran els següents paquets extres:
  9. lightning
  10. Paquets suggerits:
  11. calendar-google-provider fonts-lyx apparmor
  12. S'instal·laran els paquets NOUS següents:
  13. lightning thunderbird
  14. 0 actualitzats, 2 nous a instal·lar, 0 a suprimir i 322 no actualitzats.
  15. S'ha d'obtenir 41,0 MB d'arxius.
  16. Després d'aquesta operació s'empraran 167 MB d'espai en disc addicional.
  17. Voleu continuar? [S/n]

En iniciar ens demanarà si volem configurar un compte existent:

Seguidament configurem els paràmetres per al correu SMTP i IMAP:

Ens avisa que no estem utilitzant cap tipus d’encriptació i que les dades viatjaran visibles per Internet:

Finalment, obrim la carpeta Inbox del nostre correu i observem el correu rebut anteriorment:

5. Proves avançades amb Telnet

L’aplicació telnet, a part de donar servei al protocol telnet per a la connexió (insegura) remota d’equips, és una navalla suïssa que permet obrir d’altres port i treballar directament a nivell del protocol obert. És el cas dels protocols SMTP i IMAP on podrem executar les comandes pròpies d’aquests protocols i que estan especificades en els seus respectius RFC.

Enviem un correu amb Telnet. El protocol SMTP està especificat al RFC 5321. En el següent exemple s’ha fet servidr les comandes: ehlo, mail, rcpt, data i quit.

  1. # telnet server.ioc.cat smtp
  2. Trying 10.0.2.15...
  3. Connected to server.ioc.cat.
  4. Escape character is '^]'.
  5. 220 server.ioc.cat ESMTP Exim 4.89 Sun, 29 Sep 2019 20:10:22 +0200
  6. ehlo hi
  7. 250-server.ioc.cat Hello hi [10.0.2.15]
  8. 250-SIZE 52428800
  9. 250-8BITMIME
  10. 250-PIPELINING
  11. 250-PRDR
  12. 250 HELP
  13. mail from:root@server.ioc.cat
  14. 250 OK
  15. rcpt to:alumne@server.ioc.cat
  16. 250 Accepted
  17. data
  18. 354 Enter message, ending with "." on a line by itself
  19. Subject: Prova telnet
  20. Prova de telnet
  21. .
  22. 250 OK id=1iEdeu-0005O9-BG
  23. quit
  24. 221 server.ioc.cat closing connection
  25. Connection closed by foreign host.

Mostrem el correu enviat amb telnet obrint el port IMAP. El protocol IMAP està especificat al RFC 5301. A l’apartat 6 hi ha la part relativa a les comandes IMAP

  1. # telnet server.ioc.cat imap
  2. Trying 10.0.2.15...
  3. Connected to server.ioc.cat.
  4. Escape character is '^]'.
  5. * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
  6. 1 login alumne alumne
  7. 1 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE] Logged in
  8. 2 list "" "*"
  9. * LIST (\HasNoChildren \Trash) "." Trash
  10. * LIST (\HasNoChildren) "." INBOX
  11. 2 OK List completed (0.000 + 0.000 secs).
  12. 3 select inbox
  13. * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
  14. * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
  15. * 2 EXISTS
  16. * 1 RECENT
  17. * OK [UNSEEN 2] First unseen.
  18. * OK [UIDVALIDITY 1569779845] UIDs valid
  19. * OK [UIDNEXT 3] Predicted next UID
  20. 3 OK [READ-WRITE] Select completed (0.000 + 0.000 secs).
  21. 4 fetch 2 all
  22. * 2 FETCH (FLAGS (\Recent) INTERNALDATE "29-Sep-2019 20:11:21 +0200" RFC822.SIZE 366 ENVELOPE (NIL "Prova telnet" NIL NIL NIL NIL NIL NIL NIL NIL))
  23. 4 OK Fetch completed (0.001 + 0.000 secs).
  24. 5 fetch 2 body[]
  25. * 2 FETCH (BODY[] {366}
  26. Return-path: <root@server.ioc.cat>
  27. Envelope-to: alumne@server.ioc.cat
  28. Delivery-date: Sun, 29 Sep 2019 20:11:21 +0200
  29. Received: from [10.0.2.15] (helo=hi)
  30. by server.ioc.cat with esmtp (Exim 4.89)
  31. (envelope-from <root@server.ioc.cat>)
  32. id 1iEdeu-0005O9-BG
  33. for alumne@server.ioc.cat; Sun, 29 Sep 2019 20:11:21 +0200
  34. Subject: Prova telnet
  35.  
  36. Prova de Telnet
  37. )
  38. 5 OK Fetch completed (0.001 + 0.000 secs).
  39. 6 logout
  40. * BYE Logging out
  41. 6 OK Logout completed (0.000 + 0.000 secs).
  42. Connection closed by foreign host.

Referències

Exim

Dovecot

Thunderbird

Servidor de correu Postfix

L’objectiu d’aquesta activitat és aprendre a instal·lar i configurar el servidor de correu Postfix i el servidor POP3 Courier.

Postfix és un altre agent de tranport de correu (MTA) de programari lliure desenvolupat inicialment en un centre d’IBM. Com a servidor POP s’usarà el servidor Courier, programari que ja s’ha utilitzat anteriorment per al protocol IMAP.

Realitzeu les següents tasques:

  1. Instal·leu Postfix en el sistema operatiu Linux.
  2. Configureu el programari Postfix.
  3. Realitzeu proves amb el servidor de correu per tal de verificar l’enviament de correus.
  4. Instal·leu i configureu el protocol POP amb el programari Courier per tal de permetre l’accés a la bústia de correu de forma remota.
  5. Realitzeu proves amb la comanda telnet per tal de comprovar el funcionament de protocol POP.

1. Instal·lació del servidor Postfix

Per tal d’instal·lar el programari Postfix, accedim al terminal i executem:

  1. # apt-get install postfix
  2. S'està llegint la llista de paquets… Fet
  3. S'està construint l'arbre de dependències
  4. S'està llegint la informació de l'estat… Fet
  5. S'instal·laran els següents paquets extres:
  6. postfix-sqlite ssl-cert
  7. Paquets suggerits:
  8. procmail postfix-mysql postfix-pgsql postfix-ldap postfix-pcre postfix-lmdb sasl2-bin dovecot-common resolvconf postfix-cdb mail-reader
  9. ufw postfix-doc openssl-blacklist
  10. S'instal·laran els paquets NOUS següents:
  11. postfix postfix-sqlite ssl-cert
  12. 0 actualitzats, 3 nous a instal·lar, 0 a suprimir i 322 no actualitzats.
  13. S'ha d'obtenir 1820 kB d'arxius.
  14. Després d'aquesta operació s'empraran 4319 kB d'espai en disc addicional.
  15. Voleu continuar? [S/n]

Com a tipus de configuració, seleccionem Lloc d’Internet:

I indiquem el nom del correu del sistema:

2. Configuració del servidor Postfix

Acabem de configurar el servidor amb la comanda dpkg-reconfigure postfix:

  1. dpkg-reconfigure postfix

I indiquem la nostra IP:

Aquesta configuració fa que es modifiqui el fitxer de configuració principal de Postfix, que és /etc/postfix/main.cf. Si hi donem un cop d’ull, veurem les modificacions realitzades. Òbviament, també es podria haver editat directament sobre el fitxer.

  1. # cat /etc/postfix/main.cf
  2. ...
  3. myhostname = server.ioc.cat
  4. alias_maps = hash:/etc/aliases
  5. alias_database = hash:/etc/aliases
  6. myorigin = /etc/mailname
  7. mydestination = server.ioc.cat, localhost
  8. relayhost =
  9. mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128, 10.0.2.15
  10. mailbox_size_limit = 0
  11. recipient_delimiter = +
  12. inet_interfaces = all
  13. inet_protocols = all

Configurem Postfix per que usi el format de bústia Maildir:

  1. postconf -e 'home_mailbox = Maildir/'
  2. postconf -e 'mailbox_command ='

I tornem a comprovar com s’ha modificat el fitxer de configuració:

  1. # cat /etc/postfix/main.cf
  2. ...
  3. myhostname = server.ioc.cat
  4. alias_maps = hash:/etc/aliases
  5. alias_database = hash:/etc/aliases
  6. myorigin = /etc/mailname
  7. mydestination = server.ioc.cat, localhost
  8. relayhost =
  9. mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128, 10.0.2.15
  10. mailbox_size_limit = 0
  11. recipient_delimiter = +
  12. inet_interfaces = all
  13. inet_protocols = all
  14. home_mailbox = Maildir/
  15. mailbox_command =

Per tant, Postfix es pot configurar de tres maneres diferents: gràficament, des de comandes o directament sobre els fitxers. No obstant, al final cal reiniciar el servei per tal que les modificacions tinguin efecte:

  1. # service postfix restart

Observem amb nmap que obre el port 25 (SMTP):

  1. # nmap -T4 -A localhost
  2.  
  3. Starting Nmap 7.40 ( https://nmap.org ) at 2019-10-01 15:05 CEST
  4. Nmap scan report for localhost (127.0.0.1)
  5. Host is up (0.000016s latency).
  6. Not shown: 997 closed ports
  7. PORT STATE SERVICE VERSION
  8. 25/tcp open smtp Postfix smtpd
  9. |_smtp-commands: server.ioc.cat, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8,
  10. | ssl-cert: Subject: commonName=server.ioc.cat
  11. | Subject Alternative Name: DNS:server.ioc.cat
  12. | Not valid before: 2019-09-29T09:30:48
  13. |_Not valid after: 2029-09-26T09:30:48
  14. |_ssl-date: ERROR: Script execution failed (use -d to debug)
  15. Device type: general purpose
  16. Running: Linux 3.X|4.X
  17. OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
  18. OS details: Linux 3.8 - 4.6
  19. Network Distance: 0 hops
  20. Service Info: Host: server.ioc.cat
  21.  
  22. OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
  23. Nmap done: 1 IP address (1 host up) scanned in 147.36 seconds

3. Proves amb el servidor de correu

Relitzem una primera prova amb el servidor amb la comanda mail des de la línia de comandes i comprovem que s’ha creat a la bústia corresponent:

  1. # echo "Correu de prova amb Postfix" | mail -s "Prova Postfix" alumne@server.ioc.cat
  2. # ls /home/alumne
  3. mail Maildir
  4. # ls /home/alumne/Maildir
  5. cur new tmp
  6. # ls /home/alumne/Maildir/new
  7. 1569936540.V801I4a166M737765.server.ioc.cat
  8. # cat /home/alumne/Maildir/new/1569936540.V801I4a166M737765.server.ioc.cat
  9. Return-Path: <root@server.ioc.cat>
  10. X-Original-To: alumne@server.ioc.cat
  11. Delivered-To: alumne@server.ioc.cat
  12. Received: by server.ioc.cat (Postfix, from userid 0)
  13. id AFDA27942; Tue, 1 Oct 2019 15:29:00 +0200 (CEST)
  14. Subject: Prova Postfix
  15. To: <alumne@server.ioc.cat>
  16. X-Mailer: mail (GNU Mailutils 3.1.1)
  17. Message-Id: <20191001132900.AFDA27942@server.ioc.cat>
  18. Date: Tue, 1 Oct 2019 15:29:00 +0200 (CEST)
  19. From: root@server.ioc.cat (root)
  20.  
  21. Correu de prova amb Postfix

NotMuch és una eina que s’utilitza des de la línia de comandes per a la recerca ràpida de correu en bústies. No està pensada per enviar correus ni per rebre’n. Però per a comprovar el correu, ja ens va bé.

Comprovem-lo amb NotMuch. Primer cal instal·lar-lo i configurar-lo:

  1. # apt-get install notmuch
  2. # su alumne
  3. $ notmuch
  4. Welcome to notmuch!
  5.  
  6. The goal of notmuch is to help you manage and search your collection of
  7. email, and to efficiently keep up with the flow of email as it comes in.
  8.  
  9. Notmuch needs to know a few things about you such as your name and email
  10. address, as well as the directory that contains your email. This is where
  11. you already have mail stored and where messages will be delivered in the
  12. future. This directory can contain any number of sub-directories. Regular
  13. files in these directories should be individual email messages. If there
  14. are other, non-email files (such as indexes maintained by other email
  15. programs) then notmuch will do its best to detect those and ignore them.
  16.  
  17. If you already have your email being delivered to directories in either
  18. maildir or mh format, then that's perfect. Mail storage that uses mbox
  19. format, (where one mbox file contains many messages), will not work with
  20. notmuch. If that's how your mail is currently stored, we recommend you
  21. first convert it to maildir format with a utility such as mb2md. You can
  22. continue configuring notmuch now, but be sure to complete the conversion
  23. before you run "notmuch new" for the first time.
  24.  
  25. Your full name []: alumne
  26. Your primary email address [alumne@server.ioc.cat.ioc.cat]: alumne@server.ioc.cat
  27. Additional email address [Press 'Enter' if none]:
  28. Top-level directory of your email archive [/home/alumne/mail]: /home/alumne/Maildir
  29. Tags to apply to all new messages (separated by spaces) [unread inbox]:
  30. Tags to exclude when searching messages (separated by spaces) [deleted spam]:
  31.  
  32. Notmuch is now configured, and the configuration settings are saved in
  33. a file in your home directory named .notmuch-config . If you'd like to
  34. change the configuration in the future, you can either edit that file
  35. directly or run "notmuch setup". To choose an alternate configuration
  36. location, set ${NOTMUCH_CONFIG}.
  37.  
  38. The next step is to run "notmuch new" which will create a database
  39. that indexes all of your mail. Depending on the amount of mail you have
  40. the initial indexing process can take a long time, so expect that.
  41. Also, the resulting database will require roughly the same amount of
  42. storage space as your current collection of email. So please ensure you
  43. have sufficient storage space available now.

Al final de les instruccions, ens indica el següent pas, que és crear la base de dades pròpia que indexa tots els correus:

  1. $ notmuch new
  2. Found 1 total files (that's not much mail).
  3. Processed 1 file in almost no time.
  4. Added 1 new message to the database.

Comprovem que s’ha creat i que tot està configurat:

  1. $ notmuch
  2. Notmuch is configured and appears to have a database. Excellent!
  3.  
  4. At this point you can start exploring the functionality of notmuch by
  5. using commands such as:
  6.  
  7. notmuch search tag:inbox
  8.  
  9. notmuch search to:"alumne"
  10.  
  11. notmuch search from:"alumne@server.ioc.cat"
  12.  
  13. notmuch search subject:"my favorite things"
  14.  
  15. See "notmuch help search" for more details.
  16.  
  17. You can also use "notmuch show" with any of the thread IDs resulting
  18. from a search. Finally, you may want to explore using a more sophisticated
  19. interface to notmuch such as the emacs interface implemented in notmuch.el
  20. or any other interface described at https://notmuchmail.org
  21.  
  22. And don't forget to run "notmuch new" whenever new mail arrives.
  23.  
  24. Have fun, and may your inbox never have much mail.

Finalment comprovem el correu que tenim a l’inbox:

  1. $ notmuch search tag:inbox
  2. thread:0000000000000001 54 mins. ago [1/1] root; Prova Postfix (inbox)
  3.  
  4. $ notmuch show Postfix
  5.  
  6. message{ id:20191001132900.AFDA27942@server.ioc.cat depth:0 match:1 excluded:0 filename:/home/alumne/Maildir/cur/1569936540.V801I4a166M737765.server.ioc.cat:2,S
  7.  
  8. header{
  9. root@server.ioc.cat (root) (Today 15:29) (inbox)
  10. Subject: Prova Postfix
  11. From: root <root@server.ioc.cat>
  12. To: alumne@server.ioc.cat
  13. Date: Tue, 01 Oct 2019 15:29:00 +0200
  14.  
  15. header}
  16.  
  17. body{
  18.  
  19. part{ ID: 1, Content-type: text/plain
  20. Correu de prova amb Postfix
  21.  
  22. part}
  23.  
  24. body}
  25.  
  26. message}

4. Accés remot al correu amb POP mitjançant el programari Courier

Instal·lem el servidor de POP3 Courier, però primer esbrinem el nom del paquet:

  1. # apt-cache search courier | grep pop
  2. courier-pop - Courier mail server - POP3 server
  3. courier-pop-ssl - Courier mail server - POP3 over TLS [transitional]
  4. # apt-get install courier-pop
  5. S'està llegint la llista de paquets… Fet
  6. S'està construint l'arbre de dependències
  7. S'està llegint la informació de l'estat… Fet
  8. S'instal·laran els següents paquets extres:
  9. courier-authdaemon courier-authlib courier-authlib-userdb courier-base expect gnutls-bin
  10. libcourier-unicode1 libfam0 libgnutls-dane0 libgnutls30 libopts25 libtcl8.6 libtk8.6
  11. libunbound2 tcl-expect tcl8.6 tk8.6
  12. Paquets suggerits:
  13. courier-doc fam dns-root-data tcl-tclreadline
  14. S'instal·laran els paquets NOUS següents:
  15. courier-authdaemon courier-authlib courier-authlib-userdb courier-base courier-pop expect
  16. gnutls-bin libcourier-unicode1 libfam0 libgnutls-dane0 libopts25 libtcl8.6 libtk8.6
  17. libunbound2 tcl-expect tcl8.6 tk8.6
  18. S'actualitzaran els paquets següents:
  19. libgnutls30
  20. 1 actualitzats, 17 nous a instal·lar, 0 a suprimir i 319 no actualitzats.
  21. S'ha d'obtenir 4948 kB d'arxius.
  22. Després d'aquesta operació s'empraran 11,9 MB d'espai en disc addicional.
  23. Voleu continuar? [S/n]

Un cop instal·lat el servidor de POP3, comprovem el port que ha obert:

  1. # nmap -T4 -A localhost
  2.  
  3. Starting Nmap 7.40 ( https://nmap.org ) at 2019-10-01 16:53 CEST
  4. Nmap scan report for localhost (127.0.0.1)
  5. Host is up (0.000016s latency).
  6. Not shown: 995 closed ports
  7. PORT STATE SERVICE VERSION
  8. 25/tcp open smtp Postfix smtpd
  9. |_smtp-commands: server.ioc.cat, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8,
  10. | ssl-cert: Subject: commonName=server.ioc.cat
  11. | Subject Alternative Name: DNS:server.ioc.cat
  12. | Not valid before: 2019-09-29T09:30:48
  13. |_Not valid after: 2029-09-26T09:30:48
  14. |_ssl-date: ERROR: Script execution failed (use -d to debug)
  15. 110/tcp open pop3 Courier pop3d
  16. |_ssl-date: 2019-10-01T14:54:32+00:00; -1m05s from scanner time.
  17. 995/tcp open ssl/pop3 Courier pop3d
  18. |_pop3-capabilities: PIPELINING USER LOGIN-DELAY(10) TOP IMPLEMENTATION(Courier Mail Server) UIDL
  19. | ssl-cert: Subject: commonName=localhost/organizationName=Courier Mail Server/stateOrProvinceName=NY/countryName=US
  20. | Subject Alternative Name: email:postmaster@example.com
  21. | Not valid before: 2019-10-01T14:45:24
  22. |_Not valid after: 2020-09-30T14:45:24
  23. |_ssl-date: 2019-10-01T14:55:22+00:00; -14s from scanner time.
  24. Device type: general purpose
  25. Running: Linux 3.X|4.X
  26. OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
  27. OS details: Linux 3.8 - 4.6
  28. Network Distance: 0 hops
  29. Service Info: Host: server.ioc.cat
  30.  
  31. Host script results:
  32. |_clock-skew: mean: -39s, deviation: 36s, median: -1m05s
  33.  
  34. OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
  35. Nmap done: 1 IP address (1 host up) scanned in 157.94 seconds

Observem que està escoltant als ports de POP, tant el segur (995) com l’insegur (110).

Comprovem amb mutt que podem recuperar el correu:

  1. # mutt -f pop://alumne@server.ioc.cat

Primer ens demana acceptar un certificat i seguidament la contrasenya:

Per acabar, instal·lem i configurem un client de correu gràfic. Per exemple, Sylpheed:

  1. # apt-get install sylpheed
  2. S'està llegint la llista de paquets… Fet
  3. S'està construint l'arbre de dependències
  4. S'està llegint la informació de l'estat… Fet
  5. S'instal·laran els següents paquets extres:
  6. libcompfaceg1 libgtkspell0 libpisock9 pinentry-gtk2 sylpheed-i18n
  7. Paquets suggerits:
  8. jpilot pilot-link kpilot gnome-pilot evolution claws-mail pinentry-doc sylpheed-doc
  9. claws-mail-tools bogofilter bsfilter curl
  10. S'instal·laran els paquets NOUS següents:
  11. libcompfaceg1 libgtkspell0 libpisock9 pinentry-gtk2 sylpheed sylpheed-i18n
  12. 0 actualitzats, 6 nous a instal·lar, 0 a suprimir i 319 no actualitzats.
  13. S'ha d'obtenir 2068 kB d'arxius.
  14. Després d'aquesta operació s'empraran 8086 kB d'espai en disc addicional.
  15. Voleu continuar? [S/n]

Anem a configuració, crea un nou compte, POP3:

Si dóna un error d’escriptura en baixar-se el correu, pot ser per que no s’ha creat la carpeta on baixar-lo. Cal anar al menú File, Mailbox o Add mailbox.

5. Proves avançades amb el telnet.

Finalment, mostrem el correu enviat amb telnet obrint el port POP versió 3. El protocol POP3 està especificat al RFC 1939. Als apartats 4, 5, 6 i 7 hi ha la part relativa a les comandes POP. En el següent exemple s’han fet servir les comandes: user, pass, list, retr i quit.

  1. # telnet localhost pop3
  2. Trying 127.0.0.1...
  3. Connected to localhost.
  4. Escape character is '^]'.
  5. +OK Hello there.
  6. user alumne
  7. +OK Password required.
  8. pass alumne
  9. +OK logged in.
  10. list
  11. +OK POP3 clients that break here, they violate STD53.
  12. 1 477
  13. .
  14. retr 1
  15. +OK 477 octets follow.
  16. Return-Path: <root@server.ioc.cat>
  17. X-Original-To: alumne@server.ioc.cat
  18. Delivered-To: alumne@server.ioc.cat
  19. Received: by server.ioc.cat (Postfix, from userid 0)
  20. id AFDA27942; Tue, 1 Oct 2019 15:29:00 +0200 (CEST)
  21. Subject: Prova Postfix
  22. To: <alumne@server.ioc.cat>
  23. X-Mailer: mail (GNU Mailutils 3.1.1)
  24. Message-Id: <20191001132900.AFDA27942@server.ioc.cat>
  25. Date: Tue, 1 Oct 2019 15:29:00 +0200 (CEST)
  26. From: root@server.ioc.cat (root)
  27.  
  28. Correu de prova amb Postfix
  29. .
  30. quit
  31. +OK Bye-bye.
  32. Connection closed by foreign host.

Referències

PostFix

Courier-MTA

NotMuchMail

Sylpheed

SMTP amb Python

Aquesta és una activitat avançada pel que fa als objectius principals del mòdul. L’objectiu d’aquesta activitat és practicar la programació de correu SMTP amb el llenguatge de programació Python.

Utilitzant un llenguatge d’alt nivell i fàcil d’utilitzar, com per exemple Python, programeu l’enviament de correu i la simulació de sessions SMTP utilitzant les llibreries pertinents de Python.

  1. Creeu un programa que envia un correu electrònic imitant una sessió Telnet a un servidor SMTP.
  2. Creeu un programa que envia una carta (un document de text extern en un fitxer) a una llista de destinataris (llista externa en un altre fitxer de text). Cal usar la biblioteca de Python smtplib.
  3. Creeu un programa Python que envia correu multipart i que recorre les diverses parts d’un correu usant la biblioteca MIME de Python.

1. Enviament un correu electrònic imitant una sessió Telnet a un servidor SMTP

  1. #fitxer: Activitat_ASX_uf3_na1_smtp_python-01.py
  2. #! /usr/bin/python
  3. # -*- coding: utf-8-*-
  4. # imitar una conversa telnet smtp amb sockets
  5. # 27/01/2012
  6. # @edt
  7. # -------------------------------------------------------------------
  8. # Crear un programa que envia un email imitant una sessió telnet a
  9. # un servidor SMTP.
  10. # ioc-m08-uf3-a1 smtp
  11. # -------------------------------------------------------------------
  12. import socket
  13.  
  14. mfrom="MAIL FROM: unknown@kaos.sex\n"
  15. to_01="RCPT TO: pere\n"
  16. to_02="RCPT TO: root@localhost.localdomain\n"
  17. to_03="RCPT TO: batman@gotham.city\n"
  18.  
  19. capcaleres="""\
  20. subject: missatge de prova per imitar conversa smtp
  21. Date: Fri, 27 Jan 2012 09:54:15 +0100
  22.  
  23. From: barakObama@whitehouse.us"""
  24. crlf="\n"
  25. text="""\
  26. aquest és un missatge de prova enviat per unknown, verificar
  27. si realment el from és aquest o en Barak.
  28. Els destinataris són: pere, root i batman.
  29. bye bye
  30. .\n"""
  31.  
  32. to=to_01+to_02+to_02
  33. msg=capcaleres+crlf+text
  34.  
  35. print mfrom
  36. print to
  37. print msg
  38.  
  39. HOST = ''
  40. PORT = 25
  41. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  42. s.connect((HOST, PORT))
  43. data = s.recv(1024)
  44. print data
  45.  
  46. s.send('EHLO localhost.localdomain\n')
  47. data = s.recv(1024)
  48. print data
  49.  
  50. s.send(mfrom)
  51. data = s.recv(1024)
  52. print data
  53.  
  54. s.send(to)
  55. data = s.recv(1024)
  56. print data
  57.  
  58. s.send('DATA\n')
  59. data = s.recv(1024)
  60. print data
  61.  
  62. s.send(msg)
  63. data = s.recv(1024)
  64. print data
  65.  
  66. s.close()
  67. print s

2. Enviament d’una carta (un document de text extern en un fitxer) a una llista de destinataris (llista externa en un altre fitxer de text), utilitzant la biblioteca de Python smtplib

  1. #fitxer: Activitat_ASX_uf3_na1_smtp_python-02.py
  2. #! /usr/bin/python
  3. # -*- coding: utf-8-*-
  4. # imitar una conversa telnet smtp amb sockets
  5. # 27/01/2012
  6. # @edt
  7. # -------------------------------------------------------------------
  8. # Crear un programa que envia una carta (un document de text extern
  9. # en un fitxer) a una llista de destinataris (llista externa en un
  10. # altre fitxer de text). Cal usar la biblioteca de Python smtplib.
  11. # ioc-m08-uf3-a1 smtp
  12. # -------------------------------------------------------------------
  13. import smtplib, sys
  14.  
  15. try:
  16. fusuarios = open('usuaris.txt','r')
  17. fmensaje = open('missatge.txt','r')
  18. except:
  19. print "No es poden llegir els fitxers"
  20. sys.exit(0)
  21.  
  22. # Obtenir el missatge a enviar
  23. mensaje = fmensaje.read()
  24. # Adreça origen
  25. de = raw_input("From: ")
  26. for email in fusuarios:
  27. to = email
  28. server = smtplib.SMTP('localhost')
  29. server.sendmail(de, to, mensaje)
  30. server.quit()

3. Enviament de correu multipart que recorre les diverses parts d’un correu usant la biblioteca MIME de Python

  1. #fitxer: Activitat_ASX_uf3_na1_smtp_python-03.py
  2. #! /usr/bin/python
  3. # -*- coding: utf-8-*-
  4. # Obrir els pdf i jpeg adjunts d'un missatge mime
  5. # 27/01/2012
  6. # @edt
  7. # -------------------------------------------------------------------
  8. # Crear un programa Python que envia correu multipart i que recorre
  9. # les diverses parts d’un correu usant la biblioteca mime de Python.
  10. # ioc-m08-uf3-a1 smtp
  11. # -------------------------------------------------------------------
  12. import sys, mailbox, email, mimetypes, subprocess
  13.  
  14. def desar_pdf(part,n):
  15. print "desant pdf"
  16. file = "./attach-%d%s" % (n, ".pdf")
  17. fit = open (file, "wb")
  18. fit.write(part.get_payload(decode=True))
  19. fit.close()
  20. popen = subprocess.Popen(["/usr/bin/evince",file])
  21.  
  22. def desar_jpeg(part,n):
  23. print "desant jpeg"
  24. file = "./attach-%d%s" % (n, ".jpeg")
  25. fit = open (file, "wb")
  26. fit.write(part.get_payload(decode=True))
  27. fit.close()
  28. popen = subprocess.Popen(["/usr/bin/firefox",file])
  29.  
  30. nomFitxer = 'pere.mbox1'
  31. bustia = mailbox.mbox(nomFitxer)
  32. numMissatges = bustia.__len__()
  33. # message<---email.message_from_string(string)
  34.  
  35. # Iterar per a cada missatge
  36. n = 0
  37. for num in range(numMissatges):
  38. # processar el missatge
  39. msg = bustia.get_message(num)
  40. # iterar per les parts del missatges
  41. for part in msg.walk():
  42. main = part.get_content_maintype()
  43. sub = part.get_content_subtype()
  44. tipus = part.get_content_type()
  45. print mimetypes.guess_extension(tipus)
  46. if sub == "pdf":
  47. n = n + 1
  48. desar_pdf(part,n)
  49. if sub == "jpeg":
  50. n = n + 1
  51. desar_jpeg(part,n)
  52. print
  53. bustia.close()
  54. sys.exit(0)

Podeu descarregar els fitxers anteriors al següent enllaç:

Anar a la pàgina següent:
Exercicis