====== 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;