27 Oct, 2007
Tuto : Installation POSTFIX virtual domain + Spamassassin + CLAMAV+ Dovecot + MYSQL + SASL
Posted by: [Pierrot²] In: Internet Culture
Voici mon premier tuto ! Enfin ce n’est pas tout a fait le mien, une grande partie a été ecrite par alxgomz, merci :) Je vous propose une méthode pour installer un serveur de mails sous Debian GNU/Linux etch (4.0). L’avantage de cette méthode est que tout repose sur MySql. Les amoureux du code peuvent donc imaginer les dev les plus fous autour de cette architecture. Je ne couvrirai pas l’installation de Debian, le sujet est déjà archi-couvert et honnetement, c’est pas très dur ! Ce tuto s’adresse à des gens ayant déjà une certaine connaissance des systèmes Linux.
Code couleur :
vert = commandes bash
orange = paramètres de conf
1.packages à installer
- postfix-mysql
- dovecot-imapd
- dovecot-pop3d
- pyzor
- razor
- spamassassin
- spamc
- apache2-mpm-prefork
- mysql-server
- clamsmtp
- libapache2-mod-php5
- php5-mysql
- saslauthd
- sasl2-bin
- libsasl2
- libsasl2-modules
- libpam-mysql
Lors de la configuration post-installation debconf, configurer Postfix comme un site internet.
2.configuration manuelle de postfix:
rerouter les mails destinés à root grâce à /etc/aliases:
root: [email protected]
créer un utilisateur pour la distribution des mails:
~# adduser –-system –-home /var/mail/virtual –-uid 5536 –gid 5536 vmail
Ajouter dans /etc/postfix/main.cf:
virtual_transport = maildrop
virtual_mailbox_base = /var/mail/virtual
virtual_mailbox_domains = mysql:/etc/postfix/mysql/vmail_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/vmail_mboxes.cf
virtual_alias_maps = mysql:/etc/postfix/mysql/vmail_aliases.cf
virtual_minimum_uid = 5536
virtual_uid_maps = static:5536
virtual_minimum_gid = 5536
virtual_gid_maps = static:5536
~# mkdir /etc/postfix/mysql
créer les fichiers dans /etc/postfix/mysql/ :
~# cat /etc/postfix/mysql/vmail_domains.cf
user = postfixadmin
password = postfixadmin
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = domain
where_field = domain
#additional_conditions = and backupmx = ’0′ and active = ’1′
additional_conditions = and active = ’1′
~# cat /etc/postfix/mysql/vmail_mboxes.cf
user = postfixadmin
password = postfixadmin
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
additional_conditions = and active = ’1′
~# cat /etc/postfix/mysql/vmail_aliases.cf
user = postfixadmin
password = postfixadmin
hosts = 127.0.0.1
dbname = postfix
table = alias
select_field = goto
where_field = address
3.configuration de apache2-mpm-prefork:
désactiver l’utf8 dans /etc/apache2/conf.d/charset (en supprimant le fichier ou en commentant son contenu).
Créer un vhost pour l’admin mail comme suit:
<Virtualhost *>
ServerName mailadmin.domain.tld
DocumentRoot <WEB_ROOT>/postfixadmin
CustomLog <APACHE_LOG_DIR>/postfixadmin/access.log combined
ErrorLog <APACHE_LOG_DIR>/postfixadmin/error.log
</Virtualhost>
4.configuration de mysql-server:
créer un user d’administration:
~# mysql
mysql> GRANT ALL PRIVILEGES ON *.* TO ‘user’@'host’ IDENTIFIED BY ‘passwd’ WITH GRANT OPTION;
binder le server sur toutes les adresses réseaux pour permettre l’administration distante du serveur dans /etc/mysql/my.cnf:
bind-address 0.0.0.0
créer une base données pour l’administration de postfix et y associer un user dédié:
~# mysql -u adminuser -p postfixadmin < <WEB_ROOT>/postfixadmin/DATABASE_MYSQL.TXT
5.Installation et configuration de maildrop:
Il faut installer une version 1.5 (la version 2 utilise courier-authlib pour faire l’authentification!!!) un package debian précompilé pour etch et sarge est dispo sur demande auprès de moi.
~# dpkg -i maildrop_package_filname.deb
pour info, switchs de compilation additionnels:
–enable-maildirquota \
–enable-maildrop-uid=5536 –enable-maildrop-gid=5536 \
–enable-trusted-users=’vmail postfix’ \
–enable-maildropmysql –with-mysqlconfig=/etc/maildrop/mysql.conf
modifier /etc/postfix/master.cf comme suit:
maildrop unix – n n – - pipe
flags=R user=vmail argv=/usr/bin/maildrop -w 90 -d ${recipient}
configurer maildrop pour accéder les utilisateur virtuels de la base mysql:
~#cat /etc/maildrop/mysql.conf
hostname 127.0.0.1
port 3306
database postfix
dbuser postfixadmin
dbpw postfixadmin
dbtable mailbox
default_uidnumber 5536
default_gidnumber 5536
uidnumber_field 5536
gidnumber_field 5536
uid_field username
homedirectory_field ‘/var/mail/virtual’
mailstatus_field active
where_clause "AND active=1
créer le fichier de filtre principal de maildrop:
~# cat /etc/maildroprc
LOCALPART=`echo "$LOGNAME" | awk -F@ ‘{print $1}’`
USERDOMAIN=`echo "$LOGNAME" | awk -F@ ‘{print $2}’`
MAILDIRQUOTA=`echo "SELECT quota FROM mailbox WHERE username=’$LOGNAME’" | \
mysql -h 127.0.0.1 -u maildrop –password=dropmail postfix | tail -n 1`
MAILBASE="/var/mail/virtual"
DOMAINHOME="$MAILBASE/$USERDOMAIN/"
DEFAULT="$DOMAINHOME/$LOCALPART"
VERBOSE=9
`[ -d "$DOMAINHOME" ]`
if ($RETURNCODE == 0)
{
`maildirmake -q ${MAILDIRQUOTA}S $DEFAULT`
}
else
{
`mkdir -p -m 2700 $DOMAINHOME`
`maildirmake $DEFAULT`
`maildirmake -q ${MAILDIRQUOTA}S $DEFAULT`
`maildirmake -f Sent $DEFAULT`
`maildirmake -f Trash $DEFAULT`
}
if (/^X-Spam-Status: Yes/)
{
`[ -d "$DEFAULT/.Spam" ]`
if ($RETURNCODE == 0)
{
exception {
to $DEFAULT/.Spam/
}
}
else
{
exception {
`maildirmake -f Spam $DEFAULT`
to $DEFAULT/.Spam/
}
}
}
exception {
INCLUDE $HOME/.mailfilter
}
to $DEFAULT
6.Configuration de d
ovecot-imap & dovecot-pop3
la configuration tiens en 2 fichiers:
~# cat /etc/dovecot/dovecot.conf
protocols = imap pop3
listen = *
disable_plaintext_auth = no
log_path = /var/log/dovecot.log
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/var/mail/virtual/%d/%n
mail_extra_groups = mail
protocol imap {
}
protocol pop3 {
}
auth_verbose = yes
auth_debug = yes
auth_debug_passwords = yes
auth default {
}
dict {
}
plugin {
}
~# cat /etc/dovecot-sql.conf
driver = mysql
connect = host=localhost dbname=postfix user=postfixadmin password=postfixadmin
default_pass_scheme = MD5
password_query = SELECT password FROM mailbox WHERE username = ‘%u’ AND active = ’1′
7.configuration de clamsmtp et de clamav-daemon:
ajouter ceci dans le fichier /etc/postfix/master.cf:
## FOR CLAMSMTP
scan unix – - n – 16 smtp
-o smtp_send_xforward_command=yes
-o smtp_enforce_tls=no
# For injecting mail back into postfix from the filter
127.0.0.1:10025 inet n – n – 16 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
8.configuration de spamassassin:
la configuration de spamassassin passe par la création d’une base et d’un user mysql dédié au système antispam:
~# mysql
mysql> create database spamassassin
mysql> grant all privileges on spamassassin.* to ‘spamassassin’@'localhost’ identified by ‘spamstinks’;
puis on crée la structure de la base à l’aide des fichiers fournie par la distribution dans /usr/share/doc/spamassassin/sql:
cat /usr/share/doc/spamassassin/sql/*_mysql.sql | mysql -u adminuser -p spamassassin
puis rajouter les lignes suivantes dans /etc/spamassassin/local.cf:
auto_whitelist_factory Mail::SpamAssassin::SQLBasedAddrList
user_awl_dsn DBI:mysql:spamassassin:172.21.1.25
user_awl_sql_username spamassassin
user_awl_sql_password IDontNeedViagra
bayes_store_module Mail::SpamAssassin::BayesStore::SQL
bayes_sql_dsn DBI:mysql:spamassassin:172.21.1.25
bayes_sql_username spamassassin
bayes_sql_password IDontNeedViagra
bayes_sql_override_username COLLABORATIVE
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Checker-Version
bayes_ignore_header X-Spam-Level
bayes_ignore_header X-Spam-Status
bayes_ignore_header X-Spam-Spamity
bayes_ignore_header X-Spam-Report
user_scores_store_module Mail::SpamAssassin::BayesStore::SQL
user_scores_dsn DBI:mysql:spamassassin:172.21.1.25
user_scores_sql_username spamassassin
user_scores_sql_password IdontNeedViagra
dcc_timeout 2
pyzor_timeout 2
razor_timeout 2
add_header spam Spamity _YESNOCAPS_
9.Installation et configuration de postfix-admin:
Décomprésser l’archive (téléchargée sur sourceforge par exemple) dans la webroot d’apache.
Renommer config.inc.php.sample en config.inc.php et l’éditer pour:
renseigner l’URL
renseigner le path
renseigner les adresses mail administratives (abuse, postmaster…), le vacation domain, et les textes du footer de la page.
changer la langue si nécessaire.
renseigner la conf de mysql
mettre les quotas à YES
mettre domain_path à YES
mettre domain_in_mailbox à NO
mettre vacation à YES
mettre alias_control à YES
supprimer le fichier setup.php,
rennomer les fichier modt-*.txt en .bak
Ensuite on modifie la directive AuthUserFile pour la faire pointer vers le .htpasswd <WEB_ROOT>/postfixadmin/admin/.htpasswd.
Enfin on peut recréer le fichier .htpasswd avec la commande suivante:
~# htpasswd -c -m <WEB_ROOT>/postfixadmin/admin/.htpasswd <postfixadmin_user>
Configuration de SASL
Editer le fichier /etc/default/saslauthd :
START=yes
MECHANISMS="pam"
OPTIONS="-r -m /var/spool/postfix/var/run/saslauthd"
Créer le répertoire pour le socket et relancer saslauthd :
~# mkdir -p /var/spool/postfix/var/run/saslauthd
~# /etc/init.d/saslauthd restart
Créer les fichiers de configuration suivants :
~# cat /etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd
log_level: 5
mech_list: plain login
allow_plaintext: true
auxprop_plugin: mysql
~# cat /etc/postfix/sasl/smtpd.auxprop
pwcheck_method: auxprop
mech_list: PLAIN LOGIN
minimum_layer: 0
auxprop_plugin: sql
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: postfixadmin
sql_database: postfix
sql_passwd: postfixadmin
sql_select: select password from mailbox where username = ‘%u@%r’
log_level: 5
~# cat /etc/pam.d/smtp
auth required pam_mysql.so user=postfixadmin passwd=postfixadmin
host=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=postfixadmin passwd=postfixadmin host=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1
Enfin ajouter ceci dans /etc/postfix/main.cf et redémarrer postfix :
smtpd_sasl_auth_ena
ble = yes
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
~# /etc/init.d/postfix restart
Et c’est fini ! à cette étape la tout doit fonctionner.. Encore merci à Alxgomz pour ses précieuses informations.











