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.
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.net
Code 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.net
Code 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 gamin
Code 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.net
Code language: CSS (css)
Vous pouvez maintenant tester Postfix en vous envoyant un email de test, comme ceci :
mail address@example.com
Code 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)
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.
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.1
Code language: PHP (php)
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.1
Code language: JavaScript (javascript)
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.1
Code language: JavaScript (javascript)
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.1
Code language: JavaScript (javascript)
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 = all
Code 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_maps
Code 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/saslauthd
Code 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=yes
Code 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/saslauthd
Code 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
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)
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_scache
Code 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.key
Code 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-ssl
Code 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)
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; done
Code 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 ACCEPT
Code language: PHP (php)
On applique les nouvelles règles :
iptables-restore < /etc/iptables.test.rules
Code 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:imaps
Code language: CSS (css)
Pour rendre les règles permanentes:
iptables-save > /etc/iptables.up.rules
Code language: JavaScript (javascript)
Puis :
exit
Code 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)
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;;
esac
Code 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;;
esac
Code 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; done
Code 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
- Serveur dédié : installation d’Apache, PHP, MySQL et Webmin
- Serveur dédié : créer la base de données MySQL et importer WordPress
- Serveur dédié : créer et activer un Virtual Host sous Apache
- Serveur dédié : changer les DNS du nom de domaine et le faire pointer vers le serveur
- Serveur dédié : sécurisation des services avec iptables et fail2ban
- Serveur dédié : sécurisation de la couche TCP/IP
- 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
- Serveur dédié : sécuriser Apache 2 avec ModSecurity
- Serveur dédié : CHMOD récursif sur des fichiers ou répertoires en ligne de commande
- Serveur dédié : installer APC comme système de cache et configurer Varnish comme reverse-proxy pour Apache pour améliorer les performances
- Serveur dédié : afficher la véritable IP derrière un reverse-proxy comme Varnish
- Serveur dédié : intégrer SSH à WordPress pour mettre à jour le core, les plugins et les thèmes
- Serveur dédié : installer la dernière version d’APC par SVN
- Serveur dédié : analyse des performances du serveur
- Serveur dédié : mettre à jour le noyau Debian de la Kimsufi
- Serveur dédié : sauvegarde automatique des fichiers avec Backup Manager sur le serveur de sauvegarde OVH
- Serveur dédié : configurer la limite mémoire pour PHP et Suhosin
- Bash : supprimer tous les fichiers et sous-répertoires d’un répertoire
- Serveur dédié : impossible de se connecter à un port distant
- Rsync: rapatrier les fichiers du serveur à la maison
- Bash : réparer les tables MySQL en cas de crash
- Serveur dédié : création d’une seedbox avec Transmission
- Serveur dédié : des paquets LAMP à jour sous Debian
- Serveur dédié : mise à jour vers Debian 7 Wheezy
- Serveur dédié : activer X11 forwarding pour SSH
- Serveur dédié : optimiser toutes les images JPG et PNG avec OptiPNG et JpegOptim
- Postfix : résoudre l’erreur “fatal: www-data(33): message file too big”
- Serveur dédié : mise en place de l’IPv6
- WordPress : accorder les bonnes permissions aux fichiers et dossiers avec chown et chmod
- WordPress : héberger les images sur un sous-domaine
- Serveur dédié : ajouter l’authentification SPF, Sender-ID et DKIM à Postfix et Bind9 avec opendkim
- Apache : lorsque le domaine seul (sans WWW) renvoie une erreur 403
- Serveur dédié : sécuriser Apache avec HTTPS (HTTP avec la couche TLS/SSL) en Perfect Forward Secrecy
- Serveur dédié : passer WordPress en HTTPS (TLS/SSL)
- Serveur dédié : configurer Webmin en TLS avec un certificat SSL
- Serveur dédié : configurer Transmission pour accéder au WebUI via TLS-SSL
- Serveur dédié : installer et configurer Varnish 4
- Serveur dédié : passage au mod FastCGI et PHP-FPM avec Apache MPM Worker
- Récupérer un serveur Kimsufi après un plantage de kernel avec le mode rescue OVH
- Serveur dédié : configurer Postfix et Courier pour utiliser TLS-SSL en Perfect Forward Secrecy
- Serveur dédié : retirer Varnish, devenu inutile avec HTTPS
- Serveur dédié : installer la dernière version d’OpenSSL sous Debian
- Serveur dédié : activer l’IP canonique du serveur sous Apache
- Serveur dédié : mise à jour vers PHP 5.6
- MySQL : convertir les tables MyISAM au format InnoDB
- Serveur dédié : optimiser toutes les images GIF avec GIFsicle
- Serveur dédié : migration de MySQL vers MariaDB
- BASH : lister, bloquer et débloquer des adresses IP avec iptables
- Serveur dédié : produire une meilleure réserve d’entropie avec haveged
- Serveur dédié : mettre en place DNSSEC pour sécuriser les DNS du domaine
- Serveur dédié : mise en place du protocole DANE
- 8 règles d’or pour bien déployer DNSSEC et DANE
- Serveur dédié : installer PHP7 FPM avec FastCGI sous Debian
- Serveur dédié : optimiser la couche TCP
- Fail2Ban: protéger Postfix contre les attaques DoS de types AUTH, UNKNOWN et EHLO
- Serveur dédié : mettre à jour Apache pour HTTP/2
- Serveur dédié : ajouter le domaine à la liste HSTS preload
- Serveur dédié : ajouter l’authentification DMARC à Postfix et BIND
- Serveur dédié : à la recherche de l’inode perdue ou comment résoudre le problème “no space left on device”
- 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.
Matt, est-ce nécessaire de configurer bind avant postfix ?
je ne pense pas
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 :
Je reviendrai sur la config bind dans un autre article, notamment pour l’ajout du SPF.
Salut Matt
j’aurai quelques questions pour mon serveur.
Salut Fred,
Tu peux me contacter via le formulaire, je te répondrai par mail.
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 ?
Cordialement
Zicklon
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’.
Merci pour ta réponse ;)
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
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 ?
Salut,
Oui, c’est tout!
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 :qui permet d’éviter le relay mail. J’ai également retiré la ligne :
qui ne s’adressait qu’aux clients emails obsolètes (vieilles versions d’Outlook et Outlook Express).
Mise à jour de l’article: ajout de l’étape 13.
Merci toi super tuto j’ai juste un problème, dans les logs j’ai
J’ai refait le tuto mais toujours la même erreur
Bonjour,
Dans l’étape 10, lorsque tu édites le fichier /etc/courier/authmysqlrc, vérifie bien que
soit sur une seule ligne.
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
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’
Merci imars !
Mise à jour de l’article : activation du SSL pour le SMTP.
Ancien code :
à remplacer par:
Merci à imars pour la correction.
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 ?
Bonjour Julien,
Dans les options, tu as :
il faut préciser l’adresse complète de ton serveur :
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.
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
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.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 ;-)
Salut imars,
Je n’ai pas installé SpamAssassin sur le serveur mais si devais mettre une solution antispam/antivirus etc, je me tournerais vers Amavis qui a l’air plus complet : http://www.amavis.org/
J’ai utilisé se tuto qui marche très bien pour Amavis + ClamAV + SpamAssasin
http://infos-reseau.com/postfix-amavis-couple-avec-spamassassin-et-clamav/
Il me reste plus qu’a trouver comment mettre les spams dans Junk au lieu qu’ils soient supprimé.
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 ?
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, …
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.
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
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
Ajout de l’étape 15 : IMAPS et POP3S.
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 ?
Salut maxidebiax,
Quel est ton message d’erreur exact? Quel client utilises-tu?
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.
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 ?
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.
Bonjour, j’ai bien suivi le tutoriel et cela marche très bien.
Cependant pourquoi mes mails envoyé depuis mon addresse toto@exemple.fr ver titi@gmail.com arrive dans mes spams et non dans ma boite de récept ?
Merci
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 :-)
Pour la commande SQL, serait-elle celle ci :
INSERT INTO `mail`.`forwards` (`source`, `destination`) VALUES (‘toto@exemple.com’, ‘titi@gmail.com’);
?
Oui, exactement !
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.
Merci pour la précision imars :)
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
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!
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”
Bonjour,
Que pensez-vous d’ajouter la ligne suivante :
dans le fichier main.cf de Postfix à cause de la vulnérabilité Poodle ?
Par avance, merci !
Merci pour le rappel John ! :)
Je viens d’éditer l’article et plus particulièrement l’étape 9 pour y ajouter quelques directives pour le chiffrement des connexions.
Je travaille sur un article qui détaille la sécurisation de Postfix avec un certificat SSL payant, il sera publié dans quelques jours.
Il faudrait éventuellement protéger IMAPS contre Poodle également en partie 15. Voir la partie IMAP sur http://askubuntu.com/questions/537196/how-do-i-patch-workaround-sslv3-poodle-vulnerability-cve-2014-3566
Si vous avez un bug de démarrage de courier-imapd-ssl suite à ce changement voir ce lien
Bonjour xav,
Merci pour le rappel :)
J’ai ajouté les modifications dans l’étape 15. On y reviendra dans l’article de demain.
Ah super!
Et pour ce $virtual_mailbox_limit_maps, est-ce que tu rencontres le problème également?
Merci pour tout et bonne continuation.
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 :3. ajouter dans main.cf :
4. éditer
/etc/courier/authmysqlrc
:et ajouter cette ligne:
5. Appliquer le patch VDA pour activer le quota sous Postfix.
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 ?
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.
Merci beaucoup, Matt !
Cela dit, j’ai dû remettre comme ceci :
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 ! :-)
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.
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 delibfam0
corrige le problème.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
Bonsoir Usu,
Est-il possible qu’il reste des résidus de ton ancienne installation?
Chez moi, dans
main.cf
, j’ai bien :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 :
Tu peux aussi purger le paquet sendmail et rebooter et vérifier que le port 25 est bien géré par postfix avec :
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!
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:
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 :
Voila. J’espère ne pas trop t’embêter avec tout cela >_<"
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
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!
C’est délibérer dans le cadre de la mise à jour du tuto de ne pas mettre en place un antivirus ainsi qu’un antispam ?
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
Salut imars,
Effectivement, quelques paquets semblent avoir disparu:
–
postfix-tls
est maintenant intégré àpostfix
par défaut.–
mailx
est géré parheirloom-mailx
chez moi.Je mets à jour l’article avec les changements, merci imars !
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) :
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
Bonjour westavel,
Quels sont tes paramètres Thunderbird?
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 !
C’était ma prochaine piste : iptables.
Content que ce soit résolu :)
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 ?
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).
Merci :)
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.
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.
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 ?
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 :
et
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!
Bonjour j’ai suivi à la lettre le tuto mais je rencontre des erreurs lors de la connexion via icedove.
Merci de votre aide
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 :
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..
Ensuite la connexion à courier échoue
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
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 :Sous Thunderbird, voici mes réglages:
Vérifier aussi que les ports utilisés sont bien ouverts dans iptables.
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 ?
essayes de remplacer cette ligne dans ton main.cf
et redemarre postfix
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
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,
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 !
Bonjour pbreizh,
Vérifie que tu as bien renseigné tous les champs DNS lors de la configuration d’IPv6, notamment le PTR (reverse).
Pense également à ajouter l’authentification SPF, Sender-ID et DKIM à Postfix et Bind9 avec opendkim pour que les messages ne se retrouvent comme spams.
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é.
Salut
Merci pour ce tuto, j’ai une question je me trouve pas le fichier /etc/iptables.test.rules
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.
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
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.
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/
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