Serveur de messagerie · 22 min read · Sep 25, 2025
Utilisateurs et domaines virtuels avec Postfix, Courier, MySQL et SquirrelMail (Ubuntu 13.10)
Ce tutoriel est protégé par le droit d’auteur (c) 2014 par Falko Timme & Srijan Kishore. Il est dérivé d’un tutoriel de Christoph Haas que vous pouvez trouver sur http://workaround.org. Vous êtes libre d’utiliser ce tutoriel sous la licence Creative Commons 2.5 ou toute version ultérieure.
Ce document décrit comment installer un serveur de messagerie Postfix basé sur des utilisateurs et des domaines virtuels, c’est-à-dire des utilisateurs et des domaines qui se trouvent dans une base de données MySQL. Je vais également démontrer l’installation et la configuration de Courier (Courier-POP3, Courier-IMAP), afin que Courier puisse s’authentifier contre la même base de données MySQL utilisée par Postfix.
Le serveur Postfix résultant est capable de SMTP-AUTH et TLS et quota (le quota n’est pas intégré par défaut dans Postfix, je vais montrer comment patcher votre Postfix en conséquence). Les mots de passe sont stockés sous forme chiffrée dans la base de données (la plupart des documents que j’ai trouvés traitaient des mots de passe en texte clair, ce qui représente un risque de sécurité). En plus de cela, ce tutoriel couvre l’installation de Amavisd, SpamAssassin et ClamAV afin que les e-mails soient scannés pour détecter le spam et les virus. Je vais également montrer comment installer SquirrelMail comme interface webmail afin que les utilisateurs puissent lire et envoyer des e-mails et changer leurs mots de passe.
L’avantage d’une telle configuration “virtuelle” (utilisateurs et domaines virtuels dans une base de données MySQL) est qu’elle est beaucoup plus performante qu’une configuration basée sur de “vrais” utilisateurs système. Avec cette configuration virtuelle, votre serveur de messagerie peut gérer des milliers de domaines et d’utilisateurs. De plus, il est plus facile à administrer car vous n’avez qu’à vous occuper de la base de données MySQL lorsque vous ajoutez de nouveaux utilisateurs/domaines ou modifiez des existants. Plus de commandes postmap pour créer des fichiers db, plus de rechargement de Postfix, etc. Pour l’administration de la base de données MySQL, vous pouvez utiliser des outils basés sur le web comme phpMyAdmin qui seront également installés dans ce tutoriel. Le troisième avantage est que les utilisateurs ont une adresse e-mail comme nom d’utilisateur (au lieu d’un nom d’utilisateur + une adresse e-mail), ce qui est plus facile à comprendre et à retenir.
Ce tutoriel est destiné à être un guide pratique ; il ne couvre pas les bases théoriques. Elles sont traitées dans de nombreux autres documents sur le web.
Ce document est fourni sans garantie d’aucune sorte ! Je tiens à dire que ce n’est pas la seule façon de configurer un tel système. Il existe de nombreuses façons d’atteindre cet objectif, mais c’est la méthode que je choisis. Je ne donne aucune garantie que cela fonctionnera pour vous !
1 Remarque préliminaire
Ce tutoriel est basé sur Ubuntu 13.10 Server (Saucy Salamander), donc vous devriez configurer une installation de serveur Ubuntu 13.10 de base avant de continuer avec ce tutoriel. Le système doit avoir une adresse IP statique. J’utilise 192.168.0.100 comme mon adresse IP dans ce tutoriel et server1.example.com comme nom d’hôte.
Assurez-vous que vous êtes connecté en tant que root (tapez
sudo supour devenir root), car nous devons exécuter toutes les étapes de ce tutoriel en tant qu’utilisateur root.
Il est très important que vous fassiez de /bin/sh un lien symbolique vers /bin/bash…
dpkg-reconfigure dashUtiliser dash comme shell système par défaut (/bin/sh) ? <– Non
… et que vous désactiviez AppArmor :
/etc/init.d/apparmor stop
update-rc.d -f apparmor remove
apt-get remove apparmor apparmor-utils2 Installer Postfix, Courier, Saslauthd, MySQL, phpMyAdmin
Pour installer Postfix, Courier, Saslauthd, MySQL et phpMyAdmin, nous exécutons simplement
apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpassOn vous posera quelques questions :
Nouveau mot de passe pour l’utilisateur MySQL “root” : <– votremotdepasse Répétez le mot de passe pour l’utilisateur MySQL “root” : <– votremotdepasse Créer des répertoires pour l’administration web ? <– Non Type général de configuration de messagerie : <– Internet Site Nom de messagerie système : <– server1.example.com Certificat SSL requis <– Ok Serveur web à reconfigurer automatiquement : <– apache2 Configurer la base de données pour phpmyadmin avec dbconfig-common ? <– Non
3 Appliquer le patch de quota à Postfix
Nous devons obtenir les sources de Postfix, les patcher avec le patch de quota, construire de nouveaux paquets Postfix.deb et installer ces paquets .deb :
apt-get build-dep postfixcd /usr/src
apt-get source postfix(Assurez-vous d’utiliser la version correcte de Postfix dans les commandes suivantes. J’ai installé Postfix 2.10.2. Vous pouvez découvrir votre version de Postfix en exécutant
postconf -d | grep mail_versionLa sortie devrait ressembler à ceci :
root@server1:/usr/src# postconf -d | grep mail_version
mail_version = 2.10.2
milter_macro_v = $mail_name $mail_version
root@server1:/usr/src#wget http://vda.sourceforge.net/VDA/postfix-vda-v13-2.10.0.patch
cd postfix-2.10.2
patch -p1 < ../postfix-vda-v13-2.10.0.patchEnsuite, ouvrez debian/rules et changez DEB_BUILD_HARDENING de 1 à 0 :
vi debian/rules| [...] export DEB_BUILD_HARDENING=0 [...] |
Si vous ne faites pas cela, votre construction échouera avec les messages d’erreur suivants :
maildir.c: In function âdeliver_maildirâ:
maildir.c:974:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:977:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:983:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:986:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c: In function âsql2fileâ:
maildir.c:404:25: warning: ignoring return value of âreadâ, declared with attribute warn_unused_result [-Wunused-result]
maildir.c:417:26: warning: ignoring return value of âwriteâ, declared with attribute warn_unused_result [-Wunused-result]
cc1: some warnings being treated as errors
make: * [maildir.o] Error 1
make: Leaving directory `/usr/src/postfix-2.10.2/src/virtual'
make[1]: * [update] Error 1
make[1]: Leaving directory `/usr/src/postfix-2.10.2'
make: *** [build] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2
root@server1:/usr/src/postfix-2.10.2#Maintenant, nous pouvons construire les nouveaux paquets Postfix.deb :
dpkg-buildpackageMaintenant, nous montons d’un répertoire, c’est là que les nouveaux paquets .deb ont été créés :
cd ..La commande
ls -lvous montre les paquets disponibles :
root@server1:/usr/src# ls -l
total 7124
drwxr-xr-x 18 root root 4096 Apr 16 04:29 postfix-2.10.2
-rw-r--r-- 1 root root 48594 Apr 16 04:29 postfix-cdb_2.10.2-1_amd64.deb
-rw-r--r-- 1 root root 161974 Apr 16 04:29 postfix-dev_2.10.2-1_all.deb
-rw-r--r-- 1 root root 1094344 Apr 16 04:29 postfix-doc_2.10.2-1_all.deb
-rw-r--r-- 1 root root 57342 Apr 16 04:29 postfix-ldap_2.10.2-1_amd64.deb
-rw-r--r-- 1 root root 50554 Apr 16 04:29 postfix-mysql_2.10.2-1_amd64.deb
-rw-r--r-- 1 root root 50804 Apr 16 04:29 postfix-pcre_2.10.2-1_amd64.deb
-rw-r--r-- 1 root root 50756 Apr 16 04:29 postfix-pgsql_2.10.2-1_amd64.deb
-rw-r--r-- 1 root root 55701 Jun 7 2013 postfix-vda-v13-2.10.0.patch
-rw-r--r-- 1 root root 282175 Apr 16 04:28 postfix_2.10.2-1.diff.gz
-rw-r--r-- 1 root root 1522 Apr 16 04:28 postfix_2.10.2-1.dsc
-rw-r--r-- 1 root root 3899 Apr 16 04:29 postfix_2.10.2-1_amd64.changes
-rw-r--r-- 1 root root 1542368 Apr 16 04:29 postfix_2.10.2-1_amd64.deb
-rw-r--r-- 1 root root 3828326 Sep 12 2013 postfix_2.10.2.orig.tar.gzChoisissez les paquets postfix et postfix-mysql et installez-les comme ceci :
dpkg -i postfix_2.10.2-1_amd64.deb postfix-mysql_2.10.2-1_amd64.deb4 Créer la base de données MySQL pour Postfix/Courier
Maintenant, nous créons une base de données appelée mail :
mysqladmin -u root -p create mailOn vous posera cette question :
Entrez le mot de passe : <– votremotdepasse
Ensuite, nous allons dans le shell MySQL :
mysql -u root -pDans le shell MySQL, nous créons l’utilisateur mail_admin avec le mot de passe mail_admin_password (remplacez-le par votre propre mot de passe) qui a les privilèges SELECT,INSERT,UPDATE,DELETE sur la base de données mail. Cet utilisateur sera utilisé par Postfix et Courier pour se connecter à la base de données mail :
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'mail_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost.localdomain' IDENTIFIED BY 'mail_admin_password';
FLUSH PRIVILEGES;Toujours dans le shell MySQL, nous créons les tables nécessaires pour Postfix et Courier :
USE mail;CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
ENGINE=MyISAM;CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
ENGINE=MyISAM;CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT '10485760',
PRIMARY KEY (email)
) ENGINE=MyISAM;CREATE TABLE transport (
domain varchar(128) NOT NULL default '',
transport varchar(128) NOT NULL default '',
UNIQUE KEY domain (domain)
) ENGINE=MyISAM;quit;Comme vous l’avez peut-être remarqué, avec la commande quit; nous avons quitté le shell MySQL et sommes de retour dans le shell Linux.
La table domains stockera chaque domaine virtuel pour lequel Postfix doit recevoir des e-mails (par exemple, example.com).
| domain |
| example.com |
La table forwardings est utilisée pour aliaser une adresse e-mail à une autre, par exemple, transférer les e-mails pour [email protected] à [email protected].
| source | destination |
| [email protected] | [email protected] |
La table users stocke tous les utilisateurs virtuels (c’est-à-dire les adresses e-mail, car l’adresse e-mail et le nom d’utilisateur sont les mêmes) et les mots de passe (sous forme chiffrée !) et une valeur de quota pour chaque boîte aux lettres (dans cet exemple, la valeur par défaut est 10485760 octets, ce qui signifie 10 Mo).
| password | quota | |
| [email protected] | No9.E4skNvGa. (“secret” sous forme chiffrée) | 10485760 |
La table transport est optionnelle, elle est destinée aux utilisateurs avancés. Elle permet de transférer des e-mails pour des utilisateurs uniques, des domaines entiers ou tous les e-mails vers un autre serveur. Par exemple,
| domain | transport |
| example.com | smtp:[1.2.3.4] |
transférerait tous les e-mails pour example.com via le protocole smtp vers le serveur avec l’adresse IP 1.2.3.4 (les crochets [] signifient “ne pas effectuer de recherche du record MX DNS” (ce qui a du sens pour les adresses IP…). Si vous utilisez un nom de domaine entièrement qualifié (FQDN) à la place, vous ne devriez pas utiliser les crochets.).
Au fait, (je suppose que l’adresse IP de votre système de serveur de messagerie est 192.168.0.100) vous pouvez accéder à phpMyAdmin via http://192.168.0.100/phpmyadmin/ dans un navigateur et vous connecter en tant que mail_admin. Ensuite, vous pouvez jeter un œil à la base de données. Plus tard, vous pouvez utiliser phpMyAdmin pour administrer votre serveur de messagerie.
5 Configurer Postfix
Maintenant, nous devons dire à Postfix où il peut trouver toutes les informations dans la base de données. Pour cela, nous devons créer six fichiers texte. Vous remarquerez que je dis à Postfix de se connecter à MySQL à l’adresse IP 127.0.0.1 au lieu de localhost. C’est parce que Postfix fonctionne dans une prison chroot et n’a pas accès au socket MySQL auquel il essaierait de se connecter si je disais à Postfix d’utiliser localhost. Si j’utilise 127.0.0.1, Postfix utilise le réseau TCP pour se connecter à MySQL, ce qui n’est pas un problème même dans une prison chroot (l’alternative serait de déplacer le socket MySQL dans la prison chroot, ce qui entraîne d’autres problèmes).
Veuillez vous assurer que /etc/mysql/my.cnf contient la ligne suivante :
vi /etc/mysql/my.cnf| [...] # Au lieu de skip-networking, le défaut est maintenant d'écouter uniquement sur # localhost, ce qui est plus compatible et n'est pas moins sécurisé. bind-address = 127.0.0.1 [...] |
Si vous avez dû modifier /etc/mysql/my.cnf, veuillez redémarrer MySQL maintenant :
/etc/init.d/mysql restartExécutez
netstat -tap | grep mysqlpour vous assurer que MySQL écoute sur 127.0.0.1 (localhost.localdomain) :
root@server1:~# netstat -tap | grep mysql
tcp 0 0 localhost.localdo:mysql *:* LISTEN 24970/mysqld
root@server1:~#Maintenant, créons nos six fichiers texte.
vi /etc/postfix/mysql-virtual_domains.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT domain AS virtual FROM domains WHERE domain='%s' hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_forwardings.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT destination FROM forwardings WHERE source='%s' hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_mailboxes.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s' hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_email2email.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT email FROM users WHERE email='%s' hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_transports.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT transport FROM transport WHERE domain='%s' hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_mailbox_limit_maps.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT quota FROM users WHERE email='%s' hosts = 127.0.0.1 |
Ensuite, changez les permissions et le groupe de ces fichiers :
chmod o= /etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cfMaintenant, nous créons un utilisateur et un groupe appelés vmail avec le répertoire personnel /home/vmail. C’est là que toutes les boîtes aux lettres seront stockées.
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -mEnsuite, nous faisons quelques configurations de Postfix. Assurez-vous de remplacer server1.example.com par un FQDN valide, sinon votre Postfix pourrait ne pas fonctionner correctement !
postconf -e 'myhostname = server1.example.com'
postconf -e 'mydestination = server1.example.com, localhost, localhost.localdomain'
postconf -e 'mynetworks = 127.0.0.0/8'
postconf -e 'virtual_alias_domains ='
postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'
postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'
postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'
postconf -e 'virtual_mailbox_base = /home/vmail'
postconf -e 'virtual_uid_maps = static:5000'
postconf -e 'virtual_gid_maps = static:5000'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_authenticated_header = yes'
postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtpd_tls_cert_file = /etc/postfix/smtpd.cert'
postconf -e 'smtpd_tls_key_file = /etc/postfix/smtpd.key'
postconf -e 'transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf'
postconf -e 'virtual_maildir_extended = yes'
postconf -e 'virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf'
postconf -e 'virtual_mailbox_limit_override = yes'
postconf -e 'virtual_maildir_limit_message = "L'utilisateur que vous essayez d'atteindre est en quota."'
postconf -e 'virtual_overquota_bounce = yes'
postconf -e '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'Ensuite, nous créons le certificat SSL nécessaire pour TLS :
cd /etc/postfix
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509Nom du pays (code à 2 lettres) [AU] : <– Entrez le nom de votre pays (par exemple, “DE”).
Nom de l’État ou de la province (nom complet) [Some-State] : <– Entrez le nom de votre État ou province.
Nom de la localité (par exemple, ville) [] : <– Entrez votre ville.
Nom de l’organisation (par exemple, entreprise) [Internet Widgits Pty Ltd] : <– Entrez le nom de votre organisation (par exemple, le nom de votre entreprise).
Nom de l’unité organisationnelle (par exemple, section) [] : <– Entrez le nom de votre unité organisationnelle (par exemple, “Service informatique”).
Nom commun (par exemple, VOTRE nom) [] : <– Entrez le nom de domaine entièrement qualifié du système (par exemple, “server1.example.com”).
Adresse e-mail [] : <– Entrez votre adresse e-mail.
Ensuite, changez les permissions de smtpd.key :
chmod o= /etc/postfix/smtpd.key6 Configurer Saslauthd
D’abord, exécutez
mkdir -p /var/spool/postfix/var/run/saslauthdEnsuite, éditez /etc/default/saslauthd. Mettez START sur yes et changez la ligne OPTIONS=”-c -m /var/run/saslauthd” en OPTIONS=”-c -m /var/spool/postfix/var/run/saslauthd -r” :
vi /etc/default/saslauthd| # # Paramètres pour le démon saslauthd # Veuillez lire /usr/share/doc/sasl2-bin/README.Debian pour plus de détails. # # Saslauthd doit-il s'exécuter automatiquement au démarrage ? (par défaut : non) START=yes # Description de cette instance de saslauthd. Recommandé. # (suggestion : SASL Authentication Daemon) DESC="SASL Authentication Daemon" # Nom court de cette instance de saslauthd. Fortement recommandé. # (suggestion : saslauthd) NAME="saslauthd" # Quels mécanismes d'authentification saslauthd doit-il utiliser ? (par défaut : pam) # # Options disponibles dans ce paquet Debian : # getpwent -- utiliser la fonction de bibliothèque getpwent() # kerberos5 -- utiliser Kerberos 5 # pam -- utiliser PAM # rimap -- utiliser un serveur IMAP distant # shadow -- utiliser le fichier de mot de passe local shadow # sasldb -- utiliser le fichier de base de données sasldb local # ldap -- utiliser LDAP (la configuration est dans /etc/saslauthd.conf) # # Une seule option peut être utilisée à la fois. Voir la page de manuel de saslauthd # pour plus d'informations. # # Exemple : MECHANISMS="pam" MECHANISMS="pam" # Options supplémentaires pour ce mécanisme. (par défaut : aucune) # Voir la page de manuel de saslauthd pour des informations sur les options spécifiques au mécanisme. MECH_OPTIONS="" # Combien de processus saslauthd devons-nous exécuter ? (par défaut : 5) # Une valeur de 0 créera un nouveau processus pour chaque connexion. THREADS=5 # Autres options (par défaut : -c -m /var/run/saslauthd) # Remarque : VOUS DEVEZ spécifier l'option -m ou saslauthd ne s'exécutera pas ! # # AVERTISSEMENT : NE PAS SPÉCIFIER L'OPTION -d. # L'option -d fera en sorte que saslauthd s'exécute au premier plan au lieu de comme # un démon. Cela EMPÊCHERA VOTRE SYSTÈME DE DÉMARRER CORRECTEMENT. Si vous souhaitez # exécuter saslauthd en mode débogage, veuillez l'exécuter manuellement pour être en sécurité. # # Voir /usr/share/doc/sasl2-bin/README.Debian pour des informations spécifiques à Debian. # Voir la page de manuel de saslauthd et la sortie de 'saslauthd -h' pour des informations générales # sur ces options. # # Exemple pour les utilisateurs Postfix chroot : "-c -m /var/spool/postfix/var/run/saslauthd" # Exemple pour les utilisateurs Postfix non chroot : "-c -m /var/run/saslauthd" # # Pour savoir si votre Postfix fonctionne en chroot, vérifiez /etc/postfix/master.cf. # S'il a la ligne "smtp inet n - y - - smtpd" ou "smtp inet n - - - - smtpd" # alors votre Postfix fonctionne dans une prison chroot. # S'il a la ligne "smtp inet n - n - - smtpd" alors votre Postfix NE fonctionne PAS # dans une prison chroot. #OPTIONS="-c -m /var/run/saslauthd" OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r" |
Ensuite, créez le fichier /etc/pam.d/smtp. Il doit contenir uniquement les deux lignes suivantes (assurez-vous de remplir vos détails de base de données corrects) :
vi /etc/pam.d/smtp| auth required pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1 account sufficient pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1 |
Ensuite, créez le fichier /etc/postfix/sasl/smtpd.conf. Il doit ressembler à ceci :
vi /etc/postfix/sasl/smtpd.conf| pwcheck_method: saslauthd mech_list: plain login allow_plaintext: true auxprop_plugin: sql sql_engine: mysql sql_hostnames: 127.0.0.1 sql_user: mail_admin sql_passwd: mail_admin_password sql_database: mail sql_select: select password from users where email = '%u@%r' |
Ensuite, ajoutez l’utilisateur postfix au groupe sasl (cela garantit que Postfix a la permission d’accéder à saslauthd) :
adduser postfix saslEnsuite, redémarrez Postfix et Saslauthd :
/etc/init.d/postfix restart
/etc/init.d/saslauthd restart7 Configurer Courier
Maintenant, nous devons dire à Courier qu’il doit s’authentifier contre notre base de données MySQL. D’abord, éditez /etc/courier/authdaemonrc et changez la valeur de authmodulelist pour qu’elle se lise :
vi /etc/courier/authdaemonrc| [...] authmodulelist="authmysql" [...] |
Ensuite, faites une sauvegarde de /etc/courier/authmysqlrc et videz l’ancien fichier :
cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig
cat /dev/null > /etc/courier/authmysqlrcEnsuite, ouvrez /etc/courier/authmysqlrc et mettez les lignes suivantes :
vi /etc/courier/authmysqlrc| MYSQL_SERVER localhost MYSQL_USERNAME mail_admin MYSQL_PASSWORD mail_admin_password MYSQL_PORT 0 MYSQL_DATABASE mail MYSQL_USER_TABLE users MYSQL_CRYPT_PWFIELD password #MYSQL_CLEAR_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),'/') #MYSQL_NAME_FIELD MYSQL_QUOTA_FIELD quota |
Lors de l’installation, les certificats SSL pour IMAP-SSL et POP3-SSL sont créés avec le nom d’hôte localhost. Pour changer cela en le nom d’hôte correct (server1.example.com dans ce tutoriel), supprimez les certificats…
cd /etc/courier
rm -f /etc/courier/imapd.pem
rm -f /etc/courier/pop3d.pem… et modifiez les deux fichiers suivants ; remplacez CN=localhost par CN=server1.example.com (vous pouvez également modifier les autres valeurs, si nécessaire) :
vi /etc/courier/imapd.cnf| [...] CN=server1.example.com [...] |
vi /etc/courier/pop3d.cnf| [...] CN=server1.example.com [...] |
Ensuite, recréez les certificats…
mkimapdcert
mkpop3dcert… et redémarrez Courier :
/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-pop restart
/etc/init.d/courier-pop-ssl restartEn exécutant
telnet localhost pop3vous pouvez voir si votre serveur POP3 fonctionne correctement. Il devrait renvoyer +OK Hello there. (Tapez quit pour revenir au shell Linux.)
root@server1:/etc/courier# telnet localhost pop3
Trying ::1…
Connected to localhost.localdomain.
Escape character is ‘^]’.
+OK Hello there.
<– quit
+OK Better luck next time.
Connection closed by foreign host.
root@server1:/etc/courier#
8 Modifier /etc/aliases
Maintenant, nous devrions ouvrir /etc/aliases. Assurez-vous que postmaster pointe vers root et root vers votre propre nom d’utilisateur ou votre adresse e-mail, par exemple comme ceci :
vi /etc/aliases| [...] postmaster: root root: [email protected] [...] |
ou comme ceci (si administrateur est votre propre nom d’utilisateur) :
| [...] postmaster: root root: administrator [...] |
Chaque fois que vous modifiez /etc/aliases, vous devez exécuter
newaliasesensuite et redémarrer Postfix :
/etc/init.d/postfix restart9 Installer amavisd-new, SpamAssassin et ClamAV
Pour installer amavisd-new, spamassassin et clamav, exécutez la commande suivante :
apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop paxEnsuite, nous devons configurer amavisd-new. La configuration est divisée en plusieurs fichiers qui se trouvent dans le répertoire /etc/amavis/conf.d. Jetez un œil à chacun d’eux pour vous familiariser avec la configuration. La plupart des paramètres sont corrects, cependant, nous devons modifier trois fichiers :
D’abord, nous devons activer ClamAV et SpamAssassin dans /etc/amavis/conf.d/15-content_filter_mode en décommentant les lignes @bypass_virus_checks_maps et @bypass_spam_checks_maps :
vi /etc/amavis/conf.d/15-content_filter_modeLe fichier devrait ressembler à ceci :
| use strict; # Vous pouvez modifier ce fichier pour réactiver le contrôle des SPAM via spamassassin # et pour réactiver le contrôle antivirus. # # Mode de contrôle antivirus par défaut # Veuillez noter que le contrôle antivirus est DÉSACTIVÉ par # défaut. # Si vous souhaitez l'activer, veuillez décommenter les lignes suivantes : @bypass_virus_checks_maps = ( \\%bypass_virus_checks, \\@bypass_virus_checks_acl, \\$bypass_virus_checks_re); # # Mode de contrôle SPAM par défaut # Veuillez noter que le contrôle anti-spam est DÉSACTIVÉ par # défaut. # Si vous souhaitez l'activer, veuillez décommenter les lignes suivantes : @bypass_spam_checks_maps = ( \\%bypass_spam_checks, \\@bypass_spam_checks_acl, \\$bypass_spam_checks_re); 1; # assurez-vous d'un retour défini |
Et ensuite, vous devriez jeter un œil aux paramètres de spam et aux actions pour les e-mails de spam/virus dans /etc/amavis/conf.d/20-debian_defaults. Il n’est pas nécessaire de changer quoi que ce soit si les paramètres par défaut vous conviennent. Le fichier contient de nombreuses explications, donc il n’est pas nécessaire d’expliquer les paramètres ici :
vi /etc/amavis/conf.d/20-debian_defaults| [...] $QUARANTINEDIR = "$MYHOME/virusmails"; $quarantine_subdir_levels = 1; # activer le hachage du répertoire de quarantaine $log_recip_templ = undef; # désactiver les entrées de journal de niveau 0 par destinataire $DO_SYSLOG = 1; # journaliser via syslogd (préféré) $syslog_ident = 'amavis'; # balise d'identification syslog, préfixée à tous les messages $syslog_facility = 'mail'; $syslog_priority = 'debug'; # passez à info pour supprimer la sortie de débogage, etc $enable_db = 1; # activer l'utilisation de BerkeleyDB/libdb (SNMP et nanny) $enable_global_cache = 1; # activer l'utilisation du cache basé sur libdb si $enable_db=1 $inet_socket_port = 10024; # socket d'écoute par défaut $sa_spam_subject_tag = '*SPAM* '; $sa_tag_level_deflt = 2.0; # ajouter des en-têtes d'information sur le spam si à, ou au-dessus de ce niveau $sa_tag2_level_deflt = 6.31; # ajouter des en-têtes 'spam détecté' à ce niveau $sa_kill_level_deflt = 6.31; # déclenche des actions d'évasion de spam $sa_dsn_cutoff_level = 10; # niveau de spam au-delà duquel un DSN n'est pas envoyé [...] $final_virus_destiny = D_DISCARD; # (données non perdues, voir quarantaine de virus) $final_banned_destiny = D_BOUNCE; # D_REJECT lorsque MTA frontal $final_spam_destiny = D_BOUNCE; $final_bad_header_destiny = D_PASS; # Prone aux faux positifs (pour le spam) [...] |
Enfin, éditez /etc/amavis/conf.d/50-user et ajoutez la ligne $pax=’pax’; au milieu :
vi /etc/amavis/conf.d/50-user| use strict; # Placez vos directives de configuration ici. Elles remplaceront celles des fichiers précédents. # Voir /usr/share/doc/amavisd-new/ pour la documentation et des exemples des # directives que vous pouvez utiliser dans ce fichier # $pax='pax'; #------------ Ne modifiez rien en dessous de cette ligne ------------- 1; # assurez-vous d'un retour défini |
Ensuite, exécutez ces commandes pour ajouter l’utilisateur clamav au groupe amavis et redémarrer amavisd-new et ClamAV :
adduser clamav amavis
/etc/init.d/amavis restart
/etc/init.d/clamav-freshclam restart
/etc/init.d/clamav-daemon restartMaintenant, nous devons configurer Postfix pour acheminer les e-mails entrants via amavisd-new :
postconf -e 'content_filter = amavis:[127.0.0.1]:10024'
postconf -e 'receive_override_options = no_address_mappings'Ensuite, ajoutez les lignes suivantes à /etc/postfix/master.cf :
vi /etc/postfix/master.cf| [...] amavis unix - - - - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes 127.0.0.1:10025 inet n - - - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks |
Ensuite, redémarrez Postfix :
/etc/init.d/postfix restartMaintenant, exécutez
netstat -tapet vous devriez voir Postfix (master) à l’écoute sur le port 25 (smtp) et 10025, et amavisd-new sur le port 10024 :
root@server1:/etc/courier# netstat -tap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:http *:* LISTEN 6134/apache2
tcp 0 0 *:ssh *:* LISTEN 610/sshd
tcp 0 0 *:smtp *:* LISTEN 23128/master
tcp 0 0 localhost.localdo:10024 *:* LISTEN 21937/amavisd-new (
tcp 0 0 localhost.localdo:10025 *:* LISTEN 23128/master
tcp 0 0 localhost.localdo:mysql *:* LISTEN 4308/mysqld
tcp 0 52 server1.example.com:ssh 192.168.0.206:57597 ESTABLISHED 976/0
tcp6 0 0 [::]:ssh [::]:* LISTEN 610/sshd
tcp6 0 0 [::]:smtp [::]:* LISTEN 23128/master
tcp6 0 0 [::]:imaps [::]:* LISTEN 18191/couriertcpd
tcp6 0 0 [::]:pop3s [::]:* LISTEN 18259/couriertcpd
tcp6 0 0 [::]:pop3 [::]:* LISTEN 18222/couriertcpd
tcp6 0 0 [::]:imap2 [::]:* LISTEN 18154/couriertcpd
root@server1:/etc/courier# 10 Installer Razor, Pyzor et DCC et configurer SpamAssassin
Razor, Pyzor et DCC sont des filtres anti-spam qui utilisent un réseau de filtrage collaboratif. Pour installer Razor et Pyzor, exécutez
apt-get install razor pyzorDCC n’est pas disponible dans les dépôts Ubuntu 13.10, donc nous l’installons comme suit :
cd /tmp
wget http://www.dcc-servers.net/dcc/source/dcc-dccproc.tar.Z
tar xzvf dcc-dccproc.tar.Z
cd dcc-dccproc-1.3.1.154
./configure --with-uid=amavis
make
make install
chown -R amavis:amavis /var/dcc
ln -s /var/dcc/libexec/dccifd /usr/local/bin/dccifdMaintenant, nous devons dire à SpamAssassin d’utiliser ces trois programmes. Éditez /etc/spamassassin/local.cf et ajoutez les lignes suivantes :
vi /etc/spamassassin/local.cf| [...] #dcc use_dcc 1 dcc_path /usr/local/bin/dccproc #pyzor use_pyzor 1 pyzor_path /usr/bin/pyzor #razor use_razor2 1 razor_config /etc/razor/razor-agent.conf #bayes use_bayes 1 use_bayes_rules 1 bayes_auto_learn 1 |
Ensuite, nous devons activer le plugin DCC dans SpamAssassin. Ouvrez /etc/spamassassin/v310.pre et décommentez la ligne loadplugin Mail::SpamAssassin::Plugin::DCC :
vi /etc/spamassassin/v310.pre| [...] # DCC - effectuer des vérifications de message DCC. # # DCC est désactivé ici car il n'est pas open source. Voir la DCC # licence pour plus de détails. # loadplugin Mail::SpamAssassin::Plugin::DCC [...] |
Vous pouvez vérifier votre configuration SpamAssassin en exécutant :
spamassassin --lintIl ne devrait pas afficher d’erreurs.
Redémarrez amavisd-new ensuite :
/etc/init.d/amavis restartMaintenant, mettons à jour nos ensembles de règles SpamAssassin comme suit :
sa-update --no-gpgNous créons un job cron afin que les ensembles de règles soient mis à jour régulièrement. Exécutez
crontab -epour ouvrir l’éditeur de jobs cron. Créez le job cron suivant :
| 23 4 */2 * * /usr/bin/sa-update --no-gpg &> /dev/null |
Cela mettra à jour les ensembles de règles tous les deux jours à 4h23.
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.