Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
postfix_mysql_tls_sasl [Le 31/08/2011, 00:48]
88.185.149.49 [Création des utilisateurs/domaines]
postfix_mysql_tls_sasl [Le 11/09/2022, 11:53] (Version actuelle)
moths-art Suppression des espaces en fin de ligne (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892)
Ligne 8: Ligne 8:
 Ce tuto a été réalisé sur une Debian Etch. Il est compatible pour Ubuntu. Ce tuto a été réalisé sur une Debian Etch. Il est compatible pour Ubuntu.
 La mise en place d'une telle solution demande du temps ainsi qu'un certain niveau pour savoir étudier les logs s'il y a une erreur. La mise en place d'une telle solution demande du temps ainsi qu'un certain niveau pour savoir étudier les logs s'il y a une erreur.
 +
 +<​note>​note du 15 mars 2014 : Ce tuto nécesssite d'​être revu du fait de l'​obsolescence de certains paquets</​note>​
  
 Niveau confirmé. Niveau confirmé.
 Temps d'​application : une bonne demi-heure. Temps d'​application : une bonne demi-heure.
  
-[[http://​www.postfix.org/​|Postfix]] est un mta (Mail Transfer Agent, simple d'​utilisation contrairement à Sendmail ou bien qmail. Postfix est utilisé par défaut chez Mac OS X, disponible sur GNU/Linux, la famille BSD et d'​autres unix encore. ​+[[http://​www.postfix.org/​|Postfix]] est un mta (Mail Transfer Agent, simple d'​utilisation contrairement à Sendmail ou bien qmail. Postfix est utilisé par défaut chez Mac OS X, disponible sur GNU/Linux, la famille BSD et d'​autres unix encore.
  
 Ce tuto vous permettra de mettre en place une solution multi-domaine basée sur des utilisateurs et domaines virtuels, couplée avec MySQL. Postfix peut être couplé a LDAP et ProgresSQL. Ce tuto vous permettra de mettre en place une solution multi-domaine basée sur des utilisateurs et domaines virtuels, couplée avec MySQL. Postfix peut être couplé a LDAP et ProgresSQL.
Ligne 23: Ligne 25:
  
 Paquets principaux [[:​tutoriel:​comment_installer_un_paquet|à installer]] : **postfix postfix-mysql mysql-client-5.0 mysql-server-5.0 courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl ​ courier-imap courier-imap-ssl postfix-tls libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin** Paquets principaux [[:​tutoriel:​comment_installer_un_paquet|à installer]] : **postfix postfix-mysql mysql-client-5.0 mysql-server-5.0 courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl ​ courier-imap courier-imap-ssl postfix-tls libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin**
 +
 +<note warning>​postfix-tls est un paquet obsolète il semble faire partie de postfix </​note>​
 +<​note>​je préfère mettre mysql-client mysql-server (sans préciser la version) pour réussir l'​installation à tous les coups</​note>​
  
 <note tip>Chez moi, le package courier-authlib-mysql s'​appelle courier-authmysql</​note>​ <note tip>Chez moi, le package courier-authlib-mysql s'​appelle courier-authmysql</​note>​
Ligne 39: Ligne 44:
 mysqladmin -u root password '​xxxxxxxx'​ mysqladmin -u root password '​xxxxxxxx'​
 </​code>​ </​code>​
 +
  
 ==== Postfix ==== ==== Postfix ====
Ligne 52: Ligne 58:
   GRANT ALL PRIVILEGES ON postfix.* TO "​postfix"​@"​localhost"​ IDENTIFIED BY '​motdepasse';​   GRANT ALL PRIVILEGES ON postfix.* TO "​postfix"​@"​localhost"​ IDENTIFIED BY '​motdepasse';​
  
-Insertion des tables dans la base de données ​+Insertion des tables dans la base de données
  
   USE postfix;   USE postfix;
Ligne 63: Ligne 69:
   `active` tinyint(1) NOT NULL default '​1',​   `active` tinyint(1) NOT NULL default '​1',​
   PRIMARY KEY  (address)   PRIMARY KEY  (address)
-  ) TYPE=MyISAM COMMENT='​Postfix Admin - Virtual Aliases';​+  ) ENGINE=MyISAM COMMENT='​Postfix Admin - Virtual Aliases';​
  
   USE postfix;   USE postfix;
Ligne 78: Ligne 84:
   `active` tinyint(1) NOT NULL default '​1',​   `active` tinyint(1) NOT NULL default '​1',​
   PRIMARY KEY  (domain)   PRIMARY KEY  (domain)
-  ) TYPE=MyISAM COMMENT='​Postfix Admin - Virtual Domains';​+  ) ENGINE=MyISAM COMMENT='​Postfix Admin - Virtual Domains';​
  
   USE postfix;   USE postfix;
Ligne 92: Ligne 98:
   `active` tinyint(1) NOT NULL default '​1',​   `active` tinyint(1) NOT NULL default '​1',​
   PRIMARY KEY  (username)   PRIMARY KEY  (username)
-  ) TYPE=MyISAM COMMENT='​Postfix Admin - Virtual Mailboxes';​+  ) ENGINE=MyISAM COMMENT='​Postfix Admin - Virtual Mailboxes';​
  
   quit;   quit;
  
-On crée un dossier nommé vmail. Ce dossier regroupera les boîtes mail des utilisateurs. ​+On crée un dossier nommé vmail. Ce dossier regroupera les boîtes mail des utilisateurs.
  
    $ groupadd -g 5000 vmail    $ groupadd -g 5000 vmail
Ligne 123: Ligne 129:
   #​relay_domains = mysql:/​etc/​postfix/​mysql_relay_domains_maps.cf   #​relay_domains = mysql:/​etc/​postfix/​mysql_relay_domains_maps.cf
  
-Le smtp de postfix est chrooter, il faut donc le retirer afin d'​assurer son bon fonctionnement. On retire le chroot dans /​etc/​postfix/​master.cf et modifier comme dessous.+Le smtp de postfix est chrooté, il faut donc le retirer afin d'​assurer son bon fonctionnement. On retire le chroot dans /​etc/​postfix/​master.cf et modifier comme dessous.
  
   #   #
Ligne 145: Ligne 151:
 Cela peut également vous servir le jour où vous désirez modifier le mot de passe...</​note>​ Cela peut également vous servir le jour où vous désirez modifier le mot de passe...</​note>​
  
-mysql_virtual_alias_maps.cf+Creation des fichiers : mysql_virtual_alias_maps.cf, mysql_virtual_domains_maps.cf,​ mysql_virtual_mailbox_maps.cf,​ mysql_virtual_mailbox_limit_maps.cf,​ mysql_relay_domains_maps.cf
  
-  ​user = postfix +  ​MYSQL_USER=postfix 
-  ​password ​= motdepasse +  ​MYSQL_PASSWORD=motdepasse 
-  ​hosts = 127.0.0.1+  ​MYSQL_HOST=127.0.0.1 
 +   
 +  cat << EOF >/​etc/​postfix/​mysql_virtual_alias_maps.cf 
 +  user = $MYSQL_USER 
 +  password = $MYSQL_PASSWORD 
 +  hosts = $MYSQL_HOST
   dbname = postfix   dbname = postfix
   query = SELECT goto FROM alias WHERE address='​%s'​ AND active = 1   query = SELECT goto FROM alias WHERE address='​%s'​ AND active = 1
- +  EOF 
-mysql_virtual_domains_maps.cf +   
- +  cat <<EOF >/​etc/​postfix/​mysql_virtual_domains_maps.cf 
-  user = postfix +  user = $MYSQL_USER 
-  password = motdepasse +  password = $MYSQL_PASSWORD 
-  hosts = 127.0.0.1+  hosts = $MYSQL_HOST
   dbname = postfix   dbname = postfix
   query = SELECT domain FROM domain WHERE domain='​%s'​   query = SELECT domain FROM domain WHERE domain='​%s'​
   #optional query to use when relaying for backup MX   #optional query to use when relaying for backup MX
   #query = SELECT domain FROM domain WHERE domain='​%s'​ and backupmx = '​0'​ and active = '​1'​   #query = SELECT domain FROM domain WHERE domain='​%s'​ and backupmx = '​0'​ and active = '​1'​
- +  EOF 
-mysql_virtual_mailbox_maps.cf +   
- +  cat <<EOF >/​etc/​postfix/​mysql_virtual_mailbox_maps.cf 
-  user = postfix +  user = $MYSQL_USER 
-  password = motdepasse +  password = $MYSQL_PASSWORD 
-  hosts = 127.0.0.1+  hosts = $MYSQL_HOST
   dbname = postfix   dbname = postfix
   query = SELECT maildir FROM mailbox WHERE username='​%s'​ AND active = 1   query = SELECT maildir FROM mailbox WHERE username='​%s'​ AND active = 1
- +  EOF 
-mysql_virtual_mailbox_limit_maps.cf +   
- +  cat <<​EOF>/​etc/​postfix/​mysql_virtual_mailbox_limit_maps.cf 
-  user = postfix +  user = $MYSQL_USER 
-  password = motdepasse +  password = $MYSQL_PASSWORD 
-  hosts = 127.0.0.1+  hosts = $MYSQL_HOST
   dbname = postfix   dbname = postfix
   query = SELECT quota FROM mailbox WHERE username='​%s'​   query = SELECT quota FROM mailbox WHERE username='​%s'​
- +  EOF 
-mysql_relay_domains_maps.cf +   
- +  cat <<​EOF>/​etc/​postfix/​mysql_relay_domains_maps.cf 
-  user = postfix +  user = $MYSQL_USER 
-  password = motdepasse +  password = $MYSQL_PASSWORD 
-  hosts = 127.0.0.1+  hosts = $MYSQL_HOST
   dbname = postfix   dbname = postfix
   query = SELECT domain FROM domain WHERE domain='​%s'​ and backupmx = '​1'​   query = SELECT domain FROM domain WHERE domain='​%s'​ and backupmx = '​1'​
 +  EOF
  
 Pour le bon fonctionnement et la sécurité il faut exécuter ces deux lignes de commandes Pour le bon fonctionnement et la sécurité il faut exécuter ces deux lignes de commandes
Ligne 249: Ligne 261:
   smtpd_sasl_local_domain = $myhostname   smtpd_sasl_local_domain = $myhostname
   smtpd_sasl_security_options = noanonymous   smtpd_sasl_security_options = noanonymous
 +  broken_sasl_auth_clients = yes
 +  smtpd_sasl_type = cyrus
 +  cyrus_sasl_config_path = /​etc/​postfix/​sasl
  
 On peut supprimer reject_rbl_client opm.blitzed.org,​ le projet étant abandonné depuis mai 2006 : [[http://​wiki.blitzed.org/​OPM_status]]. On peut supprimer reject_rbl_client opm.blitzed.org,​ le projet étant abandonné depuis mai 2006 : [[http://​wiki.blitzed.org/​OPM_status]].
Ligne 262: Ligne 277:
 warning: SASL authentication failure: cannot connect to saslauthd server: No such file or directory warning: SASL authentication failure: cannot connect to saslauthd server: No such file or directory
  
-Il faut ajouter, dans le fichier ​    /​etc/​postfix/​sasl/​smtpd.conf la ligne: ​+Il faut ajouter, dans le fichier ​    /​etc/​postfix/​sasl/​smtpd.conf la ligne:
  
   saslauthd_path:​ /​var/​spool/​postfix/​var/​run/​saslauthd/​mux   saslauthd_path:​ /​var/​spool/​postfix/​var/​run/​saslauthd/​mux
Ligne 283: Ligne 298:
  
  
-Créez un  lien symbolique pour que cela fonctionne lorsque postfix est chrooter ​[sionib] :+Créez un  lien symbolique pour que cela fonctionne lorsque postfix est chrooté ​[sionib] :
  
    ln -s /​var/​spool/​postfix/​var/​run/​saslauthd /​var/​run/​saslauthd    ln -s /​var/​spool/​postfix/​var/​run/​saslauthd /​var/​run/​saslauthd
Ligne 292: Ligne 307:
  
    ln -s /​var/​spool/​postfix/​var/​run/​saslauthd /var/run/    ln -s /​var/​spool/​postfix/​var/​run/​saslauthd /var/run/
 +
 +</​note>​
 +
 +<note warning> Depuis au moins Ubuntu 14.04, le lien symbolique disparaît à chaque reboot. Comme workaround, éditez /​etc/​init.d/​rc.local :
 +
 +   sudo vi /​etc/​init.d/​rc.local
 +
 +
 +Et ajoutez ces lignes tout à la fin du fichier :
 + 
 +   /​bin/​sleep 5
 +   ln -s /​var/​spool/​postfix/​var/​run/​saslauthd /​var/​run/​saslauthd
 +   /​etc/​init.d/​saslauthd restart
 +
 +Ainsi le lien sera recréé à chaque reboot et sasl fonctionnera correctement.
  
 </​note>​ </​note>​
Ligne 341: Ligne 371:
  
 ===== Deuxième Partie ===== ===== Deuxième Partie =====
- 
  
 **Ajout d'un anti-spam, anti-virus** **Ajout d'un anti-spam, anti-virus**
Ligne 349: Ligne 378:
    $ sudo apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip arj bzip2 razor pyzor dcc-client    $ sudo apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip arj bzip2 razor pyzor dcc-client
  
 +<note warning> les paquets dcc-client dcc-server dcc-common n'​existent plus sous debian note du 15/​03/​2014</​note>​
  
 Sous hardy 8.4, le paquet dcc-client n'​existe plus, pas même dcc-server. [[http://​www.howtoforge.com/​the-perfect-spamsnake-ubuntu-8.04]] est peut être une piste en attendant la mise à jour de cette documentation. Sous hardy 8.4, le paquet dcc-client n'​existe plus, pas même dcc-server. [[http://​www.howtoforge.com/​the-perfect-spamsnake-ubuntu-8.04]] est peut être une piste en attendant la mise à jour de cette documentation.
  
 Il est toujours possible de télécharger le paquet dcc-server (qui remplace dcc-client) via les paquets ubuntu cela marche avec la version 8.4 et la version 8.10. Il est toujours possible de télécharger le paquet dcc-server (qui remplace dcc-client) via les paquets ubuntu cela marche avec la version 8.4 et la version 8.10.
-Premièrement le paquet dcc-server a besoin de dcc-common pour fonctionner.  +Premièrement le paquet dcc-server a besoin de dcc-common pour fonctionner. 
-  * dcc-common : http://​packages.ubuntu.com/​gutsy/​dcc-common +  * dcc-common : https://​packages.ubuntu.com/​gutsy/​dcc-common 
-  * dcc-server : http://​packages.ubuntu.com/​gutsy/​dcc-server+  * dcc-server : https://​packages.ubuntu.com/​gutsy/​dcc-server
  
 Par exemple on peut procéder ainsi : Par exemple on peut procéder ainsi :
Ligne 367: Ligne 397:
 cdcc "​delete 127.0.0.1 Greylist"​ cdcc "​delete 127.0.0.1 Greylist"​
 </​code>​ </​code>​
- 
 ==== Amavis ==== ==== Amavis ====
  
Ligne 660: Ligne 689:
 ==== Spamassassin ==== ==== Spamassassin ====
  
-Editez le fichier /​etc/​default/​spamassassin+Avant tout, il faut créer l'​utilisateur "​spamd"​
  
-  ENABLED=1+   sudo groupadd spamd 
 +   sudo useradd -g spamd -s /​sbin/​nologin -d /​var/​lib/​spamassassin spamd 
 +   sudo mkdir /​var/​lib/​spamassassin 
 +   sudo chown spamd:spamd /​var/​lib/​spamassassin 
 +   sudo mkdir /​var/​log/​spamd 
 +   sudo chown spamd:spamd /​var/​log/​spamd 
 + 
 +Modifer le fichier /​etc/​default/​spamassassin : 
 + 
 +   ENABLED=1 
 +   ​SAHOME="/​var/​lib/​spamassassin/"​ 
 +   ​OPTIONS="​--create-prefs --max-children 5 --username spamd --helper-home-dir ${SAHOME} -s /​var/​log/​spamd/​spamd.log"​ 
 +   ​PIDFILE="​${SAHOME}spamd.pid"​ 
 +  ​
  
 Editez le fichier /​etc/​spamassassin/​local.cf Editez le fichier /​etc/​spamassassin/​local.cf
Ligne 700: Ligne 742:
 Démarrez le daemon spamassassin Démarrez le daemon spamassassin
  
-   $ /​etc/​init.d/​spamassassin start+   $ /​etc/​init.d/​spamassassin start    
 +Pour dire à postfix d'​utiliser spamassassin,​ modifier le fichier "/​etc/​postfix/​master.cf"​ et changer la ligne :
  
 +   ​smtp ​     inet  n       ​- ​      ​- ​      ​- ​      ​- ​      ​smtpd ​  
 +par
 +   ​smtp ​     inet  n       ​- ​      ​- ​      ​- ​      ​- ​      smtpd
 +       -o content_filter=spamassassin
 +et à la fin du fichier, ajoutez :
 +   ​spamassassin unix -     ​n ​      ​n ​      ​- ​      ​- ​      pipe
 +       ​user=spamd argv=/​usr/​bin/​spamc -f -e    ​
 +       /​usr/​sbin/​sendmail -oi -f ${sender} ${recipient}
 Créez le fichier /​usr/​sbin/​sa_rules_update.sh Créez le fichier /​usr/​sbin/​sa_rules_update.sh
  
Ligne 779: Ligne 830:
   quit   quit
  
-Si les tests sont ok, votre serveur de mail est opérationnel. ​ +Si les tests sont ok, votre serveur de mail est opérationnel.
- +
- +
- +
 ===== Création des utilisateurs/​domaines ===== ===== Création des utilisateurs/​domaines =====
  
Ligne 796: Ligne 843:
   INSERT INTO mailbox (username,​password,​name,​maildir) ​ VALUES ('​utilisateur@domain.tld',​ENCRYPT('"​votre mot de passe"'​),'​Mailbox User','​utilisateur@domain.tld/'​);​   INSERT INTO mailbox (username,​password,​name,​maildir) ​ VALUES ('​utilisateur@domain.tld',​ENCRYPT('"​votre mot de passe"'​),'​Mailbox User','​utilisateur@domain.tld/'​);​
   quit;   quit;
 +
 +
 +<note warning>
 +Attention, lors de la création de l'​utilisateur,​ il faut supprimer les doubles quotes lors de l'​utilisation d' ENCRYPT ( ENCRYPT('​myMdp'​) et non pas ENCRYPT('"​myMdp"'​) )
 +</​note>​
  
 Les mots de passe seront à chiffrer via la fonction ENCRYPT sous PHPMyAdmin. Les mots de passe seront à chiffrer via la fonction ENCRYPT sous PHPMyAdmin.
  
 +<note tip>Pour Postfix Admin je vous conseille de l'​installer avant de faire la configuration de postfix + SQL</​note>​
 Il existe une interface d'​administration,​ [[http://​high5.net/​postfixadmin/​|Postfix Admin]] qui permet la gestion de tout cela, vous trouverez un tutoriel pour l'​installer à cette [[http://​www.system-linux.eu/​index.php?​post/​2009/​10/​22/​Installation-et-Configuration-de-postfixadmin|adresse]]. Je l'ai testé à ses débuts, le trouvant très mal fait, je l'ai laissé tomber, entre temps il a subi quelques améliorations,​ et je ne l'ai pas testé de nouveau. Il existe une interface d'​administration,​ [[http://​high5.net/​postfixadmin/​|Postfix Admin]] qui permet la gestion de tout cela, vous trouverez un tutoriel pour l'​installer à cette [[http://​www.system-linux.eu/​index.php?​post/​2009/​10/​22/​Installation-et-Configuration-de-postfixadmin|adresse]]. Je l'ai testé à ses débuts, le trouvant très mal fait, je l'ai laissé tomber, entre temps il a subi quelques améliorations,​ et je ne l'ai pas testé de nouveau.
  
Ligne 807: Ligne 860:
 ===== Création du répertoire de stockage des mails ===== ===== Création du répertoire de stockage des mails =====
  
-Il faut créer le répertoire ou seront ​stocker ​les mails (envoyés, brouillons, etc...) +Il faut créer le répertoire ou seront ​stockés ​les mails (envoyés, brouillons, etc...) 
-Aller dans le répertoire ou tout les comptes mails sont enregistrer ​(/​home/​vmail par exemple), puis+Aller dans le répertoire ou tout les comptes mails sont enregistrés ​(/​home/​vmail par exemple), puis
  
-$ maildirmake VOTREREPERTOIREDEMAIL+  ​$ maildirmake VOTREREPERTOIREDEMAIL
  
-Modifier VOTREREPERTOIREDEMAIL par le nom que vous voulais ​donner au compte mail (machin@domain.ltd par exemple). +Modifier VOTREREPERTOIREDEMAIL par le nom que vous voulez ​donner au compte mail (machin@domain.ltd par exemple).
-Donner les droits adéquates au dossiers contenue dans votre répertoire où les comptes mails sont enregistrer :+
  
-$ sudo chown vmail:vmail -R /​home/​vmail;​+Donner les droits adéquats aux dossiers contenus dans votre répertoire où les comptes mails sont enregistrés : 
 + 
 +  ​$ sudo chown vmail:vmail -R /​home/​vmail;​
 ===== En cas d'​erreurs ===== ===== En cas d'​erreurs =====
  
   - Si vous souhaitez tester la configuration de sasl, vous pouvez utiliser : <​code>​testsaslauthd -u adresse@domain.tld -p password -s smtp</​code>​   - Si vous souhaitez tester la configuration de sasl, vous pouvez utiliser : <​code>​testsaslauthd -u adresse@domain.tld -p password -s smtp</​code>​
 +
 +<note info>
 +Pour vérifier que sasl va bien chercher dans la db les utilisateurs,​ mettez un nom d'​utilisateur inexistant dans l'​option -u.
 +La log /​var/​log/​auth.log devrait indiquer que le SELECT SQL ne retourne pas de résultat.
 +Dans le cas contraire, vous avez probablement un problème de configuration.
 +</​note>​
 +<note info>
 +Si vous n'​arrivez toujours pas à obtenir une connection correcte et que le point ci-dessus est vérifié, modifiez le fichier /​etc/​pam.d/​smtp en changeant sur les deux lignes le paramétre crypt=1 à crypt=0 (non crypté).
 +Il vous suffit alors de créer un nouveau user ou de modifier le précédent par un mot de passe simple (test par exemple) et de retester.
 +</​note>​
 +
   - Si le serveur smtp ne répond pas, sachez qu'​Orange et Free bloquent le port smtp (25) en dehors de leurs réseaux par défaut afin de limiter la diffusion de spam. Vous devrez donc les débloquer pour le serveur mais aussi pour les clients.   - Si le serveur smtp ne répond pas, sachez qu'​Orange et Free bloquent le port smtp (25) en dehors de leurs réseaux par défaut afin de limiter la diffusion de spam. Vous devrez donc les débloquer pour le serveur mais aussi pour les clients.
  
Ligne 833: Ligne 898:
   chown vmail:vmail -R /​home/​vmail;​   chown vmail:vmail -R /​home/​vmail;​
  
-- Si une fois un test d'​envoi de mail effectué (test SMTP+SASL), vous obtenez dans le journal /​var/​log/​auth.log le message suivant : +- Si une fois un test d'​envoi de mail effectué (test SMTP+SASL), vous obtenez dans le journal /​var/​log/​auth.log le message suivant :
   postfix/​smtpd[23340]:​ sql_select option missing   postfix/​smtpd[23340]:​ sql_select option missing
   postfix/​smtpd[23340]:​ auxpropfunc error no mechanism available ​   postfix/​smtpd[23340]:​ auxpropfunc error no mechanism available ​
  • postfix_mysql_tls_sasl.1314744506.txt.gz
  • Dernière modification: Le 15/12/2011, 15:20
  • (modification externe)