SMTP/IMAP - Configuration de Postfix/Dovecot

On part du principe qu'une base Unix saine est installée et que le réseau est configuré correctement.

Dans les exemples suivants, on utilisera la commande apk sur un compte root. Pour adapter celles-ci à une installation Debian/Ubuntu, il suffit de remplacer : apk add par apt-get install et d'ajouter sudo au début de chaque commande si le compte root est désactivé.

Voici rapidement une liste des pré-requis :

Serveur SMTP : Postfix

Postfix

Installation

Installation de postfix :

 $ apk add postfix 
Configuration

Préparation du système

Ces reglages sont normalement actifs par defaut. Certains d'entre eux sont à décommenter.

soft_bounce = yes queue_directory = /var/spool/postfix command_directory
= /usr/sbin daemon_directory = /usr/lib/postfix data_directory =
/var/lib/postfix mail_owner = postfix myhostname = mail.domaine.com
mydomain = domaine.com myorigin = $myhostname
unknown_local_recipient_reject_code = 550 mynetworks_style = host
relayhost = in_flow_delay = 1s alias_maps = hash:/etc/aliases
home_mailbox = Maildir/ mail_spool_directory = /var/spool/mail
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
debug_peer_level = 2 debugger_command =

     PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin 
     ddd $daemon_directory/$process_name $process_id & sleep 5 

sendmail_path = /usr/sbin/sendmail newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq setgid_group = postdrop html_directory = no
manpage_directory = /usr/share/man sample_directory = /etc/postfix
readme_directory = /usr/share/doc/postfix/readme

Les réglages suivants sont ajoutés à la configuration:

#Definition des domaines virtuels

local_transport = virtual
virtual_mailbox_domains = domaine.tld
virtual_mailbox_base = /var/spool/mail/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100

Configuration alternative pour utiliser des uids dynamiques (plus d'une bal)

Si cette ligne est decommentee, penser a créer le fichier:

/etc/postfix/virtual_uids
virtual_uid_maps = hash:/etc/postfix/virtual_uids
virtual_uid_maps = static:1006 virtual_gid_maps = static:1006
virtual_alias_maps = hash:/etc/postfix/valias

Quotas limites de taille

message_size_limit = 10240000 ## 10 Mo par défaut 
virtual_mailbox_limit= 10240000 ## 10 Mo par défaut

Réglages de sécurité

smtpd_helo_required = yes disable_vrfy_command = yes
smtpd_recipient_restrictions =

        reject_unauth_pipelining, 
        permit_sasl_authenticated, 
        permit_mynetworks, 
        reject_invalid_hostname, reject_non_fqdn_hostname, 
        reject_non_fqdn_sender, reject_non_fqdn_recipient, 
        reject_unknown_sender_domain, reject_unknown_recipient_domain, 
        reject_unauth_destination,  
        ## Reglages a decommenter une fois gross configuré 
        ##check_policy_service inet:127.0.0.1:5525, 
        ## optionnel  
        ##check_client_access regexp:/etc/postfix/blacklist_clients, 
        permit 
        ## ce travail est fait par grossd, on commente donc. 
        ##reject_rbl_client zen.spamhaus.org, 
        ##reject_rbl_client bl.spamcop.net, 
        permit 

smtpd_data_restrictions = reject_unauth_pipelining, permit

Reglages a decommenter une fois clamsmtp configuré

content_filter = scan:[127.0.0.1]:10025

Édition du fichier /etc/postfix/valias

blah.blah@exemple.net utilisateur1@exemple.net
toc.toc@exemple.net utilisateur1@exemple.net machin@exemple.net
utilisateur2@exemple.net   

Édition du fichier /etc/postfix/blacklist_clients

Ce fichier contient une liste d'expressions regexp pour lister les clients auxquels on souhaite refuser l'accès.

Édition du fichier /etc/postfix/vmailbox

utilisateur1@exemple.net exemple.net/utilisateur1/
utilisateur2@exemple.net exemple.net/utilisateur2/ @exemple.net
example.net/attrapetout ## tous les messages qui ne correspondent pas aux regles ci-dessus   

Édition du fichier /etc/postfix/virtual_uids ( optionnel )

Cette étape est indispensable si vous avez dé-commenté la ligne virtual_uid_maps dans le fichier main.cf.

100x et 100y représentent les UIDs des utilisateurs possédant une boite aux lettres.

   utilisateur@domaine.com 100x @domaine.com 100y

Création des bases de données Postfix

Une fois ces opérations effectuées, il faut compiler la base de données de postfix :

 $ postmap /etc/postfix/vmailbox   $ postmap /etc/postfix/valias 
 $ postmap /etc/postfix/virtual_uids 

Cette dernière manipulation est à refaire à chaque modification d'un des fichiers vmailbox, valias ou virtual_uids.

Tester

Démarrer postfix et démarrage auto

Pour tester la connexion à votre serveur, vous pouvez vous connecter au serveur avec telnet:

 $ telnet localhost 143 

ou encore, vérifier qu'un serveur écoute bien sur le port 143 (smtp):

 $ netstat -l | grep smtp 

Trouver les problèmes

Si ça ne marche pas, vous pourrez sans doute trouver des indices en observant vos fichiers log :

 $ tail -f /var/log/messages 

Sécuriser son serveur SMTP

anti-virus Clamav

Clamsmtp

 OutAddress: 127.0.0.1:10026 
 Listen: 127.0.0.1:10025 
 ClamAddress: /var/run/clamav/clamd.sock 
 TempDirectory: /tmp 
 Action: drop 
 Quarantine: on 
 User: clamav 
 ## AV scan filter (used by content_filter) 
 scan      unix  -       -       n       -       16      smtp 
         -o smtp_send_xforward_command=yes 
         -o smtp_enforce_tls=no 
 ## For injecting mail back into postfix from the filter 
 127.0.0.1:10026 inet  n -       n       -       16      smtpd 
         -o content_filter= 
         -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks 
         -o smtpd_helo_restrictions= 
         -o smtpd_client_restrictions= 
         -o smtpd_sender_restrictions= 
         -o smtpd_recipient_restrictions=permit_mynetworks,reject 
         -o mynetworks_style=host 
         -o smtpd_authorized_xforward_hosts=127.0.0.0/8 

Gross

 protocol = postfix 
 ## Sous Debian Wheezy avec Gross 1.0.2, le fichier d'état pose problème. 
 ## il faut alors créer ce fichier en lançant la commande suivante : sudo -u gross grossd -C 
 ##  [ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=614790 ](http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=614790)
 statefile = /var/db/grossd.state 
 check = dnsbl 
 check = rhsbl 
 dnsbl = zen.spamhaus.org 
 dnsbl = list.dsbl.org 
 dnsbl = bl.spamcop.net 
 dnsbl = combined.njabl.org 
 dnsbl = cbl.abuseat.org 
 dnsbl = dnsbl.sorbs.net 
 rhsbl = rhsbl.sorbs.net 

SaneSecurity & MSRBL

Installation

 $ apk add dovecot 

Préparation

  1. le fichier suivant sert a securiser le serveur smtp
    !include auth-postfix.conf.ext   

driver = passwd-file args = scheme=cram-md5 /etc/dovecot/md5

} userdb {

args = username_format=%u /etc/dovecot/users driver = passwd-file

}

 * Création du fichier *auth-postfix.conf.ext*:

$ nano /etc/dovecot/conf.d/auth-postfix.conf.ext

passdb {

driver = passwd-file args = scheme=plain username_format=%u /etc/postfix/users

} service auth {

unix_listener /var/spool/postfix/private/auth { group = postfix mode = 0660 user = postfix }

} userdb {

driver = passwd-file args = username_format=%u /etc/postfix/users

}

##### Création des certificats de sécurité pour le SSL 

  * Configurer le fichier  * /etc/dovecot/dovecot-openssl.cnf *  avec les informations du serveur : 

$ nano /etc/dovecot/dovecot-openssl.cnf

  * Créer le script  [ mkcert.sh ](mkcert.sh)  dans le dossier  * /etc/dovecot/ *  : 

$ nano /etc/dovecot/mkcert.sh

1.  changement du bit d'execution

$ chown +x /etc/dovecot/mkcert.sh

1.  lancement

$ /etc/dovecot/mkcert.sh


##### Mise en place des utilisateurs 

  * Édition du fichier  * /etc/dovecot/users *  : 

utilisateur1::UID:GID::/home/utilisateur1 utilisateur2::UID:GID::/home/utilisateur2

##### Mise en place des mots de passe 

  * génération du mdp : 

$ doveadm pw

Copier le hash md5 résultant et l'ajouter au fichier
**/etc/dovecot/md5**.

Exemple pour le mdp **test123** :

$ Enter new password: $ Retype new password:
8314fef5923bb513c7e8be9e663501bbc56ce1012aae68e4c68852be5ab8da76

  * Édition du fichier  * /etc/dovecot/md5 *  : 

utilisateur1:8314fef5923bb513c7e8be9e663501bbc56ce1012aae68e4c68852be5ab8da76 utilisateur2:e02d374fde0dc75a17a557039a3a5338c7743304777dccd376f332bee68d2cf6


##### Mise en place de la connexion sécurisée pour le serveur SMTP 

  * Création d'un utilisateur pour envoyer des mails : 

1.  Choisissez un nom qui n'existe pas sur le systeme pour remplacer
    'utilisateur'
2.  -H : ne pas creer de repertoire home -s : shell de l'utilisateur

$ adduser -H -s /bin/false 'utilisateur'


Entrez un mot de passe quand on vous le demande. Ce sont ce login et mot
de passe qui seront utilisés pour vous connecter au serveur SMTP depuis
votre client.

  * Récupération des infos de l'utilisateur créé : 

$ cat /etc/passwd | grep 'utilisateur'

donne une ligne du type suivant, à copier/coller dans le fichier
**/etc/postfix/users** :

'utilisateur':x:100x:100x:Linux
User,,,:/home/'utilisateur':/bin/sh   

  * Création du fichier  * /etc/postfix/users *  : 

$ nano /etc/postfix/users


1.  Substituer le mot de passe au *x* :

'utilisateur':'mot_de_passe':100x:100x:Linux
User,,,:/home/'utilisateur':/bin/sh   

  * Relancer le serveur dovecot et postfix : 

/etc/init.d/dovecot restart && /etc/init.d/postfix restart

### Test du serveur SMTP 

**Faire d'abord les étapes suivantes pour finir la configuration du
serveur IMAP**

  * Connection avec telnet : 

 **Les commandes précédées d'un *>* sont à entrer par
        l'utilisateur.**

truc@machin:~$ telnet serveur.exemple.com 25 Trying 0.0.0.0... Connected to 0.0.0.0. Escape character is '^]'. 220 serveur.exemple.com ESMTP Postfix (2.8.3)

EHLO serveur.exemple.com 250-serveur.exemple.com 250-PIPELINING 250-SIZE 10240000 250-ETRN 250-AUTH PLAIN LOGIN CRAM-MD5 250-AUTH=PLAIN LOGIN CRAM-MD5 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN AUTH PLAIN AHRlc3QAdGVzdHBhc3M= 235 2.7.0 Authentication successful QUIT 221 2.0.0 Bye Connection closed by foreign host.


La ligne *AUTH PLAIN AHRlc3QAdGVzdHBhc3M=* contient les noms
d'utilisateur et le mot de passe en base 64. Pour faire la conversion :

echo -ne '000utilisateur000mot_de_passe' | openssl base64

Copier le résultat à la suite de la commande *AUTH PLAIN*.

### Configuration 

  * Édition du fichier  * /etc/dovecot/dovecot.conf *  : 

protocols = imap pop3 listen = base_dir = /var/run/dovecot/ login_greeting = IMAP ready. !include conf.d/.conf

1.  SSL

ssl = yes ssl_cert = </etc/ssl/certs/dovecot.pem ssl_key = </etc/ssl/private/dovecot.pem ssl = required ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL verbose_ssl = yes

mail_location = maildir:/var/spool/mail/vhosts/%d/%n

mail_privileged_group = vmail mail_access_groups = vmail

logging

log_path = /var/log/dovecot.log info_log_path = /var/log/dovecot-info.log

auth_mechanisms = plain login cram-md5

Plaintext login ( set to no for tests )

disable_plaintext_auth = yes



### Lancement et ajout au démarrage 

$ /etc/init.d/dovecot start && rc-update add dovecot

### Tester 

openssl s_client -connect localhost:993

doit retourner :

CONNECTED(00000003) ......... New, TLSvX/SSLvX, Cipher is BLAH-BLAH Server public key is X bit Secure Renegotiation IS supported Compression: zlib compression Expansion: zlib compression ......... +OK IMAP ready.