Mettre en place un serveur mail (sous slackware)

Mon but est d'installer un serveur mail basé sur postfix, dovecot, puis de configurer ses outils pour l'utiliser en webmail via roundcube en utilisant le protocole IMAP, ou en passant par un quelconque client mail par IMAP ou 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 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 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 {
  # <doc/wiki/AuthDatabase.Passwd.txt>
  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=<secret> 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;
tuto/serveur_mail.txt · Dernière modification: 2015/03/15 12:03 par Thomas
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0