Serveur dédié : création d’un serveur mail Postfix (sécurisé avec Saslauthd et certificat SSL) et Courier (accès POP et IMAP) utilisant une base MySQL d’utilisateurs/domaines virtuels

Aujourd’hui, nous voyons comment créer un serveur mail sécurisé et qui tient bien la route. Comme je suis seul utilisateur du serveur, je ne voyais pas trop l’intérêt de créer des comptes utilisateurs sur le serveur juste pour pouvoir bénéficier d’un serveur mail.

J’ai donc opté pour la solution suivante : un serveur mail Postfix (sécurisé avec Saslauthd et certificat SSL) et un serveur Courier (accès POP et IMAP) qui utilisent MySQL (utilisateurs et domaines virtuels) pour la redirection des messages des utilsateurs/domaines.

icon mail server1

Le tutoriel est certainement le plus long de la série, j’estime que cela prend à peu près 50 minutes à compléter (en 15 étapes!). Attention au niveau des copier/coller, une simple erreur peut vous faire perdre pas mal de temps !

Etape 1 : configurer le hostname

Le hostname est le nom du serveur en général. Mon domaine est skyminds.net donc mon serveur s’appelle mail.skyminds.net

Il est également important que ce nom soit présent dans la configuration bind du serveur.

Pour connaitre le nom de votre machine, tapez :

hostname -f

Pour le modifiez, il faut éditer /etc/hostname :

nano /etc/hostname

Remplacez ce qui s’y trouve avec le nom de votre serveur. J’y mets ‘mail.skyminds.net’.

Ensuite, éditez /etc/hosts:

nano /etc/hosts

On ne touche pas à la première ligne mais on ajoute l’adresse IP du serveur suivie de notre nom de machine :

127.0.0.1       localhost.localdomain localhost
xxx.xxx.xxx.xxx  mail.skyminds.netCode language: CSS (css)

Il ne vous reste plus qu’à rebooter le serveur pour que les modifications soient prises en compte :

/sbin/reboot

Vérifiez bien que le nouveau nom a bien changé :

hostname -f

J’obtiens bien :

mail.skyminds.netCode language: CSS (css)

Si vous obtenez une erreur du style “name or service not found”, vérifiez que les enregistrements DNS du serveur sont bien corrects.

Etape 2 : création de l’utilisateur vmail et des boîtes mail

Nous allons utiliser MySQL pour détailler tous nos utilisateurs et domaines mais le groupe et utilisateur “vmail” vont nous permettre d’accueillir le courrier physiquement sur le serveur.

L’utilisateur vmail ne pourra pas s’identifier sur le serveur, il sert uniquement pour les mails.

On commence par créer le groupe vmail, en lui assignant le group ID 5000 :

groupadd -g 5000 vmail

Ensuite, on crée l’utilisateur vmail :

useradd -s /usr/sbin/nologin -g vmail -u 5000 vmail -d /home/vmail -m

Il ne peut pas se logguer, est ajouté au groupe ‘vmail’ et son répertoire de travail est créé sous /home/vmail.

Etape 3 : installation de Postfix

Je présuppose que MySQL est déjà installé sur le serveur donc nous installons Postfix, mailx et quelques paquets supplémentaires pour l’authentification (SASL et openssl) :

apt-get install postfix postfix-mysql libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl heirloom-mailx gaminCode language: JavaScript (javascript)

Lors de l’installation de Postfix, choisissez Internet Site et appuyer sur Entrée.

L’écran suivant vous demande le nom d’hôte dans System mail name. Entrez le nom que vous avez défini dans l’étape 1 :

mail.skyminds.netCode language: CSS (css)

Vous pouvez maintenant tester Postfix en vous envoyant un email de test, comme ceci :

mail address@example.comCode language: CSS (css)

Remplacez ‘address@example.com’ par votre adresse mail habituelle. Vous aurez à entrer le sujet puis le corps du message. Tapez un point (.) puis Entrée pour mettre fin au message et l’envoyer.

Voici ce que ça donne :

mail matt@gmail.com 
Subject: test from skyminds.net
this is a test by Matt!
.
Cc:Code language: CSS (css)

Quelques secondes plus tard, vous recevez votre message de test. Il est envoyé de ‘root@mail.skyminds.net’ mais nous verrons comment changer l’expéditeur ultérieurement.

Etape 4 : création de la base de données MySQL

MySQL et Postfix sont installés, nous allons maintenant créer la base de données qui va accueillir le détail de nos domaines et de nos utilisateurs.

On commence par créer la base SQL que l’on nomme ‘mail’ :

mysqladmin -u root -p create mail

Entrez votre mot de passe root MySQL, qui a été défini lors de l’installation de MySQL.

Ensuite, nous devons nous identifier dans MySQL pour créer les différentes tables :

mysql -u root -p

Nous avons besoin de créer un utilisateur qui aura la main sur notre base. On crée l’utilisateur ‘mailadmin’ avec le mot de passe ‘newpassword’ :

CREATE USER 'mailadmin'@'localhost' IDENTIFIED BY 'newpassword';Code language: JavaScript (javascript)
Remplacez ‘newpassword’ avec un mot de passe de votre cru. Notez-le bien !

Ensuite, on effectue un flush des privilèges :

FLUSH PRIVILEGES;

On passe aux permissions de notre utilisateur, il a besoin de SELECT, INSERT, UPDATE, DELETE sur la base ‘mail’ :

GRANT SELECT, INSERT, UPDATE, DELETE ON `mail` . * TO 'mailadmin'@'localhost';Code language: JavaScript (javascript)

On flush les privilèges de nouveau :

FLUSH PRIVILEGES;

On sélectionne notre base :

USE mail;Code language: PHP (php)

Le serveur nous informe que la base a été sélectionnée. Nous allons créer 3 tables:

  • la table domains va accueillir tous nos différents domaines,
  • la table forwards va nous permettre de rediriger le courrier d’un alias vers une autre adresse email,
  • la table users accueillera les comptes utilisateurs.

Toujours dans MySQL, entrez :

CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain)
)
ENGINE=MyISAM;
Code language: PHP (php)

Puis :

CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
PRIMARY KEY (email)
)
ENGINE=MyISAM;
Code language: PHP (php)

Et :

CREATE TABLE forwards (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source)
)
ENGINE=MyISAM;
Code language: PHP (php)

On peut quitter MySQL:

quit;

Notre base et nos tables sont créées, notre utilisateur SQL également. Le champs password n’est pas encrypté car le mot de passe sera encrypté par MySQL lors de l’insertion des données.

Etape 5 : configurer Postfix avec MySQL

Pour que Postfix puisse utiliser MySQL, nous allons créer quelques fichiers texte. Postfix utilisera ces fichiers pour se connecter à MySQL et exécuter des requêtes.

Soyez attentifs aux requêtes : elles contiennent le nom de la base, de l’utilisateur et de son mot de passe.

On crée le fichier utilisé pour les domaines :

nano /etc/postfix/mysql-domains.cf

On y met :

user = mailadmin
password = newpassword
dbname = mail
query = SELECT domain AS virtual FROM domains WHERE domain='%s'
hosts = 127.0.0.1Code language: PHP (php)
N’oubliez pas de changer le mot de passe de l’utilisateur SQL !

Puis on crée le fichier utilisé pour les redirections :

nano /etc/postfix/mysql-forwards.cf

On y met :

user = mailadmin
password = newpassword
dbname = mail
query = SELECT destination FROM forwards WHERE source='%s'
hosts = 127.0.0.1Code language: JavaScript (javascript)
N’oubliez pas de changer le mot de passe de l’utilisateur SQL !

Et les boîtes mail de nos utilisateurs :

nano /etc/postfix/mysql-mailboxes.cf

On y met :

user = mailadmin
password = newpassword
dbname = mail
query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'
hosts = 127.0.0.1Code language: JavaScript (javascript)
N’oubliez pas de changer le mot de passe de l’utilisateur SQL !

Et enfin on crée le fichier pour les adresses email :

nano /etc/postfix/mysql-email.cf

On y met :

user = mailadmin
password = newpassword
dbname = mail
query = SELECT email FROM users WHERE email='%s'
hosts = 127.0.0.1Code language: JavaScript (javascript)
N’oubliez pas de changer le mot de passe de l’utilisateur SQL !

Ces quatre fichiers permettent à Postfix d’interagir avec la base de données ‘mail’ et d’assigner correctement les détails à chaque mail.

Il reste à changer la permission de ces fichiers pour empêcher que quelqu’un ne regarde nos identifiants SQL. Il suffit de retirer les droits du groupe ‘other’:

chmod o= /etc/postfix/mysql-*Code language: JavaScript (javascript)

Nos fichiers appartiennent actuellement au groupe ‘root’. Il faut les mettre dans le groupe ‘postfix’ pour que Postfix et Courier puissent y avoir accès :

chgrp postfix /etc/postfix/mysql-*

Etape 6 : configuration de Postfix

On passe à la configuration de Postfix:

nano /etc/postfix/main.cf

Le fichier inclut par défaut notre hostname, qui a été défini lors de l’installation de Postfix. A la fin du fichier, on trouve :

myhostname = mail.skyminds.net
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
#myorigin = /etc/mailname
myorigin = skyminds.net
mydestination =
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = allCode language: PHP (php)

Supprimez toute information du champs ‘mydestination’.

A la fin du fichier, nous ajoutons le détail des quatre fichiers que nous avons créés dans l’étape 5 :

virtual_alias_domains =
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-forwards.cf, mysql:/etc/postfix/mysql-email.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-mailboxes.cf
virtual_mailbox_base = /home/vmail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_mapsCode language: PHP (php)

Postfix peut désormais effectuer des requêtes sur la base de données quand il veut.

Etape 7 : configurer Saslauthd pour sécuriser la connexion

Saslauthd permet d’authentifier la connexion à notre serveur mail. On édite le fichier de configuration :

nano /etc/default/saslauthdCode language: JavaScript (javascript)

ll faut éditer la première ligne pour lancer saslauthd lors du login :

# Should saslauthd run automatically on startup? (default: no)
START=yesCode language: PHP (php)

Il faut ensuite modifier les options qui se trouvent au bas du fichier. Voici les options par défaut :

#
# Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
OPTIONS="-c -m /var/run/saslauthd"Code language: PHP (php)

Supprimez et remplacez par :

#
# Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"Code language: PHP (php)

Sauvegardez le fichier. Il nous faut créer le répertoire que nous venons de définir :

mkdir -p /var/spool/postfix/var/run/saslauthdCode language: JavaScript (javascript)

Pour donner au processus d’authorisation accès à la base de données, il nous faut créer deux fichiers :

nano /etc/pam.d/smtp

On y rentre les identifiants de notre base de données :

auth    required   pam_mysql.so user=mailadmin passwd=newpassword host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=mailadmin passwd=newpassword host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
N’oubliez pas de changer le mot de passe de l’utilisateur SQL !

Cela permet au processus d’identification d’accéder à la base pour vérifier l’email et le mot de passe. La colonne ‘passwordcolumn’ est encryptée donc il faudra que le mot de passe soit encrypté lors de l’insertion des données.

Et le second fichier :

nano /etc/postfix/sasl/smtpd.conf

avec :

pwcheck_method: saslauthd
mech_list: plain login
allow_plaintext: true
auxprop_plugin: sql
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: mailadmin
sql_passwd: newpassword
sql_database: mail
sql_select: select password from users where email = '%u@%r'Code language: HTTP (http)
N’oubliez pas de changer le mot de passe de l’utilisateur SQL !

Il faut ajouter Postfix au groupe ‘sasl’ pour qu’il puisse avoir accès au processus saslauthd que nous venons de créer :

adduser postfix sasl

et on sécurise les droits des fichiers :

chgrp sasl /etc/pam.d/smtp
chmod 640 /etc/pam.d/smtp
chgrp postfix /etc/postfix/sasl/smtpd.conf
chmod 640 /etc/postfix/sasl/smtpd.conf

On redémarre nos deux services pour que la nouvelle configuration soit prise en compte :

/etc/init.d/postfix restart
/etc/init.d/saslauthd restart

Etape 8 : création d’un certificat SSL pour notre connexion sécurisée

Nous allons créer un certificat SSL pour certifier notre connexion lorsque nous allons chercher notre courrier. Ce certificat sera self-signed donc affichera un message d’avertissement dans les clients mails mais bon, ce n’est pas bien gênant vu que nous sommes les seuls utilisateurs du serveur.

Nous créons notre certificat et le plaçons sous /etc/ssl/certs:

make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/certs/mailcert.pem

On nous pose une série de questions. L’important est de bien respecter l’adresse du hostname, ‘mail.skyminds.net’ dans notre cas. Notre propre certificat se trouve donc ici :

/etc/ssl/certs/mailcert.pem

Nous allons maintenant configurer Postfix pour qu’il utilise notre certificat.

Etape 9 : configurer Postfix avec le certificat SSL

On édite la configuration Postfix:

nano /etc/postfix/main.cf

A peu près au milieu du fichier, se trouve la section TLS Parameters avec ceci :

smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scacheCode language: JavaScript (javascript)

Supprimez ces lignes et remplacez-les par :

# TLS parameters
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
#no relay
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit
#
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/ssl/certs/mailcert.pem
smtpd_tls_key_file = $smtpd_tls_cert_file


# TLS Ciphers - PFS
tls_preempt_cipherlist = yes
smtp_tls_ciphers = $smtpd_tls_ciphers
smtpd_tls_ciphers = high
smtp_tls_mandatory_ciphers = $smtpd_tls_mandatory_ciphers
smtpd_tls_mandatory_ciphers = high
smtpd_tls_exclude_ciphers = aNULL, MD5, DES, 3DES, DES-CBC3-SHA, RC4-SHA, AES256-SHA, AES128-SHA

# TLSv1.2+
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_protocols = $smtpd_tls_protocols
smtp_tls_mandatory_protocols = $smtpd_tls_mandatory_protocols
tls_high_cipherlist = ECDH+aRSA+AES256:ECDH+aRSA+AES128:AES256-SHA:DES-CBC3-SHA
smtp_tls_note_starttls_offer = yes
smtpd_tls_received_header = yes

# ECDH
smtpd_tls_eecdh_grade = ultra
Code language: PHP (php)

Nous venons d’activer les connexions sécurisées et indiquer l’emplacement de notre certificat.

NOTE : si jamais vous avez acheté un certificat, nous n’avez pas de .pem mais un .cert et un .key. Il faudra alors remplacer les deux dernières lignes du bloc de code précédent par:

smtpd_tls_cert_file = /etc/ssl/cert/mailcert.cert
smtpd_tls_key_file = /etc/ssl/private/mailcert.keyCode language: JavaScript (javascript)

Etape 10 : installation de Courier

Maintenant, on installe Courier qui va nous permettre l’accès au serveur mail via POP et IMAP (et aussi POPS et IMAPS, sécurisés) :

apt-get install courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-sslCode language: JavaScript (javascript)

Pendant l’installation, on nous demande si on veut créer les répertoires pour l’administration par le web : choisissez No et appuyez sur Entrée.

A l’écran suivant, appuyez encore sur Entrée. Nous allons maintenant configurer Courier pour accéder à la base MySQL ‘mail’ pour les autorisations :

nano /etc/courier/authdaemonrc

Trouvez l’option :

authmodulelist="authpam"Code language: JavaScript (javascript)

Et changez-la en :

authmodulelist="authmysql"Code language: JavaScript (javascript)

Sauvegardez le fichier.

Ensuite, nous allons modifier le fichier de Courier qui contient les identifiants MySQL mais on en fait une copie avant :

cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc.original

On édite ensuite :

nano /etc/courier/authmysqlrc

Supprimez tout le contenu du fichier et mettez-y ceci :

MYSQL_SERVER localhost
MYSQL_USERNAME mailadmin
MYSQL_PASSWORD newpassword
MYSQL_PORT 0
MYSQL_DATABASE mail
MYSQL_USER_TABLE users
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD 5000
MYSQL_GID_FIELD 5000
MYSQL_LOGIN_FIELD email
MYSQL_HOME_FIELD "/home/vmail"
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')Code language: JavaScript (javascript)
N’oubliez pas de changer le mot de passe de l’utilisateur SQL !

Nous devons maintenant appliquer tous nos changements en redémarrant les 5 daemons de Courier :

find /etc/init.d/ | grep courier | while read line; do $line restart; doneCode language: PHP (php)

En éditant deux fichiers, nous venons d’établir un accès pop, secure pop, imap et secure imap à notre serveur de mail. Il nous faut maintenant ouvrir les ports dans le firewall pour donner accès à ces services.

Etape 11 : ouverture des ports dans iptables

On ouvre le fichier /etc/iptables.test.rules :

nano /etc/iptables.test.rules

Juste avant les entrées HTTP et HTTPS, on rajoute :

# Allows SMTP
-A INPUT -p tcp --dport 25 -j ACCEPT

# Allows pop and pops connections
-A INPUT -p tcp --dport 110 -j ACCEPT
-A INPUT -p tcp --dport 995 -j ACCEPT

# Allows imap and imaps connections 
-A INPUT -p tcp --dport 143 -j ACCEPT
-A INPUT -p tcp --dport 993 -j ACCEPTCode language: PHP (php)

On applique les nouvelles règles :

iptables-restore < /etc/iptables.test.rulesCode language: JavaScript (javascript)

On vérifie que les règles sont appliquées:

iptables -L

Résultat :

ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:smtp 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:pop3 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:pop3s 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:imap2 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:imapsCode language: CSS (css)

Pour rendre les règles permanentes:

iptables-save > /etc/iptables.up.rulesCode language: JavaScript (javascript)

Puis :

exitCode language: PHP (php)

Etape 12 : ajouter des domaines et des utilisateurs à notre base

Vous n’avez plus qu’à peupler votre base de données avec vos domaines et vos utilisateurs : soit vous utilisez une solution graphique (personnellement, je fais cela via Webmin), soit vous utilisez la ligne de commande.

Connexion à MySQL :

mysql -u root -p

Entrez votre mot de passe root MySQL. Sélectionnez la base ‘mail’ :

USE mail;Code language: PHP (php)

Pour ajouter un domaine :

INSERT INTO `domains` (`domain`) VALUES ('skyminds.net');
INSERT INTO `domains` (`domain`) VALUES ('sky.com');Code language: JavaScript (javascript)
On met des backslashes (`) pour les champs, des quotes (‘) pour les valeurs.

Pour ajouter des utilisateurs :

INSERT INTO `users` (`email`, `password`) VALUES ('matt@sky.com', ENCRYPT('secretpassword'));Code language: JavaScript (javascript)

Pour changer le mot de passe d’un utilisateur :

UPDATE users SET password = ENCRYPT("secretpassword") where email='matt@sky.com';Code language: JavaScript (javascript)

Remarquez qu’on utilise la fonction ENCRYPT de MySQL. Si vous utilisez une solution graphique, pensez à sélectionner ENCRYPT pour encrypter les mots de passe.

On quitte MySQL :

quit;

et on relance Postfix:

postfix reload

Etape 13 : Corriger le nom de domaine d’envoi des mails

Par défaut, lorsqu’on envoie un mail depuis le terminal, c’est le hostname qui est pris en compte, ce qui fait que nous envoyons avec un utilisateur@mail.skyminds.net – or nous voulons envoyer avec utilsateur@skyminds.net donc pour cela, il faut éditer le fichier /etc/postfix/main.cf :

nano /etc/postfix/main.cf

et remplacer le contenu de myorigin par votre nom de domaine:

myorigin = skyminds.net

Etape 14 : activer le SMTPS

Une dernière étape, activer les protocoles sécurisés pour envoyer les mails en SMTPs. Il suffit d’éditer le fichier master.cf :

nano /etc/postfix/master.cf

Puis de décommenter les lignes suivantes :

smtp      inet  n       -       -       -       -       smtpd
submission	inet	n	-	-	-	-	smtpd -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING
smtps	inet	n	-	-	-	-	smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING

smtp doit être décommenté par défaut, il faut décommenter aussi submission et smtps.

Etape 15 : forcer IMAPS et POP3S

Pour forcer les connexions sécurisées en IMAPS et POP3S, il suffit d’éditer deux fichiers : /etc/courier/pop3d-ssl et /etc/courier/imapd-ssl.

1. On commence par /etc/courier/pop3d-ssl :

nano /etc/courier/pop3d-ssl

Changez la configuration pour adopter ces valeurs :

POP3DSSLSTART=NO

POP3_STARTTLS=YES

POP3_TLS_REQUIRED=1

TLS_PROTOCOL=TLS1

TLS_STARTTLS_PROTOCOL=TLS1

TLS_CIPHER_LIST="TLSv1:HIGH:!SSLv3:!SSLv2:!LOW:!MEDIUM:!EXP:!NULL:!aNULL@STRENGTH"Code language: JavaScript (javascript)

On édite maitenant le fichier de service courier-pop-ssl:

nano /etc/init.d/courier-pop-ssl

On recherche :

case "$POP3DSSLSTART" in
        [yY]*)START=yes;;
esacCode language: JavaScript (javascript)

et juste en dessous de ce bloc, on ajoute :

# Matt : start TLS
case "$POP3DSTARTTLS" in
        [yY]*)START=yes;;
esac
#Code language: PHP (php)

2. On passe ensuite à /etc/courier/imapd-ssl :

nano /etc/courier/imapd-ssl

Changez les directives suivantes pour y mettre ces valeurs :

IMAPDSSLSTART=NO

IMAPDSTARTTLS=YES

IMAP_TLS_REQUIRED=1

TLS_PROTOCOL=TLS1

TLS_STARTTLS_PROTOCOL=TLS1

TLS_CIPHER_LIST="TLSv1:HIGH:!SSLv3:!SSLv2:!LOW:!MEDIUM:!EXP:!NULL:!aNULL@STRENGTH"Code language: JavaScript (javascript)

Cela désactive SSL et active TLS. La dernière directive permet d’assigner à Courier le fichier de certificat créé à l’étape 2.

On édite maintenant le fichier de service courier-imap-ssl:

nano /etc/init.d/courier-imap-ssl

on recherche :

case "$IMAPDSSLSTART" in
        [yY]*)START=yes;;
esacCode language: JavaScript (javascript)

et juste en-dessous on ajoute :

# Matt : start TLS
case "$IMAPDSTARTTLS" in
        [yY]*)START=yes;;
esac
#Code language: PHP (php)

Cela évite l’erreur de démarrage du service imap-ssl (référence).

3. Et on redémarre tous les services associés à Courier :

find /etc/init.d/ | grep courier | while read line; do $line restart; doneCode language: PHP (php)

Il ne reste plus qu’à ouvrir les ports sécurisés (993 et 995) dans iptables (voir étape 11).

Fini !

Conclusion

Voilà, nous avons un serveur mail complètement fonctionnel Postfix/Courier, sécurisé avec Saslauthd+SSL qui utilise une base SQL d’utilisateurs/domaines virtuels. Je trouve cette solution très pratique. Pour mes besoins, j’ai poussé jusqu’à créer un script PHP qui me permet de créer des redirections mail à la volée.

Synopsis » Monter un serveur dédié de A à Z

  1. Serveur dédié : installation d’Apache, PHP, MySQL et Webmin
  2. Serveur dédié : créer la base de données MySQL et importer WordPress
  3. Serveur dédié : créer et activer un Virtual Host sous Apache
  4. Serveur dédié : changer les DNS du nom de domaine et le faire pointer vers le serveur
  5. Serveur dédié : sécurisation des services avec iptables et fail2ban
  6. Serveur dédié : sécurisation de la couche TCP/IP
  7. Serveur dédié : création d’un serveur mail Postfix (sécurisé avec Saslauthd et certificat SSL) et Courier (accès POP et IMAP) utilisant une base MySQL d’utilisateurs/domaines virtuels
  8. Serveur dédié : sécuriser Apache 2 avec ModSecurity
  9. Serveur dédié : CHMOD récursif sur des fichiers ou répertoires en ligne de commande
  10. Serveur dédié : installer APC comme système de cache et configurer Varnish comme reverse-proxy pour Apache pour améliorer les performances
  11. Serveur dédié : afficher la véritable IP derrière un reverse-proxy comme Varnish
  12. Serveur dédié : intégrer SSH à WordPress pour mettre à jour le core, les plugins et les thèmes
  13. Serveur dédié : installer la dernière version d’APC par SVN
  14. Serveur dédié : analyse des performances du serveur
  15. Serveur dédié : mettre à jour le noyau Debian de la Kimsufi
  16. Serveur dédié : sauvegarde automatique des fichiers avec Backup Manager sur le serveur de sauvegarde OVH
  17. Serveur dédié : configurer la limite mémoire pour PHP et Suhosin
  18. Bash : supprimer tous les fichiers et sous-répertoires d’un répertoire
  19. Serveur dédié : impossible de se connecter à un port distant
  20. Rsync: rapatrier les fichiers du serveur à la maison
  21. Bash : réparer les tables MySQL en cas de crash
  22. Serveur dédié : création d’une seedbox avec Transmission
  23. Serveur dédié : des paquets LAMP à jour sous Debian
  24. Serveur dédié : mise à jour vers Debian 7 Wheezy
  25. Serveur dédié : activer X11 forwarding pour SSH
  26. Serveur dédié : optimiser toutes les images JPG et PNG avec OptiPNG et JpegOptim
  27. Postfix : résoudre l’erreur “fatal: www-data(33): message file too big”
  28. Serveur dédié : mise en place de l’IPv6
  29. WordPress : accorder les bonnes permissions aux fichiers et dossiers avec chown et chmod
  30. WordPress : héberger les images sur un sous-domaine
  31. Serveur dédié : ajouter l’authentification SPF, Sender-ID et DKIM à Postfix et Bind9 avec opendkim
  32. Apache : lorsque le domaine seul (sans WWW) renvoie une erreur 403
  33. Serveur dédié : sécuriser Apache avec HTTPS (HTTP avec la couche TLS/SSL) en Perfect Forward Secrecy
  34. Serveur dédié : passer WordPress en HTTPS (TLS/SSL)
  35. Serveur dédié : configurer Webmin en TLS avec un certificat SSL
  36. Serveur dédié : configurer Transmission pour accéder au WebUI via TLS-SSL
  37. Serveur dédié : installer et configurer Varnish 4
  38. Serveur dédié : passage au mod FastCGI et PHP-FPM avec Apache MPM Worker
  39. Récupérer un serveur Kimsufi après un plantage de kernel avec le mode rescue OVH
  40. Serveur dédié : configurer Postfix et Courier pour utiliser TLS-SSL en Perfect Forward Secrecy
  41. Serveur dédié : retirer Varnish, devenu inutile avec HTTPS
  42. Serveur dédié : installer la dernière version d’OpenSSL sous Debian
  43. Serveur dédié : activer l’IP canonique du serveur sous Apache
  44. Serveur dédié : mise à jour vers PHP 5.6
  45. MySQL : convertir les tables MyISAM au format InnoDB
  46. Serveur dédié : optimiser toutes les images GIF avec GIFsicle
  47. Serveur dédié : migration de MySQL vers MariaDB
  48. BASH : lister, bloquer et débloquer des adresses IP avec iptables
  49. Serveur dédié : produire une meilleure réserve d’entropie avec haveged
  50. Serveur dédié : mettre en place DNSSEC pour sécuriser les DNS du domaine
  51. Serveur dédié : mise en place du protocole DANE
  52. 8 règles d’or pour bien déployer DNSSEC et DANE
  53. Serveur dédié : installer PHP7 FPM avec FastCGI sous Debian
  54. Serveur dédié : optimiser la couche TCP
  55. Fail2Ban: protéger Postfix contre les attaques DoS de types AUTH, UNKNOWN et EHLO
  56. Serveur dédié : mettre à jour Apache pour HTTP/2
  57. Serveur dédié : ajouter le domaine à la liste HSTS preload
  58. Serveur dédié : ajouter l’authentification DMARC à Postfix et BIND
  59. Serveur dédié : à la recherche de l’inode perdue ou comment résoudre le problème “no space left on device”
  60. Serveur dédié : installer NginX avec support HTTP2 et certificat SSL, PHP, MariaDB sous Debian

Vous avez un projet WordPress ou WooCommerce en tête? Transformez votre vision en réalité avec mon expertise reconnue.

Parlons de votre projet dès aujourd'hui »

Articles conseillés :

Matt

Matt Biscay est développeur WordPress et WooCommerce certifié chez Codeable, ainsi que sysadmin qualifié et enseignant-chercheur. Passionné par le code performant et les solutions sécurisées, je m'efforce d'offrir une expérience utilisateur exceptionnelle sur chaque projet.

Vous avez aimé cet article ? Vous avez un projet en tête et vous pensez que je pourrais vous aider à le concrétiser ? N'hésitez pas à me contacter, je serais ravi de discuter avec vous de votre projet !

101 pensées sur “Serveur dédié : création d’un serveur mail Postfix (sécurisé avec Saslauthd et certificat SSL) et Courier (accès POP et IMAP) utilisant une base MySQL d’utilisateurs/domaines virtuels”

    • Salut Kaoru,

      Je configure toujours bind avant vu qu’il me sert à faire pointer mes domaines comme je veux (tout est redirigé vers skyminds.net). Il y a juste une ligne à rajouter dans la configuration du domaine bind :

      skyminds.net.	IN	MX	10 mail.skyminds.net.

      Je reviendrai sur la config bind dans un autre article, notamment pour l’ajout du SPF.

      Reply
  1. Bonjour Matt,

    Ayant suivi ton tutoriel à la lettre ,
    je me heurte à un échec d’authentification au niveau de la base de donnée users
    Je m’y suis repris à fois mais impossible de me connecter via thunderbird au serveur de mail.
    le message d’érreur :La configuration ne peut être vérifiée — une erreur pour l’identifiant ou le mot de passe?

    Peux tu me donner plus de détails sur ce point ?

    INSERT INTO `users` (`email`, `password`) VALUES (‘matt@sky.com’, ENCRYPT(‘secretpassword’));

    Remarquez qu’on utilise la fonction ENCRYPT de MySQL. Si vous utilisez une solution graphique, pensez à sélectionner ENCRYPT pour encrypter les mots de passe.

    Cordialement

    Zicklon

    Reply
    • Salut Zicklon,

      Les utilisateurs ne possèdent pas vraiment de comptes : ce sont plutôt des alias qui pointent vers des adresses emails existantes.

      On n’utilise aucun client mail : si le domaine est example.com, je peux créer l’utilisateur virtuel jack.daniels@example.com et rediriger tout son courrier vers mon adresse personnelle.

      PS : je réalise que c’est une utilisation très personnelle : ce n’est pas vraiment standard mais c’est vraiment comme ceci que j’utilise mon serveur mail :)

      Pour le code SQL : tu peux copier la requête telle quelle si tu es en ligne de commande. Si tu utilises PHPmyadmin, il faut appliquer la fonction ENCRYPT() au champs de formulaire ‘password’.

      Reply
  2. BOnjour,

    Le tuto fonctionne très bien. J’ai juste un petit soucis avec la connexion sécurisée. Cela ne fonctionne pas en local avec roundcube ni avec un client distant (thunderbird). Mais le principal est là, le lien avec une base, et la récupération imap.
    Merci beaucoup

    Reply
  3. Vraiment génial comme tutorial, merci beaucoup !

    C’est rare que je suive un tutoriel et qu’il y ait aucune erreur. Je cherchais depuis longtemps comment configurer les mails sur un dédié et j’ai trouvé ma référence :)

    J’ai juste une petite question: pour ajouter un domaine, il suffit d’ajouter une entrée dans la table domaine (par exemple mysite.com) ainsi que l’utilisateur associé (par exemple admin@mysite.com) et c’est tout ?

    Reply
  4. Mise à jour de l’article et plus particulièrement de l’étape 9. Dans le fichier /etc/postfix/main.cf, j’ai ajouté cette ligne :

    #no relay
    smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit

    qui permet d’éviter le relay mail. J’ai également retiré la ligne :

    broken_sasl_auth_clients = yes

    qui ne s’adressait qu’aux clients emails obsolètes (vieilles versions d’Outlook et Outlook Express).

    Reply
  5. Merci toi super tuto j’ai juste un problème, dans les logs j’ai

    imapd: chdir mondomaine.net/contact/: No such file or directory

    J’ai refait le tuto mais toujours la même erreur

    Reply
    • Bonjour,

      Dans l’étape 10, lorsque tu édites le fichier /etc/courier/authmysqlrc, vérifie bien que

      MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')

      soit sur une seule ligne.

      Reply
  6. Merci de ton retour Matt
    Oui elle se trouve bien sur une seule ligne, si je fais un mkdir /home/vmail/domaine-toto.fr/toto/ l’ensemble fonctionne très bien.

    C’est bien postfix qui doit créer les répertoires ?

    Il me reste plus qu’a faire fonctionné l’envoi smtp en ssl qui pour le moment me donne un SASL PLAIN authentication failed: authentication failure.

    En tout cas merci à toi un très bon tuto qui marche et qui m’a permis de bien comprendre le fonctionnement de postfix pop imap et le ssl

    Reply
  7. Bon j’ai réussi à faire fonctionné le smtp SSL sous Debian Wheezy il faut faire 3 modifications dans courrier /etc/postfix/sasl/smtpd.conf

    pwcheck_method: saslauthd
    mech_list: plain login
    allow_plaintext: true
    # auxprop_plugin: mysql
    auxprop_plugin: sql
    sql_engine: mysql

    sql_hostnames: 127.0.0.1
    sql_user: mailadmin
    sql_passwd: newpassword
    sql_database: mail
    # sql_select: select password from users where email = ‘%u’
    sql_select: select password from users where email = ‘%u@%r’

    Reply
  8. Mise à jour de l’article : activation du SSL pour le SMTP.

    nano /etc/postfix/sasl/smtpd.conf

    Ancien code :

    pwcheck_method: saslauthd
    mech_list: plain login
    allow_plaintext: true
    auxprop_plugin: mysql
    sql_hostnames: 127.0.0.1
    sql_user: mailadmin
    sql_passwd: newpassword
    sql_database: mail
    sql_select: select password from users where email = '%u'

    à remplacer par:

    pwcheck_method: saslauthd
    mech_list: plain login
    allow_plaintext: true
    auxprop_plugin: sql
    sql_engine: mysql
    sql_hostnames: 127.0.0.1
    sql_user: mailadmin
    sql_passwd: newpassword
    sql_database: mail
    sql_select: select password from users where email = '%u@%r'

    Merci à imars pour la correction.

    Reply
  9. Bonjour Matt,

    Merci pour ce tuto très complet et très intéressant.

    J’aurai une ou deux petites questions, je voulais savoir comment faire pour essayer si tout fonctionne ?
    J’ai tout suivi à la lettre, j’ai bien ajouter un utilisateur dans mes tables de la bd.
    Quand j’essaye de rentrer l’email et le mdp dans mon client mail “Icedove” il me dit celà:

    Pourrais-tu m’aider ?

    Reply
  10. Bonjour Matt et merci de ta réponse.

    Cependant il me reste un petit problème, je n’ai plus ce message d’erreur mais maintenant icedove me dit que l’user ou le mdp n’est pas bon.

    Pour tant j’ai relu ton tuto pour la 3ème fois et je pense ne pas avoir fait d’erreur, je sèche un peut la :)

    Merci encore de ton aide.

    Reply
  11. Bonjour,
    Merci pour ce tutoriel qui fonctionne encore (Debian Wheezy) :-)

    Une précision : pour ceux qui ont un serveur MySQL récent (j’ai la version 5.5) : à l’étape 4 :
    CREATE TABLE […] TYPE=MyISAM;

    Il faut taper “ENGINE” au lieu de “TYPE”.

    Par ailleurs, et pour une raison que j’ignore, j’ai dû reprendre une ancienne configuration et décommenter les lignes qui suivent dans le fichier master.cf pour pouvoir envoyer des emails avec Thunderbird :

    smtp inet n – – – – smtpd
    submission inet n – – – – smtpd
    -o smtpd_tls_security_level=encrypt
    -o smtpd_sasl_auth_enable=yes
    -o smtpd_client_restrictions=permit_sasl_authenticated,reject
    -o milter_macro_daemon_name=ORIGINATING

    Merci encore !

    John

    Reply
    • Merci John, je viens de corriger les TYPE en ENGINE : TYPE est devenu obsolète et a été remplacé par ENGINE mais il reste un synonyme pour la rétro-compatibilité.

      Merci pour master.cf, je l’ai fait sur le serveur mais j’ai oublié d’en parler dans l’article. Je le rajoute donc dans l’étape 14.

      Reply
  12. Des retours d’expérience sur l’installation de Spamassassin ?
    Je suis entrain d’essayer de l’installer dans la continuité de se tutoriel, pour le moment cela ne fonctionne pas mais lorsque j’aurais réussi je viendrais exposé comment j’ai fait sinon je veux bien un coup de main ;-)

    Reply
  13. Bonsoir, déjà super guide. J’aurai une question, comment tu fais pour consulter tes mails ? j’ai testé roundcube mais faudrait lier tout ça à la bdd mail no ?

    Reply
    • Roundcube (comme SquirrelMail, Atmail, etc…) se connectent directement au serveur mail, donc inutile de le lier à la BDD.
      Il suffit donc de les paramétrer avec les infos de ton serveur ^^/

      Autrement, tu peux également utiliser un client mail du style Thunderbird, iMail, …

      Reply
    • Salut Jean,

      Comme l’a bien dit Sébastien, il te suffit de configurer ton client mail avec les identifiants du compte email :

      identifiant : adresse email complète avec le nom de domaine
      mot de passe : celui défini dans la base MySQL

      Cela fonctionnera avec n’importe quel client ou application comme RoundCube.

      Reply
  14. Bonjour,
    Après avoir suivi le tuto à la lettre, je n’arrive pas a me connecter avec outlock 2013. Dans les logs, il n’y a pas d’erreurs. Je ne vois pas d’ou peut venir ce soucis
    Cdt

    Reply
    • Bonjour,

      Y’a-t-il un message d’erreur (logs serveur) ou une popup dans Outlook qui pourrait expliquer le problème de connexion ?

      A vérifier :
      – les mots de passe
      – l’identifiant est l’adresse email complète

      Reply
  15. Tout d’abord, grand merci pour le tuto. Il est rare de tomber sur un tuto aussi clair qui permet de faire et de comprendre en même temps.

    Moi perso, je ne parviens pas à envoyer de mail. Les logs m’indiquent juste une erreur de mot de passe …. Une idée d’où cela peut provenir ?

    Reply
      • Evolution.
        Du client, le message est : Le mot de passe est mauvais.

        Du serveur, voici les logs :
        mail.log :
        Apr 15 20:43:04 mail postfix/smtpd[9477]: warning: mail.domaine.fr[XX.XXX.XXX.XX]: SASL LOGIN authentication failed: authentication failure

      • Réglé :
        A l’étape 7, le fichier (sous wheezy) /etc/pam.d/smtp existe, donc il faut commenter les paramètres existants et ajouter ce que tu as mis.

        De même, avec le client Evolution j’avais une erreur, j’ai du installer le paquet “garmin” côté serveur, et le problème a été résolu

      • Content de voir que tu as réglé le problème.

        Je suis également tombé sur l’erreur “filesystem notification initialization error” sous Thunderbird. Certains disent que l’installation de gamin règle le souci, d’autres non – je ne m’y suis pas encore penché vu que cela ne gêne rien mais j’y jetterai un oeil.

  16. Une Schimtt question : Comment dois-je m’y prendre si mon serveur est mail.toto.fr, et que je veux y recevoir les mails de admin@tata.fr, tata.fr étant un nom de domaine m’appartenant ?
    Je dois déclarer mon MX mail mail.toto.fr chez tata.fr et ensuite ajouter le domaine virtuel ?
    Ouaip, j’ai pas été super clair… En gros, comment dois-je faire pour ajouter un utilisateur qui a un nom de domaine différent du serveur ?

    Reply
    • Je viens de tester sur un de mes autres domaines : j’ai juste créé une redirection vers une autre adresse et le mail est bien transféré.

      Dans la configuration DNS, je n’avais pas spécifié de MX mais les serveurs DNS pointent vers mon domaine principal.

      Reply
    • edit: Quelle est aussi la commande pour ajouter une entrée dans la table forward (src/dst) ?
      Les mails seront bien automatiquement normalement forwarder ?
      Merci :-)

      Reply
    • Pour la commande SQL, serait-elle celle ci :
      INSERT INTO `mail`.`forwards` (`source`, `destination`) VALUES (‘toto@exemple.com’, ‘titi@gmail.com’);
      ?

      Reply
  17. Pour ceux qui ne veulent pas effacer la conf complète de /etc/courier/authmysqlrc (pour comprendre le fichier) ne pas oublier de commenter la ligne “# MYSQL_NAME_FIELD name” sinon vous ne pourrez pas recevoir vos emails dans botre boite de messagerie vous aurez un message comme quoi le mot de passe n’est pas bon.

    Reply
  18. Bonjour,
    Tout d’abord merci pour ce tuto!
    Je suis sur Ubuntu server 2014 et j’utilise Thunderbird comme client IMAP.
    Je rencontre la même erreur que Imars plus haut: “imapd-ssl: chdir mondomaine.net/contact/: No such file or directory”
    Est-ce un problème de droit sur le dossier /home/vmail?
    Pourriez-vous afficher votre contenu de /etc/courrier/imapd-ssl et notamment MAILDIRPATH à la fin?
    Enfin suis-je obligé de démarrer imapd si je n’utilise qu’imapd-ssl?
    Merci d’avance

    Reply
    • Salut,

      Comme ton erreur l’indique imaps ne trouve pas le dossier de ton domaine et de ton utilisateur. Il faut donc les créer!

      Il faut donc créer un dossier du nom de ton domaine ex: «mondomaine.com» dans le dossier «vmail».
      Puis, dans ce même dossier (celui de ton domaine) tu dois y créer un autre dossier pour chaque utilisateur que tu auras au préalable crée dans ta base de donnée MySQL.

      ex: si j’ai un utilisateur du nom de admin, je devrais créer
      /home/vmail/mondomaine.com/admin. Opération à répéter pour chaque utilisateurs, et si tu as plusieurs domaine, crée un dossié pour chaque domaine dans le dossié vmail et les utilisateures aproprié dedan.

      Ne pas oublié les droits et le propriétaire/group des dossiers.

      sudo chown -R vmail:vmail /home/vmail/mondomaine.com/admin ; sudo chmod -R 744 /home/vmail/mondomaine.com/admin

      Tu devrais pouvoir te connecter à ta boite mail maintenant, bon courage!

      Reply
      • Bonjour,

        Désolé de ne pas avoir répondu plus tôt!
        Je reviens sur ce problème de droits qui n’en était pas un.
        Il ne sert à rien de créer manuellement les dossiers. Il suffit d’envoyer un mail à l’adresse souhaité et postfix fait le reste en créant les dossiers au bon endroit. Après la connexion IMAP marche parfaitement.
        Est-ce que quelqu’un pourrait bien expliquer les restrictions (smtpd_sender_restrictions)car, un peu parano, j’ai toujours peur qu’elles ne suffisent pas, merci d’avance.
        Enfin dernier point,je crois qu’il il manque un fichier de configuration pour utiliser “$virtual_mailbox_limit_maps”

  19. Bonjour,

    Que pensez-vous d’ajouter la ligne suivante :

    smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3

    dans le fichier main.cf de Postfix à cause de la vulnérabilité Poodle ?

    Par avance, merci !

    Reply
  20. Ah super!
    Et pour ce $virtual_mailbox_limit_maps, est-ce que tu rencontres le problème également?
    Merci pour tout et bonne continuation.

    Reply
    • Salut xav,

      Pour $virtual_mailbox_limit_maps, c’est vrai que je n’utilise pas de quotas pour mes utilisateurs.

      Pour l’activer cette fonctionnalité, il faut :

      1. ajouter un champs quota dans la table users.

      2. créer le fichier /etc/postfix/mysql-virtual_mailbox_limit_maps.cf avec dedans :

      user = mail_admin
      password = mail_admin_password
      dbname = mail
      query = SELECT quota FROM users WHERE email='%s'
      hosts = 127.0.0.1

      3. ajouter dans main.cf :

      virtual_create_maildirsize = yes
      virtual_maildir_extended = yes
      virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf
      virtual_mailbox_limit_override = yes
      virtual_maildir_limit_message = "The user you are trying to reach is over quota."
      virtual_overquota_bounce = yes

      4. éditer /etc/courier/authmysqlrc :

      nano /etc/courier/authmysqlrc

      et ajouter cette ligne:

      MYSQL_QUOTA_FIELD quota

      5. Appliquer le patch VDA pour activer le quota sous Postfix.

      Reply
  21. Bonjour,

    je viens de faire “l’acquisition” d’un serveur kimsufi que je souhaite utilisé comme server mail (entre autre), tout ce passe bien pour l’instant, mais je souhaiterai gérer la base de données via phpmyadmin (déjà en place et fonctionnel), auriez-vous des informations sur la marche à suivre ?

    Reply
    • Bonjour Thibault,

      Pour installer phpmyadmin, tu peux suivre ce tuto.

      Mais je te conseille plutôt Adminer qui fait la même chose et qui tient en un seul fichier à uploader sur ton site, c’est très pratique.

      Reply
  22. Merci beaucoup, Matt !

    Cela dit, j’ai dû remettre comme ceci :

    POP3DSSLSTART=YES
    #TLS_CIPHER_LIST="TLSv1:HIGH:!SSLv3:!SSLv2:!LOW:!MEDIUM:!EXP:!NULL:!aNULL@STRENGTH"
    

    car je n’arrivais plus à me relever mes mails avec Thunderbird.

    J’ai un certificat payant, ça vient peut-être de ça.

    J’attends donc demain la suite ! :-)

    Reply
    • De rien John !

      Est-ce que tu as bien édité le fichier /etc/init.d/courier-imap-ssl en rajoutant le morceau de code nécessaire au démarrage de TLS ?

      Sans ce bout de code, TLS ne démarre pas (et IMAP non plus).

      J’utilise un certificat payant aussi et cela fonctionne très bien avec cette petite manipulation : TLS-only et plus de SSL.

      Reply
  23. Article édité : ajout du paquet gamin lors de l’installation des paquets (étape 3).

    Le paquet gamin permet de corriger l’erreur “Filesystem notification initialization error (…) check for configuration errors with the FAM/Gamin library” qui apparait avec les clients IMAP comme Thunderbird.

    Les messages étaient bien reçus mais cette erreur était récurrente. L’installation de la librairie libgamin0 en lieu et place de libfam0 corrige le problème.

    Reply
  24. Bonjour matt. Cela fait quelques jours que je cherche à créer un système mail avec mon kimsufi sans succès.
    Si tu as une minute j’ai ouvert un topic sur les forum ubuntu-fr sans réponses…
    http://forum.ubuntu-fr.org/viewtopic.php?id=1763771

    J’ai trouvé ton tuto il y a quelques heures et après avoir purgé de mes propres tests (sendmail, etc), je l’ai réalisé sans trop de soucis. Mais malheureusement ca ne marche toujours pas.
    Si tu as lu mon topic, tu as vu que j’arrivais a recevoir sur les adresses users@ksxxxxx.kimsufi.com mais pas sur users@mondomaine.fr.
    Or depuis ton tuto, ce n’est même plus le cas !
    En fait, ca ne m’étonne pas vu que le $mydestination a été mis a été effacé.
    J’ai bien eu l’erreur sur le paramètre virtual_mailbox_limit_maps, je l’ai passé à 0 dans le main.cf et à priori c’est bon.

    Par contre, pour la partie sur “ouvrir les ports avec iptables”, le fichier /etc/iptables.test.rules n’existe pas sur mon systeme (Ubuntu 14.04.1), du coup je sais pas trop si je dois l’ajouter quelque part (jai fail2ban).
    J’ai “telneté” les ports pour vérifier et le 25 pass de connection, les 4 autres, y’a la connexion.

    Autre problème bien plus important à mes yeux, tout mes envois via mon site web ( php->mail() ) ne fonctionne plus !
    log d’un envoi : mail postfix/postdrop[18383]: warning: unable to look up public/pickup: No such file or directory

    Autre erreur quand je fait “postfix reload” :
    /usr/sbin/postconf: fatal: file /etc/postfix/master.cf: line 19: bad field count
    postfix/postfix-script: fatal: cannot execute /usr/sbin/postconf!

    Je pensait que le tuto allait arrnager ma situation xD Ca commence à me désespérer ces trucs la -_-”

    En espérant que tu ai réponses à mes questions !
    Tchao :p

    Reply
    • Bonsoir Usu,

      Est-il possible qu’il reste des résidus de ton ancienne installation?

      Chez moi, dans main.cf, j’ai bien :

      mydestination =
      myorigin = skyminds.net

      Pour les règles du firewall, si tu as déjà un fichier avec des règles pour les autres services du serveur, tu peux les ajouter à ton fichier existant. Le fichier /etc/iptables.test.rules est juste un exemple.

      En ce qui concerne l’erreur “postfix/postdrop: warning: unable to look up public/pickup: No such file or directory”, cela arrive lorsque sendmail tourne toujours. Il peut avoir été désinstallé mais pas stoppé. Une solution :

      service sendmail stop
      service postfix start

      Tu peux aussi purger le paquet sendmail et rebooter et vérifier que le port 25 est bien géré par postfix avec :

      netstat -lnp

      Pour l’erreur “bad field count”, vérifie les espaces au niveau de la ligne 19, Postfix est assez pointilleux avec son fichier de configuration.

      Bon courage!

      Reply
      • Merci de ta réponse !

        Alors dans l’ordre :
        * mydestination est bien vide et myorigin est égal à mondomaine.com

        * pour les règles du firewall… Je dois dire que je n’ai pas beaucoup de connaissances de ceôté là.
        Pour moi, c’est une fonction de fail2ban (peut-être que je me trompe…) que j’utilise pour ban des IP temporairement à la volée genre “iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP”. J’ai maté tout les fichiers à l’intérieur de etc/fail2ban du coup sans trouver de chaine du style de “-A INPUT -p tcp –dport 110 -j ACCEPT” ni d’entrée HTTP comme tu le cite.

        * Pour sendmail, c’est le gros bordel en effet. et j’arrive pas trop à me dépatouiller…
        Si je fais “aptitude purge sendmail”, ca me dit qu’il n’y a rien à supprimer.
        Si je fais “service sendmail start”
        -> start-stop-daemon: unable to stat /usr/sbin/sendmail-mta (No such file or directory)
        /etc/init.d/sendmail: 296: /etc/init.d/sendmail: /usr/sbin/sendmail-msp: not found
        À l’inverse, je peux l’arrêter autant de fois que je veux sans prob xD
        Si je fais “service sendmail status”
        -> MSP: is run via cron (20m)
        MTA: is not running
        QUE: Same as MTA
        Et je retrouve des fichiers contenant “sendmail” dans leur nom un peu partout, mais de ce que j’ai lu ca n’aurait qu’un faux rapport le module ayant le même nom que le systeme (le bordel quoi xD), comment trier les “bons” des “faux” ?

        * Pour la suite, j’ai reC/C la partie du master.cf et les 2 erreurs ne sont plus là (le warning et le bad field count). Et du coup l’envoi de mail depuis mon site remarche.

        * Pour le “netstat -lnp”
        tcp6 0 0 :::143 :::* LISTEN 4010/couriertcpd
        tcp6 0 0 :::25 :::* LISTEN 2517/master
        tcp6 0 0 :::993 :::* LISTEN 4055/couriertcpd
        Pour le 110 et le 995, rien.

        L’envoi de mail à user@mondomaine.com ne marche toujours pas.
        Je fais quelques tests, mais je veux pas trop interagir pour pas créer des erreurs supplémentaires.

        Merci encore, en espérant que tu pourras m’aider !

      • Bonjour,

        Les règles du firewall ne sont pas gérées par fail2ban mais par iptables. J’ai tendance à mettre toutes mes règles dans un fichier lancé au démarrage de la machine qui les applique avec iptables.

        Pour sendmail, si tu l’as désinstallé et arrêté, cela devrait régler le problème. As-tu rebooté la machine également ?

        C’est le fichier main.cf qu’il faut principalement éditer. Dans master.cf, tu dois avoir les lignes smtp, submission activées.

        Est-ce que tu as redirigé le courrier de user@mondomaine.com vers une autre adresse?

        Que donne un:

        tail -f /var/log/mail.log
      • Salut, j’ai tripoté un peu tout ça, j’ai aussi récupéré les accès au NDD (registar OVH) et du serveur (kimsufi OVh come tu l’avais compris).
        Ce qui m’a permis de corriger les DNS qui étaient très étranges côté NDD (ns12.ovh.net) et d’ajouter un DNS secondaire côté serveur (inexistant) et fini de configurer BIND. J’ai un peu de mal à saisir comment tout ça pouvait fonctionner…
        Merci pour l’autre tuto d’ailleurs.
        Dans mon admin OVH serveur, sur les zones DNS, y’a un peu de tout, des trucs étranges (quasiment toutes les cibles sont en …ovh.net -_-“), j’ai rien vu dans tes tutos de lié à ces zones, comment les gérer etc… Sont-elles vraiment effectives ou c’est bind qui gère tout ?
        Je ne pensait pas qu’on me refilait un bouzin pareil x_x” Je ne sais plus si je dois en rire ou en pleurer xD

        J’ai suivi ton tuto pour iptables, “netstat -lnp” inchangé.

        Pour sendmail: bien purgé, rebooté plusieurs fois la bête via d’autres opérations donc je pense que c’est bon.

        Je ne redirige pas le courrier de user@mondomaine.com.
        Je souhaite juste que quiconque puisse envoyer un mail à cette adresse (user@mondomaine.com) et que je puisse les lire via webmin [Lecture du courrier des usagers] par exemple. La réponse par ce même email n’est même pas obligatoire, bien que techniquement ca fonctionne déjà dans ce sens là !

        Quand à mon mail.log, voici un C/C via webmin :

        22 02:20:02 mail postfix/pickup[4217]: 0BDE3C10CF: uid=112 from=
        Jan 22 02:20:02 mail postfix/cleanup[10727]: 0BDE3C10CF: message-id=
        Jan 22 02:20:02 mail postfix/qmgr[4218]: 0BDE3C10CF: from=, size=723, nrcpt=1 (queue active)
        Jan 22 02:20:02 mail postfix/virtual[10782]: 0BDE3C10CF: to=, orig_to=, relay=virtual, delay=0.24, delays=0.18/0.01/0/0.04, dsn=5.1.1, status=bounced (unknown user: “root@hentai-revelation.com”)
        Jan 22 02:20:02 mail postfix/cleanup[10727]: 2F51BC10D0: message-id=
        Jan 22 02:20:02 mail postfix/qmgr[4218]: 2F51BC10D0: from=, size=2682, nrcpt=1 (queue active)
        Jan 22 02:20:02 mail postfix/bounce[10786]: 0BDE3C10CF: sender non-delivery notification: 2F51BC10D0
        Jan 22 02:20:02 mail postfix/qmgr[4218]: 0BDE3C10CF: removed
        Jan 22 02:20:02 mail postfix/virtual[10782]: 2F51BC10D0: to=, relay=virtual, delay=0.07, delays=0.03/0/0/0.03, dsn=5.1.1, status=bounced (unknown user: “smmsp@hentai-revelation.com”)
        Jan 22 02:20:02 mail postfix/qmgr[4218]: 2F51BC10D0: removed

        Voila. J’espère ne pas trop t’embêter avec tout cela >_<"

  25. Salut Matt. C’est encore moi, j’ai réussi a résoudre mon problème !

    Pour résumer, j’ai purgé tout ce pouvait être lié aux emails, j’ai reboot le serveur et refait le tuto. J’ai changé 2-3 trucs via webmin, je pense surtout à “Domaines pour lesquels on reçoit le courrier” réglé sur “Tout le domaine” (équivaut au $mydestination) et bingo !
    Je reçoit sur webmin les mails envoyé à user@mondomaine.com, c’est génial ^^
    Après peut-être que des modifs précédentes ont permis ce résultat mais là je ne pourrais pas vérifier :p

    J’en ai profité pour réaliser la quasi-totalité des tutos que tu proposes sur “Monter un serveur”, surtout côté sécurité.
    Et pour ca je te remercie :D

    Bonne continuation sur ton blog ;p
    Usu

    Reply
    • Samut Usu,

      Ah très bien, je suis très content que tu aies trouvé une solution à ce problème. Merci pour l’astuce avec webmin, cela pourra peut-être servir à d’autres.

      C’est cool que les autres tutos t’aies servi, je t’en prie :)

      Bonne administration de serveur, à bientôt!

      Reply
  26. Salut,
    Sur un version fraichement installé de Wheezy 7.8 j’ai l’erreur suivante ?

    E: Impossible de trouver le paquet postfix-tls

    Le paquet mailx est un paquet virtuel fourni par :
    mailutils 1:2.99.97-3
    heirloom-mailx 12.5-2+deb7u1
    bsd-mailx 8.1.2-0.20111106cvs-1+deb7u1
    Vous devez explicitement sélectionner un paquet à installer.

    E: Le paquet « mailx » n’a pas de version susceptible d’être installée

    du coup j’ai le choix de bsd-mailx au lieu de juste mailx

    Reply
    • Salut imars,

      Effectivement, quelques paquets semblent avoir disparu:
      postfix-tls est maintenant intégré à postfix par défaut.
      mailx est géré par heirloom-mailx chez moi.

      Je mets à jour l’article avec les changements, merci imars !

      Reply
  27. Bonjour, tout d’abord excellent tuto. Merci et bravo.
    J’ai néanmoins un petit problème : lorsque je souhaite relever mon courier avec Thunderbird, celui-ci me répond “Thunderbird n’a pas réussi à trouver les paramètres pour votre compte courrier”. Lorsque je vais dans /var/log/mail.log, je vois bien des tentatives de connexions mais apparement suivies de déconnexion (sans erreur) :

    Apr 24 00:02:43 pb-serveur imapd: Connection, ip=[::ffff:2.2.82.147]
    Apr 24 00:02:43 pb-serveur imapd: Connection, ip=[::ffff:2.2.82.147]
    Apr 24 00:02:43 pb-serveur imapd: LOGOUT, ip=[::ffff:2.2.82.147], rcvd=24, sent=492
    Apr 24 00:02:43 pb-serveur imapd: LOGOUT, ip=[::ffff:2.2.82.147], rcvd=24, sent=492
    Apr 24 00:02:54 pb-serveur imapd: Connection, ip=[::ffff:2.2.82.147]
    Apr 24 00:02:54 pb-serveur imapd: Connection, ip=[::ffff:2.2.82.147]
    Apr 24 00:02:54 pb-serveur imapd: LOGOUT, ip=[::ffff:2.2.82.147], rcvd=24, sent=492
    Apr 24 00:02:54 pb-serveur imapd: LOGOUT, ip=[::ffff:2.2.82.147], rcvd=24, sent=492

    J’ai lu sur ce forum : http://forum.ubuntu-fr.org/viewtopic.php?id=1610191 qu’il pourrait s’agir d’un problème de IPV4/IPV6.
    Qu’en pensez vous ? Pourriez vous m’aider ?

    Merci d’avance.

    westavel

    Reply
      • J’ai enfin (plus ou moins) résolu mon problème. Le problème venait du fait que j’utilisais le smtp de mon serveur. Or le port 25 est bloqué de base sur le serveur.
        J’ai donc été obligé d’ouvrir le port 587 sur le serveur pour utiliser le smtp.

        Merci beaucoup en tout cas !

  28. Simple question(peut-être bidon!), est-il obligatoire de définir le hostname du serveur en mail.domaine.tld ?
    J’aimerais effectivement mettre un autre nom à mon serveur, genre “monserveurx”.
    Le principal est de bien définir le chan mx dans le fichier dns du domaine non ?

    Reply
    • Oui, le principal est d’avoir défini le nom dans le champs DNS.

      Toutefois, en SSH, c’est bien pratique d’avoir le nom du serveur, cela permet d’éviter les boulettes (mauvaise commande sur le mauvais serveur par exemple).

      Reply
  29. Bonjour,

    Merci pour ce tuto tres bien fait, cela m’a permis de configurer mon serveur.

    La conf postfix fonctionne parfaitement en POP mais en IMAP j’ai une erreur d’authentification, j’utilise pourtant le même login/password qu’en POP…
    J’ai raté qque chose?
    Merci de votre aide.

    Reply
    • Bonjour Nester,

      Essaie d’envoyer un mail en ligne de commande à l’adresse que tu souhaites consulter. Ensuite, récupère-le avec IMAP. Postfix crée les répertoires de l’utilisateur à l’envoi du premier mail.

      Reply
  30. Merci pour ce tutoriel vraiment précis. Il y a une coquille qui traîne :
    POP3_TLS_REQUIRED:1 => il faut mettre POP3_TLS_REQUIRED=1 sinon ça bloque ensuite.

    Sinon, je rencontre une erreur sur une Debian Wheezy tout à la fin lorsqu’il faut relancer les services :
    find /etc/init.d/ | grep courier | while read line; do $line restart; done

    j’ai cette erreur :
    /etc/init.d/courier-pop-ssl: 59: /etc/init.d/courier-pop-ssl: //: Permission denied

    Que dois-je faire ?

    Reply
    • Bonjour Laurent,

      Merci pour la coquille, je viens de la corriger.

      En regardant ton erreur, je me suis aperçu que j’avais mis des slash (//) au lieu d’un hashtag (#) pour les commentaires, il faut donc mettre :

      # Matt : start TLS
      case "$POP3DSTARTTLS" in
              [yY]*)START=yes;;
      esac
      #

      et

      # Matt : start TLS
      case "$IMAPDSTARTTLS" in
              [yY]*)START=yes;;
      esac
      #

      Je n’avais pas mis les commentaires sur le fichier de mon serveur, du coup je n’avais pas eu l’erreur.

      Merci pour ta relecture!

      Reply
  31. Bonjour j’ai suivi à la lettre le tuto mais je rencontre des erreurs lors de la connexion via icedove.

    Dec 15 21:23:51 ns1 postfix/smtpd[13017]: connect from host-21-156-66-217.spbmts.ru[217.66.156.21]
    Dec 15 21:23:52 ns1 postfix/smtpd[13017]: SSL_accept error from host-21-156-66-217.spbmts.ru[217.66.156.21]: 0
    Dec 15 21:23:52 ns1 postfix/smtpd[13017]: warning: TLS library problem: error:14094416:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate unknown:s3_pkt.c:1294:SSL alert number 46:
    Dec 15 21:23:52 ns1 postfix/smtpd[13017]: lost connection after CONNECT from host-21-156-66-217.spbmts.ru[217.66.156.21]
    Dec 15 21:23:52 ns1 postfix/smtpd[13017]: disconnect from host-21-156-66-217.spbmts.ru[217.66.156.21]
    Dec 15 21:23:53 ns1 postfix/smtpd[13017]: connect from host-21-156-66-217.spbmts.ru[217.66.156.21]
    Dec 15 21:23:54 ns1 postfix/smtpd[13017]: warning: SASL authentication failure: Password verification failed
    Dec 15 21:23:54 ns1 postfix/smtpd[13017]: warning: host-21-156-66-217.spbmts.ru[217.66.156.21]: SASL PLAIN authentication failed: authentication failure

    Merci de votre aide

    Reply
    • Bonjour,

      Les lignes 2 et 3 indiquent que le client n’a pas pu vérifier le certificat du serveur et a renvoyé une alerte. Il faut bien vérifier que le certificat soit au bon format (PEM).

      Dans main.cf, vérifier également la présence des directives :

      smtpd_tls_auth_only = yes
      smtp_tls_security_level = may
      smtpd_tls_security_level = may
      Reply
  32. Bonjour super tuto, fonctionne très bien et bien expliquer, seulement petit bémol j’utilise un certificat ssl de chez STARTSSL.com et j’utilise plusieurs domains. Sur le main domain les connexions imap via tls ainsi que le smtps fonctionnent très bien, cependant imap-sll refuse de connecter(connection failled) mon autre domain alors que le smtps lui établi bien la connexion via TLS..

    postfix/smtps/smtpd[5488]: connect from [IPINFOS]
    Dec 29 22:31:23 ns1 postfix/smtps/smtpd[5488]: Anonymous TLS connection established from [IPINFOS] TLSv1.2 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)

    Ensuite la connexion à courier échoue

    Dec 29 22:31:23 ns1 imapd-ssl: Connection, [IPINFOS]
    Dec 29 22:31:23 ns1 postfix/smtps/smtpd[5488]: disconnect from [IPINFOS]
    Dec 29 22:31:23 ns1 imapd-ssl: LOGOUT, ip=[::ffff:IPINFOS, rcvd=24, sent=468

    Mon certificat n’est que pour 1 domain et 1 sous domain soit, exemple.com et mail.exemple.com, dois-je re souscrire à un certificat pour mon domain secondaire et le rajouter a la suite du premier dans le fichier /etc/courier/imapd.pem ? ainsi que peux-être à la suite du smtp aussi ?

    Merci pour vos éclaircissements

    Reply
    • Bonjour,

      Vous pouvez avoir un certificat différent pour example.com et mail.example.com, du moment qu’il est bien défini dans les fichiers de configuration. (personnellement, j’ai opté pour un certificat wildcard qui me permet de sécuriser tous les services et sous-domaines).

      Vérifiez aussi que le fichier /etc/postfix/main.cf contienne :

      # TLS Auth
      smtpd_tls_security_level = may
      smtp_tls_security_level = $smtpd_tls_security_level
      smtpd_tls_auth_only = yes

      Sous Thunderbird, voici mes réglages:

      – Server Name : imap.example.com
      – Port : 993
      – User Name : user@example.com
      – Connexion Security : SSL/TLS
      – Authentification Method : normal password

      Vérifier aussi que les ports utilisés sont bien ouverts dans iptables.

      Reply
  33. Bonjour, le tuto fonctionne plutôt bien mais j’ai un petit problème : lorsque je souhaite relever mes mails avec un client mail, ce dernier me dit qu’il n’arrive pas à trouver les paramètre du compte. Lorsque je vais voir dans les logs (tail -f /var/log/mail.log), l’erreur qui apparait est la suivante :
    imapd-ssl: couriertls: connect: error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher

    Je n’ai par contre aucun problème pour relever mes mails depuis un client web qui est situé sur le même serveur que le serveur mail.
    Pourriez-vous m’aidez svp ?

    Reply
    • essayes de remplacer cette ligne dans ton main.cf

      #smtpd_tls_exclude_ciphers = aNULL, MD5, DES, 3DES, DES-CBC3-SHA, RC4-SHA, AES256-SHA, AES128-SHA
      
      smtpd_tls_mandatory_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-R

      et redemarre postfix

      Reply
  34. Bonjour,

    Ce tuto est vraiment très complet. Cependant je l’ai suivi à la lettre et je rencontre quelques soucis sur mon serveur debian 8.2.
    – J’ai 3 domaines disponibles et autant de comptes mails à installer. Ex : domaine1.com, domaine2.com, domaine3.com. Mon serveur ne porte pas le nom d’un de ces domaine, par contre j’ai le 1er domaine mail.domaine1.com qui pointe sur l’ip de mon serveur (type A). C’est celui là que j’utilise pour la connection via Outlook. Dans le fichier de config de postfix, j’ai bien mis myhostname=domaine1.com. Est ce correct ?
    – Quand je tente une connection pop3 sécurisée sur le port 995, le log postfix me met l’erreur suivante : pop3d-ssl: couriertls: connect: error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher. Je pensais qu’on se connectait en TSL ??
    – Quand je tente une connection imap sécurisée sur le port 993, la connexion se bloque puis j’ai cette erreur: imapd-ssl: Unexpected SSL connection shutdown. Le port est bien ouvert dans iptables, j’ai ces règles :
    iptables -t filter -A INPUT -p tcp –dport 993 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp –dport 993 -j ACCEPT
    Toute aide est appréciée !

    Cordialement

    Reply
    • Bonjour Nicolas,

      1. J’ai désactivé la directive myhostname dans le fichier de configuration Postfix.

      2. L’erreur SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher apparaît lorsque ton client (Outlook) tente d’utiliser un cipher commun à SSL3 et TLS1.0 ou TLS1.1. La seule solution est de n’utiliser que TLS1.2 qui introduit de nouveaux ciphers. Je viens d’éditer la configuration des ciphers de l’étape 9 avec ceux que j’utilise actuellement.

      3. D’après ce que j’ai lu sur le net, cela pourrait être dû à Outlook. Je n’ai pas cette erreur avec Thunderbird (port 993, IMAP, connexion en SSL/TLS, authentification avec mot de passe normal, identifiant avec l’adresse email complète).

      A bientôt,

      Reply
  35. Bonjour !
    Voilà j’ai un petit problème, j’ai fait récemment une mise à jour du serveur (la première depuis longtemps). Auparavant tout fonctionnait très bien : les dns, les mails … Suite à cette mise à jour, j’ai fait une erreur de manip qui m’a forcé à réinstaller tout le serveur. J’ai suivi les tutos à la lettre, comme lors de l’installation précédente mais maintenant lorsque je veux envoyer un mail vers une adresse gmail, je reçois un message comme quoi mon mail n’a pu être délivré et quand je vais dans les logs, j’ai le message suivant :

    Our system has detected that this message does 550-5.7.1 not meet IPv6 sending guidelines regarding PTR records and 550-5.7.1 authentication. Please review 550-5.7.1 https://support.google.com/mail/?p=ipv6_authentication_error for more 550 5.7.1 information.

    Je ne comprends vraiment pas, j’ai tout repris à l’identique mais cela ne semble plus fonctionner. Visiblement il s’agit d’un problème de DNS mais pourquoi arrive-t-il maintenant ?

    Merci d’avance !

    Reply
      • Bonjour, merci pour la réponse, c’était bien ça le problème. Mais maintenant j’en ai un autre : j’arrive parfaitement à relever les mails de mon serveur depuis l’appli mobile Gmail mais lorsque j’utilise le webmail Rainloop, je ne peux pas me connecter et j’ai dans les logs le message suivant :
        imapd-ssl: couriertls: accept: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure.

        Une idée ?

      • Bonjour pbreizh,

        Jette un oeil à ta configuration des ciphers dans :
        – postfix : étape 9
        – courier : étape 14 et 15

        Bien penser à désactiver SSLv2 et SSLv3. Il ne faut utiliser que TLS pour éviter les differentes failles inhérentes à SSL.

        Ton webmail doit également être configuré pour TLS.

      • Bonsoir,
        Je reviens vers vous car je n’ai toujours pas résolu mon problème et ça m’énerve un peu ;) Sur mon smartphone, aucun problème pour relever le courrier, mais lorsque j’utilise le webmail rainloop ça ne veut pas. Lorsque je test la connexion imap, j’obtient l’erreur : “ssl3_check_cert_and_algorithm dh key too small”. Si je force sans tester, je ne peux pas me connecter j’ai alors l’erreur “SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure” dans les logs sur le serveur.

        Une idée ?

        PS : j’ai refait le tuto, j’ai bien ceci comme cipher dans le fichier /etc/courier/imapd-ssl :
        TLS_CIPHER_LIST=”TLSv1:HIGH:!SSLv3:!SSLv2:!LOW:!MEDIUM:!EXP:!NULL:!aNULL@STRENGTH”

      • Bonjour, j’ai enfin fini par touver la solution à mon problème. Je la poste ici pour ceux qui aurait le même soucis. En fait le webmail rainloop considérait que le clé Diffie-Helman était trop courte. Cette clé se situe dans le fichier /etc/courier/dhparams.pem. J’ai donc supprimer ce fichier et utiliser la commande DH_BITS=4096 mkdhparams qui recrée le fichier avec une clé de 4096 bits. Ca prends un peu de temps mais rainloop considère alors que la clé est assez longue.
        Voilà c’était donc un problème vraiment spécifique à ce webmail mais c’était bien la config de Courier qui était à modifier un petit peu.

      • Bonjour pbreizh,

        Je suis content que tu aies trouvé la solution. Debian force depuis peu une clé DH supérieure à 2048 bits pour des raisons de sécurité.

    • Bonjour Soufiane,

      C’est un nom d’exemple, ce peut-être n’importe quel fichier qui te sert pour y mettre tes règles iptables.

      Reply
  36. Bonjour et merci pour tes tuto Matt :) je viens ici car je suis désèspérer aprés 3 tentatives d install en suivant le tuto à la lettre ça ne fonctionne pas sur mon dédié qui est un kimsufi avec ubuntu desktop 14.04 realase ovh.
    1 er probleme mais pas super grave la commande qui permet de relancer tous les servives ne passe pas en mode sudo avec le compte desktop donc ça me met un fail , je suis obliger de passer par webmin et d envoyer une commande shell par le root et ça marche .

    second probleme je n arrive pas à créer l iptable ça me met
    desktop@nsxxx:~$ sudo vi /etc/iptables.test.rules
    desktop@nsxxx:~$ sudo iptables-restore < /etc/iptables.test.rules
    iptables-restore: line 1 failed.

    le 3 eme probleme celui là extrement génant c est que j arrive pas à me connecter avec mon mail l exemple du probleme ipv6 mais j ai essayer en desactivant dans la config en mettant ipv4 j ai aussi mis l option dans le petit fichier option de bind à "4" ça ne change rien j ai ces lignes quand j essaye de me connecter et j ai une ip en ipv4 pas en 6 sur la machine qui se connecte :
    Nov 4 05:54:14 ns330601 imapd: Connection, ip=[::ffff:78.244.xx.xx]
    Nov 4 05:54:14 ns330601 imapd: Disconnected, ip=[::ffff:78.244.xx.xx], time=0
    Nov 4 05:54:14 ns330601 imapd: Connection, ip=[::ffff:78.244.xx.xx]
    Nov 4 05:54:14 ns330601 imapd: Disconnected, ip=[::ffff:78.244.xx.xx], time=0
    Nov 4 05:54:14 ns330601 imapd: Connection, ip=[::ffff:78.244.xx.xx]
    Nov 4 05:54:14 ns330601 imapd: Disconnected, ip=[::ffff:78.244.xx.xx], time=0
    Nov 4 05:54:14 ns330601 imapd: Connection, ip=[::ffff:78.244.xx.xx]
    Nov 4 05:54:14 ns330601 imapd: Disconnected, ip=[::ffff:78.244.xx.xx], time=0
    Nov 4 05:54:15 ns330601 imapd: Connection, ip=[::ffff:78.244.xx.xx]
    Nov 4 05:54:15 ns330601 imapd: Disconnected, ip=[::ffff:78.244.xx.xx], time=0
    Nov 4 05:54:15 ns330601 imapd: Connection, ip=[::ffff:78.244.xx.xx]
    Nov 4 05:54:15 ns330601 imapd: Disconnected, ip=[::ffff:78.244.xx.xx], time=0

    c est au moment ou j essaye de me connecter avec courrier de windows 10.
    voila galère galere besoin d aide d un expert ;)
    Merci

    Reply
  37. Bonjour,

    j’ai suivi le tuto mais lorsque je lance la configuration de Thunderbird dans les logs j’ai l’erreur suivante:

    imapd-ssl: couriertls: connect: error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher

    J’ai vu dans les commentaires que certains avaient les mêmes problèmes, j’ai essayé d’appliquer les correctifs proposés mais rien n’y fait.
    J’ai fait une recherche sur google mais rien de particulier.

    Reply
    • Bonjour Aunisien,

      Cette erreur peut avoir plusieurs causes :
      – vérifier les ciphers
      – vérifier que SSL est bien désactivé. N’utiliser que TLS.
      – ne se connecter / configurer Thunderbird pour TLS et non SSL

      Je te conseille de lancer testssl sur le serveur pour tester les ciphers de ta version d’openssl: https://testssl.sh/

      Reply
      • Merci pour tes réponses, comment sait-on si ssl est bien désactivé car dans le fichiers de config j’ai bien IMAPDSSLSTART=NO

Opinions