Un serveur de mails Debian : Postfix + Dovecot + MySQL = SMTPS / IMAPS / SASL

Introduction

Je propose ici une configuration simple et efficace pour mettre en place un serveur de mails opérationnel en quelques minutes.

Configuration effectuée sur une Debian Squeeze

MYSQL

Pour commencer, il faut créer trois tables : une pour gérer les noms de domaine, une pour gérer les alias et une dernière pour gérer les emails.

+—————————–+
| Tables_in_postfix
+—————————–+
| virtual_alias_maps
| virtual_mailbox_domains
| virtual_mailbox_maps
+—————————–+

Installation de mysql

# aptitude install mysql-server

On se connecte à mysql

# mysql -p

Création de la base « postfix »

mysql> create database postfix;

Création d’un utilisateur « postfix » et ajustement des droits sur la base « postfix »

mysql> grant select,insert,update,delete on postfix.* TO 'postfix'@'localhost' identified by 'LKy65Jh';

Prise en compte des modifications

mysql> flush privileges;

On se place sur la base « postfix »

mysql> use postfix;

Création des tables « virtual_mailbox_domains » « virtual_alias_maps » « virtual_mailbox_maps »

mysql> CREATE TABLE virtual_mailbox_domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );
mysql> CREATE TABLE virtual_alias_maps (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );
mysql> CREATE TABLE virtual_mailbox_maps (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );

Op, on quitte mysql

mysql> quit

Voila pour Mysql ! Nous passons maintenant à la configuration Postfix.

POSTFIX

# aptitude install postfix postfix-mysql

Le nom du serveur : « postfix.beo.org »

Il faut créer un groupe qui sera utiliser par Postfix pour la gestion par vmail

# groupadd -g 5000 vmail
# useradd -g vmail -u 5000 vmail -d /home/vmail -m

Nous allons maintenant créer les 3 fichiers nécessaires au mapping entre les tables Mysql et la configuration de Postfix

# vi /etc/postfix/mysql-virtual-mailbox-domains.cf

user =postfix
password =LKy65Jh
hosts = 127.0.0.1
dbname = postfix
query= SELECT domain FROM virtual_mailbox_domains WHERE domain=’%s’

# vi /etc/postfix/mysql-virtual-mailbox-maps.cf

user =postfix
password =LKy65Jh
hosts = 127.0.0.1
dbname = postfix
query= SELECT CONCAT(SUBSTRING_INDEX(email,’@’,-1),’/’,SUBSTRING_INDEX(email,’@’,1),’/’) FROM virtual_mailbox_maps WHERE email=’%s’

# vi /etc/postfix/mysql-virtual-alias-maps.cf

user =postfix
password =LKy65Jh
hosts = 127.0.0.1
dbname = postfix
query = SELECT destination FROM virtual_alias_maps WHERE source=’%s’

Il faut maintenant ajouter dans le fichier main.cf de Postfix les configurations de mapping, et de restrictions pour la gestion des envois et de la réception des emails (Cela constitue une première étape contre le SPAM, qui pourra être approfondie avec des systèmes complémentaires comme SpamAssassin, DSPAM et autre).

# vi /etc/postfix/main.cf

A ajouter au fichier :

mynetworks = 192.168.0.0/16 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_mailbox_base = /home/vmail
virtual_create_maildirsize = yes
virtual_maildir_extended = yes
virtual_transport=dovecot

# Requirements for the HELO statement
smtpd_helo_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_hostname,
reject_invalid_hostname,
permit

smtpd_recipient_restrictions=
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_non_fqdn_sender,
reject_unknown_recipient_domain,
reject_invalid_helo_hostname,
reject_unlisted_recipient,
reject_unlisted_sender,
reject_non_fqdn_helo_hostname,
reject_rbl_client list.dsbl.org,
reject_rhsbl_sender dsn.rfc-ignorant.org

smtpd_sender_restrictions =
warn_if_reject reject_unverified_sender,
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
permit

SMTPS et authentification SASL

Les certificats SSL/TLS sont générés à l’installation de postfix.

# vi /etc/postfix/main.cf

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# SASL SMTPS
smtpd_sasl_type = dovecot
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
# Specify a list of properties separated by comma or whitespace
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = beo.org

Et enfin, j’active smtp et smtps

# vi /etc/postfix/master.cf

#smtp inet n – – – – smtpd
submission inet n – – – – smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING

smtps inet n – – – – smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject

DOVECOT

Je active volontairement IMAPS (IMAP est superflu)

# aptitude install dovecot-common dovecot-imapd

# vi /etc/postfix/master.cf

Ajouter au fichier

dovecot unix – n n – – pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}

# vi /etc/dovecot/dovecot.conf

protocols = imaps
log_timestamp = « %Y-%m-%d %H:%M:%S  »
mail_location = maildir:/home/vmail/%d/%n/Maildir

ssl_cert_file = /etc/ssl/certs/dovecot.pem
ssl_key_file = /etc/ssl/private/dovecot.pem

namespace private {
separator = .
prefix = INBOX.
inbox = yes
}

protocol lda {
log_path = /home/vmail/dovecot-deliver.log
auth_socket_path = /var/run/dovecot/auth-master
postmaster_address = postmaster@example.com
mail_plugins = sieve
global_script_path = /home/vmail/globalsieverc
}

auth default {
user = root

passdb sql {
args = /etc/dovecot/dovecot-sql.conf
}

userdb static {
args = uid=5000 gid=5000 home=/home/vmail/%d/%n
#allow_all_users=yes
}

socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = vmail
}

client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}

# vi /etc/dovecot/dovecot-sql.conf

driver = mysql
connect = host=127.0.0.1 dbname=postfix user=postfix password=LKy65Jh
default_pass_scheme = CRYPT
password_query = SELECT email as user, password FROM virtual_mailbox_maps WHERE email=’%u’;

Tests

Voila, il suffit de créer un domaine, utilisateur et un alias pour tester !

INSERT INTO virtual_mailbox_domains (domain) VALUES ('beo.org');

INSERT INTO virtual_mailbox_maps (email, password) VALUES ('alex@beo.org', ENCRYPT('kiki@'));

INSERT INTO virtual_alias_maps VALUES ('alias@beo.org', 'alex@beo.org,alexandre.domont@bobof.org');

Une petite vérification sur les services et ports à l’écoute !

netstat -natup

Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale Adresse distante Etat PID/Program name
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 971/mysqld
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 567/portmap
tcp 0 0 0.0.0.0:465 0.0.0.0:* LISTEN 1891/master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 853/sshd
tcp 0 0 0.0.0.0:49271 0.0.0.0:* LISTEN 579/rpc.statd
tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 1783/dovecot
tcp 0 0 127.0.0.1:3306 127.0.0.1:49212 ESTABLISHED 971/mysqld
tcp 0 0 127.0.0.1:49212 127.0.0.1:3306 ESTABLISHED 1789/dovecot-auth
tcp 0 0 192.168.0.169:22 192.168.0.14:36629 ESTABLISHED 1758/0
tcp6 0 0 :::22 :::* LISTEN 853/sshd
udp 0 0 0.0.0.0:111 0.0.0.0:* 567/portmap
udp 0 0 0.0.0.0:755 0.0.0.0:* 579/rpc.statd
udp 0 0 0.0.0.0:47143 0.0.0.0:* 579/rpc.statd

Cet article Un serveur de mails Debian : Postfix + Dovecot + MySQL = SMTPS / IMAPS / SASL est apparu en premier sur PointRoot.org.

Vus : 2323
Publié par pointroot.org : 17