Postfix filter - PHP script ausführen

Status
Für weitere Antworten geschlossen.

NePheus

Benutzer
Mitglied seit
04. Jan 2015
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich besitze eine Synology DS213J mit DSM 5.1 und MailServer 1.4. Darauf habe ich den MailServer mit meiner existierenden eMail-Adresse eingerichtet und kann mit der MailStation (RoundCube) auch meine Mails empfangen. Nun möchte ich ich in postfix einen Filter hinzufügen, sodass jedesmal ein Script ausgeführt wird, wenn eine eMail empfangen wird.

Aufgebaut habe ich auf folgendem Script
http://blog.thecodingmachine.com/co...script-when-your-postfix-server-receives-mail

Was ich gemacht habe
Ich habe folgende Dateien bearbeitet:
/volume1/@appstore/MailServer/etc/master.cf
/volume1/@appstore/MailServer/etc/template/master.template

Rich (BBCode):
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
filter    unix  -       n       n       -       -       pipe
  flags=F user=root argv=/volume1/web/mailReceived.php ${sender} ${size} ${recipient}
smtp      inet  n       -       n       -       -       smtpd
  -o content_filter=filter:dummy

Der Teil user=root wird noch ersetzt, das ist momentan nur zum testen

Postfix neustarten:
Rich (BBCode):
/volume1/@appstore/MailServer/sbin/postfix restart

mailReceived.php:

Rich (BBCode):
-r-xr-xr-x    1 root     root            93 Jan  3 11:42 mailReceived.php

Rich (BBCode):
#!/usr/bin/php
<?php
$test = fopen("test.txt", "w");
fwrite($test, "test");
fclose($test);
?>

Wenn ich das Script manuell aufrufe mit ./mailReceived.php, funktioniert alles und die Datei test.txt wird erzeugt. Wenn ich aber eine eMail erhalte, wird das Script nicht ausgeführt und die eMail wird ganz normal in den Posteingang verschoben. (Sollte sie ja nicht, da sie durch den Filter umgeleitet werden sollte)

Weiß jemand was da falsch läuft? Vielen Dank im voraus.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Postfix wird NIEMALS zulassen einen externen Prozess (dein Script) als root auszuführen. Never ever, das wäre ein riesiges Sicherheitsloch! Nimm einen anderen User, der nicht root oder admin ist
 

NePheus

Benutzer
Mitglied seit
04. Jan 2015
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
Hallo jahlives,

danke für deine Antwort. Ich habe den Filter abgeändert und es sowohl mit admin als auch meinem eigenen Benutzer auf der DS versucht. Auch hatte ich schon spamfilter als user drinstehen, welcher glaube ich vom MailServer angelegt wurde. Allerdings hat nur der user root und admin SSH Zugriff, ich weiß ja nicht ob das auch noch eine Rolle spielt. Danach habe ich wieder ein Postfix Reload ausgeführt. Die Mail wird immer noch normal zugestellt und kein Script ausgeführt. Der Scriptpfad im Filter stimmt auch 100%, habe ihn kopiert und ausgeführt und das funktioniert. Mit chown hatte ich nach jedem Userwechsel im Filter noch die Rechte der Datei angepasst, es bringt aber alles nichts.
Was mir noch auffiel, die Datei master.cf hat als letzte Zeile:
Rich (BBCode):
25        inet  n       -       n       -       -       smtpd
Aber egal ob ich den Filter bei dieser Zeile oder bei der ursprünglichen smtp Zeile hinzufüge, es ändert sich nichts.

Wird dann nicht der Grund des Nichtausführens des Filter irgendwo geloggt?

Edit:
Auch ein .sh Script statt einem .php Script im Filter anzugeben bringt keine Änderung. Er scheint den Filter wohl einfach zu ignorieren.
 
Zuletzt bearbeitet:

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Allerdings hat nur der user root und admin SSH Zugriff, ich weiß ja nicht ob das auch noch eine Rolle spielt. Danach habe ich wieder ein Postfix Reload ausgeführt
spielt keine Rolle weil der Postfix nicht via SSH an das Script übergibt :)
Dann was bezweckst du mit dem Flag 'F' ? Die meisten pipe Scripte brauchen keine speziellen Flags (http://www.postfix.org/pipe.8.html)
Dann noch die Frage: bist du sicher, dass du den Postfix neugestartet hast? So wie du es oben angegeben hast, hast du das Postfix Binary aufgerufen und das kennt keinen Parameter 'restart'. Mit dem Binary kannst du den Postfix so nicht neustarten
 

NePheus

Benutzer
Mitglied seit
04. Jan 2015
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
Ups, da sollte natürlich ein reload stehen. Diese Meldung folgt jedesmal:
postfix/postfix-script: refreshing the Postfix mail system

Das Flag F nutze ich wegen dem Tutorial auf dem ich aufbaue. Der Link ist auch im ersten Thread.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
also restart !== reload :) Je nach Aenderung an der Konfig reicht ein reload nicht aus. Kommt etwas auf die gemachte Aenderung an, grundsätzlich würde ich postfix nach Anpassungen eher restarten (Startscript) als mittels reload.
Den -o content_filter musst du bei der LETZTEN smtp Zeile angeben. Denn die letzte Angabe überschreibt alle vorherigen
 

NePheus

Benutzer
Mitglied seit
04. Jan 2015
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
Die letzten Zeilen meines Scripts sind jetzt:
Rich (BBCode):
#25        inet  n       -       n       -       -       smtpd
#  -o content_filter=filter:dummy
smtp      inet  n       -       n       -       -       smtpd
  -o content_filter=filter:dummy
filter    unix  -       n       n       -       -       pipe
  flags=F user=admin argv=/volume1/web/mailReceived.php ${sender} ${size} ${recipient}
Habs auch zwischendurch nochmal mit anderen Benutzern versucht (z.B. meinem persönlichen) und auch den Scriptpfad mal abgeändert auf /volume1/homes/MeinBenutzer aber es hilft alles nichts. Der Filter wird einfach ignoriert. Auch Postfix habe ich nach diesen Änderungen mit stop und start neugestartet.
 
Zuletzt bearbeitet:

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
irgendwie glaube ich nicht, dass du den Postfix neugestartet hast nach den Anpassungen an master.cf. Sonst sollte die smtp-Zeile eigentlich wieder mit dem default von Synology überschrieben werden. War zumindest früher so, dass eine Restart die Konfig neugeschrieben hat v.a. die smtp Zeile wurde durch den restart immer wieder angefügt.
 

NePheus

Benutzer
Mitglied seit
04. Jan 2015
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
Rich (BBCode):
> /volume1/@appstore/MailServer/sbin/postfix stop
postfix/postfix-script: stopping the Postfix mail system
> /volume1/@appstore/MailServer/sbin/postfix start
postfix/postfix-script: starting the Postfix mail system

ich starte jetzt mal das komplette NAS neu und versuchs dann nochmal.

Edit:
Nach Neustart setzt er die Datei zurück und orientiert sich an der template/master.template Datei. Habe diese auch entsprechend angepasst und die master.cf wird dann wie folgt generiert:
Rich (BBCode):
smtp      inet  n       -       n       -       -       smtpd
  -o content_filter=filter:dummy
filter    unix  -       n       n       -       -       pipe
  flags=F user=admin argv=/volume1/web/mailReceived.php ${sender} ${size} ${recipient}
25 inet n - n - - smtpd

Die letzte Zeile kann ich nicht beeinflussen, die wird automatisch angehangen. Habe es auch hier statt mit admin mit meinen Benutzer versucht und das NAS neugestartet, alles ohne Erfolg. Überschreibt die letzte Zeile meinen smtp Eintrag? Ich wüsste nicht wie ich dort den Filter hinzufügen könnte. Hänge ich die nämlich in meine master.template mit an und füge dort den Filter hinzu, wird sie später in der master.cf einfach nochmal ohne Filter dahintergesetzt.

Hier gibts wohl ähnliche Probleme, dass diese Zeile immer wieder automatisch angehangen wird, aber ohne Lösung (siehe letzten Beiträge):
http://forum.synology.com/enu/viewtopic.php?f=132&t=73474
 
Zuletzt bearbeitet:

NePheus

Benutzer
Mitglied seit
04. Jan 2015
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
Im englischen Forum gehts momentan nicht weiter. Hier hat auch niemand mehr Ansätze das Problem zu lösen?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
gemäss deinem letzten Post mit dem Konfigausschnitt überschreibst du (die Firmware) deinen Filter. smtp und Port 25 ist dasselbe :) Es zieht die letzte Definition also ohne Filter
Mal probiert zum Testen einen anderen Port zu wählen? z.B. Port 2525 mit Filter und dann eine Testmail drauf schicken?
 

NePheus

Benutzer
Mitglied seit
04. Jan 2015
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
Was ich noch nicht ganz verstehe: Ich habe wie schon gesagt meine bestehende Mail eingerichtet, die über eine eigene Domain läuft (bei Alfahosting). Dazu habe ich mich in der Mailstation eingeloggt und dort sowohl meine POP3 als auch SMTP Daten eingegeben. Somit kann ich auch erfolgreich meine Mails über Mailstation empfangen.

Warum muss jetzt ein SMTP Filter eingerichtet werden? Ich empfange die Mails doch über POP3.

Dementsprechend kann ich doch auch nicht den Port abändern, da die Ports von dem Mailserver meines Providers vorgegeben sind. Ich habe schon versucht von Port 25 auf Port 465 SSL zu wechseln, so rufe ich auch die Mails über Outlook ab. Allerdings kommt dann garkeine Mail mehr an.

Kann es sein, dass der Filter in meinem Falle garkeinen Sinn macht, da ich meine existierende Mail eingebunden habe? Geht das nur wenn ich eine Domain über den MX Eintrag auf mein NAS verweise und der die komplette Mail Funktion übernimmt?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
das eine hat mit dem anderen nicht viel zu tun :) die obige Konfig ist für den SMTP Server! Abholen tust du Mails per fetchmail. Also eine total andere Baustelle. Ein SMTP Filter macht nur dann Sinn wenn über den entsprechenden Port auch Mails via SMTP empfangen werden. fetchmail geht via POP3/IMAP auf den Server und stellt die Mails direkt in die Mailbox des Users d.h. das dürfte komplett am SMTP Server (Postfix) vorbeigehen :)
 

NePheus

Benutzer
Mitglied seit
04. Jan 2015
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
Ich merke gerade, dass ich noch nicht so richtig im Thema drin bin :)

Hier vielleicht nochmal meine ursprüngliche Problemstellung: Ich möchte eine existierende Mailadresse (Beispiel: "name@meinedomain.de") auf meiner Synology so einrichten, dass jedes Mal ein Script ausgeführt wird, wenn diese Mailadresse eine neue Mail erhält.

Wenn ich dich richtig verstanden habe, ist das mit meinen bisherigen Versuchen nicht möglich, da ich nur per fetchmail neue Nachrichten von der Mailadresse beziehe (über die App Mailstation)?
 

dsmynas

Benutzer
Mitglied seit
11. Feb 2014
Beiträge
74
Punkte für Reaktionen
0
Punkte
12
... fetchmail geht via POP3/IMAP auf den Server ...

Ich entschuldige mich mal direkt im Vorfeld für das nachfolgende "Klugscheißen": fetchmail ruft lediglich per POP3 ab. IMAP ist eine Postfachsynchronisierung, die nichts mit den Vorgängen von fetchmail zu tun hat.

Gruß,

dsmynas
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
dann scheiss ich klug zurück :) Mal in die Features von fetchmail geguckt?? http://www.fetchmail.info/fetchmail-features.html und damit du nicht zu sehr suchen musst :)
Fetchmail is a full-featured, robust, well-documented remote-mail retrieval and forwarding utility intended to be used over on-demand TCP/IP links (such as SLIP or PPP connections). It supports every remote-mail protocol now in use on the Internet: POP2, POP3, RPOP, APOP, KPOP, all flavors of IMAP, ETRN, and ODMR. It can even support IPv6 and IPSEC.
 

dsmynas

Benutzer
Mitglied seit
11. Feb 2014
Beiträge
74
Punkte für Reaktionen
0
Punkte
12
... Mal in die Features von fetchmail geguckt??
Nee, das hab ich in diesem Zusammenhang nicht.
... und damit du nicht zu sehr suchen musst :)
Danke für das Hervorheben.

Wobei ich mir fast sicher bin, dass das Abrufen von Mails innerhalb der MailStation, zumindest der Teil der per GUI konfigurierbar ist, lediglich per POP3 funktioniert. Das hat aber trotzdem nicht zu bedeuten das meine getätigte Aussage richtig ist ... klassisches Fettnäpfchen halt.

Gruß,

dsmynas
 

NePheus

Benutzer
Mitglied seit
04. Jan 2015
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
Ich möchte eine existierende Mailadresse (Beispiel: "name@meinedomain.de") auf meiner Synology so einrichten, dass jedes Mal ein Script ausgeführt wird, wenn diese Mailadresse eine neue Mail erhält.

Ist anscheinend nur schwer realisierbar, sonst hätte sicherlich schon jemand eine Lösung zeigen können. Dann vergess ich das Thema einfach wieder :)

@jahlives: danke für deine Tips
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
da die master.cf immer wieder neugeschrieben wird und damit den smtp Eintrag am Ende bekommt, sehe ich nur noch den Weg das Script via einen Transport zu triggern. Das sieht im Prinzip dann so aus: du wählst eine dezidierte Subdomain z.B. wenn du deineDomain.tld hast dann blabla.deineDomain.tld Dann erstellst du für deine Adresse, welche das Script auslösen soll, einen Alias
Code:
#/etc/aliases
deinBenutzer deinBenutzer,irgendwas@blabla.deineDomain.tld
Jetzt wird postfix einerseits die Mail in die Mailbox deinBenutzer schreiben als auch an irgendwas@blabla.deineDomain.tld weiterleiten.
Damit Postfix weiss was er damit zu tun hat muss man ihm das erst beibringen. Dazu "bindet" man die dezidierte Sub an den Eintrag in master.cf (in deinem Fall heisst der ja filter)
Code:
#transport
blabla.deineDomain.tld                  filter:
Dann in main.cf sicherstellen, dass
Code:
transport_maps = /pfad/zum/file/transport
gesetzt ist. Dann postmap über das transport File und newaliases und den postfix reloaden
Wichtig:
blabla.deineDomain.tld darfst du KEINESFALLS in mydestination oder virtual_mailbox_domains eintragen. Sonst gibt das übelste Mailloops mit u.U. x-tausenden von Mails
Auch nicht vergessen: das Script läuft unter dem User postfix. Wenn du also Kommandos drin hast die der User postfix nicht ausführen darf oder mehr Rechte benötigen würde, dann wird das nicht gehen
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat 

 
 
  AdBlocker gefunden!

Du bist nicht hier, um Support für Adblocker zu erhalten. Dein Adblocker funktioniert bereits ;-)

Klar machen Adblocker einen guten Job, aber sie blockieren auch nützliche Funktionen.

Das Forum wird mit hohem technischen, zeitlichen und finanziellen Aufwand kostenfrei zur Verfügung gestellt. Wir zeigen keine offensive Werbung und bemühen uns um eine dezente Integration.

Bitte unterstütze dieses Forum, in dem du deinen Adblocker für diese Seite deaktivierst.

Du kannst uns auch über unseren Kaffeautomat einen Kaffe ausgeben oder ein PUR Abo abschließen und das Forum so werbefrei nutzen.

Vielen Dank für Deine Unterstützung!