Plesk: smtp per_source_limit

Sep 10 09:20:20 example xinetd[3033]: FAIL: smtp per_source_limit from=10.10.10.1
Sep 10 09:20:20 example xinetd[3033]: FAIL: smtp per_source_limit from=10.10.10.1
Sep 10 09:20:21 example xinetd[3033]: FAIL: smtp per_source_limit from=10.10.10.1

Wenn solche Einträge im Log auftauchen oder der Monitoring-Server meint der SMTP wäre dicht, sperrt der xinetd weitere Verbindungen. Der Standardwert steht auf 10 Connections per Source-IP. Da Plesk den qmail über xinetd anbindet, greifen hier die default Einstellungen des xinetd… Änderbar wie folgt:

# /etc/xinetd.conf
 
defaults
{
...
per_source = 50

Bei Gelegenheit muss ich mir nochmal anschauen in wie fern das mit den concurrencylocal/remote Einstellungen des qmail kollidiert. Man muss sicherlich beide (xinetd und qmail) anpassen.

Postfix: execute commands (virtual domains)

Nach und nach stelle ich alle Maschinen von qmail auf Postfix um. Ein letztes Thema bei der Migration war die Integration von diversen Scripten beim Mail-Empfang. Zwar kann man Postfix mittels einfacher Anweisung in der /etc/aliases das Ausführen von Scripten etc. beibringen – jedoch ist es nicht so einfach wenn man mehrere Domains (Virtual Domains) auf dem Server bedienen will. Dazu ist ein klein wenig mehr Aufwand notwendig…

Zunächst wird mittels einer Postfix-Datenbank gesteuert welche Mails beim Script landen sollen:

#/etc/postfix/transportregex
/trac-project-x@example.com/         trac:project-x
/trac-project-y@example.com/         trac:project-y

Man beachte die Strings hinter dem „:“, diese werden hinterher von unserem Script-Service (hier: trac) ausgewertet. Nach dem Erstellen der Datei muss diese in eine Postfix-DB umgewandelt werden (dies ist auch nach jeder Änderung der Datei nötig):

postmap /etc/postfix/transportregex

Die soeben erstellte Datei wird jetzt in die Postfix-Konfiguration eingebunden:

#/etc/postfix/main.cf
transport_maps = regexp:/etc/postfix/transportregex, hash:/var/spool/postfix/plesk/transport

Jetzt wird noch ein neuer Postfix-Service benötigt welcher das Script ansteuert:

#/etc/postfix/master.cf
trac unix - n n - 10 pipe flags=DRhu user=nobody argv=/usr/local/bin/email2trac -p ${nexthop}

Hier wird das Script „email2trac“ angesteuert, welches Mails direkt in ein Trac-Ticket umwandelt. Hier ist praktisch, dass man jetzt mittels der Variable ${nexthop} direkt das ursprüngliche Transportziel auswerten kann (siehe oben).

Plesk 10.1.1

Mittlerweile ist Plesk 10.1.1 erschienen (Changelog).

Die hier genannten Bugs wurden behoben (und noch viele andere). Jedoch ist auch ein neuer Bug beim Migrieren von Domains mit Postfächern aufgetaucht: Enthalten die Postfächer Weiterleitungen, werden diese zwar mit übernommen – sie werden jedoch nicht in die Qmail-Konfiguration eingetragen. D.h. die in der Oberfläche aktivierten Weiterleitungen funktionieren nicht (die Mail landet im Nirvana).

Zwei Möglichkeiten zur Abhilfe: Die betreffenden Weiterleitungen ein- und wieder ausschalten. Oder die Mailkonfiguration komplett neu schreiben lassen:

/usr/local/psa/admin/sbin/mchk --without-spam

Plesk/qmail: globales procmail Script

Die Möglichkeit Spam-Mails mittels procmail in einen Unterordner zu verschieben hatte ich hier schon mal aufgeschrieben. Leider bietet Qmail meines Wissens nicht die Möglichkeit ein procmail Rezept global anzuwenden sondern prinzipiell nur über die Einbindung in das .qmail-File des jeweiligen Postfachs.

Zumindest die Erstellung/Anpassung des procmail-Rezeptes kann man aber global Abhandeln. Prinzipiell wird das Script einfach nur in der .qmail Datei verlinkt:

| true
| preline /usr/bin/procmail -p /etc/procmail_spam

Soweit eigentlich logisch. Es gibt jedoch einen kleinen Haken: Das procmail Script benötigt das aktuelle Verzeichnis bzw. das aktuelle Postfach um die Mails richtig zu verschieben. Normalerweise steht das aktuelle Verzeichnis ja in der Umgebungsvariable $PWD – aber procmail löscht einige dieser Variablen aus Sicherheitsgründen. Auf neueren Plesk-Systemen bekommt man das Verzeichnis nur über die DELIVERED_TO Umgebungsvariable – welche nur gesetzt wird wenn man den besagten „Sicherheitsmechanismus“ von Procmail ausschaltet (-p) und damit den Zugriff auf alle Umgebungsvariablen erlaubt.

LOGFILE=/var/log/procmail.log
#VERBOSE=YES
MAILDIRMAKE=/usr/bin/maildirmake
 
MAIL_HOME=`if [ -n "$DELIVERED_TO" ]; then echo $DELIVERED_TO | awk -F @ '{print "/var/qmail/mailnames/"$2"/"$1}'; else /bin/pwd; fi`
MAIL_HOME=`if [ -e "$MAIL_HOME" ]; then echo $MAIL_HOME; fi`
 
# sollte es keine Ordner Junk geben, diesen anlegen
DUMMY=`test -d $MAIL_HOME/Maildir/.Junk || echo "Junk" >> $MAIL_HOME/Maildir/courierimapsubscribed`
DUMMY=`test -d $MAIL_HOME/Maildir/.Junk || $MAILDIRMAKE -f Junk $MAIL_HOME/Maildir/`
 
# Spam-Mails nach 30 Tagen löschen
DUMMY=`find $MAIL_HOME/Maildir/.Junk/cur/ -type f -mtime +30 -exec rm -f {} \\;`
DUMMY=`find $MAIL_HOME/Maildir/.Junk/new/ -type f -mtime +30 -exec rm -f {} \\;`
 
# Spam-Mails in den Ordner Junk verschieben
:0 w
* ^Subject:.\*\*\*\*\*SPAM\*\*\*\*\*
$MAIL_HOME/Maildir/.Junk/
 
# Wichtig: alle weiteren Mails normal zustellen
:0 w
$MAIL_HOME/Maildir/

Um die .qmail Files anzupassen habe ich mir ein Script geschrieben. Sollte jemand einen eleganten Weg kennen ein Procmail-Script auch global in die Qmail Kette einzubinden darf er sich gerne melden 😉

Update: für neuere Plesk-Versionen war leider ein Update des Scripts nötig, da qmail dort anders aufgerufen wird und daher /bin/pwd nicht auf das richtige Homeverzeichnis verweist.

Plesk QMail: Unable to get ‚From:‘ string from SMTP session

Die aktuelle Plesk-Version 9.3 hat ein Problem mit qmail. Im Log tauchen folgende Meldungen auf:

qmail-queue-handlers[17561]: Unable to get 'From:' string from SMTP session

Was genau das Problem ist konnte ich bisher nicht herausfinden. Es scheinen Mails zwar größtenteils ausgeliefert werden aber u.U. kommen trotzdem failure-notices zurück. Nichts genaues weiß man nicht. Einen offiziellen Fix gibt es noch nicht, allerdings einen offiziellen Workaround (dort Archiv herunterladen).

# Entpacken
tar xvfj update.tar.bz2
# Backup anlegen
cp -p /var/qmail/bin/qmail-queue /var/qmail/bin/qmail-queue.bak
# Kopieren (dist-rpm-Centos-5-x86_64 durch eigene Distibution ersetzen)
cp update/dist-rpm-Centos-5-x86_64/qmail-queue /var/qmail/bin/
# Rechte setzen
chmod 2511 /var/qmail/bin/qmail-queue
chown mhandlers-user:popuser /var/qmail/bin/qmail-queue

Da Plesk ja bekanntlich qmail patcht (was nebenbei bemerkt auch leider notwendig ist) stellt es hier die Quellen der Patches zur Verfügung. Leider finde ich dort allerdings nicht die Patches der aktuellen Version 9.3 (falls sich dort überhaupt etwas geändert hat). So kann ich nicht direkt nachvollziehen was wirklich das Problem war/ist :(.

Anleitung natürlich ohne Gewähr!

Procmail: failure notices / undeliverables

Folgendes reciept für Procmail filtert für mich jetzt diverse Arten von „failure notices“.

Klar, man könnte sicherlich auch einige Zeilen zusammenfassen, aber ich finde es so übersichtlicher. Ausserdem kenne ich jetzt eine weitere Möglichkeit „komplexe“ Regeln mit ODER zu verknüpfen…

SUBJECT_DELIVERFAIL=
:0
* 1^0 ^Subject: *failure notice
* 1^0 ^Subject: *(|Mail )delivery \(?fail(ed|ure)
* 1^0 ^Subject: *((Returned|Undelivered) mail|Message)(: (.*User unknown|see transcript for details))?
* 1^0 ^Subject: *Undeliver(ed|able) (Mail|Message):? Returned to Sender
* 1^0 ^Subject: *Undeliverable:
* 1^0 ^Subject:.*undeliverable mail
* 1^0 ^Subject: *Mail System Error.*Returned Mail
* 1^0 ^Subject: *Delivery Status Notification
* 1^0 ^Subject:.*Message you sent blocked
* 1^0 ^Subject:.*Delivery Notification: Delivery has failed
* 1^0 ^Subject:.*Mail status report
* 1^0 ^Subject:.*Benachrichtung zum .*Fehlgeschlagen
* 1^0 ^Subject:.*Message you sent was blocked
* 1^0 ^Subject:.*Warning: could not send message for past
{ SUBJECT_DELIVERFAIL=1 }
 
:0 w
* SUBJECT_DELIVERFAIL ?? ^^1^^
./Maildir/.Trash/

Procmail: Mails sortieren

Procmail ist sehr praktisch um z.B. Serverseitig Mails in (IMAP-)Ordner zu sortieren. Die Filter-Syntax ist sehr leistungsfähig aber auch etwas gewöhnungsbedürftig. Mittlerweile lege ich jeden Filter immer Serverseitig an. Der Vorteil liegt auf der Hand: Die Filter müssen nicht auf jedem Client (Handy etc.) mühsam eingerichtet werden. Auch habe ich bisher immer mal wieder vergessen bei einer Neuinstallation des Mail-Clients die Filter zu sichern 😉.

„Procmail: Mails sortieren“ weiterlesen

Plesk: SSL-Zertifikat für qmail & courier IMAP

Alle Jahre wieder: Das SSL-Zertifikat läuft ab. An sich kein Problem, kopiert oder erzeugt man sich doch über die Plesk-Oberfläche ein neues.

Allerdings „vergisst“ Plesk die Zertifikate auch für den SMTP-Server (qmail) und den IMAP und POP3 Server (courier-imap) zu aktualisieren. Die von Plesk generierten Zertifikate finden sich im Verzeichnis „/usr/local/psa/var/certificates“. Plesk generiert dort sämtliche Zertifikate mit einem Zufallsstring. Die Dateien heißen dann z.B. cert-AY3mSK. Am besten man schaut nach dem Dateidatum um die zuletzt generierte herauszufinden.

cp /usr/local/psa/var/certificates/cert-AY3mSK /var/qmail/control/servercert.pem
cp /usr/local/psa/var/certificates/cert-AY3mSK /usr/share/courier-imap/pop3d.pem
cp /usr/local/psa/var/certificates/cert-AY3mSK /usr/share/courier-imap/imapd.pem
service qmail restart
service courier-imap restart

Hinweis: Wenn man ein „echtes“ Zertifikat besitzt muss man dem Zertifikatsfile für qmail noch die Zertifikate der Zertifizierungsstelle anhängen. Diese werden durch Plesk in einem weiteren File mit Zufallsstring (aber selben Datums) abgelegt:

cat /usr/local/psa/var/certificates/cert-AY3mSK > /var/qmail/control/servercert.pem
cat /usr/local/psa/var/certificates/cert-832vfh >> /var/qmail/control/servercert.pem
cp /var/qmail/control/servercert.pem /usr/share/courier-imap/pop3d.pem
cp /var/qmail/control/servercert.pem /usr/share/courier-imap/imapd.pem
service qmail restart
service courier-imap restart

Auf einfache „>“ und doppelte „>>“ Umleitungszeichen achten!
Vor dem kopieren unbedingt Sicherungskopien der betreffenden Dateien anlegen!

Hinweis 2: Wie Thomas in den Kommentaren anmerkt müssen die Rechte der Zertifikatdateien passen: Also beim QMail-Zertifikat User qmaild und Rechte 600, beim courier bitte bei den anderen Files nachschauen!