Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédente | |||
postfix_mysql_tls_sasl_1404 [Le 17/05/2014, 17:44] – [SASL] seb24 | postfix_mysql_tls_sasl_1404 [Le 17/05/2014, 18:06] (Version actuelle) – [Postfix] seb24 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Installation de Postfix avec TLS, SASL, MySQL/ | ||
+ | |||
+ | Ce tutoriel s' | ||
+ | |||
+ | J' | ||
+ | * 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 qui heberge le serveur web (notamment phpmyadmin) | ||
+ | |||
+ | 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. | ||
+ | |||
+ | Niveau confirmé. | ||
+ | Temps d' | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | Ce tuto vous permettra de mettre en place une solution multi-domaine basée sur des utilisateurs et domaines virtuels, couplée avec MySQL/ | ||
+ | |||
+ | ===== Installation des paquets ===== | ||
+ | |||
+ | ==== Serveur email ==== | ||
+ | |||
+ | Pour le serveur web nous devons installer les paquets liés à postif et aux différents services web, ainsi que les paquets liés à la connection avec le serveur de base de donnée. A noter que j'ai choisis MariaDb comme base de donnée : | ||
+ | **sudo apt-get install postfix mariadb-client 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** | ||
+ | |||
+ | Vous pouvez faire de même pour mysql : | ||
+ | **sudo apt-get install postfix mysql-client courier-authdaemon courier-authlib-mysq | ||
+ | l courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl** | ||
+ | |||
+ | Le prompt suivant doit s' | ||
+ | < | ||
+ | Please select the mail server configuration type that best meets your needs. | ||
+ | |||
+ | No configuration: | ||
+ | Should be chosen to leave the current configuration unchanged. | ||
+ | | ||
+ | Mail is sent and received directly using SMTP. | ||
+ | | ||
+ | Mail is received directly using SMTP or by running a utility such | ||
+ | as fetchmail. Outgoing mail is sent using a smarthost. | ||
+ | | ||
+ | All mail is sent to another machine, called a ' | ||
+ | Local only: | ||
+ | The only delivered mail is the mail for local users. There is no network. | ||
+ | |||
+ | 1. No configuration | ||
+ | General type of mail configuration:' | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Serveur de base de donnée ==== | ||
+ | |||
+ | **Avec MariaDb :** | ||
+ | **sudo apt-get install mariadb-server** | ||
+ | |||
+ | **Avec Mysql** | ||
+ | **sudo apt-get install | ||
+ | |||
+ | Si c'est la 1ère fois que vous installez MySQL, définissez un mot de passe pour le root | ||
+ | |||
+ | mysqladmin -u root password ' | ||
+ | |||
+ | Si jamais le mot de passe root ne peut être changé voici une petite procédure pour pouvoir le faire:\\ | ||
+ | |||
+ | < | ||
+ | / | ||
+ | rm -Rf / | ||
+ | mysql_install_db | ||
+ | / | ||
+ | mysqladmin -u root password ' | ||
+ | </ | ||
+ | |||
+ | ==== Postfix ==== | ||
+ | |||
+ | Création de la base de donnée nommée postfix | ||
+ | |||
+ | mysqladmin -u root --password=' | ||
+ | |||
+ | Création de l' | ||
+ | | ||
+ | $ mysql -u root -p | ||
+ | Enter password: | ||
+ | GRANT ALL PRIVILEGES ON postfix.* TO " | ||
+ | |||
+ | 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 ' | ||
+ | `modified` datetime NOT NULL default ' | ||
+ | `active` tinyint(1) NOT NULL default ' | ||
+ | PRIMARY KEY (address) | ||
+ | ) ENGINE=MyISAM COMMENT=' | ||
+ | |||
+ | USE postfix; | ||
+ | CREATE TABLE `domain` ( | ||
+ | `domain` varchar(255) NOT NULL default '', | ||
+ | `description` varchar(255) NOT NULL default '', | ||
+ | `aliases` int(10) NOT NULL default ' | ||
+ | `mailboxes` int(10) NOT NULL default ' | ||
+ | `maxquota` int(10) NOT NULL default ' | ||
+ | `transport` varchar(255) default NULL, | ||
+ | `backupmx` tinyint(1) NOT NULL default ' | ||
+ | `created` datetime NOT NULL default ' | ||
+ | `modified` datetime NOT NULL default ' | ||
+ | `active` tinyint(1) NOT NULL default ' | ||
+ | PRIMARY KEY (domain) | ||
+ | ) ENGINE=MyISAM COMMENT=' | ||
+ | |||
+ | 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 ' | ||
+ | `domain` varchar(255) NOT NULL default '', | ||
+ | `created` datetime NOT NULL default ' | ||
+ | `modified` datetime NOT NULL default ' | ||
+ | `active` tinyint(1) NOT NULL default ' | ||
+ | PRIMARY KEY (username) | ||
+ | ) ENGINE=MyISAM COMMENT=' | ||
+ | |||
+ | 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 / | ||
+ | |||
+ | # Support Mysql | ||
+ | virtual_alias_maps = mysql:/ | ||
+ | virtual_gid_maps = static:5000 | ||
+ | virtual_mailbox_base = /home/vmail | ||
+ | virtual_mailbox_domains = mysql:/ | ||
+ | virtual_mailbox_limit = 51200000 | ||
+ | virtual_mailbox_maps = mysql:/ | ||
+ | virtual_minimum_uid = 5000 | ||
+ | virtual_transport = virtual | ||
+ | virtual_uid_maps = static:5000 | ||
+ | # Support du quota | ||
+ | virtual_create_maildirsize = yes | ||
+ | virtual_mailbox_extended = yes | ||
+ | virtual_mailbox_limit_maps = mysql:/ | ||
+ | virtual_mailbox_limit_override = yes | ||
+ | virtual_maildir_limit_message = Desole, la boite email de l' | ||
+ | virtual_overquota_bounce = yes | ||
+ | # Suport du relay | ||
+ | # | ||
+ | |||
+ | Le smtp de postfix est chrooter, il faut donc le retirer afin d' | ||
+ | |||
+ | # | ||
+ | # Postfix master process configuration file. For details on the format | ||
+ | # of the file, see the Postfix master(5) manual page. | ||
+ | # | ||
+ | # ========================================================================== | ||
+ | # service type private unpriv | ||
+ | # | ||
+ | # ========================================================================== | ||
+ | smtp inet n | ||
+ | cleanup | ||
+ | rewrite | ||
+ | |||
+ | On va désormais créer les fichiers de configuration de postfix pour MySQL. Dans / | ||
+ | |||
+ | <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 ;-) : | ||
+ | |||
+ | $ '' | ||
+ | |||
+ | Cela peut également vous servir le jour où vous désirez modifier le mot de passe...</ | ||
+ | |||
+ | mysql_virtual_alias_maps.cf | ||
+ | |||
+ | user = postfix | ||
+ | password = motdepasse | ||
+ | hosts = 127.0.0.1 | ||
+ | dbname = postfix | ||
+ | query = SELECT goto FROM alias WHERE address=' | ||
+ | |||
+ | mysql_virtual_domains_maps.cf | ||
+ | |||
+ | user = postfix | ||
+ | password = motdepasse | ||
+ | hosts = 127.0.0.1 | ||
+ | dbname = postfix | ||
+ | query = SELECT domain FROM domain WHERE domain=' | ||
+ | #optional query to use when relaying for backup MX | ||
+ | #query = SELECT domain FROM domain WHERE domain=' | ||
+ | |||
+ | mysql_virtual_mailbox_maps.cf | ||
+ | |||
+ | user = postfix | ||
+ | password = motdepasse | ||
+ | hosts = 127.0.0.1 | ||
+ | dbname = postfix | ||
+ | query = SELECT maildir FROM mailbox WHERE username=' | ||
+ | |||
+ | mysql_virtual_mailbox_limit_maps.cf | ||
+ | |||
+ | user = postfix | ||
+ | password = motdepasse | ||
+ | hosts = 127.0.0.1 | ||
+ | dbname = postfix | ||
+ | query = SELECT quota FROM mailbox WHERE username=' | ||
+ | |||
+ | mysql_relay_domains_maps.cf | ||
+ | |||
+ | user = postfix | ||
+ | password = motdepasse | ||
+ | hosts = 127.0.0.1 | ||
+ | dbname = postfix | ||
+ | query = SELECT domain FROM domain WHERE domain=' | ||
+ | |||
+ | 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' | ||
+ | |||
+ | mkdir -p / | ||
+ | chown mysql / | ||
+ | ln -s / | ||
+ | |||
+ | mkdir -p / | ||
+ | ln -s / | ||
+ | chown -R daemon: | ||
+ | chmod 755 / | ||
+ | |||
+ | ==== Postfix ==== | ||
+ | |||
+ | Création de la base de donnée nommée postfix | ||
+ | |||
+ | mysqladmin -u root --password=' | ||
+ | |||
+ | Création de l' | ||
+ | | ||
+ | $ mysql -u root -p | ||
+ | Enter password: | ||
+ | GRANT ALL PRIVILEGES ON postfix.* TO " | ||
+ | |||
+ | 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 ' | ||
+ | `modified` datetime NOT NULL default ' | ||
+ | `active` tinyint(1) NOT NULL default ' | ||
+ | PRIMARY KEY (address) | ||
+ | ) ENGINE=MyISAM COMMENT=' | ||
+ | |||
+ | USE postfix; | ||
+ | CREATE TABLE `domain` ( | ||
+ | `domain` varchar(255) NOT NULL default '', | ||
+ | `description` varchar(255) NOT NULL default '', | ||
+ | `aliases` int(10) NOT NULL default ' | ||
+ | `mailboxes` int(10) NOT NULL default ' | ||
+ | `maxquota` int(10) NOT NULL default ' | ||
+ | `transport` varchar(255) default NULL, | ||
+ | `backupmx` tinyint(1) NOT NULL default ' | ||
+ | `created` datetime NOT NULL default ' | ||
+ | `modified` datetime NOT NULL default ' | ||
+ | `active` tinyint(1) NOT NULL default ' | ||
+ | PRIMARY KEY (domain) | ||
+ | ) ENGINE=MyISAM COMMENT=' | ||
+ | |||
+ | 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 ' | ||
+ | `domain` varchar(255) NOT NULL default '', | ||
+ | `created` datetime NOT NULL default ' | ||
+ | `modified` datetime NOT NULL default ' | ||
+ | `active` tinyint(1) NOT NULL default ' | ||
+ | PRIMARY KEY (username) | ||
+ | ) ENGINE=MyISAM COMMENT=' | ||
+ | |||
+ | 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 / | ||
+ | |||
+ | # Support Mysql | ||
+ | virtual_alias_maps = mysql:/ | ||
+ | virtual_gid_maps = static:5000 | ||
+ | virtual_mailbox_base = /home/vmail | ||
+ | virtual_mailbox_domains = mysql:/ | ||
+ | virtual_mailbox_limit = 51200000 | ||
+ | virtual_mailbox_maps = mysql:/ | ||
+ | virtual_minimum_uid = 5000 | ||
+ | virtual_transport = virtual | ||
+ | virtual_uid_maps = static:5000 | ||
+ | # Suport du relay | ||
+ | # | ||
+ | |||
+ | Le smtp de postfix est chrooter, il faut donc le retirer afin d' | ||
+ | |||
+ | # | ||
+ | # Postfix master process configuration file. For details on the format | ||
+ | # of the file, see the Postfix master(5) manual page. | ||
+ | # | ||
+ | # ========================================================================== | ||
+ | # service type private unpriv | ||
+ | # | ||
+ | # ========================================================================== | ||
+ | smtp inet n | ||
+ | cleanup | ||
+ | rewrite | ||
+ | |||
+ | On va désormais créer les fichiers de configuration de postfix pour MySQL. Dans / | ||
+ | |||
+ | <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 ;-) : | ||
+ | |||
+ | $ '' | ||
+ | |||
+ | Cela peut également vous servir le jour où vous désirez modifier le mot de passe...</ | ||
+ | |||
+ | mysql_virtual_alias_maps.cf | ||
+ | |||
+ | user = postfix | ||
+ | password = motdepasse | ||
+ | hosts = 127.0.0.1 | ||
+ | dbname = postfix | ||
+ | query = SELECT goto FROM alias WHERE address=' | ||
+ | |||
+ | mysql_virtual_domains_maps.cf | ||
+ | |||
+ | user = postfix | ||
+ | password = motdepasse | ||
+ | hosts = 127.0.0.1 | ||
+ | dbname = postfix | ||
+ | query = SELECT domain FROM domain WHERE domain=' | ||
+ | #optional query to use when relaying for backup MX | ||
+ | #query = SELECT domain FROM domain WHERE domain=' | ||
+ | |||
+ | mysql_virtual_mailbox_maps.cf | ||
+ | |||
+ | user = postfix | ||
+ | password = motdepasse | ||
+ | hosts = 127.0.0.1 | ||
+ | dbname = postfix | ||
+ | query = SELECT maildir FROM mailbox WHERE username=' | ||
+ | |||
+ | mysql_virtual_mailbox_limit_maps.cf | ||
+ | |||
+ | user = postfix | ||
+ | password = motdepasse | ||
+ | hosts = 127.0.0.1 | ||
+ | dbname = postfix | ||
+ | query = SELECT quota FROM mailbox WHERE username=' | ||
+ | |||
+ | mysql_relay_domains_maps.cf | ||
+ | |||
+ | user = postfix | ||
+ | password = motdepasse | ||
+ | hosts = 127.0.0.1 | ||
+ | dbname = postfix | ||
+ | query = SELECT domain FROM domain WHERE domain=' | ||
+ | |||
+ | 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' | ||
+ | |||
+ | mkdir -p / | ||
+ | chown mysql / | ||
+ | ln -s / | ||
+ | |||
+ | mkdir -p / | ||
+ | ln -s / | ||
+ | chown -R daemon: | ||
+ | chmod 755 / | ||
+ | |||
+ | ==== TLS (Imap TLS)==== | ||
+ | |||
+ | Pour le support du TLS il faut créer une clef SSL toujours dans le répertoire / | ||
+ | |||
+ | $ 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., " | ||
+ | <-- 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. " | ||
+ | <-- Enter your Email Address. | ||
+ | |||
+ | $ chmod o= / | ||
+ | |||
+ | Ajoutez dans / | ||
+ | |||
+ | # Support TLS | ||
+ | smtpd_tls_cert_file = / | ||
+ | smtpd_tls_key_file = / | ||
+ | | ||
+ | ==== SASL ==== | ||
+ | |||
+ | Pour l' | ||
+ | |||
+ | # 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 = / | ||
+ | |||
+ | On peut supprimer reject_rbl_client opm.blitzed.org, | ||
+ | |||
+ | Créez le fichier / | ||
+ | |||
+ | pwcheck_method: | ||
+ | mech_list: login plain | ||
+ | saslauthd_path: | ||
+ | |||
+ | Editez le fichier / | ||
+ | |||
+ | START=yes | ||
+ | MECHANISMS=" | ||
+ | OPTIONS=" | ||
+ | |||
+ | | ||
+ | Créez les répertoires et attribuez les droits. | ||
+ | |||
+ | mkdir -p / | ||
+ | chown -R root:sasl / | ||
+ | chmod 710 / | ||
+ | |||
+ | |||
+ | Créez un lien symbolique pour que cela fonctionne lorsque postfix est chrooter [sionib] : | ||
+ | |||
+ | ln -s / | ||
+ | |||
+ | <note warning> Depuis au moins Ubuntu 14.04, le lien symbolique disparaît à chaque reboot. Comme workaround, éditez / | ||
+ | |||
+ | sudo vi / | ||
+ | |||
+ | |||
+ | Et ajoutez ces lignes tout à la fin du fichier : | ||
+ | |||
+ | / | ||
+ | ln -s / | ||
+ | / | ||
+ | |||
+ | Ainsi le lien sera recréé à chaque reboot et sasl fonctionnera correctement. | ||
+ | |||
+ | </ | ||
+ | |||
+ | Créez le fichier / | ||
+ | |||
+ | auth | ||
+ | account | ||
+ | |||
+ | Redémarrez sasl | ||
+ | |||
+ | / | ||
+ | |||
+ | Rajouter l' | ||
+ | |||
+ | | ||
+ | |||
+ | |||