Installation sur une Squeeze d'un serveur mail complet (Postfix Postfixadmin Dovecot Mysql Amavisd-new Spamassassin Clamav Postgrey Squirrelmail Roundcube) avec gestion des filtres Imap et des quotas

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche

Cet article est une ébauche. N'hésitez pas à contribuer ou à en discuter.

Nous allons détailler l'installation sur une squeeze minimale d'un serveur de mail.

La base de notre serveur mail: Postfix avec gestion des domaines et utilisateurs dans une base Mysql. Pourquoi Postfix et non Exim4 (qui est le serveur de mail installé par défaut sur Debian) ? Tout simplement pour la simplicité de configuration et la robustesse de Postfix...

Les programmes :

  1. Postfix comme serveur de messagerie;
  2. Dovecot comme interface Imap/Pop3;
  3. Mysql comme base de donnée;
  4. Amavisd new comme interface entre le serveur de messagerie et les filtres pourriels et anti-virus;
  5. Clamav comme anti-virus;
  6. Spamassassin et Postgrey comme moyens de lutte contre les pourriels;
  7. Apache2 comme serveur Web (qui nous permettra de supporter Postfixadmin, et notre (nos...) Webmails;
  8. Postfixadmin comme interface Web pour la gestion des domaines virtuels et des utilisateurs;
  9. Squirrelmail et Roundcube comme Webmail;
  10. Vacation - Notification d'absence


Prérequis

Je vous recommande la lecture de ceci avant de vous lancer : Configuration d'un serveur mail avec Postfix - Prérequis

En effet, inutile d'installer un serveur de mails si vous n'avez pas la possibilité de le faire fonctionner.

Il vous faut :

  1. un nom de domaine
  2. une IP fixe
  3. un PC allumé si possible 24h/24
  4. Accessoirement un DNS local fonctionnel

Installation d'une squeeze minimale

Installez une Debian minimale. A partir d'une ISO au format "carte de visite" (Businesscard) par exemple, installez seulement les utilitaires standard:

A partir d'une "Businesscard" Installez seulement les utilitaires standard

Préparation du système

Installation de Rkhunter

Modification du sources.list

# nano /etc/apt/sources.list
deb http://ftp.fr.debian.org/debian/ squeeze main non-free contrib
#deb-src http://ftp.fr.debian.org/debian/ squeeze main non-free contrib

deb http://security.debian.org/ squeeze/updates main contrib non-free
#deb-src http://security.debian.org/ squeeze/updates main contrib non-free

deb http://ftp.fr.debian.org/debian/ squeeze-updates main contrib non-free
#deb-src http://ftp.fr.debian.org/debian/ squeeze-updates main contrib non-free
root@facteur:~# apt-get update
root@facteur:~# apt-get dist-upgrade

ou: Attention l'option -y lance le dist-upgrade sans vous demander de confirmation!

root@facteur:~# apt-get update && apt-get dist-upgrade -y

Install-Recommends et diminution des priorités debconf

L'installation des paquets "recommandés" et "suggérés" n'est pas nécessaire, nous désactivons donc cette fonctionnalité:

root@facteur:~# nano /etc/apt/apt.conf.d/20norecommends
APT 
{
  Install-Recommends "false";
  Install-Suggests "false";
};

Les priorités de debconf sont élevées par défaut. Choisir "dialogue", puis "intermédiaire". De cette façon, vous ne manquez aucune question primordiale lors de la configuration des paquets, et le nombre de questions sera "raisonnable".

root@facteur:~# dpkg-reconfigure debconf

Interface à utiliser: "Dialogue" Ignorer les questions de priorité inférieures à "intermédiaire"

Définition du "hostname"

Cette étape est nécessaire, votre machine doit disposer d'un nom de machine et de domaine complet. Editez le fichier hosts pour ajouter votre nom complet de machine :

root@facteur:~# nano /etc/hosts
127.0.0.1       localhost
127.0.1.1       facteur.zehome.org      facteur
# <= Ligne suivante à ajouter => #
192.168.3.114   facteur.zehome.org      facteur

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
root@facteur:~# cat /etc/hostname
facteur
root@facteur:~# nano /etc/hostname
facteur.zehome.org
root@facteur:~# service hostname.sh start

Testez vos noms de machine et de domaine:

root@facteur:~# hostname -s
facteur
root@facteur:~# hostname -d
zehome.org
root@facteur:~# hostname -f
facteur.zehome.org

Modification de votre fichier interfaces

Il est préférable pour un serveur d'avoir une IP fixe. Si cela n'a pas été configuré au moment de l'installation, c'est le moment de la faire. Ajoutez aussi les DNS de votre FAI et le domaine de recherche.

root@facteur:~# nano /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
        address 192.168.3.114
        netmask 255.255.252.0
        network 192.168.0.0
        broadcast 191.168.3.255
        gateway 192.168.0.254
        dns-nameservers 41.188.9.130 196.192.32.5
        dns-search zehome.org

Installation et configuration des programmes

Le DNS

Un serveur Mail impose des requêtes DNS fréquentes, il est donc fortement conseillé d'en installer un localement.

L'objet ici n'est pas de vous expliquer en profondeur l'installation d'un DNS, nous nous contenterons donc du minimum. Pour de plus amples détails, voir ici: Bind

root@facteur:~# apt-get install bind9

Rien à voir, mais vous aurez à répondre à une question au sujet de man-db...

Faut-il exécuter les programmes man et mandb avec les droits de l'utilisateur "man"?


Modifiez votre fichier interfaces pour prendre en compte votre DNS local:

root@facteur:~# nano /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
 
# The loopback network interface
auto lo
iface lo inet loopback
 
# The primary network interface
allow-hotplug eth0
iface eth0 inet static
        address 192.168.3.114
        netmask 255.255.252.0
        network 192.168.0.0
        broadcast 191.168.3.255
        gateway 192.168.0.254
        dns-nameservers 127.0.0.1 41.188.9.130 196.192.32.5
        dns-search zehome.org

Vérifiez votre resolv.conf, il doit contenir l'adresse locale de votre DNS (devant les autres). Si vous avez un dhcp sur votre réseau, pensez à y ajouter votre DNS.

root@facteur:~# cat /etc/resolv.conf
domain zehome.org
search zehome.org
nameserver 127.0.0.1
nameserver 192.168.0.3
nameserver 41.188.9.130

Un test rapide:

root@facteur:~# nslookup
> server
Default server: 127.0.0.1
Address: 127.0.0.1#53
Default server: 192.168.0.3
Address: 192.168.0.3#53
Default server: 41.188.9.130
Address: 41.188.9.130#53
> google.com
Server:		127.0.0.1
Address:	127.0.0.1#53

Non-authoritative answer:
Name:	google.com
Address: 209.85.143.99
Name:	google.com
Address: 209.85.143.104
> exit

Rappel: au minimum, votre DNS (et n'importe quel DNS sur le Net si vous voulez qu'on puisse vous envoyer des e-mails...) doit être configuré pour répondre convenablement à cette question:

root@facteur:~# host -t MX zehome.org
zehome.org mail is handled by 10 smtp.zehome.org.

Mysql

MySQL est un système de gestion de base de données (SGBD). Sa licence est libre. Il fait partie des logiciels de gestion de base de données les plus utilisés au monde, autant par le grand public (applications web principalement) que par des professionnels.

root@facteur:~# apt-get install mysql-server
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés : 
  libdbd-mysql-perl libdbi-perl libmysqlclient16 libnet-daemon-perl
  libplrpc-perl mysql-client-5.1 mysql-common mysql-server-5.1
  mysql-server-core-5.1
Paquets suggérés :
  libterm-readkey-perl tinyca
Paquets recommandés :
  mailx libhtml-template-perl
Les NOUVEAUX paquets suivants seront installés :
  libdbd-mysql-perl libdbi-perl libmysqlclient16 libnet-daemon-perl
  libplrpc-perl mysql-client-5.1 mysql-common mysql-server mysql-server-5.1
  mysql-server-core-5.1
0 mis à jour, 10 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 24,0 Mo dans les archives.
Après cette opération, 60,9 Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer [O/n] ? o
...

N'oubliez pas de définir un mot de passe pour l'administrateur du serveur Mysql

Nouveau mot de passe superutilisateur de MySQL Confirmation du mot de passe superutilisateur de MySQL

Suppression des programmes inutiles et installation de Postfix

Exim4 et consort ne nous servant pas, et afin d'éviter des conflits et de conserver des paquets inutiles, nous enlevons complètement celui-ci:

Depuis quelques jours (entre fin mars et début avril 2011) la suppression des programmes ci-dessus entraîne l'installation de Postfix et ssl-cert:

Les paquets supplémentaires suivants seront installés : 
  postfix ssl-cert
root@facteur:~# apt-get --purge remove exim4 exim4-base exim4-config exim4-daemon-light
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Les paquets suivants seront ENLEVÉS :
  bsd-mailx* exim4* exim4-base* exim4-config* exim4-daemon-light*
0 mis à jour, 0 nouvellement installés, 5 à enlever et 0 non mis à jour.
Après cette opération, 4 391 ko d'espace disque seront libérés.
Souhaitez-vous continuer [O/n] ? o
(Lecture de la base de données... 36264 fichiers et répertoires déjà installés.)
Suppression de bsd-mailx ...
Purge des fichiers de configuration de bsd-mailx ...
Suppression de exim4 ...
Purge des fichiers de configuration de exim4 ...
Suppression de exim4-daemon-light ...
Stopping MTA: exim4_listener.
Purge des fichiers de configuration de exim4-daemon-light ...
Suppression de exim4-base ...
Purge des fichiers de configuration de exim4-base ...
Suppression de exim4-config ...
Purge des fichiers de configuration de exim4-config ...
dpkg-statoverride : avertissement : Pas de dérogation (« override ») présente.
Traitement des actions différées (« triggers ») pour « man-db »...

Veuillez choisir la configuration... Configuration type du serveur de messagerie: Nom de courrier: Destinataire des courriels de "root" et "postmaster": Autres destinations pour lesquelles le courrier sera accepté: Faut-il forcer des mises à jour synchronisées de la file d'attente des courriels?

Postfix/Dovecot/Apache2/sasl/php

Avec la commande ci-dessous, nous installons: apache2 dovecot php5 postfix et sasl2

root@facteur:~# apt-get install php5-mysql php5-imap postfix-mysql dovecot-imapd dovecot-pop3d libsasl2-modules sasl2-bin

Les paquets installés:

Les NOUVEAUX paquets suivants vont être installés : 
  apache2-mpm-prefork{a} apache2-utils{a} apache2.2-bin{a} apache2.2-common{a} db4.8-util{a} 
  dovecot-common{a} dovecot-imapd dovecot-pop3d libapache2-mod-php5{a} libapr1{a} libaprutil1{a} 
  libaprutil1-dbd-sqlite3{a} libaprutil1-ldap{a} libc-client2007e{a} libonig2{a} libpq5{a} libqdbm14{a} 
  mlock{a} php5-common{a} php5-imap php5-mysql postfix-mysql sasl2-bin

Nom du fichier de sauvegarde de /etc/sasldb2 ?

Vous verrez passer ce message d'avertissement:

update-rc.d: warning: saslauthd stop runlevel arguments (0 1 6) do not match LSB Default-Stop values (1) To enable saslauthd, edit /etc/default/saslauthd and set START=yes ... (warning).

Activons donc saslauthd au démarrage. Remplacez START=no par START=yes dans :

root@facteur:~# nano /etc/default/saslauthd
root@facteur:~# service saslauthd start
Starting SASL Authentication Daemon: saslauthd.

Activation du mode SSL de Apache

Afin de sécuriser les échanges entre l'interface Web et le serveur, nous allons activer le mode SSL de Apache. C'est crucial en particulier pour les échanges de noms d'utilisateurs et mots de passe.

Créons un lien symbolique entre site-available et site enabled pour rendre disponible le SSL:

root@facteur:~# ln /etc/apache2/sites-available/default-ssl /etc/apache2/sites-enabled/001-ssl

Vous pouvez éditer et modifier ce fichier pour qu'il soit adapté à votre domaine (nom de domaine, adresse mail du "webmaster"...)

Activons le mode SSL de Apache:

root@facteur:~# a2enmod ssl
Enabling module ssl.
See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL and create self-signed certificates.
Run '/etc/init.d/apache2 restart' to activate new configuration!

Vérifiez que les lignes suivantes sont présentes et dé-commentées dans le fichier /etc/apache2/ports.conf

<IfModule mod_ssl.c>
...
    Listen 443
</IfModule>

Enfin, redémarrons Apache

root@facteur:~# service apache2 restart
Restarting web server: apache2 ... waiting .

Vous aurez désormais accès à vos services (Webmails et Postfixadmin) au travers du https (ce qui est nettement plus sécurisant...).

Testez en vous rendant à cette adresse: https://votre_IP/ ou https://localhost/ si vous travaillez en local. Vous devriez avoir accès à la page d'accueil suivante:

It works!

This is the default web page for this server.

The web server software is running but no content has been added, yet.

Installation et configuration de Postfixadmin

Création de la base de donnée de Postfixadmin

Nous allons maintenant créer la base de donnée qui centralisera les données utilisée par Postfix et Dovecot. La gestion de cette base se fera au travers de l'interface "WebGui" de Postfixadmin

root@facteur:~# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 40
Server version: 5.1.49-3 (Debian)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database postfix;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON postfix.* TO 'postfixadmin'@'localhost' IDENTIFIED BY 'monmotdepasse';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT SELECT ON postfix.* TO 'postfix'@'localhost' IDENTIFIED BY 'monmotdepasse2';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye

Postfixadmin

Téléchargez postfixadmin, ici: http://sourceforge.net/projects/postfixadmin/files/postfixadmin/

La dernière version (ce 16 mars 2012) est "postfixadmin-2.3.5" (1,5 Mio)

root@facteur:~# wget http://tenet.dl.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.3.5/postfixadmin-2.3.5.tar.gz
root@facteur:~# tar xzvf postfixadmin-2.3.5.tar.gz -C /var/www/
root@facteur:~# mv /var/www/postfixadmin-2.3.5/ /var/www/postfixadmin/
root@facteur:~# chown -R www-data:www-data /var/www/postfixadmin/
root@facteur:~# cp /var/www/postfixadmin/config.inc.php /var/www/postfixadmin/config.inc.php.sos
root@facteur:~# sed -i 's/change-this-to-your.domain.tld/facteur.zehome.org/g' /var/www/postfixadmin/config.inc.php
root@facteur:~# nano /var/www/postfixadmin/config.inc.php
$CONF['configured'] = true;
...
$CONF['default_language'] = 'fr';
...
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'monmotdepasse';
$CONF['database_name'] = 'postfix';
...
$CONF['encrypt'] = 'md5crypt';
root@facteur:~# service apache2 restart
Restarting web server: apache2 ... waiting .

Rendez-vous maintenant à l'adresse suivante: https://votre_IP/postfixadmin/setup.php

Entrez le mot de passe du "setup" afin que le programme génère un HASH de sécurité que vous irez coller dans le fichier /var/www/postfixadmin/config.inc.php

If you want to use the password you entered as setup password, edit config.inc.php and set
$CONF['setup_password'] = 'c4861ab90fcf650da20d5d2b6258a7d9:94922063c5569077df0a65dff7ae1e3d349b7732';
root@serveur:~# nano /var/www/postfixadmin/config.inc.php

Et Remplacez:

$CONF['setup_password'] = 'changeme';

Par:

$CONF['setup_password'] = 'c4861ab90fcf650da20d5d2b6258a7d9:94922063c5569077df0a65dff7ae1e3d349b7732';

Ensuite, retapez le mot de passe de sécurité, choisissez un administrateur et donnez lui un mot de passe:

Vous pouvez maintenant vous rendre à la page d'accueil https://votre_IP/postfixadmin/ :

Postfix admin est maintenant configuré et opérationnel.

Postfix

Passons à la configuration de postfix...

Nous créons tout d'abord notre utilisateur/groupe virtuel

Nous lui donnerons comme GID/UID le numéro 3000

root@facteur:~# groupadd -g 3000 facteur
root@facteur:~# useradd -d /home/facteur -m -u 3000 -g 3000 facteur

Sauvegardons la configuration de postfix

root@facteur:~# cp /etc/postfix/main.cf /etc/postfix/main.cf.sos
root@facteur:~# cp /etc/postfix/master.cf /etc/postfix/master.cf.sos

Créons maintenant les fichiers qui contiendront les informations de connexions à notre base Mysql

root@facteur:~# nano /etc/postfix/mysql_virtual_mailbox_domains.cf
hosts = 127.0.0.1
user = postfix
password = monmotdepasse2
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = 0 and active = 1
root@facteur:~# nano /etc/postfix/mysql_virtual_mailbox_maps.cf
hosts = 127.0.0.1
user = postfix
password = monmotdepasse2
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
root@facteur:~# nano /etc/postfix/mysql_virtual_alias_maps.cf
hosts = 127.0.0.1
user = postfix
password = monmotdepasse2
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = 1
root@facteur:~# nano /etc/postfix/mysql_relay_domains.cf
hosts = 127.0.0.1
user = postfix
password = monmotdepasse2
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = 1

Configurons maintenant l'authentification par sasl

root@facteur:~# nano /etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
auxprop_plugin: rimap

Mettons à jour /etc/default/saslauthd avec ces paramètres (ne touchez pas au reste...)

Sauvegarde avant modification...

root@facteur:~# cp /etc/default/saslauthd /etc/default/sasauthd.sos
root@facteur:~# nano /etc/default/saslauthd
START=yes
MECHANISMS="rimap"
#imap server address
MECH_OPTIONS="localhost"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"

Ajoutons postfix au groupe sasl:

root@facteur:~# adduser postfix sasl
Ajout de l'utilisateur « postfix » au groupe « sasl »...
Ajout de l'utilisateur postfix au groupe sasl
Fait.

Et redémarrons le service :

root@facteur:~# service saslauthd restart
Stopping SASL Authentication Daemon: saslauthd.
Starting SASL Authentication Daemon: saslauthd.

Ajoutons ce qui suit au fichier /etc/postfix/main.cf:

root@serveur:~# nano /etc/postfix/main.cf
virtual_uid_maps = static:3000
virtual_gid_maps = static:3000
virtual_mailbox_base = /home/facteur

virtual_transport = dovecot

virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_mailbox_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
relay_domains = mysql:/etc/postfix/mysql_relay_domains.cf

smtpd_recipient_restrictions =
  permit_mynetworks,
  permit_sasl_authenticated,
  reject_non_fqdn_hostname,
  reject_non_fqdn_sender,
  reject_non_fqdn_recipient,
  reject_unauth_destination,
  reject_unauth_pipelining,
  reject_invalid_hostname

smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous

Ajoutez ceci à la fin de votre fichier /etc/postfix/master.cf

dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=facteur:facteur argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}

Quelques réglages supplémentaires

Postfix est maintenant fonctionnel, mais il mérite encore votre attention. Voici quelques options importantes à ajouter à votre main.cf :

# Obtenir une alerte si les emails ne partent pas
# Par défaut cette option est réglée à 4 heures, j'ai réduit cette durée:
delay_warning_time = 1h
# Ajoutez votre réseau local ici
mynetworks = 10.9.8.0/22 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
# Indiquer à Postfix de livrer à un destinataire à la fois
# la réception d'un mail en provenance d'un expéditeur unique avec plusieurs destinataire ne fonctionnerais pas sans cette option
dovecot_destination_recipient_limit = 1

C'est tout pour l'instant pour postfix...

Dovecot

Créons le fichier /etc/dovecot/dovecot-mysql.conf (c'est lui qui contiendra les paramètres de connexion à Mysql)

root@facteur:~# nano /etc/dovecot/dovecot-mysql.conf
driver = mysql
connect = host=127.0.0.1 dbname=postfix user=postfix password=monmotdepasse2
default_pass_scheme = MD5-CRYPT
user_query = SELECT '/home/facteur/%d/%n' as home, 3000 AS uid, 3000 AS gid FROM mailbox WHERE username = '%u'
password_query = SELECT password FROM mailbox WHERE username = '%u'

Sauvegardons le fichier de configuration de dovecot :

root@facteur:~# cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.sos

Afin d'y voir plus clair (ce fichier est un vrai roman...), voici à quoi il ressemble par défaut, épuré des lignes commentées:

La commande pour voir le fichier sans les lignes commentées:

# grep -v -E "#" /etc/dovecot/dovecot.conf | grep -v -E "^$"
root@serveur:~# cat /etc/dovecot/dovecot.conf
## Dovecot configuration file

protocols = imap imaps pop3 pop3s
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_privileged_group = mail

protocol imap {
}
protocol pop3 {
}
protocol managesieve {
}

auth default {
  mechanisms = plain
  passdb pam {
  }
  userdb passwd {
  }

  user = root
}

dict {
}

plugin {
}

Nous modifions notre fichier dovecot.conf pour qu'il ressemble à ce qui suit :

nano /etc/dovecot/dovecot.conf

## Dovecot configuration file

protocols = imap imaps pop3 pop3s
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_privileged_group = mail

disable_plaintext_auth = no
mail_location = maildir:/home/facteur/%d/%n:INDEX=/home/facteur/%d/%n/indexes

protocol imap {
}
protocol pop3 {
}
protocol managesieve {
}
protocol lda {
  postmaster_address = admin@zehome.org
  mail_plugin_dir = /usr/lib/dovecot/modules/lda
  auth_socket_path = /var/run/dovecot/auth-master
}
auth default {
        userdb sql {
        args = /etc/dovecot/dovecot-mysql.conf
        }
        passdb sql {
        args = /etc/dovecot/dovecot-mysql.conf
        }
 socket listen {
  master {
  path = /var/run/dovecot/auth-master
  mode = 0600
  user = facteur
  }
  client {
  path = /var/spool/postfix/private/auth
  mode = 0660
  user = postfix
  group = postfix
  }
 }
}
dict {
}
plugin {
}

Redémarrons les services :

root@facteur:~# service dovecot restart
Restarting IMAP/POP3 mail server: dovecotIf you have trouble with authentication failures,
enable auth_debug setting. See http://wiki.dovecot.org/WhyDoesItNotWork
This message goes away after the first successful login.
.
root@facteur:~# service saslauthd restart
Stopping SASL Authentication Daemon: saslauthd.
Starting SASL Authentication Daemon: saslauthd.
root@facteur:~# service postfix restart
Stopping Postfix Mail Transport Agent: postfix.
Starting Postfix Mail Transport Agent: postfix.

Premiers essais

A partir de maintenant, nous devrions être capables de tester notre serveur de messagerie

Pour commencer, il faut créer un domaine virtuel et un utilisateur avec l'interface de postfixadmin:

Test de l'ensemble de la chaine

Votre serveur mail devrait être dés à présent pleinement fonctionnel; Vous pouvez tester l'ensemble de la chaîne avec la commande suivante: Nous envoyons un email à essai@zehome.org (Le domaine et la boite e-mail doivent évidemment exister...) à partir de root et nous ouvrons les logs.

Il faudra installer mailx pour pouvoir faire des essais d'envois:

root@facteur:~# apt-get install mailutils
root@facteur:~# echo test | mail -s "Premier test SMTP" essai@zehome.org && tail -f /var/log/mail.info 
Apr 10 15:14:25 facteur postfix/pickup[11279]: 1B63A6C64D: uid=0 from=<root>
Apr 10 15:14:25 facteur postfix/cleanup[11318]: 1B63A6C64D: message-id=<20110410121425.1B63A6C64D@facteur.zehome.org>
Apr 10 15:14:25 facteur postfix/qmgr[11280]: 1B63A6C64D: from=<root@facteur.zehome.org>, size=314, nrcpt=1 (queue active)
Apr 10 15:14:25 facteur dovecot: deliver(essai@zehome.org): msgid=<20110410121425.1B63A6C64D@facteur.zehome.org>: saved mail to INBOX
Apr 10 15:14:25 facteur postfix/pipe[11326]: 1B63A6C64D: to=<essai@zehome.org>, relay=dovecot, delay=0.06, delays=0.01/0/0/0.04, dsn=2.0.0, status=sent (delivered via dovecot service)
Apr 10 15:14:25 facteur postfix/qmgr[11280]: 1B63A6C64D: removed

CTRL + C pour sortir.

Test du SMTP AUTH

La première chose que vous devez faire est d'obtenir un codage en base64 de votre nom d'utilisateur et mot de passe. Il y a deux manières de le faire, l'exemple ci-dessous utilise Perl:

$ perl -MMIME::Base64 -e 'print encode_base64("essai\@essai.org");'
ZXNzYWkub3Jn
$ perl -MMIME::Base64 -e 'print encode_base64("essai");'
ZXNzYWk=

Vous pouvez maintenant vous connecter au serveur de messagerie en utilisant Telnet:

telnet 192.168.3.114 25
Trying 192.168.3.114...
Connected to 192.168.3.114.
Escape character is '^]'.
220 facteur.zehome.org ESMTP Postfix (Debian/GNU)

Saluons le serveur SMTP...

EHLO facteur.zehome.org

Réponse...

250-facteur.zehome.org
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

Nous lui faisons savoir que nous voulons nous authentifier:

AUTH LOGIN ZXNzYWlAZXNzYWkub3Jn
334 UGFzc3dvcmQ6
ZXNzYWk=
235 2.7.0 Authentication successful

Maintenant, petit test d'envoi de mail :

mail from:essai@essai.org
250 2.1.0 Ok
rcpt to:essai@essai.org
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
Test
.
250 2.0.0 Ok: queued as E172752683
quit
221 2.0.0 Bye
Connection closed by foreign host.

Avant l'envoi du premier mail :

root@facteur:~# ls -a /home/facteur/
.  ..  .bash_logout  .bashrc  .profile

Après :

root@facteur:~# ls -a /home/facteur/
.  ..  .bash_logout  .bashrc  essai.org  .profile

Le répertoire est bien créé - Un répertoire par domaine sera créé, les utilisateurs des domaines seront rangés dans ces répertoires.

Les logs dans /var/log/mail.log:

Apr  6 11:37:09 facteur postfix/smtpd[1873]: 4463D6C401: client=sidlol.zehome.org[192.168.0.2], sasl_method=LOGIN, sasl_username=essai@essai.org
Apr  6 11:37:17 facteur postfix/cleanup[1882]: 4463D6C401: message-id=<>
Apr  6 11:37:17 facteur postfix/qmgr[1816]: 4463D6C401: from=<essai@essai.org>, size=201, nrcpt=1 (queue active)
Apr  6 11:37:17 facteur dovecot: deliver(essai@essai.org): msgid=: saved mail to INBOX
Apr  6 11:37:17 facteur postfix/pipe[1883]: 4463D6C401: to=<essai@essai.org>, relay=dovecot, delay=18, delays=18/0.03/0/0.04, dsn=2.0.0, status=sent (delivered via dovecot service)
Apr  6 11:37:17 facteur postfix/qmgr[1816]: 4463D6C401: removed
Apr  6 11:37:20 facteur postfix/smtpd[1873]: disconnect from sidlol.zehome.org[192.168.0.2]

Test de la connexion IMAP avec telnet

$ telnet 192.168.3.114 143
Trying 192.168.3.114...
Connected to 192.168.3.114.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE STARTTLS AUTH=PLAIN] Dovecot ready.
a1 LOGIN essai@essai.org essai        
a1 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT IDLE CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS] Logged in
a2 LIST "" "*"
* LIST (\HasNoChildren) "." "INBOX"
a2 OK List completed.
a3 EXAMINE INBOX
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS ()] Read-only mailbox.
* 3 EXISTS
* 3 RECENT
* OK [UNSEEN 1] First unseen.
* OK [UIDVALIDITY 1302078677] UIDs valid
* OK [UIDNEXT 4] Predicted next UID
* OK [HIGHESTMODSEQ 1] Highest
a3 OK [READ-ONLY] Select completed.
a4 LOGOUT
* BYE Logging out
a4 OK Logout completed.
Connection closed by foreign host.


Install Amavisd-new, SpamAssassin, And Clamav

La commande "tout en un"...

root@facteur:~# apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 arj nomarch lzop cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl libio-socket-ssl-perl libnet-ident-perl zip libnet-dns-perl p7zip unrar-free

Réglages de Dovecot Postfix et Amavis

Il faut maintenant organiser le "voyage" des mails entre Postfix/Amavis et Dovecot

Lorsque postfix reçoit un mail il va les passer à Amavis qui, à son tour, va envoyer le message à travers les filtres antispam et antivirus. Il repassera ensuite le mail présumé propre à Postfix, pour sa destination finale.

Nous ajoutons donc ce qui suit à la fin du fichier master.cf :

root@facteur:~# nano /etc/postfix/master.cf
amavis unix - - - - 2 smtp
        -o smtp_data_done_timeout=1200
        -o smtp_send_xforward_command=yes

127.0.0.1:10025 inet n - - - - smtpd
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks=127.0.0.0/8
        -o strict_rfc821_envelopes=yes
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
        -o smtpd_bind_address=127.0.0.1

Ajoutez avec un éditeur les deux lignes suivantes à la fin du fichier /etc/postfix/main.cf

content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings

Ou tapez les deux commandes suivantes dans la console:

root@facteur:~# postconf -e 'content_filter = amavis:[127.0.0.1]:10024'
root@facteur:~# postconf -e 'receive_override_options = no_address_mappings'

Rien à faire du côté de Dovecot, nous l'avons déjà configuré.

Activons maintenant les filtres (il suffit de décommenter 4 lignes):

root@facteur:~# nano /etc/amavis/conf.d/15-content_filter_mode
use strict;

# You can modify this file to re-enable SPAM checking through spamassassin
# and to re-enable antivirus checking.

#
# Default antivirus checking mode
# Please note, that anti-virus checking is DISABLED by
# default.
# If You wish to enable it, please uncomment the following lines:


@bypass_virus_checks_maps = (
   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);


#
# Default SPAM checking mode
# Please note, that anti-spam checking is DISABLED by
# default.
# If You wish to enable it, please uncomment the following lines:


@bypass_spam_checks_maps = (
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

1;  # ensure a defined return

Nous allons maintenant configurer la quarantaine :

root@facteur:~# nano /etc/amavis/conf.d/50-user
use strict;

#
# Place your configuration directives here.  They will override those in
# earlier files.
#
# See /usr/share/doc/amavisd-new/ for documentation and examples of
# the directives you can use in this file
#

$QUARANTINEDIR = '/var/spool/virusmails';              # Quarantine Directory
$spam_quarantine_method = 'local:spam-%b-%i-%n'; # Filename in $QUARANTINEDIR
$spam_quarantine_to = 'spam-quarantine';         # Put Spam in Quarantine Directory
# $spam_quarantine_to = "admin\@$mydomain"; # Send Spam to Adminstrator
# $spam_quarantine_to = undef;                   # Do nothing with Spam
$final_spam_destiny = D_DISCARD;
$spam_admin = "admin\@$mydomain";          # Where to send Notification

#------------ Do not modify anything below this line -------------
1;  # ensure a defined return

Création du répertoire qui va accueillir les mails infectés:

root@facteur:~# mkdir /var/spool/virusmails
root@facteur:~# chown amavis:amavis /var/spool/virusmails

Mise à jour des règles de Spamassassin

root@facteur:~# sa-update -D

Activation du "daemon" de Spamassassin et activation de la mise à jour automatique (Cron) des règles de Spamassassin:

root@facteur:~# nano /etc/default/spamassassin
# Change to one to enable spamd
ENABLED=1
...
# Cronjob
# Set to anything but 0 to enable the cron job to automatically update
# spamassassin's rules on a nightly basis
CRON=1
root@facteur:~# service spamassassin start
Starting SpamAssassin Mail Filter Daemon: spamd.
root@facteur:~# adduser clamav amavis
Ajout de l'utilisateur « clamav » au groupe « amavis »...
Ajout de l'utilisateur clamav au groupe amavis
Fait.
root@facteur:~# service amavis restart
Stopping amavisd: amavisd-new.
Starting amavisd: amavisd-new.
root@facteur:~# service clamav-daemon restart
Stopping ClamAV daemon: clamd.
Starting ClamAV daemon: clamd .
root@facteur:~# service postfix restart
Stopping Postfix Mail Transport Agent: postfix.
Starting Postfix Mail Transport Agent: postfix.

Test de Spamassassin et Clamav

Test Spamassassin

Vous trouverez dans la doc un exemple de Spam: /usr/share/doc/spamassassin/examples/sample-spam.txt Il suffit de coller cette ligne dans un mail et de l'envoyer:

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

Il sera détecté comme Spam:

telnet 192.168.3.114 25
Trying 192.168.3.114...
Connected to 192.168.3.114.
Escape character is '^]'.
220 facteur.zehome.org ESMTP Postfix (Debian/GNU)
AUTH LOGIN ZXNzYWlAZXNzYWkub3Jn
334 UGFzc3dvcmQ6
ZXNzYWk=
235 2.7.0 Authentication successful
mail from:essai@essai.org
250 2.1.0 Ok
rcpt to:admin@zehome.org
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
Test Spamassassin 
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
.
250 2.0.0 Ok: queued as F19436C405
quit
221 2.0.0 Bye
Connection closed by foreign host.

Et effectivement... "facteur amavis[7057]: (07057-01) Blocked SPAM"

Apr  6 17:29:21 facteur postfix/smtpd[7964]: connect from sidlol.zehome.org[192.168.0.2]
Apr  6 17:30:13 facteur postfix/smtpd[7964]: F19436C405: client=sidlol.zehome.org[192.168.0.2], sasl_method=LOGIN, sasl_username=essai@essai.org
Apr  6 17:35:40 facteur postfix/cleanup[7970]: F19436C405: message-id=<>
Apr  6 17:35:40 facteur postfix/qmgr[7933]: F19436C405: from=<essai@essai.org>, size=281, nrcpt=1 (queue active)
Apr  6 17:35:42 facteur postfix/smtpd[8091]: connect from localhost[127.0.0.1]
Apr  6 17:35:42 facteur postfix/smtpd[8091]: 6CAEE6C413: client=localhost[127.0.0.1]
Apr  6 17:35:42 facteur postfix/cleanup[7970]: 6CAEE6C413: message-id=<SSxt4KviusO2QF@facteur.zehome.org>
Apr  6 17:35:42 facteur postfix/qmgr[7933]: 6CAEE6C413: from=<>, size=2947, nrcpt=1 (queue active)
Apr  6 17:35:42 facteur amavis[7057]: (07057-01) Blocked SPAM, LOCAL [192.168.0.2] [192.168.0.2] <essai@essai.org> -> <admin@zehome.org>, quarantine: x/spam-xt4KviusO2QF.gz, mail_id: xt4KviusO2QF, Hits: 1004.975, size: 281, 1492 ms
Apr  6 17:35:42 facteur postfix/smtp[8088]: F19436C405: to=<admin@zehome.org>, relay=127.0.0.1[127.0.0.1]:10024, delay=348, delays=346/0.05/0.04/1.5, dsn=2.5.0, status=sent (250 2.5.0 Ok, id=07057-01, BOUNCE)
Apr  6 17:35:42 facteur postfix/qmgr[7933]: F19436C405: removed
Apr  6 17:35:42 facteur dovecot: deliver(essai@essai.org): msgid=<SSxt4KviusO2QF@facteur.zehome.org>: saved mail to INBOX
Apr  6 17:35:42 facteur postfix/pipe[8092]: 6CAEE6C413: to=<essai@essai.org>, relay=dovecot, delay=0.1, delays=0.02/0.06/0/0.02, dsn=2.0.0, status=sent (delivered via dovecot service)
Apr  6 17:35:42 facteur postfix/qmgr[7933]: 6CAEE6C413: removed
Apr  6 17:35:43 facteur postfix/smtpd[7964]: disconnect from sidlol.zehome.org[192.168.0.2]
Test de l'anti-virus

Vous procèderez de la même manière, avec le code suivant, récupéré sur www.eicar.org :

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Effectivement le mail est mis en quarantaine: "Passed BAD-HEADER, LOCAL [192.168.0.2] [192.168.0.2] <essai@essai.org> -> <admin@zehome.org>, quarantine: S/badh-SURoiIuWSpyN"

Apr  6 19:19:24 facteur postfix/smtpd[13605]: A60AA6C416: client=sidlol.zehome.org[192.168.0.2], sasl_method=LOGIN, sasl_username=essai@essai.org
Apr  6 19:19:39 facteur postfix/cleanup[13617]: A60AA6C416: message-id=<>
Apr  6 19:19:39 facteur postfix/qmgr[7933]: A60AA6C416: from=<essai@essai.org>, size=275, nrcpt=1 (queue active)
Apr  6 19:19:40 facteur postfix/smtpd[14385]: connect from localhost[127.0.0.1]
Apr  6 19:19:40 facteur postfix/smtpd[14385]: 81CB86C417: client=localhost[127.0.0.1]
Apr  6 19:19:40 facteur postfix/cleanup[13617]: 81CB86C417: message-id=<20110406161940.81CB86C417@facteur.zehome.org>
Apr  6 19:19:40 facteur postfix/qmgr[7933]: 81CB86C417: from=<essai@essai.org>, size=956, nrcpt=1 (queue active)
Apr  6 19:19:40 facteur amavis[13641]: (13641-01) Passed BAD-HEADER, LOCAL [192.168.0.2] [192.168.0.2] <essai@essai.org> -> <admin@zehome.org>, quarantine: S/badh-SURoiIuWSpyN, mail_id: SURoiIuWSpyN, Hits: 4.975, size: 275, queued_as: 81CB86C417, 608 ms
Apr  6 19:19:40 facteur postfix/smtp[13618]: A60AA6C416: to=<admin@zehome.org>, relay=127.0.0.1[127.0.0.1]:10024, delay=21, delays=20/0/0.04/0.59, dsn=2.0.0, status=sent (250 2.0.0 Ok, id=13641-01, from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 81CB86C417)
Apr  6 19:19:40 facteur postfix/qmgr[7933]: A60AA6C416: removed
Apr  6 19:19:40 facteur postfix/smtp[14386]: 81CB86C417: to=<admin@zehome.org>, relay=smtp.zehome.org[192.168.0.3]:25, delay=0.32, delays=0.02/0.06/0/0.23, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as ED5BC300EDF)
Apr  6 19:19:40 facteur postfix/qmgr[7933]: 81CB86C417: removed
Apr  6 19:19:41 facteur postfix/smtpd[13605]: disconnect from sidlol.zehome.org[192.168.0.2]

Vous le retrouverez dans le sous-répertoire suivant : /var/spool/virusmails/S/badh-SURoiIuWSpyN (voyez les logs: quarantine: S/badh-SURoiIuWSpyN)

Installation de Postgrey

Postgrey, qu'est-ce que c'est? Postgrey est un moyen simple et efficace de lutter contre les serveurs émettant des pourriels. Le principe est simple: rejeter temporairement un message, par l'envoi d’un code de refus au serveur smtp émetteur (MTA). La plupart du temps, les MTA réessaye d'envoyer les emails après un certain temps, ce que ne font pas (généralement) les serveurs émettant des pourriels...

Bien sur ce système n'est pas infaillible, et certains serveurs émettant des pourriels sont assez malins pour retenter le coup plus tard. Ils sont finalement très peu nombreux et Postgrey s'avère efficace.

Lors de la mise en place de Postgrey vous aurez beaucoup de mails qui ne vous parviendrons pas. Ce problème sera progressivement réglé une fois la première mise en quarantaine effectuée.

root@facteur:~# apt-get install postgrey
root@facteur:~# nano /etc/default/postgrey
 POSTGREY_OPTS="--inet=10023 --delay=300 --hostname=facteur.zehome.org --auto-whitelist-clients"
root@facteur:~# nano /etc/postfix/main.cf
...
smtpd_recipient_restrictions =
...
  reject_unauth_pipelining,
  check_policy_service inet:127.0.0.1:10023,
  reject_invalid_hostname
root@facteur:~# service postgrey restart
root@facteur:~# service postfix restart
 root@facteur:~# netstat -tulpen | grep LISTEN
...
tcp        0      0 127.0.0.1:10023         0.0.0.0:*               LISTEN      0          7338        2271/postgrey.pid -
...

Vous disposez de deux fichiers dans lesquels vous pouvez mettre en "liste blanche" des domaines "amis" ou des adresses de destination:

root@facteur:~# vdir /etc/postgrey/
total 12
-rw-r--r-- 1 root root 7580 12 janv. 00:15 whitelist_clients
-rw-r--r-- 1 root root  189 12 janv. 00:15 whitelist_recipients

Le Webmail

Je vous propose deux choix de Webmail :

  1. Squirrelmail: Simplissime, léger et possédant de multiples plugins;
  2. Roundcube: Plus lourd mais plus complet;

Squirrelmail

Deux méthodes : Méthode via apt et méthode via le paquet source.

Méthode Debian

root@facteur:~# apt-get install squirrelmail
root@facteur:~# ln -s /etc/squirrelmail/apache.conf /etc/apache2/conf.d/squirrelmail.conf

Configurez Squirrelmail:

root@facteur:~# /usr/sbin/squirrelmail-configure
Command >> 2 (Server Settings)
Command >> A (Update IMAP Settings)
Command >> 8 (Server software)
[other]: dovecot
Command >> s
Command >> q

Créez un domaine avec postfixadmin (si ce n'est pas déjà fait). Créez un utilisateur avec postfixadmin (si ce n'est pas déjà fait).

root@facteur:~# service apache2 restart
Restarting web server: apache2 ... waiting .

Testez avec cette adresse:

http://adresse_IP_du_serveur/squirrelmail

Méthode avec les sources

La méthode présentée ici est ce que l'on appelle "quick and durty" - Je ne m'attache pas aux locales et plugins intéressants pas exemple. Téléchargeons tout d'abord les sources (tant qu'a faire, choisissons le dernière "snapshot"). Liste ICI

root@facteur:~# tar xzvf squirrelmail-20110406_0200-SVN.stable.tar.gz -C /var/www/
root@facteur:~# mv /var/www/squirrelmail.stable/squirrelmail/ /var/www/
root@facteur:~# rmdir /var/www/squirrelmail.stable/
root@facteur:~# chown -R www-data:www-data /var/www/squirrelmail/

Configuration:

root@facteur:~# /var/www/squirrelmail/configure
Command >> 2 (Server Settings)
Command >> A (Update IMAP Settings)
Command >> 8 (Server software)
[other]: dovecot
Command >> s
Command >> q

Créons les répertoires qui accueilleront les données personnelles (carnet d'adresses, références...) et les pièces jointes:

root@facteur:~# mkdir /var/local/squirrelmail
root@facteur:~# mkdir /var/local/squirrelmail/data
root@facteur:~# mkdir /var/local/squirrelmail/attach
root@facteur:~# chown -R www-data:www-data /var/local/squirrelmail
root@facteur:~# service apache2 restart
Restarting web server: apache2 ... waiting .

Roundcube

Il est conseillé (mais pas indispensable) d'installer préalablement les codes et modules suivants:

root@facteur:~# apt-get install libiconv-hook1 php5-mcrypt php5-intl

Téléchargement des sources ICI :

root@facteur:~# tar xzvf roundcubemail-0.5.1.tar.gz -C /var/www/
root@facteur:~# mv /var/www/roundcubemail-0.5.1/ /var/www/roundcubemail
root@facteur:~# chown -R www-data:www-data /var/www/roundcubemail/

php.ini

Deux petites modification à faire:

suhosin

Si le paquet php5-suhosin est installé, il faut modifier la configuration du php.ini d'apache2 à cause d'une incompatibilité avec roundcube:

Modifiez le php.ini de la façon suivante

Ajoutez à la fin du fichier /etc/php5/apache2/php.ini;

suhosin.session.encrypt = Off

Ou passez la commande suivante

echo 'suhosin.session.encrypt = Off' >> /etc/php5/apache2/php.ini

Ou Modifiez le fichier suhosin.ini Remplacez cette valeur:

;suhosin.session.encrypt = on

Par

suhosin.session.encrypt = off
date.timezone

Profitons-en pour régler le fuseau horaire: Toujours dans le fichier /etc/php5/php.ini, cherchez la variable date.timezone, dé commentez, et complétez:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = 'Indian/Antananarivo'
;date.timezone = 'Europe/Paris'

Mysql

Roundcube à besoin d'une base de donnée, il faut maintenant la créer :

root@facteur:~# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 48
Server version: 5.1.49-3 (Debian)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database roundbase;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON roundbase.* TO 'roundadmin'@'localhost' IDENTIFIED BY 'monmotdepasse';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> quit
Bye

Installation

Rendez-vous maintenant à l'adresse suivante pour la configuration: http://votre_IP/roundcubemail/installer/

Laissez-vous guider, jusqu’à la page de création de la configuration.

Prenez soin de remplir convenablement les questions concernant la base Mysql, le serveur IMAP et SMTP ainsi que les "locales".

L'installeur vous proposera ensuite deux fichiers main.inc.php et db.inc.php qu'il faudra aller copier dans /var/www/roundcube/config/

Cliquez sur "continuer" (en milieu de page) une fois que vous aurez créé les deux fichiers de configuration pour tester.

Initialisez la base de données :

Quand tous les tests sont "Ok", vous pouvez effacer le répertoire /var/www/roundcubemail/installer/ et vous rendre sur: http://votre_IP/roundcubemail/

root@facteur:~# rm -r /var/www/roundcubemail/installer


Un alias pour Apache2

Ajout d'un alias 'webmail' dans Apache. Ainsi Roundcube sera accessible depuis n'importe quel domaine hébergé sur le serveur via l'adresse http://domaine.tld/webmail/.

Editez le fichier apache2.conf

root@facteur:~# nano /etc/apache2/apache2.conf

et ajoutez ceci à la fin du fichier :

Alias /webmail "/var/www/roudcubemail"

<Directory /var/www/roundcubemail/config>
        Options -FollowSymLinks
        AllowOverride None
</Directory>
 
<Directory /var/www/roundcubemail/temp>
        Options -FollowSymLinks
        AllowOverride None
        Order allow,deny
        Deny from all
</Directory>
 
<Directory /var/www/roundcubemail/logs>
        Options -FollowSymLinks
        AllowOverride None
        Order allow,deny
        Deny from all
</Directory>

Puis rechargez apache :

root@facteur:~# service apache2 reload

Activation du SMTPS

La connexion classique se fait sur le port 25 non sécurisée, nous allons ouvrir le port 465 (smtps)

Ajoutons à notre fichier /etc/postfix/master.cf (il suffit de dé-commenter) ceci :

smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes

Modifions aussi le fichier /etc/postfix/main.cf, on y ajoute

# SASL parameters
# ---------------------------------

# Use Dovecot to authenticate.
smtpd_sasl_type = dovecot
# Referring to /var/spool/postfix/private/auth
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
smtpd_sasl_authenticated_header = yes

# TLS parameters
# ---------------------------------

# Replace this with your SSL certificate path if you are using one.
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
# The snakeoil self-signed certificate has no need for a CA file. But
# if you are using your own SSL certificate, then you probably have
# a CA certificate bundle from your provider. The path to that goes
# here.
#smtpd_tls_CAfile=/path/to/ca/file
smtpd_use_tls=yes
smtp_tls_security_level = may
smtpd_tls_security_level = may
#smtpd_tls_auth_only = no
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
#smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
#smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

root@facteur:~# service postfix restart

Et vérifions que le port 465 est bien ouvert:

root@facteur:~# netstat -laputen | grep master
tcp        0      0 0.0.0.0:465             0.0.0.0:*               LISTEN      0          14857       3757/master     
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      0          14852       3757/master     
tcp        0      0 127.0.0.1:10024         0.0.0.0:*               LISTEN      108        3408        828/amavisd (master
tcp        0      0 127.0.0.1:10025         0.0.0.0:*               LISTEN      0          14986       3757/master

Vous pouvez maintenant tester avec roundcube ou squirrelmail (en changeant la configuration évidemment...)

Sur Squirrelmail:

SMTP Settings
-------------
4.   SMTP Server           : localhost
5.   SMTP Port             : 465
6.   POP before SMTP       : false
7.   SMTP Authentication   : none
8.   Secure SMTP (TLS)     : true
9.   Header encryption key :

Sur Roundcube (dans le fichier /var/www/roundcubemail/config/main.inc.php)

// ----------------------------------
// SMTP
// ----------------------------------
$rcmail_config['smtp_server'] = 'ssl://localhost';
$rcmail_config['smtp_port'] = 465;
$rcmail_config['smtp_user'] = '';
$rcmail_config['smtp_pass'] = '';
$rcmail_config['smtp_auth_type'] = '';
$rcmail_config['smtp_auth_cid'] = null;
$rcmail_config['smtp_auth_pw'] = null;

Plus loin avec Dovecot

Managesieve

Managesieve est un plugin permettant de gérer les filtres directement sur votre serveur Imap, il est inclu à Dovecot à partir des versions 1.2

Ajoutez le dépôt suivant (valable en i386 et amd64) :

root@facteur:~# nano /etc/apt/sources.list
deb http://xi.rename-it.nl/debian/ stable-auto/dovecot-1.2 main
root@facteur:~# apt-get update

Réglez le problème de clef gpg...

root@facteur:~# apt-get dist-upgrade
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Calcul de la mise à jour... Fait
Les paquets suivants seront mis à jour :
  dovecot-common dovecot-imapd dovecot-pop3d
3 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 4 102 ko dans les archives.
Après cette opération, 7 954 ko d'espace disque seront libérés.
Souhaitez-vous continuer [O/n] ?

Conservez votre configuration...

Modifiez la configuration de Dovecot pour activer Managesieve

root@facteur:~# nano /etc/dovecot/dovecot.conf
protocols = imap imaps managesieve pop3 pop3s
...
protocol lda {
...
  mail_plugins = sieve quota
}
protocol managesieve {
  listen = *:4190
  login_executable = /usr/lib/dovecot/managesieve-login
  mail_executable = /usr/lib/dovecot/managesieve

}
...
plugin {
  ## Sieve
  sieve_dir = /home/facteur/%d/%n/sieve
  sieve = /home/facteur/%d/%n/.dovecot.sieve
}
root@facteur:~# service dovecot restart

Squirrelmail : ajouter le plugin "avelsieve"

Téléchargement ICI

root@facteur:~# tar xzvf avelsieve-1.9.8.tar.gz -C /var/www/squirrelmail/plugins/
root@facteur:~# chown -R www-data:www-data /var/www/squirrelmail/plugins
root@facteur:~# cd /var/www/squirrelmail/
root@facteur:/var/www/squirrelmail# cp plugins/avelsieve/config/config_sample.php plugins/avelsieve/config/config.php

Téléchargez aussi la librairie java-script (même page) Vous pouvez, si vous êtes un puriste, vous passer de la librairie javascript, mais toutes les options ne fonctionneront pas...

root@facteur:~# tar xzvf javascript_libs-0.1.2.tar.gz -C /var/www/squirrelmail/plugins/
root@facteur:~# chown -R www-data:www-data /var/www/squirrelmail/plugins

Activez les plugins:

root@facteur:~# /var/www/squirrelmail/configure
Command >> 8 (Plugins)
Command >> ? (avelsieve) + (javascript_libs)
Command >> s
Command >> q

Vous avez maintenant accès à une nouvelle option: Filtres!

Si vous activez le répondeur automatique vous aurez une réponse dans ce genre (en-tête du mail de réponse) :

Return-Path: <MAILER-DAEMON>
Delivered-To: essai1@essai.org
Received: from localhost (localhost [127.0.0.1])
    	by facteur.zehome.org (Postfix) with ESMTP id 6EABF6C36A
    	for <essai1@essai.org>; Thu, 7 Apr 2011 19:41:53 +0300 (EAT)
X-Virus-Scanned: Debian amavisd-new at facteur.zehome.org
Received: from facteur.zehome.org ([127.0.0.1])
    	by localhost (facteur.zehome.org [127.0.0.1]) (amavisd-new, port 10024)
    	with ESMTP id 8L-CWt6ZrQIC for <essai1@essai.org>;
    	Thu, 7 Apr 2011 19:41:53 +0300 (EAT)
Received: by facteur.zehome.org (Postfix, from userid 3000)
    	id 206AB6C3B8; Thu, 7 Apr 2011 19:41:53 +0300 (EAT)
X-Sieve: Dovecot Sieve 0.1.18
Message-ID: <dovecot-sieve-1302194513-52514-0@facteur.zehome.org>
Date: Thu, 07 Apr 2011 19:41:53 +0300
From: <essai@essai.org>
To: <essai1@essai.org>
Subject: En Vacances!
In-Reply-To: <31730a3411b70b77d45e7e85708c80f9.squirrel@192.168.3.114>
References: <31730a3411b70b77d45e7e85708c80f9.squirrel@192.168.3.114>
Auto-Submitted: auto-replied (vacation)
Precedence: bulk
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

Roundcube : ajouter le plugin "managesieve"

Le plugin est déjà présent dans Roundcube, il suffit de l'activer :

root@facteur:~/trunk# nano /var/www/roundcubemail/config/main.inc.php

Vers la ligne 324...

// ----------------------------------
// PLUGINS
// ----------------------------------

// List of active plugins (in plugins/ directory)
$rcmail_config['plugins'] = array('managesieve');

Et de le configurer:

root@facteur:~# cp /var/www/roundcubemail/plugins/managesieve/config.inc.php.dist /var/www/roundcubemail/plugins/managesieve/config.inc.php

Remplacez :

$rcmail_config['managesieve_port'] = 2000;

Par :

$rcmail_config['managesieve_port'] = 4190;

Vous avez maintenant accès à la page de configuration des filtres :

Installer le SSL sur Dovecot

Plus loin avec Roundcube

Roundcube + Vacation - Notification d'absence

Forcer l'utilisation de roundcube en https

Plus loin avec Postfixadmin

Fetchmail_sur_postfixadmin

Dovecot - Mise en place de quotas

Dovecot 1.2 supporte la gestion des quotas. Pourquoi ne pas en profiter!


Modification de la configuration de Dovecot:

root@facteur:~# nano /etc/dovecot/dovecot.conf
...
protocol imap {
       mail_plugins = quota imap_quota
}
protocol pop3 {
       pop3_uidl_format = %08Xu%08Xv
       mail_plugins = quota
}
...
protocol lda {
...
  mail_plugins = sieve quota
}
...
dict {
  quotadict = mysql:/etc/dovecot/dovecot-dict-sql.conf
}
...
plugin {
...
  ## quota
  quota = dict:%u::proxy::quotadict
  quota_rule = *:storage=10M:messages=1000
  quota_warning = storage=75%% /usr/local/bin/quota-warning.sh 75 %u
  quota_warning2 = storage=90%% /usr/local/bin/quota-warning.sh 90 %u
}

Création du fichier en charge d'alimenter la base de donnée concernant les quotas:

root@facteur:~# nano /etc/dovecot/dovecot-dict-sql.conf
connect = host=127.0.0.1 dbname=postfix user=postfixadmin password=monmotdepasse
map {
  pattern = priv/quota/storage
  table = quota2
  username_field = username
  value_field = bytes
}
map {
  pattern = priv/quota/messages
  table = quota2
  username_field = username
  value_field = messages
}

Modification de la requête à la base Mysql:

root@facteur:~# nano /etc/dovecot/dovecot-mysql.conf
driver = mysql
connect = host=127.0.0.1 dbname=postfix user=postfixadmin password=Perso2
default_pass_scheme = MD5-CRYPT
user_query = SELECT '/home/facteur/%d/%n' AS home, 3000 AS uid, 3000 AS gid, CONCAT('*:bytes=', CAST(quota AS CHAR)) AS quota_rule FROM mailbox WHERE username = '%u' AND active='1'
password_query = SELECT password FROM mailbox WHERE username = '%u'

Prise en charge des quotas dans postfixadmin:

root@facteur:~# nano /var/www/postfixadmin/config.inc.php
...
// Quota
// When you want to enforce quota for your mailbox users set this to 'YES'.
$CONF['quota'] = 'YES';
...
// Optional:
// Show used quotas from Dovecot dictionary backend in virtual
// mailbox listing.
// See: DOCUMENTATION/DOVECOT.txt
//      http://wiki.dovecot.org/Quota/Dict
//
$CONF['used_quotas'] = 'YES';

// if you use dovecot >= 1.2, set this to yes.
// Note about dovecot config: table "quota" is for 1.0 & 1.1, table "quota2" is for dovecot 1.2 and newer
$CONF['new_quota_table'] = 'YES';

Création du script chargé d'envoyer les alertes:

root@facteur:~# nano /usr/local/bin/quota-warning.sh
#!/bin/sh

PERCENT=$1
FROM="admin@isalo.org"
qwf="/tmp/quota.warning.$$"

echo "From: $FROM
To: $USER
To: admin@isalo.org
Subject: Votre boite mail est pleine à $PERCENT%
Content-Type: text/plain; charset="UTF-8"

Votre boite mail est pleine à $PERCENT%+, veuillez effacer des messages et vider le corbeille, ou contactez votre administrateur" >> $qwf

cat $qwf | /usr/sbin/sendmail -f $FROM "$USER"
rm -f $qwf

exit 0
root@facteur:~# chown dovecot:facteur /usr/local/bin/quota-warning.sh
root@facteur:~# chmod+x /usr/local/bin/quota-warning.sh

Redémarrage de Dovecot

root@facteur:~# service dovecot restart

Prise en charge dans Roundcube

Rien à faire, la prise en charge des quotas est déjà activée d'office (en bas à gauche).

Prise en charge dans Squirrelmail

Il faut installer 2 plugins :

Check Quota et Compatibility

Procédez de la même façon que vous avez installé le plugin avelsieve.

Pour le plugin "compatibility" rien d'autre à faire. Pour le plugin "Check Quota":

root@facteur:~# cp /var/www/squirrelmail/plugins/check_quota/config.sample.php /var/www/squirrelmail/plugins/check_quota/config.php
root@facteur:~# nano /var/www/squirrelmail/plugins/check_quota/config.php

Et passez la variable quota_type de 0 à 1

*******************************
 * Quota Configuration Options *
 *******************************/
...

$settings['quota_type'] = 1;

Activez les deux plugins :

root@facteur:~# /var/www/squirrelmail/configure

Visualisation du quota en haut à gauche :

Lien externes

Lol 8 avril 2011 à 11:06 (CDT)