Configuration mail linux
Dans ce document nous verrons comment passer progressivement d’une configuration
postfix/dovecot non sécurisée (de Labo) à une version sécurisée utilisable en production.
1. Configuration non sécurisée avec gestion des
comptes en local
Dans un premier temps nous installerons les logiciels postfix et dovecot et comme
d'habitude une mise à jour des programmes disponibles au téléchargement s'impose :
apt-get update
apt-get install postfix dovecot-pop3d
Attention lors de l'installation de postfix il faudra choisir l'option site internet ensuite
on ne suit pas le menu de configuration, puisque nous irons dans les fichiers de
configuration.
Pour postfix nous ne modifierons qu'un fichier :
nano /etc/postfix/[Link]
à la fin du fichier nous modifierons les lignes suivantes (en rouge)
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_$
myhostname = SRV-MAIL
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = [Link], [Link], , localhost
relayhost =
mynetworks = [Link]/8 [Link]/24 [::ffff:[Link]]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
Cohen Julien configuration mail linux 1/11
inet_protocols = ipv4
mydestination désigne les noms de domaines pour lesquels notre serveur de messagerie
accepte les messages.
Mynetworks désigne les réseaux autorisés à utiliser notre serveur smtp sans connexion
sécurisée (on rajoute ici [Link]/24 le réseau interne de notre infrastructure)
Enfin la ligne inet_protocols en ipv4 permet d'éviter d'avoir des erreurs si on n'utilise
pas l'ipv6 sur notre réseau.
Nous voilà avec un serveur smtp, il faudra enfin modifier le fichier le fichier
/etc/dovecot/[Link] pour configurer notre serveur POP et il suffira d'autoriser notre
réseau en dé-commentant la ligne 48 :
login_trusted_networks = [Link]/24
Enfin pour créer les utilisateurs de notre serveur mail nous pourrons lancer la commande
suivante :
adduser toto && adduser toto mail
2. Configuration d’une base de donnée pour gérer les
utilisateurs
Nous ajoutons ici un serveur de base de donnée ainsi que les plugins permettant à nos
Cohen Julien configuration mail linux 2/11
services postfix et dovecot d’y lire les informations :
apt install mariadb-server postfix-mysql dovecot-mysql
2.1. création de la base de donnée et gestion des comptes
Nous nous connectons ici à la base de donnée pour y créer une nouvelle base, un
utilisateur et finalement permettre à cet utilisateur d’accéder à la base de donnée.
Finalement nous créerons une table qui contiendra nos utilisateurs, le nom du domaine
dns, le mot de passe, l’addresse mail et un indicateur nous permettant d’activer le compte
ou non :
mariadb
MariaDB [(none)]> create database mail;
MariaDB [(none)]> create user 'julien'@'localhost' identified by 'poseidon';
MariaDB [(none)]> grant all on mail.* to 'julien'@'localhost';
MariaDB [(none)]> use mail
MariaDB [(none)]> CREATE TABLE users (
- > username VARCHAR(128) NOT NULL,
- > domain VARCHAR(128) NOT NULL,
- > password VARCHAR(64) NOT NULL,
- > mail VARCHAR(64) NOT NULL,
- > active CHAR(1) DEFAULT 'Y' NOT NULL
->);
pour voir les bases de données existantes :
MariaDB [(none)]> show databases ;
pour voir les bases de tables existantes :
MariaDB [(none)]> show tables ;
Pour voir les colonnes d’une table appelée users:
MariaDB [(none)]> describe users ;
pour supprimer une colonne :
MariaDB [(none)]> alter table users drop column active;
Cohen Julien configuration mail linux 3/11
pour ajouter une colonne à la table :
MariaDB [(none)]> alter table users add column active CHAR(1) DEFAULT 'Y' NOT NULL;
pour créer un nouvel utilisateur mail :
MariaDB [(none)]> insert into users (username,domain,password,mail,active) VALUES
('titi','[Link]','poseidon','titi@[Link]','1');
pour supprimer un utilisateur :
delete from users where username='toto';
pour désactiver un utilsateur :
update users set active='0' where username='titi';
pour activer un utilsateur :
update users set active='1' where username='titi';
2.2. Configuration de dovecot
Modifier le fichier de configuration sql :
nano /etc/docevot/[Link]
driver = mysql
connect = host=[Link] dbname=mail user=julien password=poseidon
default_pass_scheme = PLAIN
password_query = \
SELECT username,domain,password \
FROM users WHERE username = '%n' AND domain = '%d' AND active = '1'
user_query = SELECT username, 5999 AS uid, 5999 AS gid FROM users WHERE
username = '%n' AND active = '1'
Ajouter dans le fichier /etc /dovecot /[Link] :
Cohen Julien configuration mail linux 4/11
mail_uid = vmail
mail_gid = vmail
modifier la fin du fichier /etc /dovecot /conf.d /[Link]
...
#!include [Link]
!include [Link]
#!include [Link]
#!include [Link]
#!include [Link]
#!include [Link]
modifier le fichier /etc /dovecot /conf.d /[Link]
…
mail_location = maildir:/var/mail/vmail/%d/%n/Maildir
…
2.3. Configuration de postfix
Ajouter à la fin du fichier [Link] :
nano /etc/postfix/[Link]
mydestination = [Link], , localhost
...
virtual_transport = dovecot
virtual_mailbox_maps =
mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
mysql:/etc/postfix/sql/mysql_virtual_mailbox_domains_maps.cf
virtual_uid_maps = static:5999
virtual_gid_maps = static:5999
virtual_mailbox_base = /var/mail/vmail
Attention on devra ici retirer le domaine de la ligne mydestination (le domaine sera lu
Cohen Julien configuration mail linux 5/11
dans la base de donnée, il ne peut pas apparaître aux deux endroits).
créer les deux fichier dans le repertoire sql :
mkdir /etc/postfix/sql
nano mysql_virtual_mailbox_maps.cf
hosts = [Link]
user = julien
password = poseidon
dbname = mail
query = SELECT mail FROM users WHERE mail='%s' AND active='1'
nano mysql_virtual_domain_mailbox_maps.cf
hosts = [Link]
user = julien
password = poseidon
dbname = mail
query = SELECT distinct domain FROM users WHERE domain='%s' AND active='1'
finalement ajouter à la fin du fichier [Link] :
nano /etc/postfix /[Link] :
...
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
addgroup --gid 5999 vmail
useradd -u 5999 -g 5999 -s /usr/sbin/nologin -d /var/mail/vmail vmail
Cohen Julien configuration mail linux 6/11
adduser vmail mail
mkdir /var/mail/vmail
chown -R vmail:vmail /var/mail/vmail
3. Activation de l’authentification SASL
Nous activerons ici l’authentification sasl de manière à reteindre le relais de mail aux
utilisateurs authentifiés
nano /etc/dovecot/conf.d/[Link]
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
nano /etc/postfix/[Link]
#SASL PARAMETERS
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
broken_sasl_auth_clients = yes
#smtpd_sasl_auth_enable = yes # activer uniquement si le serveur ne reçoit pas les
connexions extérieures (n’est pas le MX accessible depuis internet)
mynetworks = [Link]/8 [::ffff:[Link]]/104 [::1]/128
Dans la partie mynetworks nous supprimons les adresses du réseau local interdisant ainsi
le relais des messages (envoi vers d’autres domaines)
vi /etc/postfix/[Link]
submission inet n - y - - smtpd
Cohen Julien configuration mail linux 7/11
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
# -o smtpd_tls_auth_only=yes
-o smtpd_reject_unlisted_recipient=yes
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
-o smtpd_recipient_restrictions=
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
4. Filtrage anti-virus et anti-spam des emails
Maintenant que la messagerie est sécurisée et fonctionnelle nous pourrons y ajouter un
filtrage des mails avec anti-virus et anti-spam.
apt install amavisd-new clamav clamav-daemon spamassassin
Si l’installation de amavisd-new pose problème modifier le fichier /etc/amavis/conf.d/05-
node_id :
...
$myhostname = "[Link]";
...
Éditer le fichier /etc/amavis/conf.d/15-content_filter_mode
@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \
$bypass_spam_checks_re);
nano /etc/amavis/conf.d/50-user
Cohen Julien configuration mail linux 8/11
$warnvirussender = 1; # (defaults to false (undef))
# Notify spam sender?
$warnspamsender = 1;
# (defaults to false (undef))
# Notify sender of banned files?
$warnbannedsender = 1; # (defaults to false (undef))
# Notify sender of syntactically invalid header containing non-ASCII characters?
$warnbadhsender = 1; # (defaults to false (undef))
# Notify virus (or banned files or bad headers) RECIPIENT?
# (not very useful, but some policies demand it)
$warnvirusrecip = 1; # (defaults to false (undef))
$warnbannedrecip = 1; # (defaults to false (undef))
#$warnbadhrecip = 1; # (defaults to false (undef))
nano /etc/spamassassin/[Link]
rewrite_header Subject [SPAM]
required_score 5.0
nano /etc/postfix/[Link]
[Link]:10025 inet n - y - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=[Link]/8
-o strict_rfc821_envelopes=yes
smtp-amavis unix - - y - 2 smtp
-o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes
Ajouter la ligne suivante au début du fichier
Cohen Julien configuration mail linux 9/11
nano /etc/postfix/[Link]
content_filter = smtp-amavis:[[Link]]:10024
finalement nous ajoutons l’utilisateur clamav au groupe amavis puis nous redémarrons les
différents services :
adduser clamav amavis
systemctl enable spamassassin && systemctl start spamassassin
systemctl enable clamav-daemon && systemctl start clamav-daemon
systemctl start amavis
Si le service clamav-daemon ne démarre pas il est fort probable que le téléchargement
des bases de données de virus ait échoué. Il faudra donc télécharger manuellement les
données sur internet à l’adresse suivante :
[Link]
[Link]
et placer ces fichiers dans le répertoire :
/var/lib/clamav
Pour permettre le test de notre anti-virus/antispam nous effectuerons les tests
suivant en observant les logs du service amavis.
Envoyer un mail avec le contenu suivant pour tester l’anti-spam :
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
Tester l’antivirus à l’aide du fichier suivant à mettre en pièce jointe :
[Link]
5. Synchronisation des boîtes de messagerie entre deux
serveurs
Cohen Julien configuration mail linux 10/11
Pour finir nous pourrons synchroniser les boîtes de messageries de deux serveurs en
utilisant une simple commande de synchronisation placée dans une tâche planifiée cron :
nano /root /[Link]
Doveadm sync -u *.[Link] [Link]
Cette commande permettra de synchroniser toutes les boites de messagerie du serveur
local avec le serveur à l’adresse [Link].
La commande utilisera une connexion ssh (il faudra utiliser une authentification par clé
pour pouvoir automatiser la synchronisation).
Finalement on ajoutera le lancement de ce script toutes les 5 minutes :
crontab -e
…
*/5 * * * * /root/[Link]
Cohen Julien configuration mail linux 11/11