Serveur de messagerie sous LINUX

7/2008

Dans cette article je vous propose de voir comment mettre en place un serveur de messagerie sous linux.

Cette solution s'appuie sur :

POSTFIX

MYSQL

COURIER

1.1 Mise en place de POSTFIX

1.1.1 Installation depuis les sources

- dans un premier temps on d'esinstalle sendmail : yum remove sendmail

Ici j'installe le système depuis les sources pour avoir la toute dernière version.L'installation par RPM est possible mais il faut s'assurer que le support MYSQL est activé.

cd /usr/local/src/
wget [postfix src]

groupadd -g 1001 vmail
useradd -u 1001 -s /dev/null -g vmail vmail

tar xzf [postfix src]
chown -R root.root [postfix dir]
cd [postfix dir]

make -f Makefile.init makefiles \ 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl -DUSE_TLS -I/usr/include/openssl' \ 'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -lsasl2 -lssl -lcrypto' make
make install

ln -s /usr/sbin/sendmail /usr/lib/sendmail

1.1.2 Configuration de POSTFIX avec MYSQL

POSTFIX est utilisé avec MYSQL car il présente l'avantage d'être multi-domaines et surtout facilement configurable par une interface web type PHPMYADMIN, couplé à un script de création de boite il devient assez simple de mettre en place une messagerie linux;)

/etc/postfix/main.cf

Voici la configuration utilisée ici :

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
myhostname = ks355810.kimsufi.com
mynetworks = 127.0.0.0/8,91.121.138.10,88.171.184.210
inet_interfaces = all
mydestination = ks355817.kimsufi.com, localhost.localdomain, localhost
unknown_local_recipient_reject_code = 550

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.3.3/samples
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES

virtual_mailbox_domains=mysql:/etc/postfix/mysql_virtual_domains
virtual_mailbox_maps=mysql:/etc/postfix/mysql_virtual_mailbox
virtual_alias_maps=mysql:/etc/postfix/mysql_virtual_alias,mysql:/etc/postfix/mysql_virtual_mail2mail

transport_maps = mysql:/etc/postfix/mysql_transport
virtual_mailbox_base = /home/hosting/mail_root
virtual_minimum_uid = 100
virtual_uid_maps = static:1001
virtual_gid_maps = static:1001

smtpd_banner = ESMTP

Partie MYSQL : Il s'appuie sur plusieurs fichiers de configuration préfixé par "mysql" ces fichiers permettent à POSTFIX de faire le mapping avec le SGBD MYSQL.
ces fichiers sont également placés dans /etc/postfix/

mysql_transport
user = mail_server_user
password = xxxxxxx
dbname = mail_server
hosts = localhost
query = SELECT transport FROM transport WHERE domain='%s'
mysql_virtual_alias
user = mail_server_user
password = xxxxxxx
dbname = mail_server
hosts = localhost
query = SELECT goto FROM virtual WHERE email='%s'
mysql_virtual_domains
user = mail_server_user
password = xxxxxxx
dbname = mail_server
hosts = localhost
query = SELECT domain FROM domains WHERE domain='%s'

mysql_virtual_gid
user = mail_server_user
password = xxxxxxx
dbname = mail_server
hosts = localhost
query = SELECT gid FROM users WHERE email='%s'

mysql_virtual_mail2mail
user = mail_server_user
password = xxxxxxx
dbname = mail_server
hosts = localhost
query = SELECT email FROM users WHERE email='%s'
mysql_virtual_mailbox
user = mail_server_user
password = xxxxxxx
dbname = mail_server
hosts = localhost
query = SELECT maildir FROM users WHERE email='%s' AND is_active=1
mysql_virtual_uid
user = mail_server_user
password = xxxxxxx
dbname = mail_server
hosts = localhost
query = SELECT uid FROM users WHERE email='%s'
 

 

 

1.2 Mise en place de COURIER-AUTHLIB & COURIER-IMAP

1.2.1 COURIER-AUTHLIB

Installation du service

COURIER-AUTHLIB fourni l'authentification utilisé par COURIER-IMAP.

Ici j'utilise les versions : courier-authlib-0.60.6 & courier-imap-4.3.1

Dans un premier temps j'installe 2 RPM indispensable :

yum install expect gamin-devel

wget [courier-authlib http src]

tar xjf [courier-authlib src]
chown -R root.root [courier-authlib src]
cd [courier-authlib src]

./configure \ --prefix=/usr/local/courier-authlib \ --without-ipv6 \ --disable-root-check \ --without-authpwd \ --without-authshadow \ --without-authuserdb \ --without-authpgsql \ --without-authldap \ --without-authvchkpw \ --without-authcustom \ --without-authpam \ --without-authpipe \ --with-authmysql \ --with-authdaemon \ --with-redhat

make

make check

make install

make install-configure

Configuration du service

La configuration se fait par le fichier de configuration authmysqlrc : /usr/local/courier-authlib/etc/authlib/

Les champs importants sont :

MYSQL_HOME_FIELD qui détermine ou se trouve le répertoire racine de notre serveur de mail qui stocke les boites mail.

MYSQL_CRYPT_PWFIELD & MYSQL_CLEAR_PWFIELD qui détermine comment sont chyfrés les mots de passe dans la base.

authmysqlrc

MYSQL_SERVER 127.0.0.1

MYSQL_USERNAME mail_server_user
MYSQL_PASSWORD xxxxxxx

MYSQL_PORT 0
MYSQL_OPT 0

MYSQL_DATABASE mail_server
MYSQL_USER_TABLE users

MYSQL_CRYPT_PWFIELD password
#MYSQL_CLEAR_PWFIELD password

MYSQL_UID_FIELD 1001
MYSQL_GID_FIELD 1001

MYSQL_LOGIN_FIELD email

MYSQL_HOME_FIELD '/home/hosting/mail_root'
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir


#MYSQL_QUOTA_FIELD concat(quota,'S')

Script de création de la base "mail_server" : mail_server.sql

 

1.1.3 Script de lancement

/etc/init.d/postfix

1.1.4 Test de la partie SMTP

On lance le tout :

service postfix start

chkconfig --add postfix

 

1.2 Mise en place de COURIER

Les versions courier-authlib-0.60.6, courier-imap-4.3.1 sont utilisées ici.

1.2.1 Mise en place de COURIER-IMAP

cd /usr/local/src

tar xzf [courier-imap src]
chown -R root.root [courier-imap src]
cd [courier-imap src]

./configure \ --prefix=/usr/local/courier-authlib \ --without-authpam \ --without-authldap \ --without-authpwd \ --without-authmysql \ --without-authpgsql \ --without-authshadow \ --without-authuserdb \ --without-authcustom \ --without-authcram \ --without-authpipe \ --with-authdaemon \ --with-authvchkpw \--with-redhat

make

make install

make install-configure

cp courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib

chmod 744 /etc/rc.d/init.d/courier-authlib

chkconfig --add courier-authlib

1.2.1 Mise en place de COURIER-AUTHLIB

COURIERAUTHCONFIG=/usr/local/courier-authlib/bin/courierauthconfig \ CPPFLAGS=-I/usr/local/courier-authlib/include \ ./configure \ --prefix=/usr/local/courier-imap \ --disable-root-check \ --with-ssl \ --with-redhat

make

make install

make install-configure

cp courier-imap.sysvinit /etc/rc.d/init.d/courier-imap

chmod 744 /etc/rc.d/init.d/courier-imap

chkconfig --add courier-imap

1.2.2 Mise en place de COURIER-IMAP

1.3 Filtrage ANTI-SPAM

1.3.1 Mise en place de SPAMASSASSIN & RAZOR

Ici la version razor-agents-2.84.tar.bz2

On bunzip & détar le tout ensuite :

On build le make file :

perl Makefile.PL

Et on compile le tout :

make

make test

make install

Le programme installe nottament :

Installing /usr/bin/razor-client
Installing /usr/bin/razor-admin
Installing /usr/bin/razor-revoke
Installing /usr/bin/razor-report
Installing /usr/bin/razor-check


mkdir /etc/razor

razor-admin -d -create -home=/etc/razor

1.3.2 Mise en place de SPAM-ASSASSIN

Ici on utilise la version : Mail-SpamAssassin-3.2.5

La procédure de compilation & la même que pour Razor ...

Spamassassin installe les binaires suivants :

Installing /usr/bin/sa-compile
Installing /usr/bin/spamc
Installing /usr/bin/sa-learn
Installing /usr/bin/spamassassin
Installing /usr/bin/spamd
Installing /usr/bin/sa-update

On vient ensuite créer l'environnement qui va bien pour lancer le service SPAMASSASSIN :

/etc/sysconfig/spamassassin

SPAMDOPTIONS="-x -u spamd -H /home/spamd -d"

cp spamd/redhat-rc-script.sh /etc/rc.d/init.d/spamd

chmod 700 /etc/rc.d/init.d/spamd

chkconfig --add spamd

Configuration de SPAMASSASSIN :

/etc/mail/spamassassin/local.cf

report_safe 0
trusted_networks 127.0.0.1
rewrite_header Subject *****SPAM*****
required_score 5
use_bayes 1
bayes_auto_learn 1
bayes_path /home/hosting/spamdb/.spamassassin/bayes
use_auto_whitelist 1
rbl_timeout 3

groupadd spamd

useradd -g spamd spamd

chown -R spamd.spamd /home/spamd/

service spamd start

1.3.3 Intégration dans POSTFIX de l'ANTISPAM

/etc/postfix/master.cf

#smtp inet n - n - - smtpd

#Add ANTISPAM FILTER :
smtp inet n - n - - smtpd -o content_filter=spamassassin:

Tout à la fin on ajoute ceci :

spamassassin unix - n n - - pipe flags=Rq user=spamassassin argv=/usr/bin/spamassassin.sh -f ${sender} -- ${recipient}

On créé ensuite le script SHELL qui faite le PIPE entre les deux :

/usr/bin/spamassassin.sh

#!/bin/bash
/usr/bin/spamc | /usr/sbin/sendmail -i "$@"
exit $?

On recharge ensuite le service postfix :

service postfix restart

 

 

1.4 Sécurisation de la messagerie

- Evitons l'open relais pour cela rendez vous dans /etc/postfix/main.cf dans la section mydestination & mynetwork

 

© Bastien Barbe 2008