Outils pour utilisateurs

Outils du site


14._smtp_imap_-_configuration_de_postfix_dovecot

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 :

  • Une base Gnu/Linux, avec gestionnaire de paquets ( apt, apk…)
  • Ouverture des ports SMTP, IMAP et IMAPS ( 25, 143 et 993 )
  • Savoir utiliser la ligne de commande et vi/nano

Serveur SMTP : Postfix

Postfix

Installation

Installation de postfix :

$ apk add postfix

Configuration

Préparation du système
  • Ajout d'un utilisateur pour le serveur :

$ adduser vmail

  • Récupération de ses UIDs et GIDs ( de la forme 100x:100x ) :

$ grep vmail /etc/passwd

  • Ajout de l'utilisateur au groupe postdrop :

$ addgroup vmail postdrop

  • Création des répertoires manquants:

$ mkdir /var/spool/mail/vhosts -p

  • Changement des permissions sur le dossier:

$ chown vmail:vmail /var/spool/mail/vhosts

Édition du fichier /etc/postfix/main.cf

## Ces reglages sont normalement actifs par defaut.
## Certains d'entre eux sont a decommenter

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 reglages suivants sont ajoutes a 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 creer 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


# reglages de securite
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.

# Rejeter un nom de domaine complet
#/^example\.com$/               REJECT UCE black-listed

# Rejeter un nom de domaine et tous ses sous domaines
#/example\.com$/               REJECT UCE black-listed

# Rejeter un block d'IPs ou une IP
/^192\.168/                       REJECT UCE black-listed
/^192\.168/.1/                       REJECT UCE black-listed
/^192\.168/.1/.1$/                       REJECT UCE black-listed

É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
  • Démarrage

$ /etc/init.d/postfix start

  • Ajout au démarrage du système :

$ rc-update add postfix

Session Telnet et Netstat

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


Version : postfix-2.8.3-r0

Sécuriser son serveur SMTP

anti-virus Clamav

  • Installation de clamav :

apk add clamav

Mises à jour automatique avec cron :
  • Ajout de cron au démarrage :

$ rc-update add cron

Ajout de la règle pour la maj :

$ echo "00	04	*	*	*	/usr/local/bin/freshclam --quiet" >> /etc/crontabs/root

  • Démarrage de clamav et ajout au démarrage :

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


version : clamav-0.97-r0

Clamsmtp

  • Installation de clamsmtp :

$ apk add clamsmtp

  • Éditer le fichier /etc/clamsmtpd.conf :

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

  • Ajout des règles clamsmtp à au fichier /etc/postfix/master.cf

# 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

  • Démarrage de clamsmtp et ajout au démarrage :

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

Une fois que vous êtes sûr de vos réglages, désactivez la ligne content_filter dans le fichier /etc/postfix/main.cf puis relancer postfix :

$ /etc/init.d/postfix reload


version : clamsmtp-1.10-r8

Gross

  • Installation de gross :

$ apk add gross

  • Édition du fichier /etc/grossd.conf :

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

  • Lancer gross et ajout au démarrage :

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

Il faut maintenant dé-commenter la ligne check_policy_service dans le fichier /etc/postfix/main.cf et relancer postfix :

$ /etc/init.d/postfix reload


version : gross-1.0.2-r2

SaneSecurity & MSRBL

  • Installation :

$ apk add curl rsync

  • Création du script dans /etc/postfix/scripts :

$ mkdir /etc/postfix/scripts
$ nano /etc/postfix/scripts/up_clam_ex.sh
$ chmod +x /etc/postfix/scripts/up_clam_ex.sh

Copier le contenu du script dans le fichier ainsi créé : up_clam_ex.sh

  • Ajout du script à cron ( tous les jours à 4h18 du matin ):

$ echo "18 04 * * * /etc/postfix/scripts/up_clam_ex.sh &> /dev/nul" >> /etc/crontabs/root

Serveur IMAP : Dovecot

Installation

$ apk add dovecot

Préparation

  • Création des fichiers log :

$ touch /var/log/dovecot-info.log && touch /var/log/dovecot.log
$ chown vmail:vmail /var/log/dovecot*.log

  • Création du fichier /etc/dovecot/conf.d/10-auth.conf:

$ nano /etc/dovecot/conf.d/10-auth.conf

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

  • Création du fichier auth-passwdfile.conf.ext:

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

passdb {
  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 dans le dossier /etc/dovecot/ :

$ nano /etc/dovecot/mkcert.sh
# changement du bit d'execution
$ chown +x /etc/dovecot/mkcert.sh
#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: 
{CRAM-MD5}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 :

# Choisissez un nom qui n'existe pas sur le systeme pour remplacer 'utilisateur'
# -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

# 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 '\000utilisateur\000mot_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

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


Version : dovecot-2.0.13-r0

2013/11/05