Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
postfix_mysql_tls_sasl_1404 [Le 17/05/2014, 17:01] seb24 [Serveur email] |
postfix_mysql_tls_sasl_1404 [Le 11/09/2022, 12:13] (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 1: | Ligne 1: | ||
====== Installation de Postfix avec TLS, SASL, MySQL/MariaDb, Clamav, SpamAssassin Avec Ubuntu 14.04====== | ====== Installation de Postfix avec TLS, SASL, MySQL/MariaDb, Clamav, SpamAssassin Avec Ubuntu 14.04====== | ||
- | Ce tutoriel s'inspire grandement du tutoriel réalisé publié ici : http://doc.ubuntu-fr.org/postfix_mysql_tls_sasl | + | Ce tutoriel s'inspire grandement du tutoriel réalisé publié ici : https://doc.ubuntu-fr.org/postfix_mysql_tls_sasl |
- | J'utilise actuellement 3 serveurs : | + | J'utilise actuellement 3 serveurs : |
* Un serveur sous Ubuntu 14.04 qui me servira de serveur email | * Un serveur sous Ubuntu 14.04 qui me servira de serveur email | ||
* Un serveur sous Ubuntu 14.04 de base de donnée qui va héberger le contenu | * Un serveur sous Ubuntu 14.04 de base de donnée qui va héberger le contenu | ||
Ligne 13: | Ligne 13: | ||
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/MariaDb. A noter que Postfix peut être également couplé à 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/MariaDb. A noter que Postfix peut être également couplé à LDAP et ProgresSQL. | ||
Ligne 83: | Ligne 83: | ||
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 127: | Ligne 127: | ||
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 233: | Ligne 233: | ||
chown -R daemon:daemon /var/spool/postfix/var/run/courier | chown -R daemon:daemon /var/spool/postfix/var/run/courier | ||
chmod 755 /var/spool/postfix/var/run/courier/authdaemon | chmod 755 /var/spool/postfix/var/run/courier/authdaemon | ||
+ | |||
+ | ==== Postfix ==== | ||
+ | |||
+ | Création de la base de donnée nommée postfix | ||
+ | |||
+ | mysqladmin -u root --password='motdepasse' create postfix | ||
+ | |||
+ | Création de l'utilisateur postfix | ||
+ | | ||
+ | $ mysql -u root -p | ||
+ | Enter password: | ||
+ | GRANT ALL PRIVILEGES ON postfix.* TO "postfix"@"localhost" IDENTIFIED BY 'motdepasse'; | ||
+ | |||
+ | Insertion des tables dans la base de données | ||
+ | |||
+ | USE postfix; | ||
+ | CREATE TABLE `alias` ( | ||
+ | `address` varchar(255) NOT NULL default '', | ||
+ | `goto` text NOT NULL, | ||
+ | `domain` varchar(255) NOT NULL default '', | ||
+ | `created` datetime NOT NULL default '0000-00-00 00:00:00', | ||
+ | `modified` datetime NOT NULL default '0000-00-00 00:00:00', | ||
+ | `active` tinyint(1) NOT NULL default '1', | ||
+ | PRIMARY KEY (address) | ||
+ | ) ENGINE=MyISAM COMMENT='Postfix Admin - Virtual Aliases'; | ||
+ | |||
+ | USE postfix; | ||
+ | CREATE TABLE `domain` ( | ||
+ | `domain` varchar(255) NOT NULL default '', | ||
+ | `description` varchar(255) NOT NULL default '', | ||
+ | `aliases` int(10) NOT NULL default '0', | ||
+ | `mailboxes` int(10) NOT NULL default '0', | ||
+ | `maxquota` int(10) NOT NULL default '0', | ||
+ | `transport` varchar(255) default NULL, | ||
+ | `backupmx` tinyint(1) NOT NULL default '0', | ||
+ | `created` datetime NOT NULL default '0000-00-00 00:00:00', | ||
+ | `modified` datetime NOT NULL default '0000-00-00 00:00:00', | ||
+ | `active` tinyint(1) NOT NULL default '1', | ||
+ | PRIMARY KEY (domain) | ||
+ | ) ENGINE=MyISAM COMMENT='Postfix Admin - Virtual Domains'; | ||
+ | |||
+ | USE postfix; | ||
+ | CREATE TABLE `mailbox` ( | ||
+ | `username` varchar(255) NOT NULL default '', | ||
+ | `password` varchar(255) NOT NULL default '', | ||
+ | `name` varchar(255) NOT NULL default '', | ||
+ | `maildir` varchar(255) NOT NULL default '', | ||
+ | `quota` int(10) NOT NULL default '0', | ||
+ | `domain` varchar(255) NOT NULL default '', | ||
+ | `created` datetime NOT NULL default '0000-00-00 00:00:00', | ||
+ | `modified` datetime NOT NULL default '0000-00-00 00:00:00', | ||
+ | `active` tinyint(1) NOT NULL default '1', | ||
+ | PRIMARY KEY (username) | ||
+ | ) ENGINE=MyISAM COMMENT='Postfix Admin - Virtual Mailboxes'; | ||
+ | |||
+ | quit; | ||
+ | |||
+ | On crée un dossier nommé vmail. Ce dossier regroupera les boîtes mail des utilisateurs. | ||
+ | |||
+ | $ groupadd -g 5000 vmail | ||
+ | $ useradd -g vmail -u 5000 vmail -d /home/vmail -m | ||
+ | |||
+ | On ajoute dans /etc/postfix/main.cf en fin de fichier | ||
+ | |||
+ | # Support Mysql | ||
+ | virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf | ||
+ | virtual_gid_maps = static:5000 | ||
+ | virtual_mailbox_base = /home/vmail | ||
+ | virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf | ||
+ | virtual_mailbox_limit = 51200000 | ||
+ | virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf | ||
+ | virtual_minimum_uid = 5000 | ||
+ | virtual_transport = virtual | ||
+ | virtual_uid_maps = static:5000 | ||
+ | # Suport du relay | ||
+ | #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. | ||
+ | |||
+ | # | ||
+ | # Postfix master process configuration file. For details on the format | ||
+ | # of the file, see the Postfix master(5) manual page. | ||
+ | # | ||
+ | # ========================================================================== | ||
+ | # service type private unpriv chroot wakeup maxproc command + args | ||
+ | # (yes) (yes) (yes) (never) (100) | ||
+ | # ========================================================================== | ||
+ | smtp inet n - n - - smtpd | ||
+ | cleanup unix n - n - 0 cleanup | ||
+ | rewrite unix - - n - - trivial-rewrite | ||
+ | |||
+ | On va désormais créer les fichiers de configuration de postfix pour MySQL. Dans /etc/postfix, créer les fichiers suivants, tout en modifiant le mot de passe. | ||
+ | |||
+ | <note tip>Pour aller plus vite, ne modifiez pas le mot de passe et copier-coller tels quels les fichiers. Une fois terminé, lancez la ligne de commande suivante en prenant soin de remplacer VOTREMOTDEPASSE par le bon. Tous les fichiers seront alors modifié en même temps, vous limiterez ainsi les erreurs ;-) : | ||
+ | |||
+ | $ ''sed -i 's/motdepasse/VOTREMOTDEPASSE/' /etc/postfix/mysql_*.cf'' | ||
+ | |||
+ | Cela peut également vous servir le jour où vous désirez modifier le mot de passe...</note> | ||
+ | |||
+ | mysql_virtual_alias_maps.cf | ||
+ | |||
+ | user = postfix | ||
+ | password = motdepasse | ||
+ | hosts = 127.0.0.1 | ||
+ | dbname = postfix | ||
+ | query = SELECT goto FROM alias WHERE address='%s' AND active = 1 | ||
+ | |||
+ | mysql_virtual_domains_maps.cf | ||
+ | |||
+ | user = postfix | ||
+ | password = motdepasse | ||
+ | hosts = 127.0.0.1 | ||
+ | dbname = postfix | ||
+ | query = SELECT domain FROM domain WHERE domain='%s' | ||
+ | #optional query to use when relaying for backup MX | ||
+ | #query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '0' and active = '1' | ||
+ | |||
+ | mysql_virtual_mailbox_maps.cf | ||
+ | |||
+ | user = postfix | ||
+ | password = motdepasse | ||
+ | hosts = 127.0.0.1 | ||
+ | dbname = postfix | ||
+ | query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1 | ||
+ | |||
+ | mysql_virtual_mailbox_limit_maps.cf | ||
+ | |||
+ | user = postfix | ||
+ | password = motdepasse | ||
+ | hosts = 127.0.0.1 | ||
+ | dbname = postfix | ||
+ | query = SELECT quota FROM mailbox WHERE username='%s' | ||
+ | |||
+ | mysql_relay_domains_maps.cf | ||
+ | |||
+ | user = postfix | ||
+ | password = motdepasse | ||
+ | hosts = 127.0.0.1 | ||
+ | dbname = postfix | ||
+ | query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '1' | ||
+ | |||
+ | Pour le bon fonctionnement et la sécurité il faut exécuter ces deux lignes de commandes | ||
+ | |||
+ | chmod 640 mysql_* | ||
+ | chgrp postfix mysql_* | ||
+ | |||
+ | On crée des liens pour le bon fonctionnement de l'ensemble | ||
+ | |||
+ | mkdir -p /var/spool/postfix/var/run/mysqld | ||
+ | chown mysql /var/spool/postfix/var/run/mysqld | ||
+ | ln -s /var/run/mysqld/mysqld.sock /var/spool/postfix/var/run/mysqld/mysqld.sock | ||
+ | |||
+ | mkdir -p /var/spool/postfix/var/run/courier/authdaemon | ||
+ | ln -s /var/run/courier/authdaemon/socket /var/spool/postfix/var/run/courier/authdaemon/socket | ||
+ | chown -R daemon:daemon /var/spool/postfix/var/run/courier | ||
+ | chmod 755 /var/spool/postfix/var/run/courier/authdaemon | ||
+ | |||
+ | ==== TLS (Imap TLS)==== | ||
+ | |||
+ | Pour le support du TLS il faut créer une clef SSL toujours dans le répertoire /etc/postfix/ | ||
+ | |||
+ | $ openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509 | ||
+ | |||
+ | <-- Enter your Country Name (e.g., "FR"). | ||
+ | <-- Enter your State or Province Name. | ||
+ | <-- Enter your City. | ||
+ | <-- Enter your Organization Name (e.g., the name of your company). | ||
+ | <-- Enter your Organizational Unit Name (e.g. "IT Department"). | ||
+ | <-- Enter the Fully Qualified Domain Name of the system (e.g. "server.domain.tld"). | ||
+ | <-- Enter your Email Address. | ||
+ | |||
+ | $ chmod o= /etc/postfix/smtpd.key | ||
+ | |||
+ | Ajoutez dans /etc/postfix/main.cf | ||
+ | |||
+ | # Support TLS | ||
+ | smtpd_tls_cert_file = /etc/postfix/smtpd.cert | ||
+ | smtpd_tls_key_file = /etc/postfix/smtpd.key | ||
+ | | ||
+ | ==== SASL ==== | ||
+ | |||
+ | Pour l'ajout du sasl mettez en fin de fichier de /etc/postfix/main.cf | ||
+ | |||
+ | # Support SASL | ||
+ | broken_sasl_auth_clients = yes | ||
+ | smtpd_recipient_restrictions = | ||
+ | permit_mynetworks, | ||
+ | permit_sasl_authenticated, | ||
+ | reject_non_fqdn_hostname, | ||
+ | reject_non_fqdn_sender, | ||
+ | reject_non_fqdn_recipient, | ||
+ | reject_unauth_destination, | ||
+ | reject_unauth_pipelining, | ||
+ | reject_invalid_hostname, | ||
+ | reject_rbl_client bl.spamcop.net, | ||
+ | reject_rbl_client sbl-xbl.spamhaus.org | ||
+ | smtpd_sasl_auth_enable = yes | ||
+ | smtpd_sasl_local_domain = $myhostname | ||
+ | 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]]. | ||
+ | |||
+ | Créez le fichier /etc/postfix/sasl/smtpd.conf et ajoutez : | ||
+ | |||
+ | pwcheck_method: saslauthd | ||
+ | mech_list: login plain | ||
+ | saslauthd_path: /var/spool/postfix/var/run/saslauthd/mux | ||
+ | |||
+ | Editez le fichier /etc/default/saslauthd de façon à ce qu'il ait la configuration suivante | ||
+ | |||
+ | START=yes | ||
+ | MECHANISMS="pam" | ||
+ | OPTIONS="-c -r -m /var/spool/postfix/var/run/saslauthd" | ||
+ | |||
+ | | ||
+ | Créez les répertoires et attribuez les droits. | ||
+ | |||
+ | mkdir -p /var/spool/postfix/var/run/saslauthd | ||
+ | chown -R root:sasl /var/spool/postfix/var/run/saslauthd | ||
+ | chmod 710 /var/spool/postfix/var/run/saslauthd | ||
+ | |||
+ | |||
+ | Créez un lien symbolique pour que cela fonctionne lorsque postfix est chrooter [sionib] : | ||
+ | |||
+ | ln -s /var/spool/postfix/var/run/saslauthd /var/run/saslauthd | ||
+ | |||
+ | <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> | ||
+ | |||
+ | Créez le fichier /etc/pam.d/smtp en prenant soin le cas échéant de remettre votre mot de passe. (chez moi il a fallu nommer ce fichier smtpd [jblanche]) | ||
+ | |||
+ | auth required pam_mysql.so user=postfix passwd=motdepasse host=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1 | ||
+ | account sufficient pam_mysql.so user=postfix passwd=motdepasse host=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1 | ||
+ | |||
+ | Redémarrez sasl | ||
+ | |||
+ | /etc/init.d/saslauthd restart | ||
+ | |||
+ | Rajouter l'utilisateur postfix au groupe sasl : | ||
+ | |||
+ | adduser postfix sasl | ||
+ | |||
+ | |||
+ |