Outils pour utilisateurs

Outils du site


linux:howto:postfix

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
linux:howto:postfix [03/03/2008 18:34] – ajout flags postfix manquants daniellinux:howto:postfix [28/08/2010 17:15] (Version actuelle) – aj alias daniel
Ligne 11: Ligne 11:
  
 On suppose que le host est myhost.example.com et qu'il gère les mails de example.com  et example2.com. Les boites mails au format maildir sont dans /home/mail (puis domaine et user), avec uid:gid 5000:5000 (mailboxes:mailboxes). La conf des domaines et comptes virtuels dans /etc/postfix/virtual/, avec les mots de passe pop/imap dans /etc/postfix/dovecot/users.conf (c'est arbitraire, vous préfèrerez peut être le ranger dans /etc/postfix/virtual/ ou /etc/dovecot). On suppose que le host est myhost.example.com et qu'il gère les mails de example.com  et example2.com. Les boites mails au format maildir sont dans /home/mail (puis domaine et user), avec uid:gid 5000:5000 (mailboxes:mailboxes). La conf des domaines et comptes virtuels dans /etc/postfix/virtual/, avec les mots de passe pop/imap dans /etc/postfix/dovecot/users.conf (c'est arbitraire, vous préfèrerez peut être le ranger dans /etc/postfix/virtual/ ou /etc/dovecot).
 +
 +**Rq** : pour utiliser une ip particulière (surtout pour sortir par l'ip déclaré dans les MX si vous avez plusieurs ip), modifier le inet_interfaces du main.cf. (cf http://advosys.ca/papers/postfix-instance.html et pour relayer certains domaines vers un autre host http://linuxfr.org/forums)/10/24567.html)
  
 ===== postfix ===== ===== postfix =====
Ligne 42: Ligne 44:
 smtpd_tls_key_file=/etc/ssl/private/myhost.key smtpd_tls_key_file=/etc/ssl/private/myhost.key
 </code> </code>
 +
  
 ==== Ajout des domaines virtuels ==== ==== Ajout des domaines virtuels ====
Ligne 55: Ligne 58:
 virtual_mailbox_base = /home/mail virtual_mailbox_base = /home/mail
 # les domaines virtuels (donc pas dans mydestination), on pourrait les lister sur la ligne ci-dessous séparé par une espace plutôt qu'un par ligne dans un fichier externe # les domaines virtuels (donc pas dans mydestination), on pourrait les lister sur la ligne ci-dessous séparé par une espace plutôt qu'un par ligne dans un fichier externe
 +# Si l'on utilise dovecot deliver comme lda, ce qui suit ne sera pas utilisé pour livrer le courrier
 +# mais postfix va l'utiliser pour refuser le courrier vers un utilisateur inexistant (dès la connexion SMTP)
 +# cf http://postfix.traduc.org/index.php/postconf.5.html#smtpd_reject_unlisted_recipient
 virtual_mailbox_domains = /etc/postfix/virtual/domains virtual_mailbox_domains = /etc/postfix/virtual/domains
 # liste des boites et leur emplacement (relatif à virtual_mailbox_base) # liste des boites et leur emplacement (relatif à virtual_mailbox_base)
Ligne 95: Ligne 101:
  
 Jusque là, tout va bien ;-) Jusque là, tout va bien ;-)
 +
 +
  
  
Ligne 101: Ligne 109:
 On ajoute au main.conf On ajoute au main.conf
 <code> <code>
-# restrictions smtp+# restrictions smtp  cf http://postfix.traduc.org/index.php/SMTPD_ACCESS_README.html 
 +smtpd_client_restrictions = permit_mynetworks, 
 +  permit_sasl_authenticated, 
 +  reject_unknown_client_hostname, 
 +  reject_unknown_reverse_client_hostname 
 smtpd_recipient_restrictions = permit_mynetworks, smtpd_recipient_restrictions = permit_mynetworks,
   permit_sasl_authenticated,   permit_sasl_authenticated,
   reject_unauth_destination,   reject_unauth_destination,
   reject_unknown_recipient_domain,   reject_unknown_recipient_domain,
-  reject_unknown_sender_domain, 
-  reject_unknown_helo_hostname,   
-  reject_unknown_client_hostname, 
-  reject_unverified_recipient, 
-  reject_unverified_sender,    
   reject_non_fqdn_recipient,   reject_non_fqdn_recipient,
-  reject_non_fqdn_sender, + warn_if_reject reject_unverified_recipient 
-  reject_non_fqdn_helo_hostname+ 
-  reject_invalid_helo_hostname+smtpd_sender_restrictions = reject_non_fqdn_sender, 
 +  reject_unknown_sender_domain
 + warn_if_reject reject_unverified_sender 
 +smtpd_helo_restrictions = warn_if_reject reject_invalid_helo_hostname
 + warn_if_reject reject_non_fqdn_helo_hostname, 
 + warn_if_reject reject_unknown_helo_hostname
  
 # restriction mailbox # restriction mailbox
Ligne 128: Ligne 141:
 smtpd_recipient_limit = 50 smtpd_recipient_limit = 50
 </code> </code>
-cf http://blog.taragana.com/index.php/archive/6-simple-safe-postfix-changes-for-over-95-spam-reduction/fr/+cf http://blog.taragana.com/index.php/archive/6-simple-safe-postfix-changes-for-over-95-spam-reduction/fr/ et http://cjovet.free.fr/cours/postfix.htm#IV pour la signification de chacune des restrictions
  
 ===== dovecot ===== ===== dovecot =====
Ligne 141: Ligne 154:
 aptitude install dovecot-common dovecot-imapd dovecot-pop3d aptitude install dovecot-common dovecot-imapd dovecot-pop3d
 </code> </code>
 +
 +
  
  
Ligne 158: Ligne 173:
 auth default { auth default {
   mechanisms = plain login digest-md5 cram-md5   mechanisms = plain login digest-md5 cram-md5
-# liste des passwds pour authentification pop/imap+  # le lookup de deliver 
 +  userdb static { 
 +    # on met allow_all_users=yes pour éviter le lookup de deliver pour chaque user 
 +    # (postfix a déjà vérifié qu'il pouvait prendre le courrier, donc autant  
 +    # le distribuer même si ce user n'a pas de compte dovecot) 
 +    args = uid=5000 gid=5000 home=/home/mail/%d/%n/ allow_all_users=yes 
 +  } 
 +  # liste des passwds pour authentification pop/imap
   passdb passwd-file {   passdb passwd-file {
     args = /etc/postfix/dovecot/users.conf     args = /etc/postfix/dovecot/users.conf
Ligne 172: Ligne 194:
 </code> </code>
  
 +(ou bien utiliser le script [[:linux/scripts_bash/exemples/adddovecotuserpass]])
 et on peut se logger en pop / imap / pops / imaps et récupérer ses mails (avec authentification sécurisée si on veut)... reste à pouvoir les envoyer en utilisant le smtp avec tls et on peut se logger en pop / imap / pops / imaps et récupérer ses mails (avec authentification sécurisée si on veut)... reste à pouvoir les envoyer en utilisant le smtp avec tls
  
Ligne 268: Ligne 291:
 # et on vérifie que tout marche bien dans les logs # et on vérifie que tout marche bien dans les logs
 </code> </code>
 +
  
  
Ligne 282: Ligne 306:
 <code> <code>
 # on remplace la ligne smtp par # on remplace la ligne smtp par
-smtp      inet  n                               smtpd     -o content_filter=spamassassin+smtp      inet  n                               smtpd     -o content_filter=spamassassin -o receive_override_options=no_address_mappings
 # et à la fin on ajoute l'entrée # et à la fin on ajoute l'entrée
 spamassassin unix -                             pipe spamassassin unix -                             pipe
Ligne 288: Ligne 312:
   /usr/sbin/sendmail -oi -f ${sender} ${recipient}   /usr/sbin/sendmail -oi -f ${sender} ${recipient}
 </code> </code>
 +(merci à Julien Wadim pour la 2e option "-o receive_override_options=no_address_mappings", pour éviter la duplication de mail, cf http://blog.julienwadin.be/45/postfix-mails-en-double-lors-de-la-livraison-vers-une-boite-avec-copie-vers-une-autre/ pour l'explication).
  
 On edite /etc/default/spamassassin On edite /etc/default/spamassassin
Ligne 336: Ligne 361:
  
 cf http://workaround.org/articles/ispmail-etch/#sieve-filtering-out-spam, http://wiki.dovecot.org/LDA/Sieve, http://www.howtoforge.com/dovecot_mail_server_sieve_virtual_users, le langage http://www.howtoforge.com/sieve_mail_filtering cf http://workaround.org/articles/ispmail-etch/#sieve-filtering-out-spam, http://wiki.dovecot.org/LDA/Sieve, http://www.howtoforge.com/dovecot_mail_server_sieve_virtual_users, le langage http://www.howtoforge.com/sieve_mail_filtering
 +
  
  
 ===== webmail roundcube ===== ===== webmail roundcube =====
 +
 +http://www.roundcube.net/
 +
 <code bash> <code bash>
 # recup de l'appli sur puis # recup de l'appli sur puis
Ligne 362: Ligne 391:
 $rcmail_config['default_imap_folders'] = array('INBOX', 'Drafts', 'Sent', 'Junk', 'Junk.Spam-detecte-a-tord', 'Junk.Spam-non-detecte', 'Trash'); $rcmail_config['default_imap_folders'] = array('INBOX', 'Drafts', 'Sent', 'Junk', 'Junk.Spam-detecte-a-tord', 'Junk.Spam-non-detecte', 'Trash');
 </code> </code>
-===== Todo ===== + 
-Il reste à  +regarder http://blog.julienwadin.be/index.php/2007/05/26/72-modification-du-password-email-dans-roundcube pour la modif du passwd depuis l'interface. 
-  * créer les dossiers Spam-ok et Spam-KO (par exemple) dans chaque compte pour que les utilisateurs imap puissent y mettre les faux-positifs et faux negatifs, et mettre un cron pour sa-learn + 
-  * mettre un exemple de filtre sieve perso +Autres webmail :  
-  * créer une boite spécial spampour que les users puissent faire suivre le spam+  * http://www.squirrelmail.org/ 
 +  * http://www.courier-mta.org/sqwebmail/, plutôt avec courier ou qmail/vpopmail, peut lire directement dans les boites maildir sans passer par un serveur imap. 
 +  * http://www.horde.org/imp/ (intègre une preview du message depuis la liste) 
 +  * http://www.nimail.org/ (apparremment à l'arrêt depuis mai 2007) 
 + 
 + 
 + 
 +===== "Apprentissage" spamassassin ===== 
 +Il reste à créer les dossiers Spam-ok et Spam-KO (par exemple) dans chaque compte pour que les utilisateurs imap puissent y mettre les faux-positifs et faux negatifs, et mettre un cron pour sa-learn. 
 + 
 +Un script d'exemple sur [[../scripts_bash/checkspam]] 
 + 
 +===== Mailman ===== 
 +Pour installer mailman comme gestionnaire de liste de diffusion sur un domaine dédié listes.domaine.tld (listes.domaine.tld est donc dans la conf bind de domaine.tld avec A et MX) 
 + 
 +<code bash> 
 +aptitude install mailman 
 +# choisir fr, mais ça sert à rien, car avec le paquet de etch il indique quand même : 
 +Installing site language en ............................................ done. 
 +</code> 
 + 
 +Ajouter un vhost apache basé sur /etc/mailman/apache.conf 
 +<code bash> 
 +# on prend la fin du fichier qui commence par un commentaire 
 +sed -ne '/^#<VirtualHost \*>/,$ s/^#//p' < /etc/mailman/apache.conf > /etc/apache2/sites-available/listes.domaine.tld 
 +# on va modifier qq trucs à la main (logs & co) 
 +joe /etc/apache2/sites-available/listes.domaine.tld 
 +# on active le vhost 
 +a2ensite listes.domaine.tld 
 +/etc/init.d/apache2 reload 
 +</code> 
 + 
 +Dans /etc/mailman/mm_cfg.py, on ajoute 
 +<code python> 
 +DEFAULT_EMAIL_HOST = 'listes.domaine.tld' 
 +DEFAULT_URL_HOST = 'listes.domaine.tld' 
 +DEFAULT_URL_PATTERN = 'http://%s/' 
 +DEFAULT_SERVER_LANGUAGE = 'fr' 
 +</code> 
 + 
 +<code> 
 +# on peut relancer l'install en fr 
 +dpkg-reconfigure -p low mailman 
 +# et ça va mieux 
 +Installing site language fr ............................................ done. 
 + 
 +# Dans /etc/postfix/main.cf: 
 +# ce domaine ne doit pas figurer ailleurs 
 +relay_domains = ... listes.domaine.tld 
 +transport_maps = hash:/etc/postfix/transport 
 +mailman_destination_recipient_limit = 1 
 + 
 +# Dans /etc/postfix/master.cf 
 +mailman unix  -                               pipe 
 +     flags=FR user=list  
 +     argv=/var/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${mailbox} 
 + 
 +# et dans /etc/postfix/transport 
 +listes.domaine.tld   mailman: 
 + 
 +# on oublie pas le  
 +postmap /etc/postfix/transport 
 +/etc/init.d/postfix reload 
 + 
 +# Reste à créer la "site list" mailman "liste par défaut du domaine qui permet d'accéder à l'interface d'admin) avec 
 +newlist mailman 
 + 
 +# comme on y est invité dans /etc/aliases on ajoute 
 +# mailman mailing list 
 +mailman:              "|/var/lib/mailman/mail/mailman post mailman" 
 +mailman-admin:        "|/var/lib/mailman/mail/mailman admin mailman" 
 +mailman-bounces:      "|/var/lib/mailman/mail/mailman bounces mailman" 
 +mailman-confirm:      "|/var/lib/mailman/mail/mailman confirm mailman" 
 +mailman-join:         "|/var/lib/mailman/mail/mailman join mailman" 
 +mailman-leave:        "|/var/lib/mailman/mail/mailman leave mailman" 
 +mailman-owner:        "|/var/lib/mailman/mail/mailman owner mailman" 
 +mailman-request:      "|/var/lib/mailman/mail/mailman request mailman" 
 +mailman-subscribe:    "|/var/lib/mailman/mail/mailman subscribe mailman" 
 +mailman-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe mailman" 
 + 
 +# puis 
 +newaliases 
 +/etc/init.d/postfix reload 
 + 
 +y'a plus qu'à démarrer mailman 
 +/etc/init.d/mailman start 
 +</code> 
 + 
 +reste à vérifier que tout va bien sur http://listes.domaine.tld/admin... 
 + 
  
 ===== Liens ===== ===== Liens =====
  
-Voir aussi http://johnny.chadda.se/2007/04/15/mail-server-howto-postfix-and-dovecot-with-mysql-and-tlsssl-postgrey-and-dspam/ (Mail server HOWTO - Postfix and Dovecot with MySQL) et http://workaround.org/articles/ispmail-etch/http://www.akadia.com/services/postfix_spamassassin.htmlhttp://dertompson.com/index.php/2008/02/13/mail-server-setup-for-debian-etch/ (avec maildrop sans ref à courier)http://www.vogelweith.com/debian_server/07_postfix.php+Voir aussi  
 +  * http://johnny.chadda.se/2007/04/15/mail-server-howto-postfix-and-dovecot-with-mysql-and-tlsssl-postgrey-and-dspam/ (Mail server HOWTO - Postfix and Dovecot with MySQL) 
 +  * http://workaround.org/articles/ispmail-etch/ 
 +  * http://www.akadia.com/services/postfix_spamassassin.html 
 +  * http://dertompson.com/index.php/2008/02/13/mail-server-setup-for-debian-etch/ (avec maildrop sans ref à courier) 
 +  * http://www.vogelweith.com/debian_server/07_postfix.php 
 + 
 +Et  
 +  * cours postfix http://cjovet.free.fr/cours/postfix.htm 
 +  * la doc de postfix.org en fr http://x.guimard.free.fr/postfix/ 
 +  * filtrage de contenu par postfix http://postfix.traduc.org/index.php/CONTENT_INSPECTION_README.html avec particulièrement http://postfix.traduc.org/index.php/FILTER_README.html, voir aussi http://www.starbridge.org/spip/spip.php?article7&artsuite=2#sommaire_1 
 +  * http://www.postfixvirtual.net/ (tuto complet avec MySQL - Courier-IMAP - Courier-maildrop - Cyrus-SASL - Amavisd-new - Clamav - Spamassassin) 
 +  * http://www.openbsd-france.org/documentations/OpenBSD-postfix-courier-imap.html (idem) 
 +  * http://www.securityfocus.com/infocus/1598 
 +  * à propos des filtres "maison" regarder le dernier post de http://forum.hardware.fr/hfr/OSAlternatifs/Logiciels-2/postfix-maintenant-spamassassin-sujet_27053_1.htm 
 +  * pour rejeter directement (sans queuing, avec mime_header_checks) certains mail avec PJ indésirables http://forum.hardware.fr/hfr/OSAlternatifs/Logiciels-2/postfix-interdire-jointes-sujet_27904_1.htm 
 +  * tuto avec Amavisd, Mysql, Spamassassin, Dspam, Courier-IMAP http://starbridge.org/spip/spip.php?article12 
 +  * tuto avec Courier, MySQL, sasl, amavisd-new, SpamAssassin (+Razor, Pyzor & DCC), ClamAV http://www.howtoforge.com/virtual_users_and_domains_with_postfix_debian_etch 
 +  * articulation postfix / SA : http://www.xnote.com/howto/postfix-spamassassin.html & http://www.akadia.com/services/postfix_spamassassin.html 
 +  * postfix & sa sans rien d'autre pour conf vps light (mais apparemment le spam est viré lors de la connexion smtp, pas moyen de récupérer les faux positifs, et si SA rame, la transaction risque d'être un peu longue) http://blogbound.com/etch-postfix-spamassassin-vps 
 +  * tutos complets (tous avec amavis) http://www.howtoforge.com/virtual_postfix_mysql_quota_courier, http://flurdy.com/docs/postfix/, http://www.howtoforge.com/postfix_antispam_mailscanner_clamav_ubuntu 
 +    * http://workaround.org/articles/ispmail-etch/ (avec dovecot) 
 +    * http://openmailadmin.ossdl.de/wiki/howto/Postfix-SASL-Cyrus-MySQL-Amavis-Postgrey-SpamAssassin-ClamAV-Squirrelmail-Mailman-Mailgraph-OMA  
 +    * http://www.starbridge.org/spip/spip.php?article12 Amavisd, Mysql, Spamassassin, Dspam, Courier-IMAP 
 +    * postfix + courier http://paradoxal.org/blog/post/2007/08/05/Serveur-Debian-Serveur-email-MTA-MDA 
 +  * conf dspam http://www.paradoxal.org/blog/post/2008/02/16/Spam-spam-spam-tu-ne-mauras-pas 
 + 
 +===== Bonus ===== 
 +==== lire les mails du secondaire ==== 
 + 
 +Dans le cas où vous avez un MX secondaire qui prend les mails d'un primaire en rade, et que vous avez besoin d'en lire un 
 +  * postqueue -p : pour lister les mails en attente 
 +  * postcat path/2/deferred/file : pour en lire un en console (un à vous !) 
 + 
 +Par exemple, (attention, à ne pas faire s'il y a beaucoup de mails !) 
 +<code bash> 
 +find /var/spool/postfix/deferred/ -type f -mmin -5|xargs postcat|sed -ne '/Content-Disposition: attachment/,$ d; 
 +     /^\*\*\* MESSAGE CONTENTS/,/^\*\*\* HEADER EXTRACTED/ p;' 
 +</code> 
 +==== postmap_all ==== 
 +<code bash> 
 +#!/bin/bash 
 +# script qui cherche les fichiers de hash et fait un postmap dessus 
 + 
 +sed -ne '/^[ \t]*#/ d; s/.*hash:\(.*\)/\1/p' < /etc/postfix/main.cf |while read map 
 +do 
 +  echo $map 
 +  [ "$map" = '/etc/aliases' ] && newaliases || postmap $map 
 +done 
 +echo "à priori, il ne devrait rester à faire que le :" 
 +echo "/etc/init.d/postfix reload" 
 +</code> 
 + 
 + 
 +==== Réécriture des users locaux ==== 
 +Pour que le courrier envoyé par les users locaux (au hasard www-data) le soit d'une adresse plus parlante, on peut ajouter dans le main.cf 
 +<file> 
 +smtp_generic_maps = hash:/etc/postfix/smtp_generic_maps.hash 
 +</file> 
 +et dans smtp_generic_maps.hash 
 +<file> 
 +www-data webmaster@example.com 
 +</file> 
 + 
 +Et si l'on en a plein, on peut perfectionner le truc avec 
 +<code bash> 
 +# id du group des users concernés, le UID avec cet ID sera pris même s'il n'appartient pas au groupe 
 +# (sinon faut modifier la règle sed pour prendre le 4e champ délimité par :) 
 +GID=XXX 
 +DOM=monhost.example.com 
 +USER=webmaster@example.com 
 +sed -ne '/'$GID'/ s/^\([^:]\+\):.*/\1@'$DOM' '$USER'/p' < /etc/passwd > /etc/postfix/smtp_generic_maps.hash 
 +</code>
  
 +Pour que les bounces soient aussi renvoyés à la bonne adresse, il faut ajouter dans /etc/aliases
 +<file>
 +www-data: webmaster@example.com
 +</file>
linux/howto/postfix.1204565656.txt.gz · Dernière modification : 03/03/2008 18:34 de daniel