Par Pierre-Yves Landuré ( http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-le-serveur-imap-cyrus-sur-debian-4-0-etch-et-5-0-lenny )
apt-get install cyrus-imapd-2.2 cyrus-admin-2.2 mysql-client libsasl2-modules-sql openssl apg
Mise en place de la base de données Nous allons utiliser MySQL pour stocker les domaines et les utilisateurs de notre serveur e-mail. Pour ce faire, installez un serveur MySQL et créez une base de données CYRUS. Cela peut être fait en suivant mon guide:
Une fois la base de donnée créée, nous plaçons une valeur par défaut pour le nom d'hôte du serveur de la base de données:
if [ -z "$MYSQL_HOST" ]; then MYSQL_HOST=localhost fi
Attention : Si vous avez suivi mon guide sur le même hôte que votre serveur Cyrus Imap, vous pouvez passer ces lignes de commandes, sinon, remplacer les informations en gras par celles correspondant à votre base de données MySQL :
MYSQL_HOST=localhost MYSQL_DB=CYRUS MYSQL_USERNAME=cyrus MYSQL_USERPWD=cyrus_password
Puis, nous créons les tables nécessaires:
/usr/bin/wget http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-le-serveur-imap-cyrus-sur-debian-4-0-etch/cyrus-schema.sql \
--output-document=/tmp/cyrus-schema.sql
/bin/cat /tmp/cyrus-schema.sql | /usr/bin/mysql --user=$MYSQL_USERNAME --password=$MYSQL_USERPWD --host=$MYSQL_HOST $MYSQL_DB
Pour accéder à votre serveur IMAP, je vous recommande de créer le sous-domaine suivants:
Pour compléter ces sous-domaines, créez le certificat SSL correspondant à ces deux sous-domaines en suivant mon guide:
Créer un certificat SSL multi-domaines
De même, pour accéder à votre serveur SMTP, je vous recommande la création du sous-domaine suivant ainsi que du certificat SSL associé:
Et nous rendons les clefs privées uniquement lisibles par les utilisateurs qui en ont besoin:
/bin/chmod go+rx /etc/openssl/PRIVATE_KEYS /bin/chown cyrus:mail /etc/openssl/PRIVATE_KEYS/imap_key.pem /bin/chmod go-rwx /etc/openssl/PRIVATE_KEYS/imap_key.pem /bin/chown Debian-exim:mail /etc/openssl/PRIVATE_KEYS/smtp_key.pem /bin/chmod go-rwx /etc/openssl/PRIVATE_KEYS/smtp_key.pem
En premier lieu, nous configurons le domaine par défaut de notre serveur e-mail:
DEFAULT_DOMAIN=main-domain.com
Et nous configurons l'utilisateur destiné à administrer notre serveur:
ADMIN_USERNAME=cyrus ADMIN_PASSWORD=`/usr/bin/apg -q -a 0 -n 1 -M NCL`
Nous affichons les informations de connexion ainsi créées:
/bin/echo "L'administrateur de votre serveur IMAP a pour identifiant '$ADMIN_USERNAME' et pour mot de passe '$ADMIN_PASSWORD'."
Nous insérons ces informations dans la base de données MySQL:
/bin/echo "INSERT INTO domain(name) VALUES ('$DEFAULT_DOMAIN');
INSERT INTO user (domain_id, username, password, enabled, has_mailbox) VALUES (
(SELECT id FROM domain WHERE name='$DEFAULT_DOMAIN'),
'$ADMIN_USERNAME', '$ADMIN_PASSWORD', 1, 0);" \
| /usr/bin/mysql --user=$MYSQL_USERNAME --password=$MYSQL_USERPWD --host=$MYSQL_HOST $MYSQL_DB
Nous faisons en sorte que Cyrus puisse se servir de la base de données de SASL:
/usr/sbin/adduser cyrus sasl
Nous configurons les services de Cyrus que nous allons utiliser (ou pour être plus exact, ceux que nous n'allons pas désactiver):
/bin/sed -i -e 's/^\([ \t]*\)\(pop3[ \t]\{1\}.*\)$/\1#\2/' \
-e 's/^\([ \t]*\)\(nntp[ \t]\{1\}.*\)$/\1#\2/' \
-e 's/^\([ \t]*\)\(imaps[ \t]\{1\}.*\)$/\1#\2/' \
-e 's/^\([ \t]*\)\(pop3s[ \t]\{1\}.*\)$/\1#\2/' \
-e 's/^#*\([ \t]*\)#*\(imap[ \t]\{1\}.*imapd.*\)$/\1\2/' \
-e 's/^#*\([ \t]*\)#*\(lmtp[ \t]\{1\}.*lmtpd.*\)$/\1\2/' \
-e 's/^#*\([ \t]*\)#*\(lmtpunix[ \t]\{1\}.*lmtpd.*\)$/\1\2/' \
/etc/cyrus.conf
Nous faisons en sorte que l'authentification ne soit pas nécessaire pour les connexions TCP au port lmtp :
/bin/sed -i -e 's/^\(.*lmtp[ \t]\{1\}.*cmd="\)[^"]*\(".*$\)/\1lmtpd -a\2/' \
/etc/cyrus.conf
Nous définissons le port pour lmtp :
/bin/echo -e "lmtp\t\t2003/tcp\t\t\t# Cyrus IMAP lmtp" | /usr/bin/tee -a /etc/services
Nous configurons Cyrus pour autoriser les points dans les noms d'utilisateurs (c.a.d. les points dans les adresses électroniques) :
/bin/sed -i -e 's/^\(unixhierarchysep:\).*/\1 yes/' /etc/imapd.conf
Nous configurons le serveur IMAP pour utiliser l'identification via SASL, ainsi pour que l'utilisateur cyrus soit parmis les administrateurs:
/bin/sed -i -e "s/^[#]*\(admins:\).*/\1 $ADMIN_USERNAME/" \
-e 's/^[#]*\(sasl_mech_list:\).*/\1 PLAIN DIGEST-MD5 CRAM-MD5/' \
-e 's/^[#]*\(sasl_minimum_layer:\).*/\1 0/' \
-e 's/^[#]*\(sasl_pwcheck_method:\).*/\1 auxprop/' \
-e 's/^[#]*\(sasl_pwcheck_method:\).*/\1 auxprop/' \
-e 's/^[#]*\(sasl_pwcheck_method:\).*/\1 auxprop/' \
-e 's/^[#]*\(virtdomains:\).*/\1 userid/' \
-e "s/^[#]*\(defaultdomain:\).*/\1 $DEFAULT_DOMAIN/" \
/etc/imapd.conf
Nous configurons maintenant le serveur Cyrus pour récupérer les utilisateurs dans la base de données MySQL:
/bin/sed -i -e 's/^[#]*\(sasl_auxprop_plugin:\).*/\1 sql/' \
-e "/^[#]*\(sasl_auxprop_plugin:\).*/a\\
sasl_sql_engine: mysql\\
sasl_sql_hostnames: $MYSQL_HOST\\
sasl_sql_user: $MYSQL_USERNAME\\
sasl_sql_passwd: $MYSQL_USERPWD\\
sasl_sql_database: $MYSQL_DB\\
sasl_sql_select: SELECT user.password AS userPassword FROM user JOIN domain ON (user.domain_id = domain.id) WHERE (domain.name='%r' OR ('%r' = 'cyrus' AND domain.name='$DEFAULT_DOMAIN')) AND user.username='%u' AND user.enabled=1;\\
sasl_sql_update: UPDATE user SET user.password = '%v' FROM domain WHERE user.username = '%u' AND user.domain_id = domain.id AND (domain.name='%r' OR ('%r' = 'cyrus' AND domain.name='$DEFAULT_DOMAIN')) AND user.enabled=1;" \
/etc/imapd.conf
Nous configurons maintenant le cryptage TLS:
/bin/sed -i -e 's|^[#]*\(tls_cert_file:\).*|\1 /etc/openssl/CERTIFICATES/imap_cert.cert|' \
-e 's|^[#]*\(tls_key_file:\).*|\1 /etc/openssl/PRIVATE_KEYS/imap_key.pem|' \
-e 's|^[#]*\(allowplaintext:\).*|\1 no|' \
/etc/imapd.conf
Nous redémarrons le serveur afin de prendre en compte ces modifications:
/etc/init.d/cyrus2.2 restart
Gestion des filtres de messages depuis un client distant
Cyrus dispose d'un langage de description des filtres de messages : Sieve. Ainsi, il est possible de configurer des filtres de message coté serveur à l'aide de certain clients (Thunderbird, Horde, etc). Personnellement, je me sert du Webmail Horde (que vous pouvez installer en suivant mon guide ) pour ce faire. Cependant, si le webmail (ou le client) est installé sur une machine différente de celle du serveur, il est nécessaire de configurer le démon timsieved pour qu'il écoute les connexions en provenance du réseau. Cela se fait à l'aide de cette ligne de commande :
/bin/sed -i -e 's/localhost:sieve/sieve/' /etc/cyrus.conf
Une fois ceci fait, redémarrez Cyrus pour prendre en compte les modifications :
/etc/init.d/cyrus2.2 restart
La base de données permet de stocker de manière simple et lisibles les informations de connexion des utilisateurs. Il faut cependant explicitement créer une boîtes e-mail une fois l'utilisateur ajouté à la base de données.
Nous allons donc mettre en place un script qui effectue cette manipulation automatiquement:
/usr/bin/wget http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-le-serveur-imap-cyrus-sur-debian-4-0-etch/cyrus_create_mailboxes \
--output-document=/etc/cron.hourly/cyrus_create_mailboxes
/bin/sed -i -e "s/MSQL_HOST/$MYSQL_HOST/" \
-e "s/MSQL_DB/$MYSQL_DB/" \
-e "s/MSQL_USERNAME/$MYSQL_USERNAME/" \
-e "s/MSQL_USERPWD/$MYSQL_USERPWD/" \
-e "s/ADMIN_LOGIN/$ADMIN_USERNAME/" \
-e "s/ADMIN_PWD/$ADMIN_PASSWORD/" \
/etc/cron.hourly/cyrus_create_mailboxes
/bin/chmod 500 /etc/cron.hourly/cyrus_create_mailboxes