====== Mettre en place un serveur mail (sous slackware) ====== Mon but est d'installer un serveur mail basé sur [[http://www.postfix.org/|postfix]], [[http://www.dovecot.org/|dovecot]], puis de configurer ses outils pour l'utiliser en [[http://fr.wikipedia.org/wiki/Webmail|webmail]] via [[http://www.roundcube.net/|roundcube]] en utilisant le protocole [[http://fr.wikipedia.org/wiki/Imap|IMAP]], ou en passant par un quelconque client mail par IMAP ou [[http://fr.wikipedia.org/wiki/Post_Office_Protocol|POP]]. L'installation de roundcube étant assez simple, je ne parlerai que de postfix et dovecot. ==== Le SMTP avec Postfix ==== === Installation === Prenons le slackbuild de slackbuilds.org disponible [[http://slackbuilds.org/repository/13.1/network/postfix/|ici]] pour slackware-13.1. Avant de l'installer, il faut créer un groupe postfix et postdrop ainsi qu'un utilisateur postfix dont son groupe sera postfix.\\ Vous pouvez les créer avec les commandes suivantes en root : # groupadd -g 200 postfix # groupadd -g 201 postdrop # useradd -u 200 -d /dev/null -s /bin/false -g postfix postfix Je vous laisse le soin d'exécuter le slackbuild puis d'installer le paquet. === Configuration === Voici ce que j'ai dans mon fichier ''/etc/postfix/main.cf'' # Path sample_directory = /etc/postfix config_directory = /etc/postfix sendmail_path = /usr/sbin/sendmail newaliases_path = /usr/bin/newaliases mailq_path = /usr/bin/mailq queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix # Général setgid_group = postdrop mail_owner = postfix myhostname = smtp.domain.tld mydomain = domain.tld myorigin = $mydomain mydestination = $mydomain, $myhostname, localhost.$mydomain, localhost mynetworks = 127.0.0.0/8 192.168.0.2 unknown_local_recipient_reject_code = 550 alias_database = hash:/etc/postfix/aliases alias_maps = hash:/etc/postfix/aliases transport_maps = hash:/etc/postfix/transport # Règles pour accepter ou refuser un message, dès lors qu'on connaît le # destinataire (par la commande RCPT TO) : # - s'il est destiné à un expéditeur forgé chez nous, on le rejette ; # - s'il est destiné à un domaine forgé, on le rejette ; # - s'il vient d'un hôte sûr ou d'un client authentifié, on l'accepte ; # - si l'adresse de destination n'est pas sous forme canonique, on le refuse ; # - finalement, s'il n'est pas destiné à un domaine que l'on gère ou pour # lequel on relaie, on le refuse. smtpd_recipient_restrictions = reject_unlisted_recipient, reject_unknown_recipient_domain, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination # Règles pour accepter ou refuser une connexion : # - on attend une seconde (pour piéger les zombies) ; # - on interdit la parallélisation là où il n'est pas sensé y en avoir. smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, sleep 1, reject_unauth_pipelining # Règles pour accepter ou refuser un message, dès lors qu'on connaît le nom # de l'hôte de l'expéditeur (par sa commande HELO ou EHLO) : # - on refuse les noms d'hôte invalides. smtpd_helo_restrictions = reject_invalid_helo_hostname # Règles pour accepter ou refuser un message, dès lors qu'on connaît l'adresse # de l'expéditeur : # - s'il vient d'un expéditeur inexistant de notre domaine, on le rejette ; # - si le domaine de l'expéditeur n'a pas d'IP ou de MX, on le refuse ; # - s'il vient d'un client sûr ou d'un client authentifié, on l'accepte ; # - si l'adresse de l'expéditeur n'est pas sous forme canonique, on le refuse. smtpd_sender_restrictions = reject_unlisted_sender, reject_unknown_sender_domain, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_sender # SASL smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_sasl_authenticated_header = yes broken_sasl_auth_clients = yes # TLS client smtp_tls_cert_file = /etc/ssl/private/smtp.pem smtp_tls_key_file = $smtp_tls_cert_file smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_scache smtp_tls_session_cache_timeout = 3600s smtp_tls_security_level = may tls_daemon_random_bytes = 32 # TLS server smtpd_tls_cert_file = /etc/ssl/private/smtpd.pem smtpd_tls_key_file = $smtpd_tls_cert_file smtpd_tls_received_header = yes smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache smtpd_tls_security_level = encrypt smtpd_tls_auth_only = yes smtpd_tls_security_level = may # Maildir home_mailbox = Maildir/ mail_spool_directory = /srv/mail # Syslog syslog_facility = mail syslog_name = ${multi_instance_name:postfix}${multi_instance_name?$multi_instance_name} smtp_tls_loglevel = 1 smtpd_tls_loglevel = 1 # Debug debug_peer_level = 2 debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5 # Doc manpage_directory = /usr/man readme_directory = /usr/doc/postfix-2.7.1/README_FILES html_directory = /usr/doc/postfix-2.7.1/html Les lignes suivantes du fichier ''/etc/postfix/master.cf'' doivent être décommentées : smtp inet n - n - - smtpd submission inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes On peut lancer postfix avec la commande : # postfix start ==== Dovecot ==== === Installation === Comme pour postfix, utilisons le slackbuild de slackbuilds.org disponible [[http://slackbuilds.org/repository/13.1/network/dovecot/|ici]] pour slackware-13.1.\\ Comme postfix, il faut créer un groupe et un utilisateur dovecot comme ceci : # groupadd -g 202 dovecot # useradd -d /dev/null -s /bin/false -u 202 -g 202 dovecot Ensuite exécutez le slackbuild et installez le paquet. === Configuration === Copiez l'intégralité des fichiers de configurations au bon endroit : # cp -r /usr/doc/dovecot-2.0.0/example-config/* /etc/dovecot/ Les lignes suivantes sont nécessaires dans le fichier ''/etc/dovecot/dovecot.conf'' : !include conf.d/*.conf !include sasl.conf protocols = imap pop3 listen = *, :: J'ai créé le fichier ''/etc/dovecot/sasl.conf'' avec les lignes suivantes : service auth { unix_listener /var/spool/postfix/private/auth { group = postfix mode = 0660 user = postfix } } Ensuite le fichier ''/etc/dovecot/conf.d/auth-system.conf.ext'' doit contenir : passdb { driver = shadow # [blocking=no] #args = } userdb { # driver = passwd # [blocking=no] #args = } Dans ce cas ce sont les comptes unix qui sont utilisés. Maintenant le fichier ''/etc/dovecot/conf.d/10-mail.conf'' mail_location = maildir:~/Maildir Le but est donc d'utiliser une boîte de type maildir situé dans le $HOME de chaque utilisateur. Reste plus qu'à lancer dovecot : # /etc/rc.d/rc.dovecot start ===== MySQL ===== # mysql --user=mail --password= mail CREATE TABLE `virtual_domains` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `virtual_users` ( `id` INT NOT NULL AUTO_INCREMENT, `domain_id` INT NOT NULL, `password` VARCHAR(106) NOT NULL, `email` VARCHAR(120) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `virtual_aliases` ( `id` INT NOT NULL AUTO_INCREMENT, `domain_id` INT NOT NULL, `source` varchar(100) NOT NULL, `destination` varchar(100) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;