====== 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