====== Installer le serveur IMAP Cyrus sur Debian 4.0 Etch et 5.0 Lenny ====== {{:cyrustiny2.jpg|}} 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 ) ===== Installation du serveur Cyrus IMAP et le client MySQL: ===== ==== Cyrus : ==== apt-get install cyrus-imapd-2.2 cyrus-admin-2.2 mysql-client libsasl2-modules-sql openssl apg ==== MySQL : ==== 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 ==== Création des certificats SSL ==== Pour accéder à votre serveur IMAP, je vous recommande de créer le sous-domaine suivants: * imap.domaine.com 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é: * smtp.domaine.com 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 ==== Configuration du serveur IMAP ==== === Création de l'administrateur === 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 === Configuration de Cyrus === 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 === Création automatique des boîtes e-mails === 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