4 231
modifications
(34 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
Ce tutoriel va vous expliquer comment mettre en place un serveur mail complet pour plusieurs domaines et supportant l'ipv6 sous debian lenny. Les éléments suivants seront utilisés : | [[Category:serveur]] | ||
[[Category:debian]] | |||
'''<span style="color: red;">Tuto plus vraiment à jour</span>''' | |||
[[Category:toupdate]] | |||
Ce tutoriel va vous expliquer comment mettre en place un serveur mail complet pour plusieurs domaines et supportant l'ipv6 sous debian '''lenny'''. Les éléments suivants seront utilisés : | |||
* un serveur smtp : postfix | * un serveur smtp : postfix | ||
* un mail delivery agent (mda) : maildrop | * un mail delivery agent (mda) : maildrop | ||
Ligne 12 : | Ligne 18 : | ||
En dernier lieu, nous verront rapidement comment configurer un serveur mx secondaire pour vos domaines. | En dernier lieu, nous verront rapidement comment configurer un serveur mx secondaire pour vos domaines. | ||
Nous allons mettre en place un service email pour deux domaines : | Nous allons mettre en place un service email pour deux domaines : srv.domain.tld et domain.tld | ||
srv.domain.tld représente le serveur en lui-même, et permet de délivrer les mails aux utilisateurs locaux du serveur. | |||
domain.tld est ce qu'on appel un domaine virtuel. Nous gèrerons les mails de ce domaine via MySQL. | |||
Au niveau dns, | Au niveau dns, srv.domain.tld est le domaine identifiant la machine. Il possède l'adresse ipv4 213.186.47.110 et l'adresse ipv6 2001:41d0:1:d6e::110. | ||
domain.tld est un alias pour srv.domain.tld. | |||
Les changements de permissions effectués dans ce howto supposent que vous êtes en umask 0027 | Les changements de permissions effectués dans ce howto supposent que vous êtes en umask 0027 | ||
Ligne 23 : | Ligne 29 : | ||
=Champs dns MX= | =Champs dns MX= | ||
Pour que les mails a destination de vos deux domaines arrivent bien sur votre serveur, il faut configurer des champs dns MX. Pour cela, éditez la zone dns de votre domaine (<code>/srv/bind/ | Pour que les mails a destination de vos deux domaines arrivent bien sur votre serveur, il faut configurer des champs dns MX. Pour cela, éditez la zone dns de votre domaine (<code>/srv/bind/domain.tld.hosts</code> dans mon cas) et ajoutez/modifiez les lignes suivantes: | ||
<pre> | <pre> | ||
srv.domain.tld. IN MX 1 srv.domain.tld. | |||
domain.tld. IN MX 1 srv.domain.tld. | |||
srv.domain.tld. IN A 213.186.47.110 | |||
srv.domain.tld. IN AAAA 2001:41d0:1:d6e::110 | |||
list. | list.domain.tld. IN CNAME srv.domain.tld. | ||
</pre> | </pre> | ||
Si vous n'avez pas d'adresse ipv6 configuré sur votre serveur, vous n'aurez pas besoin du champ <code>AAAA</code>. | Si vous n'avez pas d'adresse ipv6 configuré sur votre serveur, vous n'aurez pas besoin du champ <code>AAAA</code>. | ||
Ligne 35 : | Ligne 41 : | ||
Vous pouvez aussi configurer un champ spf. Le spf (Sender Policy Framework) est une mesure antispam permettant aux autres serveurs de savoir quels serveurs ont le droit d'envoyer des mails pour votre domaine. Voici mes champs dns spf : | Vous pouvez aussi configurer un champ spf. Le spf (Sender Policy Framework) est une mesure antispam permettant aux autres serveurs de savoir quels serveurs ont le droit d'envoyer des mails pour votre domaine. Voici mes champs dns spf : | ||
<pre> | <pre> | ||
srv.domain.tld. IN TXT "v=spf1 mx -all" | |||
domain.tld. IN TXT "v=spf1 mx ~all" | |||
</pre> | </pre> | ||
Ligne 63 : | Ligne 69 : | ||
smtpd_helo_required = yes | smtpd_helo_required = yes | ||
#strict_rfc821_envelopes = yes | #strict_rfc821_envelopes = yes | ||
mydomain = | mydomain = srv.domain.tld | ||
# ajoute .$mydomain si quelqu'un envoi un mail sans préciser le domaine (utile en local quand vous utilisez la fonction mail) | # ajoute .$mydomain si quelqu'un envoi un mail sans préciser le domaine (utile en local quand vous utilisez la fonction mail) | ||
append_dot_mydomain = yes | append_dot_mydomain = yes | ||
# Uncomment the next line to generate "delayed mail" warnings | # Uncomment the next line to generate "delayed mail" warnings | ||
#delay_warning_time = 4h | #delay_warning_time = 4h | ||
myhostname = | myhostname = srv.domain.tld | ||
alias_maps = proxy:hash:/etc/aliases | alias_maps = proxy:hash:/etc/aliases | ||
alias_database = hash:/etc/aliases | alias_database = hash:/etc/aliases | ||
myorigin = /etc/mailname | myorigin = /etc/mailname | ||
mydestination = | mydestination = srv.domain.tld, localhost.localdomain, localhost | ||
relayhost = | relayhost = | ||
mynetworks = 127.0.0.0/8, [::1]/128, 213.186.47.110, [2001:41d0:1:d6e::110] | mynetworks = 127.0.0.0/8, [::1]/128, 213.186.47.110, [2001:41d0:1:d6e::110] | ||
Ligne 86 : | Ligne 92 : | ||
</pre> | </pre> | ||
Nous venons de définir la directive <code>myorigin</code> de postfix comme étant le fichier <code>/etc/mailname</code>. Cette directive défini de qui provient les mails envoyés par les utilisateurs locaux. Dans notre cas, les mails doivent provenir du domaine de notre machine, à savoir, | Nous venons de définir la directive <code>myorigin</code> de postfix comme étant le fichier <code>/etc/mailname</code>. Cette directive défini de qui provient les mails envoyés par les utilisateurs locaux. Dans notre cas, les mails doivent provenir du domaine de notre machine, à savoir, srv.domain.tld. Tapez donc : | ||
<pre> | <pre> | ||
echo " | echo "srv.domain.tld" > /etc/mailname | ||
chmod o+r /etc/mailname | chmod o+r /etc/mailname | ||
</pre> | </pre> | ||
Une autre directive importante que nous avons défini est <code>mydestination</code>. Cette directive défini quels domaines postfix doit considérer comme locaux. Lorsque postfix reçoit un mail pour l'un de ces domaines, il les délivre dans la boite locale correspondante. | Une autre directive importante que nous avons défini est <code>mydestination</code>. Cette directive défini quels domaines postfix doit considérer comme locaux. Lorsque postfix reçoit un mail pour l'un de ces domaines, il les délivre dans la boite locale correspondante. | ||
Techniquement, postfix est maintenant déjà près à recevoir des mails destinés à @ | Techniquement, postfix est maintenant déjà près à recevoir des mails destinés à @srv.domain.tld. Il reste donc à configurer le domaine virtuel et à ne pas relayer les spams. | ||
Pensez à créer la base de donnée des alias : | |||
<pre>postalias /etc/aliases</pre> | |||
Dernière chose à faire : vous assurer que le fichier <code>/etc/postfix/main.cf</code> est lisible par tous le monde : | |||
<pre>chmod o+r /etc/postfix/main.cf</pre> | |||
==Configuration de postfix pour le support MySQL des domaines virtuels== | ==Configuration de postfix pour le support MySQL des domaines virtuels== | ||
Ligne 353 : | Ligne 365 : | ||
issuerAltName = issuer:copy | issuerAltName = issuer:copy | ||
basicConstraints = critical,CA:FALSE | basicConstraints = critical,CA:FALSE | ||
keyUsage = digitalSignature, nonRepudiation, keyEncipherment | keyUsage = critical, digitalSignature, nonRepudiation, keyEncipherment | ||
nsCertType = server | nsCertType = server | ||
extendedKeyUsage = serverAuth | extendedKeyUsage = serverAuth | ||
Ligne 388 : | Ligne 400 : | ||
smtpd_tls_cert_file=/etc/postfix/ssl/smtpd.pem | smtpd_tls_cert_file=/etc/postfix/ssl/smtpd.pem | ||
smtpd_tls_key_file=/etc/postfix/ssl/smtpd.key | smtpd_tls_key_file=/etc/postfix/ssl/smtpd.key | ||
smtpd_tls_CAfile | smtpd_tls_CAfile=/etc/postfix/ssl/ca_chain.pem | ||
smtp_tls_CAfile=/etc/postfix/ssl/ca_chain.pem | smtp_tls_CAfile=/etc/postfix/ssl/ca_chain.pem | ||
smtpd_tls_security_level=may | |||
smtp_tls_security_level=may | |||
smtpd_tls_loglevel = 1 | smtpd_tls_loglevel = 1 | ||
smtp_tls_loglevel = 1 | smtp_tls_loglevel = 1 | ||
Ligne 400 : | Ligne 410 : | ||
smtp_tls_session_cache_timeout = 3600 | smtp_tls_session_cache_timeout = 3600 | ||
</pre> | </pre> | ||
Note : Les directives <code>smtp_tls_cert_file</code> et <code>smtp_tls_key_file</code> sont quant-à-elle destiné à l'authentification de votre client smtp (le certificat précisé à ces directives doit passer le test <code>openssl verify -purpose sslclient</code>. Le certificat que nous avons généré est un certificat server uniquement. | |||
Désormais, vous pourrez configurer votre logiciel de messagerie afin d'utiliser le chiffrement TLS. | Désormais, vous pourrez configurer votre logiciel de messagerie afin d'utiliser le chiffrement TLS. | ||
Ligne 408 : | Ligne 420 : | ||
# -o smtpd_sasl_auth_enable=yes | # -o smtpd_sasl_auth_enable=yes | ||
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject | # -o smtpd_client_restrictions=permit_sasl_authenticated,reject | ||
</pre> | |||
Notez qu'ici, nous ne forçons ni l'utilisation du tls sur le serveur smtp, ni la vérification tls en mode client smtp. Cela signifie que le serveur annoncera supporter le TLS, mais ne forcera pas son utilisation ; de même pour le client. | |||
Pour votre réseau interne, vous pouvez forcez la vérification TLS du le client grâce à <code>smtp_tls_policy_maps</code>. Par exemple voici la ligne à ajouter dans <code>main.cf</code>: | |||
<pre> | |||
smtp_tls_policy_maps = hash:/etc/postfix/tls_policy | |||
</pre> | |||
Et le fichier <code>/etc/postfix/tls_policy</code> : | |||
<pre> | |||
domain.tld verify | |||
</pre> | |||
N'oubliez pas de formater ce fichier pour postfix et de le rendre accessible en lecture : | |||
<pre> | |||
postmap /etc/postfix/tls_policy | |||
chgrp postfix /etc/postfix/tls_policy* | |||
</pre> | </pre> | ||
Ligne 414 : | Ligne 444 : | ||
==Ajout d'un utilisateur virtuel et lancement des services.== | ==Ajout d'un utilisateur virtuel et lancement des services.== | ||
Pour ajouter un utilisateur test@ | Pour ajouter un utilisateur test@domain.tld ainsi qu'un alias alias@domain.tld renvoyant vers notre utilisateur: | ||
<pre> | <pre> | ||
# mysql -u root -p | # mysql -u root -p | ||
Enter password: | Enter password: | ||
use postfix; | use postfix; | ||
INSERT INTO domain (domain,description) VALUES (' | INSERT INTO domain (domain,description) VALUES ('domain.tld','Test Domain'); | ||
INSERT INTO alias (address,goto) VALUES ('alias@ | INSERT INTO alias (address,goto) VALUES ('alias@domain.tld', 'test@domain.tld'); | ||
INSERT INTO mailbox (username,password,name,maildir) VALUES ('test@ | INSERT INTO mailbox (username,password,name,maildir) VALUES ('test@domain.tld',ENCRYPT('userpassword'),'Mailbox User','test@domain.tld/'); | ||
</pre> | </pre> | ||
Ligne 434 : | Ligne 464 : | ||
Pour tester si l'authentification fonctionne bien : | Pour tester si l'authentification fonctionne bien : | ||
<pre>testsaslauthd -u test@ | <pre>testsaslauthd -u test@domain.tld -p userpassword -s smtp -f /var/spool/postfix/var/run/saslauthd/mux</pre> | ||
Vous pouvez vérifier que postfix ne détecte aucun problème avec : | Vous pouvez vérifier que postfix ne détecte aucun problème avec : | ||
Ligne 539 : | Ligne 569 : | ||
issuerAltName = issuer:copy | issuerAltName = issuer:copy | ||
basicConstraints = critical,CA:FALSE | basicConstraints = critical,CA:FALSE | ||
keyUsage = digitalSignature, nonRepudiation, keyEncipherment | keyUsage = critical, digitalSignature, nonRepudiation, keyEncipherment | ||
nsCertType = server | nsCertType = server | ||
extendedKeyUsage = serverAuth | extendedKeyUsage = serverAuth | ||
Ligne 549 : | Ligne 579 : | ||
issuerAltName = issuer:copy | issuerAltName = issuer:copy | ||
basicConstraints = critical,CA:FALSE | basicConstraints = critical,CA:FALSE | ||
keyUsage = digitalSignature, nonRepudiation, keyEncipherment | keyUsage = critical, digitalSignature, nonRepudiation, keyEncipherment | ||
nsCertType = server | nsCertType = server | ||
extendedKeyUsage = serverAuth | extendedKeyUsage = serverAuth | ||
Ligne 699 : | Ligne 729 : | ||
Pour créer automatiquement la mailbox si elle n'existe pas lors de la réception d'un message ajoutez les lignes suivantes à <code>/etc/maildroprc</code> : | Pour créer automatiquement la mailbox si elle n'existe pas lors de la réception d'un message ajoutez les lignes suivantes à <code>/etc/maildroprc</code> : | ||
<pre><nowiki> | <pre><nowiki> | ||
# Si la mailbox représenté par $DEFAULT n'existe pas | # Si la mailbox représenté par $DEFAULT n'existe pas | ||
Ligne 713 : | Ligne 744 : | ||
`chmod -R go-rwx $DEFAULT` | `chmod -R go-rwx $DEFAULT` | ||
} | } | ||
</ | </nowiki></pre> | ||
Enfin nous allons configurer un fichier de filtre local à chaque utilisateur virtuel : | Enfin nous allons configurer un fichier de filtre local à chaque utilisateur virtuel : | ||
Ligne 728 : | Ligne 759 : | ||
</nowiki></pre> | </nowiki></pre> | ||
Par exemple, voici comment je filtre les spams dans mon fichier <code>/srv/vmail/pfoo\@ | Par exemple, voici comment je filtre les spams dans mon fichier <code>/srv/vmail/pfoo\@domain.tld/mailfilter</code> : | ||
<pre><nowiki> | <pre><nowiki> | ||
if (/^X-Spam-Flag:.*YES/) | if (/^X-Spam-Flag:.*YES/) | ||
Ligne 737 : | Ligne 768 : | ||
} | } | ||
</nowiki></pre> | </nowiki></pre> | ||
==Quota== | |||
Pour le support du quota il faut créer les fichiers nécessaires avec <code>maildirmake</code>. | |||
Si la mailbox n'existe pas encore tapez : | |||
<pre> | |||
maildirmake /srv/vmail/test@domain.tld | |||
chown -R vmail:vmail /srv/vmail/test@domain.tld | |||
</pre> | |||
Pour activer le quota pour la mailbox il faut utiliser l'option <code>-q</code> de <code>maildirmake</code>. Pour créer une boite de <code>512 000 000 bytes</code> tapez : | |||
<pre> | |||
maildirmake -q 512000000S /srv/vmail/test@domain.tld | |||
chown -R vmail:vmail /srv/vmail/test@domain.tld | |||
</pre> | |||
Pour créer une boite pouvant contenir un maximum de 1000 fichiers tapez : | |||
<pre> | |||
maildirmake -q 1000C /srv/vmail/test@domain.tld | |||
chown -R vmail:vmail /srv/vmail/test@domain.tld | |||
</pre> | |||
maildrop délivrera un message d'erreur lorsqu'une boite est pleine à un certain pourcentage (défini dans la configuration de postfix). Placez le texte suivant dans <code>/usr/local/courier/etc/quotawarnmsg</code> et assurez vous qu'il soit lisible par vmail : | |||
<pre> | |||
From: Postmaster domain.tld <postmaster@domain.tld> | |||
Reply-To: postmaster@domain.tld | |||
To: Valued Customer:; | |||
Subject: Mail quota warning | |||
Content-Type: text/plain; charset=iso-8859-1 | |||
Content-Transfer-Encoding: 7bit | |||
Your mailbox on the server is now more than 90% full. So that you can continue to receive mail you need to remove some messages from your mailbox. | |||
</pre> | |||
==Intégration à postfix== | |||
Il faut commencer par remplacer <code<virtual<code> par <code>maildrop</code> dans <code>/etc/postfix/main.cf</code> : | |||
<pre> | |||
virtual_transport = maildrop | |||
maildrop_destination_recipient_limit=1 | |||
</pre> | |||
Ensuite il faut modifier la configuration de maildrop du fichier <code>/etc/postfix/master.cf</code> : | |||
<pre> | |||
maildrop unix - n n - - pipe | |||
flags=DRhu user=vmail argv=/usr/local/courier/bin/maildrop -w 90 -d ${recipient} | |||
</pre> | |||
L'option -w 90 défini qu'il faut avertir l'utilisateur lorsque sa boite mail est pleine à 90%. | |||
==Vérification et redémarrage== | |||
<code>authtest</code> permet de vérifier si l'authentification de courier fonctionne bien : | |||
<pre> | |||
$ authtest test@domain.tld | |||
Authentication succeeded. | |||
Authenticated: test@domain.tld (uid 5000, gid 5000) | |||
Home Directory: /srv/vmail | |||
Maildir: test@domain.tld/ | |||
Quota: (none) | |||
Encrypted Password: ZHJghD45/gfFDH42 | |||
Cleartext Password: (none) | |||
Options: (none) | |||
</pre> | |||
Ensuite testez maildrop : | |||
<pre> | |||
# /usr/local/courier/bin/maildrop -V 7 -d test@domain.tld | |||
maildrop: authlib: groupid=5000 | |||
maildrop: authlib: userid=5000 | |||
maildrop: authlib: logname=test@domain.tld, home=/srv/vmail, mail=test@domain.tld/ | |||
maildrop: Changing to /srv/vmail | |||
</pre> | |||
Si vous n'avez eu aucune erreur vous pouvez relancer postfix : | |||
<pre>/etc/init.d/postfix restart</pre> | |||
=amavis= | |||
Amavis permet de scanner facilement les mails avec toutes sortes d'outils externes tel que spamassassin et clamav. | |||
Installez amavis : | |||
<pre>aptitude install amavisd-new</pre> | |||
Il est possible que vous rencontriez l'erreur suivante : | |||
<pre> | |||
Paramétrage de amavisd-new (2.4.2-6.1) ... | |||
Creating/updating amavis user account... | |||
Starting amavisd: The value of variable $myhostname is "DOMAIN", but should have been | |||
a fully qualified domain name; perhaps uname(3) did not provide such. | |||
You must explicitly assign a FQDN of this host to variable $myhostname | |||
in amavisd.conf, or fix what uname(3) provides as a host's network name! | |||
(failed). | |||
invoke-rc.d: initscript amavis, action "start" failed. | |||
dpkg : erreur de traitement de amavisd-new (--configure) : | |||
le sous-processus post-installation script a retourné une erreur de sortie d'état 1 | |||
Des erreurs ont été rencontrées pendant l'exécution : | |||
amavisd-new | |||
E: Sub-process /usr/bin/dpkg returned an error code (1) | |||
Échec de l'installation d'un paquet. Tentative de réparation : | |||
Paramétrage de amavisd-new (2.4.2-6.1) ... | |||
Creating/updating amavis user account... | |||
addgroup: Starting amavisd: The value of variable $myhostname is "DOMAIN", but should have been | |||
a fully qualified domain name; perhaps uname(3) did not provide such. | |||
You must explicitly assign a FQDN of this host to variable $myhostname | |||
in amavisd.conf, or fix what uname(3) provides as a host's network name! | |||
(failed). | |||
invoke-rc.d: initscript amavis, action "start" failed. | |||
dpkg : erreur de traitement de amavisd-new (--configure) : | |||
le sous-processus post-installation script a retourné une erreur de sortie d'état 1 | |||
Des erreurs ont été rencontrées pendant l'exécution : | |||
amavisd-new | |||
</pre> | |||
Cette erreur survient parce que votre fichier <code>/etc/hostname</code> ne contient pas un domaine FQDN (un domaine écrit correctement). | |||
Deux possibilités s'offrent à vous : modifier le fichier hostname pour que le domaine soit FQDN (exemple : domain.tld), ou alors, ajoutez la ligne suivante dans <code>/etc/amavis/conf.d/50-user</code> : | |||
<pre>$myhostname = "domain.tld";</pre> | |||
Il va maintenant falloir modifier <code>/etc/postfix/main.cf</code> pour que postfix fasse transiter ses mails par amavis. Ajoutez y les lignes suivantes : | |||
<pre> | |||
# Use amavis | |||
content_filter = amavis:[127.0.0.1]:10024 | |||
receive_override_options = no_address_mappings | |||
</pre> | |||
De cette manière, postfix va adresser tous les mails entrant à amavis sur le port local 10024. | |||
Il faut encore modifier le fichier <code>/etc/postfix/master.cf</code> afin d'y configurer amavis et de définir le port sur lequel postfix va recevoir les mails provenant de amavis : | |||
<pre> | |||
# Amavis filter | |||
amavis unix - - - - 10 smtp | |||
-o smtp_data_done_timeout=1200 | |||
-o smtp_send_xforward_command=yes | |||
-o disable_dns_lookups=yes | |||
-o max_use=20 | |||
-o smtp_bind_address=127.0.0.1 | |||
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_delay_reject=no | |||
-o smtpd_client_restrictions=permit_mynetworks,reject | |||
-o smtpd_helo_restrictions= | |||
-o smtpd_sender_restrictions= | |||
-o smtpd_recipient_restrictions=permit_mynetworks,reject | |||
-o smtpd_data_restrictions=reject_unauth_pipelining | |||
-o smtpd_end_of_data_restrictions= | |||
-o mynetworks=127.0.0.0/8 | |||
-o smtpd_error_sleep_time=0 | |||
-o smtpd_soft_error_limit=1001 | |||
-o smtpd_hard_error_limit=1000 | |||
-o smtpd_client_connection_count_limit=0 | |||
-o smtpd_client_connection_rate_limit=0 | |||
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks | |||
</pre> | |||
Amavis est configuré. Il ne reste plus qu'à relancer les services : | |||
<pre> | |||
/etc/init.d/amavis restart | |||
/etc/init.d/postfix restart | |||
</pre> | |||
Si amavis semble utiliser trop de ressource, vous pouvez diminuer le nombre maximum de child. Ajoutez la directive <code>$max_servers = 2;</code> dans la configuration de amavis | |||
==Taguer les mails contenant un virus== | |||
Par défaut, amavis renvoi les mails contenant un virus vers l'adresse définie par <code>$virus_admin</code> (dans le fichier <code>/etc/amavis/conf.d/20-debian_defaults</code>). Vous voudrez peut-être comme moi que les utilisateurs reçoivent tout de même le message avec une alerte. | |||
Pour que les mails contenant un virus arrivent jusqu'aux utilisateurs, il suffit de modifier la directive <code>$final_virus_destiny</code> du fichier <code>/etc/amavis/conf.d/20-debian_defaults</code> comme suit: | |||
<pre>$final_virus_destiny = D_PASS;</pre> | |||
Enfin, ajoutez la ligne suivante dans <code>/etc/amavis/conf.d/20-debian_defaults</code> : | |||
<pre>$subject_tag_maps_by_ccat{+CC_VIRUS} = [ '***INFECTED*** ' ];</pre> | |||
=spamassassin= | |||
==Mise en place de spamassassin== | |||
Commencez par installer spamassassin et les quelques outils antispams suivants : | |||
<pre>aptitude install spamassassin razor pyzor</pre> | |||
Mettez à jour les règles de spamassassin : | |||
<pre>sa-update</pre> | |||
Configurez le fichier <code>/etc/spamassassin/local.cf</code> : | |||
<pre> | |||
report_safe 0 | |||
lock_method flock | |||
# Bayes-related operations | |||
use_bayes 1 | |||
use_bayes_rules 1 | |||
bayes_auto_learn 1 | |||
bayes_auto_expire 1 | |||
bayes_auto_learn_threshold_spam 8.0 | |||
bayes_path /var/lib/amavis/.spamassassin/bayes | |||
# External network tests | |||
dns_available yes | |||
skip_rbl_checks 0 | |||
use_razor2 1 | |||
use_pyzor 1 | |||
# dcc | |||
#use_dcc 1 | |||
#dcc_path /usr/bin/dccproc | |||
#dcc_add_header 1 | |||
#dcc_dccifd_path /var/lib/dcc/dccifd | |||
# Use URIBL (http://www.uribl.com/about.shtml) | |||
urirhssub URIBL_BLACK multi.uribl.com. A 2 | |||
body URIBL_BLACK eval:check_uridnsbl('URIBL_BLACK') | |||
describe URIBL_BLACK Contains an URL listed in the URIBL blacklist | |||
tflags URIBL_BLACK net | |||
score URIBL_BLACK 3.0 | |||
urirhssub URIBL_GREY multi.uribl.com. A 4 | |||
body URIBL_GREY eval:check_uridnsbl('URIBL_GREY') | |||
describe URIBL_GREY Contains an URL listed in the URIBL greylist | |||
tflags URIBL_GREY net | |||
score URIBL_GREY 0.25 | |||
# Use SURBL (http://www.surbl.org/) | |||
urirhssub URIBL_JP_SURBL multi.surbl.org. A 64 | |||
body URIBL_JP_SURBL eval:check_uridnsbl('URIBL_JP_SURBL') | |||
describe URIBL_JP_SURBL Has URI in JP at http://www.surbl.org/lists.html | |||
tflags URIBL_JP_SURBL net | |||
score URIBL_JP_SURBL 3.0 | |||
# Optional Score Increases | |||
score DCC_CHECK 4.000 | |||
score SPF_FAIL 10.000 | |||
score SPF_HELO_FAIL 10.000 | |||
score RAZOR2_CHECK 2.500 | |||
score BAYES_99 4.300 | |||
score BAYES_95 3.500 | |||
score BAYES_80 3.000 | |||
internal_networks 213.186.47.110 87.98.136.217 | |||
trusted_networks 213.186.47.110 87.98.136.217 | |||
</pre> | |||
Les directives <code>internal_networks</code> et <code>trusted_networks</code> sont très importantes pour la pertinence des résultats. Elles permettent à spamassassin de savoir à quels headers il peut faire confiance dans le mail scanné. <code>trusted networks</code> doit contenir les mêmes entrées que <code>internal_networks</code>. | |||
Les différents modules chargés par spamassassin se situent dans les fichier <code>/etc/spamassassin/init.pre</code>, <code>/etc/spamassassin/v310.pre</code> et <code>/etc/spamassassin/v312.pre</code>. | |||
Certains sont commentés par défaut. Pour les activer, dé-commentez les simplement. | |||
Nous allons maintenant configurer razor en utilisant l'utilisateur amavis : | |||
<pre> | |||
su - amavis | |||
razor-admin -d --create | |||
razor-admin -d --register | |||
exit | |||
</pre> | |||
Si jamais vous avez eu une erreur lors du register précédent, procédez comme cela : | |||
<pre> | |||
su - amavis | |||
razor-admin -discover | |||
razor-admin -create | |||
razor-admin -register | |||
exit | |||
</pre> | |||
L'identité sera stockée dans <code>/var/lib/amavis/.razor/</code> | |||
Il faut aussi configurer pyzor avec l'utilisateur amavis : | |||
<pre> | |||
su - amavis | |||
pyzor discover | |||
exit | |||
</pre> | |||
Ceci enregistrera la liste des serveurs du projet pyzor dans <code>/var/lib/amavis/.pyzor/</code> | |||
Il faut encore activer le support anti-spam de amavis dans <code>/etc/amavis/conf.d/15-content_filter_mode</code> : | |||
<pre><nowiki> | |||
@bypass_spam_checks_maps = ( | |||
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re); | |||
</nowiki></pre> | |||
Puis modifiez le fichier <code>/etc/amavis/conf.d/20-debian_defaults</code> comme suit : | |||
<pre> | |||
$sa_spam_subject_tag = '***SPAM*** '; | |||
$final_virus_destiny = D_DISCARD; | |||
$final_banned_destiny = D_BOUNCE; | |||
$final_spam_destiny = D_PASS; | |||
$final_bad_header_destiny = D_PASS; | |||
</pre> | |||
De cette manière, amavis tagera le sujet des mails considérés comme spam, mais les délivrera quand même dans la boite mail. Les virus sont quant-à-eux supprimés directement et un rapport de détection est envoyé à <code>$virus_admin</code>. | |||
<pre>/etc/init.d/amavis restart</pre> | |||
Notez qu'il n'est pas nécessaire de lancer spamassassin dans le cas présent. | |||
Si il semble que amavis ne tag pas les spams, allez faire un tour dans le fichier <code>/etc/amavis/conf.d/05-domain_id</code>. Par défaut, ce fichier charge en tant que <code>$mydomain</code> le fichier <code>/etc/mailname</code>. Ensuite, il défini <code>@local_domains_acl</code> comme étant la variable <code>$mydomain</code>. Seuls les domaines contenu dans <code>@local_domains_acl</code> seront scannés. Pour mes tests, j'ai simplement commenté la ligne <code>@local_domains_acl</code> et j'ai ajouté <code>@local_domains_acl = ( ".domain.tld" );</code> à la place. | |||
Pour simplement scanner tous les domaines, utilisez <code>@local_domains_acl = ( "." );</code> | |||
Vous pouvez trouver un exemple de spam dans <code>/usr/share/doc/spamassassin/examples/sample-spam.txt</code> | |||
==Le problème de la cohabitation entre Sender Policy Framework (SPF) et l'envoi de mails== | |||
Actuellement lorsque vous envoyez un mail, il est scanné par spamassassin. en temps normal, cela ne pose aucun problème étant donné que vos mails ne devraient pas être reconnu comme spam. Cependant, le fichier <code>/etc/spamassassin/init.pre</code> charge par défaut le plugin SPF de spamassassin (ligne <code>loadplugin Mail::SpamAssassin::Plugin::SPF</code>). Si vous avez configuré des champs spf dans la zone dns de votre domaine, vous remarquerez très vite que vos mails sortant seront tagués spams et positifs au test du spf. C'est normal étant donné que votre ip ne fait pas partie des ips autorisées à envoyer des mails pour le domaine. Pour régler ce problème, il va falloir modifier la configuration de postfix afin d'avoir un port sur lequel on peut envoyer des emails qui ne seront pas scannés par spamassassin. | |||
Ouvrez le fichier <code>/etc/postfix/master.cf</code> et ajoutez les lignes suivantes : | |||
<pre> | |||
submission inet n - - - - smtpd | |||
# -o smtpd_enforce_tls=yes | |||
-o smtpd_sasl_auth_enable=yes | |||
-o smtpd_client_restrictions=permit_sasl_authenticated,reject | |||
-o content_filter=amavis:[127.0.0.1]:10026 | |||
</pre> | |||
Désormais, le port 587 est aussi écouté par postfix. Pour envoyer des mails sur ce port, il faut être authentifié par SASL (donc on n'est pas un relai pour le spam) et les mails sont passés à amavis sur le port 10026. | |||
Il faut ensuite modifier le fichier <code>/etc/amavis/conf.d/20-debian_defaults</code> (attention un champ <code>$inet_socket_port</code> existe déjà et il faudra le commenter/modifier): | |||
<pre> | |||
$inet_socket_port = [10024,10026]; # écoute sur les ports tcp 10024 et 10026 | |||
$interface_policy{'10026'} = 'SASLBYPASS'; | |||
$policy_bank{'SASLBYPASS'} = { # mail provenant des ports submission et smtps | |||
bypass_spam_checks_maps => [1], # ne pas vérifier le spam | |||
bypass_banned_checks_maps => [0], # ne pas vérifier le ban | |||
bypass_header_checks_maps => [1], # ne pas vérifier les headers | |||
}; | |||
</pre> | |||
Ainsi, les mails reçus sur le port 587 passeront par amavis mais ne subiront aucun test de la part de spamassassin et le problème est réglé. La vérification antivirus est réalisée normalement. | |||
Notez qu'il faudra configurer votre logiciel de messagerie pour qu'il envoi les mails sur le port 587. | |||
Par la même occasion vous pouvez désactiver l'authentification sur le port smtp (25) en modifiant la ligne smtp de votre <code>master.cf</code> : | |||
<pre> | |||
smtp inet n - - - - smtpd | |||
-o smtpd_sasl_auth_enable=no | |||
</pre> | |||
Cela vous permettra par la suite de bloquer facilement une ip (iptables, ...) qui fait du brute-forcing sur votre smtp tout en lui permettant toujours de vous envoyer des mails. | |||
Notez cependant qu'il faudra adapter la configuration de votre webmail afin qu'il utilise le port 587 | |||
==Sender Policy Framework (SPF) et ipv6== | |||
Depuis la version 3.2 de SpamAssassin le nouveau <code>plugin Mail::SPF</code> est utilisé pour la vérification des champs SPF. Ce plugin gère l'ipv6. Cependant, il semblerait que certains scripts perl de SpamAssassin ne gère pas ou mal l'ipv6. Il semble par exemple impossible d'ajouter une ipv6 aux directives <code>internal_networks</code> ou <code>trusted_networks</code> (ce qui est important vis-à-vis de la vérification SPF). D'après un message d'une mailing-list, ce problème devrait être corrigé pour la version 3.3.0. | |||
=clamav= | |||
Commencez par installer ClamAV ainsi que quelques librairies de compressions afin d'analyser les archives: | |||
<pre>aptitude install clamav clamav-daemon gzip bzip2 unzip unrar zoo arj</pre> | |||
Ajoutez l'utilisateur clamav au groupe amavis: | |||
<pre>adduser clamav amavis</pre> | |||
Pour activer le support de clamav de amavis, modifiez le fichier <code>/etc/amavis/conf.d/15-content_filter_mode</code> comme suit : | |||
<pre> | |||
@bypass_virus_checks_maps = ( | |||
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); | |||
</pre> | |||
Et redémarrez les services : | |||
<pre> | |||
/etc/init.d/clamav-daemon restart | |||
/etc/init.d/amavis restart | |||
</pre> | |||
=Mailman= | |||
Mailman est un très bon gestionnaire de mailing list. Il possède notamment une interface d'administration web ce qui facilite grandement la gestion des listes, aussi bien du côté admin que du côté utilisateur. | |||
Pour commencer, installez mailman : | |||
<pre>aptitude install mailman</pre> | |||
Puis ajoutez l'utilisateur postfix au groupe list | |||
<pre>adduser postfix list</pre> | |||
Ensuite, modifiez le fichier <code>/etc/mailman/mm_cfg.py</code> comme suit. Si certaines valeurs manquent, ajoutez les tout simplement ! | |||
<pre> | |||
MTA='Postfix' | |||
#permet d'activer le https par défaut (si on ne précise pas https, les POST se passeront mal en https, et on ne pourra rien modifier par l'interface web !) | |||
DEFAULT_URL_PATTERN = 'https://%s/cgi-bin/mailman/' | |||
DEFAULT_EMAIL_HOST = 'list.domain.tld' | |||
DEFAULT_URL_HOST = 'list.domain.tld' | |||
# Are archives public or private by default? | |||
# 0=public, 1=private | |||
DEFAULT_ARCHIVE_PRIVATE = 1 | |||
# SUBSCRIBE POLICY | |||
# 0 - open list (only when ALLOW_OPEN_SUBSCRIBE is set to 1) ** | |||
# 1 - confirmation required for subscribes | |||
# 2 - admin approval required for subscribes | |||
# 3 - both confirmation and admin approval required | |||
# | |||
# ** please do not choose option 0 if you are not allowing open | |||
# subscribes (next variable) | |||
DEFAULT_SUBSCRIBE_POLICY = 3 | |||
</pre> | |||
Notez que j'ai spécifié <code>https</code> à la ligne <code>DEFAULT_URL_PATTERN</code>. Il est en effet conseillé d'utiliser une connexion sécurisée étant donné que les mots-de-passes transitent en clair. Si vous ne spécifiez pas <code>https</code> ici, il sera impossible de modifier des données via l'interface web. | |||
<code>DEFAULT_EMAIL_HOST</code> et <code>DEFAULT_URL_HOST</code> définissent simplement les domaines gérés par défaut par mailman. Lorsque vous ajouterez une mailing list sans spécifier de domaine, ces domaines seront utilisés. | |||
Éditez le fichier <code>/usr/lib/mailman/Mailman/Defaults.py</code> et vérifiez que les lignes <code>POSTFIX_ALIAS_CMD</code> et <code>POSTFIX_MAP_CMD</code> précise bien les binaires correspondant de postfix. Théoriquement : | |||
<pre> | |||
POSTFIX_ALIAS_CMD = '/usr/sbin/postalias' | |||
POSTFIX_MAP_CMD = '/usr/sbin/postmap' | |||
</pre> | |||
Note: si vous devez opérer des changements, n'éditez pas ce fichier, mais plutôt <code>/etc/mailman/mm_cfg.py</code> qui est lu après celui ci et dont les valeurs écrasent celles par défaut. | |||
Ajoutez les lignes suivantes à votre fichier <code>/etc/postfix/main.cf</code> : | |||
<pre>owner_request_special = no</pre> | |||
Créez la liste mailman qui est la liste par défaut de mailman : | |||
<pre>/var/lib/mailman/bin/newlist mailman</pre> | |||
Vérifiez que les alias de la list sont bien ajoutés dans /var/lib/mailman/data/aliases. Si non, vous devrez peut-être lancer /var/lib/mailman/bin/genaliases a la main. Vérifiez aussi que le group "list" a accès en lecture et écriture sur ce fichier. | |||
Pour que les alias soient reconnus par postfix, il faut modifier la ligne <code>alias_maps</code> du fichier <code>/etc/postfix/main.cf</code> : | |||
<pre>alias_maps = proxy:hash:/etc/aliases,proxy:hash:/var/lib/mailman/data/aliases</pre> | |||
Ajoutez l'hostname de la mailing list (list.domain.tld dans mon cas) dans le mydestination de <code>/etc/postfix/main.cf</code> : | |||
<pre>mydestination = srv.domain.tld, list.domain.tld, localhost.localdomain, localhost</pre> | |||
Pour activer l'interface web, ajoutez les lignes suivantes à votre vhost apache : | |||
<pre>Include /etc/mailman/apache.conf</pre> | |||
Il faut aussi définir le mot-de-passe administratif de mailman, qui permettra en particulier d'utiliser la page web de création de liste : | |||
<pre>/usr/lib/mailman/bin/mmsitepass</pre> | |||
Nous allons maintenant ajouter notre domaine virtuel <code>domain.tld</code> dans la configuration de mailman. Ajoutez les lignes suivantes dans <code>/etc/mailman/mm_cfg.py</code> : | |||
<pre> | |||
POSTFIX_STYLE_VIRTUAL_DOMAINS = ['domain.tld'] | |||
add_virtualhost('www.domain.tld', 'domain.tld') | |||
</pre> | |||
Et comme précédemment, il faut préciser à postfix où trouver les alias pour les listes <code>@domain.tld</code>. Modifiez le fichier <code>/etc/postfix/main.cf</code> : | |||
<pre>virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf,proxy:hash:/var/lib/mailman/data/virtual-mailman</pre> | |||
Il ne reste plus qu'a redémarrer les services | |||
<pre> | |||
/etc/init.d/postfix restart | |||
/etc/init.d/apache restart | |||
/etc/init.d/mailman restart | |||
</pre> | |||
On a donc deux types de listes : | |||
* celles gérés par list.domain.tld | |||
* celles gérés par domain.tld | |||
Pour ajouter une liste, il ne reste plus qu'a utiliser le binaire <code>/usr/lib/mailman/bin/newlist</code>. Par exemple pour ajouter une liste a domain.tld : | |||
<pre>/usr/lib/mailman/bin/newlist --urlhost='list.domain.tld' --emailhost='domain.tld' test@domain.tld</pre> | |||
Notez qu'il faut laisser le site comme étant <code>list.domain.tld</code> quelque soit le emailhost de la liste, sinon vous ne pourrez pas administrer la liste. | |||
Si vous n'avez pas de dossier "fr" dans /etc/mailman, téléchargez mailman sur http://www.gnu.org/software/mailman/ et copiez le dossier "fr" situé dans le répertoire templates de l'archive. | |||
Si vous voulez limiter l'accès aux pages des listes avec un htaccess vous devrez ajouter les lignes nécessaires dans le fichier <code>/etc/mailman/apache.conf</code> de cette manière : | |||
<pre><nowiki> | |||
<Directory /usr/lib/cgi-bin/mailman/> | |||
AllowOverride None | |||
Options ExecCGI | |||
AddHandler cgi-script .cgi | |||
Order allow,deny | |||
Allow from all | |||
#auth de type digest | |||
AuthType Digest | |||
AuthName "un realm" | |||
AuthDigestProvider file | |||
AuthDigestDomain / | |||
AuthUserFile /chemin/vers/votre/.htpasswd | |||
AuthGroupFile /chemin/vers/votre/.htgroup | |||
require valid-user | |||
</Directory> | |||
</nowiki></pre> | |||
=Des scripts de gestion de la base de donnée MySQL= | |||
J'en ais vite eu marre de devoir retaper des lignes mysql relativement longues pour ajouter et modifier des utilisateurs. J'ai donc créé quelques scripts bash histoire de me simplifier la vie. Les [http://wiki.domain.tld/upload/mail_scripts.tar.bz2 voici]. | |||
=Installation de webmails= | |||
Vous n'aurez peut-être pas toujours accès à votre client mail, particulièrement lorsque vous êtes en déplacement. Il devient alors très intéressant de pouvoir relever son courrier électronique par une interface web. J'ai retenu deux clients : Squirrelmail pour sa clarté et sa simplicité, et RoundCube pour son côté esthétique. | |||
==Squirrelmail== | |||
Téléchargez la dernière version de squirrelmail sur http://www.squirrelmail.org/download.php. Transférez la sur votre serveur (ou utilisez wget pour la télécharger directement sur votre serveur). Pour ma part, j'ai téléchargé l'archive dans le dossier root. Je vais donc la déplacer dans le dossier de ma vhost webmail, puis l'extraire: | |||
<pre> | |||
mv /root/squirrelmail-1.4.13.tar.gz /srv/http/domain.tld/webmail.domain.tld/ | |||
cd /srv/http/domain.tld/webmail.domain.tld/ | |||
tar zxvf squirrelmail-1.4.13.tar.gz | |||
mv squirrelmail-1.4.13 squirrel | |||
chown -R root:www-data squirrel/ | |||
chmod -R g-w,o-rx squirrel/ | |||
</pre> | |||
Pour la configuration, squirrelmail dispose d'un outil de configuration graphique. Pour le lancer, utilisez : | |||
<pre>squirrel/config/conf.pl</pre> | |||
Bien-sur, vous pouvez aussi modifier la configuration à la main si vous le souhaitez. Il faut alors éditer le fichier <code>squirrel/config/config.php</code>. Voici les lignes importantes à modifier : | |||
<pre> | |||
$domain = 'domain.tld'; | |||
$imap_server_type = 'courier'; | |||
#Par défaut, les données de squirrel sont stockés dans un autre répertoire. Je préfère les avoir dans la même arborescence. | |||
$data_dir = '/srv/http/domain.tld/webmail-data/squirrel/data/'; | |||
$attachment_dir = '/srv/http/domain.tld/webmail-data/squirrel/attach/'; | |||
#Cette ligne est très importante. Si elle est à false, lorsque quelqu'un se log une première fois avec pfoo@domain.tld et une seconde fois avec PFOO@domain.tld, les préférences ne seront pas les même | |||
$force_username_lowercase = true; | |||
#Etant donné qu'on se connecte en local, nous n'avons pas besoin de nous authentifier et d'utiliser le port submission (587). | |||
$smtpServerAddress = 'localhost'; | |||
$smtpPort = 25; | |||
$smtp_auth_mech = 'none'; | |||
$imap_auth_mech = 'login'; | |||
#Par défaut, on se connecte en local. Le TLS n'est donc pas nécessaire. Vous pouvez l'activer en passant ces lignes à true. Notez que le mécanisme STARTTLS n'est supporté qu'à partir de squirrelmail 1.5 | |||
$use_imap_tls = false; | |||
$use_smtp_tls = false; | |||
</pre> | |||
Il faut créer les dossiers <code>/srv/http/domain.tld/webmail-data/squirrel/data/</code> et <code>/srv/http/domain.tld/webmail-data/squirrel/attach/</code> et modifier leurs droits car squirrel aura besoin de lire et d'écrire dans ces dossiers. | |||
<pre> | |||
mkdir -p /srv/http/domain.tld/webmail-data/squirrel/data/ | |||
mkdir /srv/http/domain.tld/webmail-data/squirrel/attach/ | |||
chown -R root:www-data /srv/http/domain.tld/webmail-data/ | |||
chmod 770 /srv/http/domain.tld/webmail-data/squirrel/attach/ | |||
chmod 770 /srv/http/domain.tld/webmail-data/squirrel/attach/ | |||
</pre> | |||
Vous pouvez maintenant tester squirrelmail. Vous pouvez vérifier que vous n'avez pas fait d'erreur de configuration en allant à l'adresse https://votre-webmail/squirrel/src/configtest.php | |||
==Ajout du support des langues== | |||
Par défaut, seule la langue anglaise est disponible. Téléchargez le fichier all_locales sur http://squirrelmail.org/download.php | |||
<pre> | |||
$ tar zxvf all_locales-1.4.13-20071220.tar.gz | |||
$ ./install | |||
Please enter path to your squirrelmail installation: /srv/http/domain.tld/webmail.domain.tld/squirrel/ | |||
$ chgrp -R /srv/http/domain.tld/webmail.domain.tld/squirrel/ | |||
</pre> | |||
==Plugins utiles== | |||
Téléchargez le plugin voulu dans le dossier <code>plugins/</code> de votre installation de squirrelmail. Extrayez l'archive avec <code>tar</code>. Lisez le fichier <code>INSTALL</code> fournit avec le plugin, et configurez le si nécessaire (fichier <code>config.php</code>). Enfin, pour activer le plugin, utilisez le script de configuration <code>config/conf.pl</code>. | |||
Voici les plugins que j'utilise | |||
* Squirrel Logger | |||
* Addressbook Import-Export | |||
* Show User and IP | |||
* JavaScript Clock | |||
Tous les plugins peuvent être trouvés [http://squirrelmail.org/plugins.php sur le site officiel de squirrelmail]. | |||
===Ajout de votre favicon personnalisé=== | |||
Si vous voulez utiliser un favicon pour squirrelmail, il faut modifier les sources. | |||
Modifiez le fichier <code>functions/page_header.php</code> et recherchez la ligne <code>echo "\n<title>$title</title>$xtra\n";</code>. Ajoutez en dessous d'elle la ligne suivante : | |||
<pre><nowiki>echo "\n<link rel=\"icon\" type=\"image/png\" href=\"favicon.png\">\n";</nowiki></pre> | |||
Modifiez le fichier <code>src/webmail.php</code> et recherchez la ligne <code><meta name=\"robots\" content=\"noindex,nofollow\">\n</code> .. Ajoutez en dessous d'elle la ligne suivante : | |||
<pre><nowiki> | |||
"<link rel=\"icon\" type=\"image/png\" href=\"favicon.png\" />\n" . | |||
</nowiki></pre> | |||
Modifiez le fichier <code>src/signout.php</code> et recherchez la ligne <code><title><?php echo $org_title . ' - ' . _("Signout"); ?></title></code>. Ajoutez en dessous d'elle la ligne suivante : | |||
<pre><nowiki> | |||
<link rel="icon" type="image/png" href="favicon.png"> | |||
</nowiki></pre> | |||
==RoundCube== | |||
Téléchargez la dernière version de roundcube sur http://roundcube.net/downloads. Transférez la sur votre serveur (ou utilisez wget pour la télécharger directement sur votre serveur). Pour ma part, j'ai téléchargé l'archive dans le dossier root. Je vais donc la déplacer dans le dossier de ma vhost webmail, puis l'extraire: | |||
<pre> | |||
mv /root/roundcubemail-0.3.1.tar.gz /srv/http/domain.tld/webmail.domain.tld/ | |||
cd /srv/http/domain.tld/webmail.domain.tld/ | |||
tar xf roundcubemail-0.3.1.tar.gz | |||
mv roundcubemail-0.3.1/ roundcubemail | |||
chown -R root:www-data roundcubemail | |||
</pre> | |||
Les dossiers <code>temp</code> et <code>logs</code> doivent pouvoir être écrit par le serveur web: | |||
<pre> | |||
chmod g+w roundcube/temp/ | |||
chmod g+w roundcube/logs/ | |||
</pre> | |||
Nous allons maintenant créer la base de donnée mysql roundcubemail ainsi que l'utilisateur roundcube identifié par le mot-de-passe "password" : | |||
<pre> | |||
$ mysql -u root -p | |||
CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; | |||
GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcubemail@localhost | |||
IDENTIFIED BY 'password'; | |||
quit | |||
</pre> | |||
Si vous utilisez open-basedir sur la vhost, ajoutez le chemin <code>/srv/http/domain.tld/webmail.domain.tld/www/roundcubemail/program/lib/</code> à la liste des chemins autorisés par open-basedir. | |||
La suite de l'installation se passe par le web. Il suffit d'aller à l'adresse http:///url-de-roundcube/installer/ et de suivre les instructions. | |||
Si a la première étape, il vous manque l'extension <code>fileinfo</code> de php, installez la puis recommencer la première étape : | |||
<pre> | |||
aptitude install php-pear php5-dev libmagic-dev | |||
pecl install fileinfo | |||
echo "extension=fileinfo.so" > /etc/php5/conf.d/fileinfo.ini | |||
/etc/init.d/apache2 restart | |||
</pre> | |||
S'il vous indique un problème au niveau de <code>date.timezone</code>, éditez votre <code>php.ini</code> et vérifiez que la directive <code>date.timezone</code> est bien dé-commentée (pas de ;) et est bien définie. | |||
Pour un serveur en France : | |||
<pre>date.timezone = Europe/Paris</pre> | |||
Petite aide pour l'étape de configuration des ports : | |||
* Dans <code>Database setup</code> : indiquez le mot-de-passe de la base de donnée dans <code>Database password</code> | |||
* Dans <code>IMAP Settings</code> : indiquez <code>tls://localhost</code> dans <code>default_host</code> | |||
* Dans <code>SMTP Settings</code> : indiquez <code>localhost</code> dans <code>smtp_server</code> et <code>587</code> dans <code>smtp_port</code> (il n'est pas nécessaire de préciser tls://, si tls est disponible, il l'utilisera automatiquement) | |||
* Dans <code>SMTP Settings</code> : cochez la case <code>Use the current IMAP username and password for SMTP authentication</code> pour <code>smtp_user/smtp_</code> | |||
* Dans <code>Display settings & user prefs</code> : indiquez <code>fr_FR</code> dans <code>locale_string</code> | |||
Quand vous aurez validé l'étape 2, l'interface vous demandera de copier des lignes dans <code>roundcubemail/config/main.inc.php</code> et <code>roundcubemail/config/db.inc.php</code>. Après avoir copié les lignes avec votre éditeur de texte, modifiez les droits de ces fichiers : | |||
<pre>chgrp www-data roundcube/config/*</pre> | |||
A l'étape 3, roundcube vous propose de tester la configuration smtp et imap. Faites le. Après avoir testé la configuration, n'oubliez pas de supprimer roundcube/installer: | |||
<pre>rm -rf roundcube/installer</pre> | |||
Pour ma part, j'ai eu un bug avec la configuration imap. Malgré avoir défini <code>tls://localhost</code> et le port <code>143</code>, roundcube essayait de se connecter en tls sur le port <code>993</code>. La solution a été de préciser le port <code>143</code> dans la ligne de l'hostname comme ceci (fichier <code>roundcubemail/config/main.inc.php</code>) : | |||
<pre>$rcmail_config['default_host'] = 'tls://localhost:143';</pre> | |||
Si vous avez configuré le port smtp sur 587 (submission), le test de configuration de marchera pas, mais cela fonctionne quand même. | |||
==wapreader== | |||
Un beau jour, je me suis posé la question de comment consulter des mails par le wap de mon téléphone portable. Eh bien, c'est possible avec wapreader. | |||
Je ne l'utilise actuellement pas mais voici ce que j'ai du faire : | |||
* installer php5-imap (aptitude install php5-imap) | |||
* Suivre les instructions du fichier d'installation | |||
* J'ai du modifier le fichier .php de la manière suivante : | |||
<pre><nowiki> | |||
if($_REQUEST["mode"]=="html") { | |||
//@header("Content-type: text/xml; charset=utf-8"); | |||
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; | |||
echo "<?xml-stylesheet type=\"text/xsl\" href=\"wapreader.xsl\"?>"; | |||
} | |||
</nowiki></pre> | |||
=Mise en place d'un MX secondaire= | |||
Si vous avez un second serveur il devient très intéressant d'installer un serveur mx secondaire pour votre domaine. En effet, si pour une raison ou une autre, votre serveur smtp fraichement configuré venait à être inaccessible pendant quelques heures, toutes les personnes essayant de vous envoyer un mail durant ce labs de temps verraient leurs mails revenir en erreur. Un mx secondaire règle ce problème : si le serveur principal ne répond pas, les mails seront adressés au mx secondaire qui se chargera de les transférer au mx principal dès que possible. | |||
Il faut commencer par ajouter le nouveau serveur de mail dans la configuration de la zone dns. Dans mon cas : | |||
<pre> | |||
srv.domain.tld. IN A 213.186.47.110 | |||
srv.domain.tld. IN AAAA 2001:41d0:1:d6e::110 | |||
srv.domain.tld. IN MX 1 srv.domain.tld. | |||
srv.domain.tld. IN MX 10 mx2.domain.tld. | |||
domain.tld. IN MX 1 srv.domain.tld. | |||
domain.tld. IN MX 10 mx2.domain.tld. | |||
mx2.domain.tld. IN A 217.70.189.92 | |||
</pre> | |||
Le mx secondaire est mx2.domain.tld. Le chiffre 10 avant le nom du serveur est ce qu'on appel le priorité. Les serveurs smtp voulant vous envoyer des mails essaieront en priorité le mx ayant la priorité la plus basse. | |||
Ensuite, installez postfix si votre second serveur : | |||
<pre>aptitude install postfix</pre> | |||
La configuration de <code>/etc/postfix/main.cf</code> est beaucoup plus simple : | |||
<pre> | |||
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) | |||
biff = no | |||
disable_vrfy_command = yes | |||
smtpd_helo_required = yes | |||
mydomain = mx2.domain.tld | |||
append_dot_mydomain = yes | |||
myhostname = mx2.domain.tld | |||
myorigin = /etc/mailname | |||
mydestination = mx2.domain.tld, localhost.localdomain, localhost | |||
relayhost = | |||
mynetworks = 127.0.0.0/8 | |||
mailbox_size_limit = 0 | |||
recipient_delimiter = + | |||
message_size_limit = 10240000 | |||
inet_interfaces = 127.0.0.1, 217.70.189.92 | |||
inet_protocols = ipv4 | |||
alias_maps = proxy:hash:/etc/aliases | |||
relay_domains = srv.domain.tld, domain.tld | |||
smtpd_sender_restrictions = | |||
reject_unknown_sender_domain, | |||
reject_non_fqdn_sender | |||
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, | |||
</pre> | |||
La directive <code>relay_domains</code> défini les domaines pour lesquels postfix est un mx secondaire. Les mails reçus pour ces domaines seront stockés et redirigés dès que possible vers le mx de priorité la plus basse. | |||
Si vous utilisez un champ spf du même type que celui dont j'ai donné l'exemple au début de ce howto vous n'avez rien à modifier car tous les serveurs mx des domaines sont considérés comme valide. | |||
Il peut être intéressant d'ajouter une directive <code>relay_recipient_maps</code> à la configuration afin de bloquer directement les mails destiné à un utilisateur qui n'existe pas sur le serveur principal. Il faudra cependant veiller à bien garder synchronisé les listes d'utilisateur entre le serveur principal et le serveur secondaire. | |||
Assurez vous que le fichier de configuration de postfix est accessible en lecture : | |||
<pre>chmod o+r /etc/postfix/main.cf</pre> | |||
N'oubliez pas de créer la base de donnée des alias avant de lancer postfix : | |||
<pre>postalias /etc/aliases</pre> |