Linux:Serveur de mail avec CyrusImap Sieve Postfix Clamav Dspam

Un article de Djjnet.

Présentation de la solution :

  • solution hébergement d'emails complète multidomaines avec login/email du type : utilisateur@domaine.com
  • serveur Pop/Imap : CyrusImap
  • serveur smtp avec possibilité d'envoi en dehors du réseau local par authentification : Postfix
  • antivirus : Clamav
  • antispam par apprentissage avec possibilité de quarantaine et préférences propre à chaque utilisateur : Dspam
  • interface de gestion des comptes emails et alias avec administrateurs de domaines : Web-cyradm
  • webmail : Squirrelmail

Cette documentation est basée sur les versions des logiciels dans Debian Etch.

Sommaire

Installation des packages

Partie MySQL :

apt-get install mysql-server-5.0

Partie Postfix :

apt-get install postfix postfix-mysql postfix-pcre

Choisir "Site Internet" comme configuration pour postfix, nous modifierons les fichiers de configuration ensuite.

Partie CyrusImap :

apt-get install libsasl2-modules cyrus-admin-2.2 cyrus-clients-2.2 cyrus-common-2.2 cyrus-doc-2.2 cyrus-imapd-2.2 cyrus-pop3d-2.2 sasl2-bin

Partie Dspam :

apt-get install dspam libdspam7-drv-mysql dspam-webfrontend libapache2-mod-auth-pam libpam-mysql

Partie Clamav :

apt-get install clamav clamsmtp clamav-freshclam

Partie WebCyradm et Webmails :

apt-get install apache2 php5 php5-mysql php-pear php-db gettext

Configuration de WebCyradm et de la base mail

  • Télécharger la version 0.5.5 ici : http://www.web-cyradm.org/web-cyradm-svn-0.5.5.tar.gz
  • Décompresser dans le dossier /var/www
  • Créer la base mail et donner les droits à l'utilisateur mail.
  • Editer le fichier scripts/create_mysql.sql et mettre un mot de passe à l'utilisateur admin
  • pour accountuser, modifier cyrus en admin et mettre le même mot de passe.
  • puis :
mysql -p mail < scripts/create_mysql.sql
  • Effacer le fichier scripts/create_mysql.sql
  • Dans le dossier config :
mv conf.php.dist conf.php
  • Editer conf.php et indiquer les informations de connexion à CyrusImap (utilisateur admin et mot de passe défini au dessus) ainsi que les informations de connexion à MySQL
chown www-data:www-data conf.php
chmod 640 conf.php
  • Modifier conf.php :
$DOMAIN_AS_PREFIX = 1;
$FQUN = 1;
  • Dossier de logs :
mkdir /var/log/web-cyradm
chown www-data /var/log/web-cyradm/

Fonction check_alias

Lancer sous mysql cette requête pour ajouter la fonction utilisée ensuite par postfix :

use mail
DELIMITER ;;
DROP FUNCTION IF EXISTS `check_alias`;;
CREATE FUNCTION `check_alias`(testaddress varchar(255)) RETURNS varchar(255) CHARSET latin1
DETERMINISTIC
BEGIN
       DECLARE res varchar(255);
       SET res= (SELECT alias FROM virtual WHERE alias = testaddress AND status = '1' limit 1);
       IF res != 
         THEN SET res = 'DUNNO';
         RETURN res;
       END IF;
       SET res= (SELECT address FROM lists_mailman WHERE address = testaddress limit 1);
       IF res != 
         THEN SET res = 'DUNNO';
       ELSE SET res = CONCAT('553 Mailbox \,testaddress,'\' not found');
       END IF;
       RETURN res;
END;;
DELIMITER ;

Configuration de Postfix

Les deux fichiers de configuration principaux sont : /etc/postfix/main.cf et /etc/postfix/master.cf.

Le fichier /etc/postfix/main.cf

Le fichier main.cf contient la configuration de postfix sur les emails acceptés/refusés mais aussi comment délivrer les emails.

Modification des temps par défaut pour suite à une erreur de délivraison d'un email, d'abord le temps avant message d'alerte à l'émetteur puis les temps avant suppression (1d correspond à 1 jour) :

delay_warning_time = 4h
bounce_queue_lifetime = 10d
maximal_queue_lifetime = 10d

Limiter la taille des messages reçu en octets (ici pour 25Mo) :

message_size_limit = 26214400

Définir le nom du serveur :

myhostname = mx.dj-j.net

Domaine des messages envoyés depuis le serveur, $myhostname dans notre exemple utilisateur@mx.dj-j.net (attention de ne pas mettre la même chose qu'un domaine virtuel) :

myorigin = $myhostname

Domains autorisés des messages destinés aux comptes locaux

mydestination = $myhostname, localhost

Définition des alias pour les comptes locaux, attention à ne pas faire de boucle et de bien définir une adresse réelle pour l'alias root !

alias_maps = hash:/etc/aliases hash:/var/lib/mailman/data/aliases
alias_database = hash:/etc/aliases hash:/var/lib/mailman/data/aliases

Voir Linux:Listes_de_diffusion_avec_Mailman_et_Postfix pour la partie mailman.

Par défaut, postfix relaie les emails de la machine et des machines du sous-réseau de la machine. Ici, nous n'autorisons que la machine locale et notre réseau local, mynetworks et mynetworks_style sont équivalents. mynetworks utilise comme paramètre des références de réseaux séparés par des espaces ou des virgules et mynetworks_style de dénominations (host, subnet ou class).
Ainsi nous pouvons envoyer des emails grâce à notre serveur smtp.

mynetworks = 127.0.0.0/8,192.168.100.0/24
#mynetworks_style = host

Postfix peut relayer les emails de domaines que vous ne gérez pas par exemple lorsque vous gérez un serveur smtp secondaire. Ils sont à indiquer en paramètre de la variable relay_domains. Si ce n'est pas le cas, mettre cette variable sans valeur :

relay_domains =

Il est possible de demander à postfix de passer par un autre serveur smtp pour l'envoi des emails, par exemple celui de votre FAI (ex : smtp.free.fr). Si cette valeur est vide, l'envoi des messages est direct.

relayhost =

Permettre le smtp authentifié pour envoyer des emails depuis l'extérieur en passant par votre serveur smtp :

broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous

Définir comment délivrer les emails acceptés : Ne pas utiliser la méthode cyrus-deliver qui est déprécier. Cyrus et Postfix vont communiquer par un socket lmtp. Il faut indiquer pour le socket lmtp le chemin en relatif au dossier racine de postfix (/var/spool/postfix/ par défaut). En effet, lmtp est par défaut chrooté (lmtp unix - - - - - lmtp dans le fichier master.cf)

mailbox_transport = lmtp:unix:public/lmtp
virtual_transport = $mailbox_transport

Interfaces réseau sur lesquelles postfix écoute pour recevoir les emails :

inet_interfaces = all

Domaines des emails acceptés sur le serveur :

virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-domain.cf

Fichier contenant les emails pour les domaines définis ci-dessus :

virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual.cf  hash:/var/lib/mailman/data/virtual-mailman

Voir Linux:Listes_de_diffusion_avec_Mailman_et_Postfix pour la partie mailman.

proxy: permet de cacher les connexions Mysql. C'est utile dès que le serveur commence à être pas mal utilisé.

Le reject est envoyé qu'après le RECT TO. Certains clients smtp ne prendrait sinon pas en compte de reject.

smtpd_delay_reject = yes

Il est possible de mettre warn_if_reject devant une restriction pour la tester, il y aura un message dans les logs.
Dans les fichiers de type check_..._access, utiliser les mots clefs :

  • OK : accept le message : passe au prochain type de restrictions
  • REJECT : rejeter le message
  • DUNNO : passer à la restriction suivante
smtpd_client_restrictions =
 permit_mynetworks
 check_client_access hash:/etc/postfix/check_client_access
 reject_rbl_client cbl.abuseat.org
 # sbl-xbl.spamhaus.org n'est à utiliser que pour des usages non commerciaux
 reject_rbl_client sbl-xbl.spamhaus.org
 reject_unknown_client

Rejeter les clients qui ne s'identifient pas

smtpd_helo_required = yes
smtpd_helo_restrictions =
 permit_mynetworks
 check_helo_access hash:/etc/postfix/check_helo_access
 reject_non_fqdn_hostname
 reject_invalid_hostname
 reject_unknown_hostname
smtpd_sender_restrictions =
 permit_mynetworks
 check_sender_access hash:/etc/postfix/check_sender_access
 reject_non_fqdn_sender
 reject_unknown_sender_domain

La restriction suivante effectue une vérification sur le serveur mail de l'expéditeur. Cette option est efficace pour éliminer le spam par contre, il y a un risque de se faire blacklister à cause des demandes sur le serveur de mail de l'émetteur potentiel. J'ai choisi de ne plus l'utiliser.

 # reject_unverified_sender
smtpd_recipient_restrictions =
 permit_mynetworks
 permit_sasl_authenticated
 reject_unauth_destination
 reject_unlisted_recipient
 reject_non_fqdn_recipient
 #Comme nous utilisons virtual_mailbox_domains et virtual_alias_maps, postfix ne vérifie pas si la boîte email ou l'alias existe avant de l'envoyer à cyrus. Nous allons donc faire une requête MySQL pour vérifier cela et éviter des traitements inutiles.
 check_recipient_access mysql:/etc/postfix/mysql-check-virtual.cf
 #Appel à l'antispam dspam
 check_recipient_access pcre:/etc/postfix/dspam_filter_access

Le fichier /etc/postfix/master.cf

#Pour les connexions à clamav :
clamav      unix  -       -       n       -       16      smtp -o smtp_send_xforward_command=yes
#Pour les connexions à dspam :
dspam      unix  -       -       n       -       -       lmtp
#Retour de clamav
127.0.0.1:10026 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
#Retour de dspam
127.0.0.1:10028 inet  n -       n       -       15      smtpd
 -o content_filter=clamav:127.0.0.1:10025
 -o local_recipient_maps=
 -o smtpd_helo_restrictions=
 -o smtpd_client_restrictions=
 -o smtpd_sender_restrictions=
 -o smtpd_recipient_restrictions=permit_mynetworks,reject
 -o mynetworks_style=host
 -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks

Créer le fichier /etc/postfix/sasl/smtpd.conf

Pour l'authentification SMTP AUTH :

pwcheck_method: saslauthd
mech_list: plain login

Le fichier /etc/postfix/dspam_filter_access

Les expressions régulières sont validées dans l'ordre des règles. Une fois qu'une est validée, postfix arrête la vérification.

#les 2 boites à ne pas filtrer (celles où sont envoyé les emails pour l'apprentissage de dspam)
/^(spam|notspam)@.*$/ OK
#puis domaines à filtrer par dspam (une ligne par domaine)
/^.*@dj-j.net$/  FILTER dspam:unix:/tmp/dspam.sock
#puis domaines qui n'ont que la vérification antivirus, dans notre cas, tous les autres domaines :
/^.*$/ FILTER clamav:127.0.0.1:10025

Utiliser la commande suivante pour mettre à jour les modifications :

postmap /etc/postfix/dspam_filter_access

Les fichiers de connexion à mysql

Contenu de /etc/postfix/mysql-domain.cf :

#User name and password to log into the mysql server
hosts = 127.0.0.1
user = mail
password = PASSWORD
# the database name on the servers
dbname = mail
# the table name
table = domain
#
select_field = domain_name
where_field = domain_name

Contenu de /etc/postfix/mysql-virtual.cf :

# the user name and password to log into the mysql server
hosts = 127.0.0.1
user = mail
password = PASSWORD
# the database name on the servers
dbname = mail
# the table name
table = virtual
#
select_field = dest
where_field = alias
additional_conditions = and status = '1'

Contenu de /etc/postfix/mysql-check-virtual.cf :

hosts = 127.0.0.1 
user = mail
password = PASSWORD
dbname = mail
query = SELECT check_alias('%s')

Droits sur les fichiers :

chown postfix:postfix /etc/postfix/mysql-*
chmod 640 /etc/postfix/mysql-*

Configuration de SASLAUTHD

Il faut modifier le fichier /etc/default/saslauthd afin de démarrer le démond saslauthd, indiquer l'authentification par base sasl ainsi qu'un modification l'endroit où sont les fichiers mux pour communiquer avec Postfix :

START=yes
MECHANISMS="pam"
PARAMS="-r -m /var/spool/postfix/var/run/saslauthd" ou OPTIONS="-r -m /var/spool/postfix/var/run/saslauthd"

Le -r est nécessaire pour l'authentification avec des comptes utilisateurs virtuel avec @domaine.

/etc/init.d/saslauthd stop
mkdir -p /var/spool/postfix/var/run/saslauthd
adduser postfix sasl

Pour que cyrus puisse se connecter à saslauthd malgré la modification :

cd /var/run
mv saslauthd saslauthd.back
ln -s /var/spool/postfix/var/run/saslauthd saslauthd
/etc/init.d/saslauthd start

Configuration de CyrusImap

Les deux fichiers de configuration principaux sont : /etc/imapd.conf et /etc/cyrus.conf.

Le fichier /etc/imapd.conf

Il faut autoriser un utilisateur à se connecter au serveur pour administrer les boîtes mails :

admins: admin

Dossiers :
Configuration :

configdirectory: /var/lib/cyrus

Boîtes emails :

defaultpartition: default
partition-default: /var/spool/cyrus
hashimapspool: true

Pour mettre des point dans les noms des comptes :

unixhierarchysep: yes

Pour des scripts sieve :

sendmail: /usr/sbin/sendmail
sieveusehomedir: false
sievedir: /var/spool/sieve

Temps minimum entre chaque consultation du serveur POP en minutes (0 aucun limite) :

popminpoll: 0

Définir le socket lmtp pour communiquer avec Postfix :

lmtpsocket: /var/spool/postfix/public/lmtp

Il faut définir la méthode d'authentification des utilisateurs, l'utilisation de saslauthd permet de ne pas associer de compte utilisateur local aux boîtes mails :

sasl_pwcheck_method: saslauthd
sasl_mech_list: PLAIN
allowplaintext: yes

Pour permettre l'utilisation des identifiants sous la forme utilisateur@domaine.com

virtdomains: userid

Pour utiliser une connexion cryptée (SSL) en utilisant le TLS qui permet de rester sur le port imap 143 :

tls_cert_file: /var/dj-j.net/ssl/cyrus/mx.crt
tls_key_file: /var/dj-j.net/ssl/sangoku.key 

Le fichier /etc/cyrus.conf

Il suffit dans ce fichier de modifier les lignes correspondantes dans la partie SERVICES :

imap            cmd="imapd -U 30" listen="imap" prefork=5 maxchild=100
pop3            cmd="pop3d -U 30" listen="pop3" prefork=3 maxchild=50
lmtpunix        cmd="lmtpd" listen="/var/spool/postfix/public/lmtp" prefork=2 maxchild=20

En cas de besoin d'authentifier à la fois depuis les comptes en base MySQL et en base sasldb

Modifier le fichier /etc/imapd.conf avec :

sasl_pwcheck_method: saslauthd auxprop
sasl_auxprop_plugin: sasldb

Ajouter un utilisateur avec :

saslpasswd2 -c user

Lister les utilisateurs avec :

sasldblistusers2

Supprimer un utilisateur :

saslpasswd2 -d user

Configuration de dspam

Base MySQL

Créer une base MySQL nommé dspam avec des accès complets pour l'utilisateur dspam
Puis lancer les commandes suivantes :

mysql -u dspam -p dspam < /usr/share/doc/libdspam7-drv-mysql/mysql_objects-speed.sql
mysql -u dspam -p dspam < /usr/share/doc/libdspam7-drv-mysql/virtual_users.sql

Modifier /etc/mysql/my.cnf :

max_allowed_packet doit être >= 8M

Vérifier que dans le fichier /etc/cron.daily/libdspam7-drv-mysql il y a :

PURGE=/usr/share/doc/libdspam7-drv-mysql/purge-4.1.sql

Important :
Dans la table dspam_virtual_uids ajouter tout de suite un utilisateur avec dans le champs username la valeur root car l'utisateur utilisé avec la commande dspam doit être un utilisateur valide :

insert into dspam_virtual_uids (username) values ('root');

Fichier /etc/dspam/dspam.d/mysql.conf

MySQLServer       /var/run/mysqld/mysqld.sock
MySQLUser        dspam
MySQLPass        PASS
MySQLDb          dspam
MySQLUIDInSignature    on
chmod 640 /etc/dspam/dspam.d/mysql.conf
chown dspam:root /etc/dspam/dspam.d/mysql.conf

Créer les alias d'apprentissage de dspam

Dans le fichier /etc/aliases :

spam: "|/usr/bin/dspam --user root --class=spam --source=error"
notspam: "|/usr/bin/dspam --user root --class=innocent --source=error"

Mettre à jour avec la commande :

postalias /etc/aliases

Ajouter aussi dans MySQL ou par l'intermediaire de WebCyradm les alias :

spam@dj-j.net vers spam@localhost
notspam@dj-j.net vers spam@localhost

Configuration de dspam

Fichier /etc/default/dspam

# Do not start dspam.
START=yes
# User that runs dspam.
USER=dspam

Fichier /etc/dspam/dspam.conf
Modifier les paramètres suivants, les autres dans le fichier sont à laisser par défaut :

StorageDriver /usr/lib/dspam/libmysql_drv.so
DeliveryHost        127.0.0.1
DeliveryPort        10028
DeliveryIdent       localhost
DeliveryProto       SMTP
#Trust postfix n'est pas necessaire car postfix communique avec dspam par lmtp
#Trust nobody est nécessaire car /etc/aliases appartient à root, la commande sera alors exécuté en tant que nobody.
Trust nobody
#Pour le control center :
Trust www-data
#Le tag rajouter au sujet de l'email considéré comme spam :
Preference "spamSubject=[SPAM]"
ParseToHeaders on
ChangeModeOnParse on
ChangeUserOnParse on
Opt out
ServerQueueSize 32
ServerPID              /var/run/dspam/dspam.pid
ServerMode standard
ServerParameters        "--deliver=innocent"
ServerIdent             "localhost.localdomain"
ServerDomainSocketPath  "/tmp/dspam.sock"

Les préférences par défaut sont à mettre en base de données et donc il faut utiliser la commande dspam-admin :

  1. Training Mode: TEFT, TOE, TUM, NOTRAIN
dspam_admin ch pref default trainingMode TEFT
  1. Spam Action: quarantine, tag
dspam_admin ch pref default spamAction tag
  1. Sujet en cas de tag :
dspam_admin ch pref default spamSubject "[SPAM]"
  1. Bayesian Noise Reduction: on/off
dspam_admin ch pref default enableBNR on
  1. Automatic Whitelisting: on/off
dspam_admin ch pref default enableWhitelist on
  1. Statistical Sedation: 0-10
dspam_admin ch pref default statisticalSedation 5
  1. Signature Location: message, headers, attachment
dspam_admin ch pref default  signatureLocation message
  1. Whitelist Threshold: the minimum number of innocent hits from a recipient to
  2. be automatically whitelisted. Do not set this value too low!
dspam_admin ch pref default whitelistThreshold 10
  1. showFactors: when set to on, the determining factors for each message will
  2. be added to a X-DSPAM-Factors message header.
dspam_admin ch pref default showFactors on
  1. pour voir le début du message dans l'historique de l'interface Web
dspam_admin ch pref default storeFragments on

Modifier que les droits sur les fichiers de configuration pour être sûr qu'ils sont corrects :

chown -R dspam.dspam /etc/dspam

Configuration de l'interface graphique de dspam

Le fichier /etc/dspam/webfrontend.conf , modifier les paramètres suivants :
Mettre la valeur indiquée pour myhostname dans /etc/postfix/main.cf

$CONFIG{'LOCAL_DOMAIN'} = "mx.dj-j.net";
$CONFIG{'PREFERENCES_EXTENSION'} = 1;

Configuration d'Apache2 pour l'interface graphique de dspam

a2enmod suexec

Ajouter à votre virtualhost :

   SuexecUserGroup dspam dspam
   Addhandler cgi-script .cgi
   Options +ExecCGI -Indexes
   Alias /dspam /var/www/dspam/
   <Directory /var/www/dspam/>
       Addhandler cgi-script .cgi
       Options +ExecCGI -Indexes
       DirectoryIndex dspam.cgi
       AuthPAM_Enabled on
       AuthType Basic
       AllowOverride All
       AuthPAM_FallThrough off
       AuthBasicAuthoritative off
       AuthName "DSPAM Control Center"
       Require valid-user
   </Directory>

Suppression des emails trop anciens dans les quarantaines

Installer mail-expire :

apt-get install mail-expire

Puis créer le script suivant : /etc/cron.daily/cleanquarantine

#!/bin/bash
DAYS=15
DATA=/var/spool/dspam/data
for mbox in `find ${DATA} -name *mbox`
do
     if [ -s $mbox ]; then
               mail-expire --delete ${DAYS} $mbox > /dev/null
               chown dspam.dspam $mbox
               chmod 660 $mbox
       fi;
done

/!\ Nous avons eu de problème avec mail-expire qui utilisait toutes les ressources CPU et plantait sur des boîtes trop importantes et utilisons maintenant archivemail :

apt-get install archivemail
#!/bin/bash
DAYS=15
DATA=/var/spool/dspam/data
for mbox in `find ${DATA} -name *mbox`
do
       if [ -s $mbox ]; then
               rm -f $mbox.new
               nice archivemail -q --delete -d ${DAYS} $mbox
               chown dspam.dspam $mbox
               chmod 660 $mbox
       fi;
done

Configuration de logrotate

Editer le fichier /etc/logrotate.d/dspam pour ajouter :

/var/log/dspam/dspam.messages {
       daily
       missingok
       rotate 30
       compress
}

Cela est très important car la taille de ce fichier augmente petit à petit et fini par atteindre la taille de 2Go et fait alors planter dspam sans aucun logs spécial permettant de trouver le problème.

Optimisation des tables dspam

On peut améliorer les performances de la base en passant en InnoDB

mysql -u root -p
USE dspam;
ALTER TABLE dspam_preferences TYPE=InnoDB;
ALTER TABLE dspam_signature_data TYPE=InnoDB;
ALTER TABLE dspam_stats TYPE=InnoDB;
ALTER TABLE dspam_token_data TYPE=InnoDB;
ANALYZE TABLE dspam_preferences;
ANALYZE TABLE dspam_signature_data;
ANALYZE TABLE dspam_stats;
ANALYZE TABLE dspam_token_data;

Dans le fichier de maintenance de dspam : /usr/share/doc/libdspam7-drv-mysql/purge-4.1.sql, ajouter à la fin :

START TRANSACTION;
optimize table dspam_signature_data, dspam_token_data;
COMMIT;

Configuration de PAM

Dans le dossier /etc/pam.d/ modifier les fichiers suivant :

smtp sieve pop imap apache2

Leur contenu est le même pour tous :

auth sufficient pam_mysql.so user=mail passwd=PASS host=localhost db=mail table=accountuser usercolumn=username passwdcolumn=password crypt=1 logtable=log logmsgcolumn=msg logusercolumn=user loghostcolumn=host logpidcolumn=pid logtimecolumn=time
auth sufficient pam_unix_auth.so
account required pam_mysql.so user=mail passwd=PASS host=localhost db=mail table=accountuser usercolumn=username passwdcolumn=password crypt=1 logtable=log logmsgcolumn=msg logusercolumn=user loghostcolumn=host logpidcolumn=pid logtimecolumn=time
account  sufficient pam_unix_acct.so

Configuration de ClamAV

Configuration de Clamsmtp

Fichier /etc/clamsmtpd.conf

OutAddress: 127.0.0.1:10026
Listen: 10025
Header: X-AV-Checked: ClamAV using ClamSMTP
User: clamsmtp

Configuration de ClamAV

Installation de Squirrelmail

La base

cd /var/www

Télécharger la dernière version stable ainsi que les traductions :

wget //switch.dl.sourceforge.net/sourceforge/squirrelmail/squirrelmail-1.4.13.tar.bz2
wget http://garr.dl.sourceforge.net/sourceforge/squirrelmail/all_locales-1.4.13-20071220.tar.bz2
tar -xjf squirrelmail-1.4.13.tar.bz2
mv squirrelmail-1.4.13 squirrelmail
cd squirrelmail

Pour les pièces jointes et les préférences utilisateurs :

mkdir attach data
chown www-data:www-data attach
chown www-data:www-data data

Configuration

  • lancer ./configure
  • Menu 1 : Indiquer les informations principales d'affichage
  • Menu 2, A, 8 : mettre cyrus
  • Menu 4 : 1 et 2 pour adapter les dossiers (/var/www/squirrelmail/data et /var/www/squirrelmail/attach)
  • Menu 10 : 1 mettre fr_FR

Editer le fichier config/config.php et modifier comme ci-dessous :

$optional_delimiter     = '/';
$trash_folder                   = 'INBOX/Trash';
$sent_folder                    = 'INBOX/Sent';
$draft_folder                   = 'INBOX/Drafts';


Plugins

Modification de mot de passe des utilisateurs depuis squirrelmail

Télécharger la version de développement et recopier le dossier plugins/change_password pour le mettre dans le dossier plugins de l'installation en cours.
Editer le fichier config.php du dossier plugins/change_password et indiquer :

$cpw_backend = 'mysql';

Editer le fichier backend/mysql.php du même dossier et modifier :

// Initialize defaults
$mysql_server = 'localhost';
$mysql_database = 'mail';
$mysql_table = 'accountuser';
// The names of the user ID and password columns
$mysql_userid_field = 'username';
$mysql_password_field ='password';
// The user to log into MySQL with (must have rights)
$mysql_manager_id = 'mail';
$mysql_manager_pw = 'PASSWORD';
// saslcrypt checked first - if it is 1, UNIX crypt is not used.
$mysql_saslcrypt = 0; // use MySQL password() function
$mysql_unixcrypt = 1; // use UNIX crypt() function
vlogin : paramètre spéciaux en fonction du domaine d'accès
cd plugins
wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fvlogin-3.9.2-1.2.7.tar.gz
tar -zxf vlogin...tar.gz
cd /var/www/squirrelmail
./configure
  • menu plugins (8) ajouter le plugin vlogin puis sauvegarder
  • ajouter un fichier par domaine personalisé en utilisant le fichier d'exemple, par exemple :
cp plugins/vlogin/data/domains/domain.com.vlogin.config.php plugins/vlogin/data/domains/dj-j.net.vlogin.config.php

Personnaliser l'image d'accueil et le texte en modifiant par exemple ainsi :

$virtualDomains = array(
     'dj-j.net' => array(
         'org_name'   => 'Dj-j.net',
         'org_logo'   => '../images/logo-dj-j.net-150-56.png',
     ),
 );
Composition de mail en HTML
Filtres Sieve

Ajouter le plugin Sieve Mail Filters : http://www.squirrelmail.org/plugin_view.php?id=73
Pour le configurer il suffit de copier le fichier plugins/avelsieve/config/config_sample.php vers plugins/avelsieve/config/config.php.
Les options par défaut sont suffisantes.

En cas de problèmes

Problème de communication entre Cyrus et Sasl

Dans auth.log :

perl: No worthy mechs found

Dans syslog :

SASL(-1): generic failure: checkpass failed
  • Vérifier si cyrus peut accéder à /var/spool/postfix/var/run/saslauthd/mux, cyrus dans le group sasl et le lien /var/run/saslauthd vers /var/spool/postfix/var/run/saslauthd bien existant.
  • Ajouter au démarrage de saslauthd la création du lien symbolique :
ln -sf /var/spool/postfix/var/run/saslauthd /var/run/saslauthd

Plantage de clamav

Dans les logs de clamav :

Tue Apr  8 07:30:15 2008 -> ERROR: reload db failed: Unable to lock database directory (try 3)
Tue Apr  8 07:30:15 2008 -> ERROR: reload db failed: Unable to lock database directory
Tue Apr  8 07:30:15 2008 -> Terminating because of a fatal error.Tue Apr  8 07:30:15 2008 -> Socket file removed.
Tue Apr  8 07:30:15 2008 -> Pid file removed.
Tue Apr  8 07:30:15 2008 -> --- Stopped at Tue Apr  8 07:30:15 2008

Ce problème vient de la version de Debian Etch de clamav, il faut la mettre à jour avec la version du dépot volatile.

  • Edider /etc/apt/sources.list et ajouter :
deb http://volatile.debian.org/debian-volatile etch/volatile main contrib non-free

Mettre à jour la liste des packages et installer la nouvelle version de clamav.