wiki:QuotasParBoite

Version 7 (modified by pierre-gilles, 7 years ago) (diff)

--

MARCHE TOUJOURS PAS

Mise en garde

Si ce Howto cherche à rester à la fois le plus debian-style et AlternC-style, il vous fait quitter les deux. Il s'adresse donc plutôt à un public avertis, capable éventuellement d'aller hacker la conf de postfix à La Rache

Je suis maintenant convaincu que cette méthode est loin d'être la meilleure et qu'il y a moyen de mieux faire. Les maps SQL que j'utilise ne sont certainement pas les plus pertinentes mais j'ai du "bidouiller" pour que ça marche. Je ne dispose malheureusement pas du temps nécessaire pour faire mieux.

Enfin le calcul du quota à la reception de chaque mail charge la machine, donc je déconseille ce type de configuration sur un serveur déja chargé.

Installation de postfix patché pour VDA

Il faut récupérer les sources de postfix pour appliquer les patchs VDA.

apt-get install build-essential dpkg-dev fakeroot debhelper libdb4.2-dev libgdbm-dev libldap2-dev libpcre3-dev libmysqlclient10-dev libssl-dev libsasl2-dev postgresql-dev po-debconf dpatch
cd /usr/src
apt-get source postfix

wget http://web.onda.com.br/nadal/postfix/VDA/postfix-2.1.5-trash.patch.gz
gunzip postfix-2.1.5-trash.patch.gz
cd postfix-2.1.5
patch -p1 < ../postfix-2.1.5-trash.patch
dpkg-buildpackage
cd ..
dpkg -i postfix_2.1.5-9_i386.deb
dpkg -i postfix-mysql_2.1.5-9_i386.deb
dpkg -i postfix-tls_2.1.5-9_i386.deb

Ensuite on fixe ces packages afin qu'il ne soit plus mis à jour :

dpkg --get-selections| grep postfix | sed s/hold/install/ | dpkg --set-selections
aptitude hold postfix postfix-doc postfix-mysql postfix-pcre postfix-tls

Mise en place du champs quota dans MySQL

Nous allons ajouter un champs quota à la table mail_users d'AlternC, nous fixons ici un quota en 100Mo , cette donnée est exprimée en octets.

 mysql -usysusr -pmot_de_passe system -e "ALTER TABLE `mail_users` ADD `quota`  INT DEFAULT '104857600' NOT NULL ;"

Il faut en plus compiler une extension pour mysql afin que de disposer d'une fonction mailfilter. AlternC utilisant le transport local pour faire la délvrance nous devons sortir de ce shema afin de passer par un transport virtuel.

tar zxvf mailfilter.tgz
cd mailfilter
make 
cp mailfiter.so /usr/lib/mysql-fct-mailfilter.so
ldconfig 
mysql restart
mysql -usysusr -pmot_de_passe -e "create function mailfilter returns string soname 'mysql-fct-mailfilter.so' ;"

Modification des confs d'AlternC pour postfix et courrier

Il faut éditer /etc/alternc/templates/postfix/main.cf et le remplacer par :

#
# Fichier de configuration de Postfix pour AlternC
# $Id: main.cf,v 1.17 2006/01/12 06:50:15 anarcat Exp $
# 
# %%warning_message%% 
# pour postfix SARGE v2

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
mail_owner = postfix
# recipient_delimiter = +

home_mailbox = Maildir/

smtpd_banner = $myhostname ESMTP

header_checks = regexp:/etc/postfix/header_checks
body_checks = regexp:/etc/postfix/body_checks

local_destination_concurrency_limit = 8
default_destination_concurrency_limit = 10

myhostname = %%fqdn%%
myorigin = %%fqdn%%
mynetworks = 127.0.0.1 %%mynetwork%%  82.127.2.119 81.80.253.50


# Configuration TLS pour le serveur smtp : 
smtpd_use_tls = yes
smtpd_tls_dcert_file = /etc/courier/pop3d.pem
smtpd_tls_dkey_file = $smtpd_tls_dcert_file
smtpd_tls_CApath = /etc/ssl/certs/
smtpd_tls_key_file =  $smtpd_tls_dcert_file
smtpd_tls_cert_file =  $smtpd_tls_dcert_file
smtpd_tls_loglevel = 0
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

# Configuration TLS pour le client smtp
smtp_use_tls = yes
smtp_tls_dcert_file = $smtpd_tls_dcert_file
smtp_tls_dkey_file = $smtpd_tls_dcert_file
smtp_tls_CApath = $smtpd_tls_CApath

# Configuration SASL via sasldb (/etc/sasldb) uniquement en TLS.
# Sinon le pass passe en clair et c'est mal !
smtpd_tls_auth_only = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = postfix
smtpd_sasl_security_options = noanonymous
enable_sasl_authentification = yes
broken_sasl_auth_clients = yes

# Pour �iter certains vieux spammeurs.
disable_vrfy_command = yes

# On autorise le relai �: les authentifi� en saslet nos domaines.
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_invalid_hostname, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unauth_pipelining, reject_unauth_destination

alias_maps = mysql:/etc/postfix/mymailinglists.cf mysql:/etc/postfix/myalias-only.cf hash:/etc/aliases

default_privs = www-data
program_directory = /usr/lib/postfix

#Quota Postfix VDA
virtual_minimum_uid = 32
virtual_gid_maps = proxy:mysql:/etc/postfix/mygid.cf proxy:mysql:/etc/postfix/mygidunderscore.cf
virtual_uid_maps = static:33
virtual_transport = virtual
virtual_mailbox_base = /
virtual_alias_maps =  proxy:mysql:/etc/postfix/myredirections.cf proxy:mysql:/etc/postfix/mymixed.cf 
virtual_mailbox_maps = proxy:mysql:/etc/postfix/myvirtualmaildirunderscore.cf proxy:mysql:/etc/postfix/myvirtualmaildir.cf 
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mydomains.cf proxy:mysql:/etc/postfix/myunderscore.cf
virtual_alias_domains =
append_at_myorigin = no
append_dot_mydomain = no
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/myquota.cf
virtual_mailbox_limit_override = yes
virtual_mailbox_limit = 1073741824
virtual_mailbox_limit_inbox = no
virtual_maildir_limit_message = La boite email de votre destinataire est pleine.
virtual_create_maildirsize = yes
virtual_overquota_bounce = yes
proxy_read_maps= $virtual_gid_maps $virtual_alias_maps $virtual_mailbox_domains $virtual_mailbox_maps $virtual_mailbox_limit_maps  proxy:unix:passwd.byname 
local_transport = local
mydestination = 

il faut éditer le fichier : /etc/alternc/templates/courier/authmysqlrc à la ligne 131 mettre :

MYSQL_QUOTA_FIELD quota

Ensuite il faut reprendre les fichiers de maps mysql pour postfix :

tar zxvf conf.tgz 
cd conf
for i in * 
sed -i s/MDP_SQL/A_REMPLACER_PAR_LE_VOTRE/ $i
cp * /etc/postfix

changer les droits :

chmod 640 /etc/postfix/*.cf 
chgrp postfix /etc/postfix/*.cf

AlternC install

Ensuite un petit :

alternc.install 

Et si tout va bien tout roule :)

Todo

Ajouter un script de notification de quota pour les utilisateurs.

Attachments

  • conf.tgz (812 bytes) - added by pierre-gilles 7 years ago. Maps MySQL pour Postfix pour une delivrance via virtual
  • mailfilter.tgz (1.9 KB) - added by pierre-gilles 7 years ago. Extension pour Mysql 4.X permettant d'utiliser un filtre mailfilter