(my) life on a bicycle

27 Oct, 2007

Tuto : Installation POSTFIX virtual domain + Spamassassin + CLAMAV+ Dovecot + MYSQL + SASL

Posted by: [Pierrot²] In: Internet Culture

lesminispinguins

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.

Tags:

Comment about "Tuto : Installation POSTFIX virtual domain + Spamassassin + CLAMAV+ Dovecot + MYSQL + SASL"

Comments are closed.

Flickr PhotoStream

La Révolution sera téléchargée...Pilatus PorterNature strikes backHuman Shame94 Montana ColorsDarth and JokerBad vs... hmm good?AngelIMG_5765DiabloMetroAs tu deja danse?

About

music, pictures, artwork, events, discoveries, real and imaginary dialogs that punctuates my everyday. This is my continuous exploration of Amsterdam's peoples and way of life.