====== Postfix ====== Installer un serveur mail SMTP/POP avec postfix, courier-pop, spamassassin : Lien: http://xbright.codingteam.net/post/2009/04/13/Installer-un-serveur-mail-SMTP/POP-avec-postfix-courier-pop-spamassassin-et-quelques-echalottes ===== Les bases ===== ==== Liens: ==== http://postfix.traduc.org/index.php/postconf.5.html http://www.supinfo-projects.com/fr/2005/installation_spamassassin/2\\ http://ben.reynerie.org/services/mail/serveur_mail.htm\\ http://www.laurentconstantin.com/common/utilordi/b6utiladminappli/postfix.doc\\ http://wiki.nfrance.com/vds:systeme:smtp_et_pop_pour_boites_mails_virtuelles\\ Serveur smtp le plus mieux et plus super pour envoyer des mails... C'est donc un serveur qui est a l'ecoute sur le port 25 (et qu'il faut en tenir compte s'il y a un firewall...). Il est vain de fermer le port 25. Les restrictions d'acces doivent plutot etre faite dans la configuration de postfix. ==== Installer et configurer ==== Comme d'hab # apt-get install postfix Et c'est prêt !? presque... il faut editer le fichier /etc/postfix/main.cf Et puis ... myhostname = smtp.mon_domaine.local ... myorigin = /etc/mailname mydestination = mon_domaine.fr, localhost.localdomain, localhost.localdomain, localhost, mon_domaine.local ... mynetworks = /etc/postfix/mynetworks ... Et en sortie, verifier: # cat /etc/mailname mon_domaine.fr Editer/creer le fichier **mynetworks** et avoir un truc comme ca: # cat mynetworks # reseau local localhost 127.0.0.1/32 192.168.0.0/24 192.168.1.0/24 # les proches... 88.99.00.11 Les **IP** appartenants a **mynetworks** pourront ecrire au monde entier en utilisant ce **smtp**. Le reste du monde, ne pourra envoyer des mails qu'aux utilisateurs déclarés. (Exemple: **postmaster**) ==== reload ==== Des qu'on modifie le fichier **main.cf**, ou un fichier qui en depend, il faut faire: # /etc/init.d/postfix reload ==== Problème avex les certificates SSL ==== Par défaut, lors d'une tentative, j'ai eu un avertissement comme quoi une cle SSL était obsolète... j'ai désactivé ca en éditant le fichier **''/etc/postfix/main.cf''** afin d'avoir: #smtpd_use_tls=yes smtpd_use_tls=no ==== modifier un fichier hash ==== Certains fichiers peuvent être édités avec **vi**, mais il faut ensuite creer le fichier **'.db'** associé. (le **hash**). Pour cela il faut faire (par exemple): # postmap access ce qui créé un fichier **'access.db'**. Ensuite il faut faire: /etc/init.d/postfix reload ==== aliases ==== Aprés avoir edité le fichier **''/etc/aliases''**, il faut faire: # newaliases # /etc/init.d/postfix reload Exemple d'aliases: # cat aliases # /etc/aliases mailer-daemon: postmaster postmaster: root nobody: root hostmaster: root usenet: root news: root webmaster: root www: root ftp: root abuse: root noc: root security: root #root: thierry upscave: root thierry: root root: xxxxxxxxxxxxx@free.fr ===== Configurations ===== ==== Reseau ".local" ==== Lorsqu'on a des machines locales avec des noms locaux, pas facile de les faire communiquer avec certains serveurs, dont Free. Ainsi, une adresse: **''root@trouduc.thierry-jaouen.local''** est rejeté avec: host mx1.free.fr[212.27.48.6] said: 553 sorry, your envelope sender domain must exist (#5.7.1) (in reply to MAIL FROM command) Il faut que **''postfix''** re-ecrit (rewrite) ce genre d'adresse. === Solution === Lien: * http://www.postfix.com/ADDRESS_REWRITING_README.html * http://www.postfix.com/postconf.5.html#smtp_generic_maps Editer un fichier texte, genre: /etc/postfix/generic Y mettre dedans quelque chose comme ca: # TJ ----------------- # -------------------- @trouduc.thierry-jaouen.local @thierry-jaouen.fr Et puis, de retour sur le shell: # postmap /etc/postfix/generic (Un fichier **''generic.db''** est créé) Editer **''/etc/postfix/main.cf''** , et y inserer une ligne comme ca: smtp_generic_maps = hash:/etc/postfix/generic Recharger la config: # /etc/init.d/postfix reload Verifier que ca marche: (sur le poste local) (trouduc.thierry-jaouen.local)$ date | mail -s "test" adresse_mail@domaine.ext === postmaster === Ouai, mais j'ai encore un problème avec "postfix" lui-même, lorsqu'il genere un mail pour "postmaster": Oct 11 22:39:14 netcave postfix/smtp[4768]: BC4F742A7: to=, orig_to=, relay=mx1.free.fr[212.27.48.7]:25, delay=0.35, delays=0.01/0/0.28/0.06, dsn=5.0.0, status=bounced (host mx1.free.fr[212.27.48.7] said: 553 sorry, your envelope sender domain must exist (#5.7.1) (in reply to MAIL FROM command)) Oct 11 22:39:14 netcave postfix/bounce[4770]: warning: BC4F742A7: undeliverable postmaster notification discarded Oct 11 22:39:14 netcave postfix/qmgr[4734]: BC4F742A7: removed == Solution == J'avais oublié "$myhostname" (lui-même) dans le fichier "generic" ! (c'est a dire le "host" déclaré avec "myhostname = ...") ===== Tips ===== ==== queue ==== Voir la queue: # postqueue -p Grosse queue! Supprimer les "deferer" : # postsuper -d ALL deferred postsuper: Deleted: 1449 messages Ou simplement tout ? # postsuper -d ALL Remettre tout les messages en attente: # postsuper -r ALL Voir un message: # postcat -q | less ==== purge ==== Petit scripte (a adapter) pour purger les SPAM en "deferred" ... -Ca recherche les "ID" dans le spool de "deferred" -Recherche le flag "Spam Yes" : si oui, efface -Recherche une date mise en queue dans l'année 2008 (là, nous sommes en 2010!) : si oui efface #!/bin/sh TMPFILE=/tmp/postfix-purge-deferred.txt rm -f $TMPFILE >/dev/null 2>&1 find /var/spool/postfix/deferred/ | awk -F'/' '{ print $7; }' | egrep -v "^$" > $TMPFILE if [ -e $TMPFILE ]; then echo "fichier existe" while read mailID; do SpanStatus=$( postcat -q $mailID | grep "X-Spam-Status: Yes" ) if [ "x$SpanStatus" != "x" ]; then echo "Spam: $mailID : $SpanStatus" postsuper -d $mailID fi Older=$( postcat -q $mailID | egrep "^message_arrival_time.*2008" ) if [ "x$Older" != "x" ]; then echo "Old: $mailID : $Older" postsuper -d $mailID fi done < $TMPFILE fi ==== Amavis et autres ==== En appliquant un article de "Linux Mag" N°113 (Fevrier 2009), je m'aperçois qu'il est trés difficile de faire prendre en compte les modifications de **''master.cf''** par PostFix ... Pourquoi ? je ne sais pas. La seule astuce trouvé: - modifier ''master.cf'' - taper: ''# postsuper -r ALL'' - et puis: ''# postfix reload'' Source: http://www.postfix.org/FILTER_README.html