Postfix, ausgehende Mails nach Inhalt filtern?
-
- Beiträge: 24
- Registriert: 06.05.2022 15:04:32
Postfix, ausgehende Mails nach Inhalt filtern?
Hallo,
gibt es eine Möglichkeit, mit Postfix ausgehende Mails nach Inhalt zu filtern? Sowas in der Art alle Mails die im Body "XYZ" stehen haben, sollen gelöscht werden?
Es geht dabei um ein Web-Programm welches viele Mails verschickt, bei dem man aber nicht einstellen kann, wofür es Mails verschicken soll und wofür nicht.
gibt es eine Möglichkeit, mit Postfix ausgehende Mails nach Inhalt zu filtern? Sowas in der Art alle Mails die im Body "XYZ" stehen haben, sollen gelöscht werden?
Es geht dabei um ein Web-Programm welches viele Mails verschickt, bei dem man aber nicht einstellen kann, wofür es Mails verschicken soll und wofür nicht.
- heisenberg
- Beiträge: 3592
- Registriert: 04.06.2015 01:17:27
- Lizenz eigener Beiträge: MIT Lizenz
Re: Postfix, ausgehende Mails nach Inhalt filtern?
Ich würde sagen: Das geht ganz bestimmt. Aber so 100% tief drin in Postfix bin ich auch nicht, dass ich so etwas ohne intensive Konsultation der Dokumentation sagen kann. Jedenfalls ist postfix sehr flexibel. Da kann man sehr umfangreiche Konstrukte mit umsetzen, wenn man das denn möchte.
Ich würde es mir wahrscheinlich einfacher machen: Ich würde einen zweiten Postfix (mit anderem Port auf dem gleichen System -> master.cf) aufsetzen und den als Relay für den ersten einsetzen. Der hat dann entsprechende Header- bzw. Body-Checks drin und wenn die greifen, dann wird die Mail abgelehnt und geht mit einem entsprechenden Hinweistext (z. B. "Mail blocked because of Spam") zurück zum Absender (oder alternativ an den postmaster?). Letzteres würde ich als besonders wichtig sehen, dass man da eine Rückmeldung darüber hat, wenn da etwas nicht rausgeht. Falls die Header/Body_checks nichts finden, sendet der 2. Postfix dann die Mails dann weiter ins Internet. Der Mailempfang kann weiterhin über den ersten Postfix laufen.
Ist halt die Frage, was Du damit genau bezwecken möchtest.
Ich würde es mir wahrscheinlich einfacher machen: Ich würde einen zweiten Postfix (mit anderem Port auf dem gleichen System -> master.cf) aufsetzen und den als Relay für den ersten einsetzen. Der hat dann entsprechende Header- bzw. Body-Checks drin und wenn die greifen, dann wird die Mail abgelehnt und geht mit einem entsprechenden Hinweistext (z. B. "Mail blocked because of Spam") zurück zum Absender (oder alternativ an den postmaster?). Letzteres würde ich als besonders wichtig sehen, dass man da eine Rückmeldung darüber hat, wenn da etwas nicht rausgeht. Falls die Header/Body_checks nichts finden, sendet der 2. Postfix dann die Mails dann weiter ins Internet. Der Mailempfang kann weiterhin über den ersten Postfix laufen.
Ist halt die Frage, was Du damit genau bezwecken möchtest.
Zuletzt geändert von heisenberg am 16.04.2024 22:56:18, insgesamt 1-mal geändert.
Jede Rohheit hat ihren Ursprung in einer Schwäche.
Re: Postfix, ausgehende Mails nach Inhalt filtern?
Das sehe ich genauso. Etwas mehr Info dazu wäre hilfreich.heisenberg hat geschrieben:16.04.2024 18:07:53Ist halt die Frage, was Du damit genau bezwecken möchtest.
Gruß
Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
-
- Beiträge: 24
- Registriert: 06.05.2022 15:04:32
Re: Postfix, ausgehende Mails nach Inhalt filtern?
Sehr gerne. Die Web-Application liefert alle Mails über:
ab. Postfix ist fast so belassen wie es im Standard konfiguriert wurde:
Die master.cf ist auch Standard:
Diese Application verschickt Benachrichtigungs-Mails, einige sollen verschickt werden, andere nicht. Wonach ich filtern könnte ist mir schon klar, ich weiß nur nicht wie ich das im Postfix einrichte. Vielleicht kann man auch procmail (Erinnerung aus grauer Vorzeit) als Filter in den Mailverkehr einbauen? Aber das war, soweit ich mich erinnere und was ich so in google finde, eher für ankommende eMails.
Code: Alles auswählen
spring.mail.host=localhost
spring.mail.port=25
Code: Alles auswählen
root@example:~$ postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
compatibility_level = 2
inet_interfaces = all
inet_protocols = all
mailbox_size_limit = 0
mydestination = $myhostname, example.example.de, localhost.example.de, , localhost
myhostname = example.example.de
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relayhost = [smtp-mail.outlook.com]:587
sender_canonical_maps = hash:/etc/postfix/sender_canonical
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/smtp_auth
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
root@example:~$
Code: Alles auswählen
root@example:~$ cat /etc/postfix/master.cf|grep -v "#"
smtp inet n - y - - smtpd
pickup unix n - y 60 1 pickup
cleanup unix n - y - 0 cleanup
qmgr unix n - n 300 1 qmgr
tlsmgr unix - - y 1000? 1 tlsmgr
rewrite unix - - y - - trivial-rewrite
bounce unix - - y - 0 bounce
defer unix - - y - 0 bounce
trace unix - - y - 0 bounce
verify unix - - y - 1 verify
flush unix n - y 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - y - - smtp
relay unix - - y - - smtp
-o syslog_name=postfix/$service_name
showq unix n - y - - showq
error unix - - y - - error
retry unix - - y - - error
discard unix - - y - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - y - - lmtp
anvil unix - - y - 1 anvil
scache unix - - y - 1 scache
postlog unix-dgram n - n - 1 postlogd
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix - n n - 2 pipe
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman unix - n n - - pipe
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
${nexthop} ${user}
root@example:~$
Re: Postfix, ausgehende Mails nach Inhalt filtern?
Servus,
ich bin mir nicht zu 100% sicher ob das überhaupt funktionieren kann. Das Problem ist, dass die Mail lokal erzeugt wird. Ein möglicher Ansatz wäre die Kontrolle beim versendenden Daemon einzurichten.
In der Main
und dort die Pattern definieren.
Nächste Thema wird sein, was mit den abgelehnten Mails passieren soll. Für den Test würde ich es auf REJECT setzen. In Produktion dann eher auf DISCARD
lG aus Wien
ich bin mir nicht zu 100% sicher ob das überhaupt funktionieren kann. Das Problem ist, dass die Mail lokal erzeugt wird. Ein möglicher Ansatz wäre die Kontrolle beim versendenden Daemon einzurichten.
In der Main
Code: Alles auswählen
smtp_body_checks = pcre:/etc/postfix/smtp_body_checks.map
Nächste Thema wird sein, was mit den abgelehnten Mails passieren soll. Für den Test würde ich es auf REJECT setzen. In Produktion dann eher auf DISCARD
lG aus Wien
-
- Beiträge: 24
- Registriert: 06.05.2022 15:04:32
Re: Postfix, ausgehende Mails nach Inhalt filtern?
Guten Morgen,
danke für deine Antwort. Was müsste denn in die Datei /etc/postfix/smtp_body_checks.map rein? Welches Format hat sie?
danke für deine Antwort. Was müsste denn in die Datei /etc/postfix/smtp_body_checks.map rein? Welches Format hat sie?
Re: Postfix, ausgehende Mails nach Inhalt filtern?
Format ist ein Einzeiler
https://www.postfix.org/header_checks.5.html
aus der Doku:
Auch hilfreich
https://regex101.com
https://www.postfix.org/header_checks.5.html
aus der Doku:
Code: Alles auswählen
/etc/postfix/body_checks:
/^<iframe src=(3D)?cid:.* height=(3D)?0 width=(3D)?0>$/
REJECT IFRAME vulnerability exploit
https://regex101.com
-
- Beiträge: 24
- Registriert: 06.05.2022 15:04:32
Re: Postfix, ausgehende Mails nach Inhalt filtern?
Ich habe das so in die main.cf eingetragen:
smtp_body_checks = pcre:/etc/postfix/smtp_body_checks.map
postmap ausgeführt und postfix-pcre installiert. In der smtp_body_checks.map steht:
Aber die Mail kommt durch:
Stößt Postfix hier an Grenzen?
Edit: auch DISCARD:
"This feature is not supported with smtp header/body checks." meint wohl genau das ..
smtp_body_checks = pcre:/etc/postfix/smtp_body_checks.map
postmap ausgeführt und postfix-pcre installiert. In der smtp_body_checks.map steht:
Code: Alles auswählen
/Ein Text: ein-weiterer-Text/ X REJECT
Code: Alles auswählen
postfix/smtp[707717]: warning: unsupported command in smtp_body_checks map: REJECT
Edit: auch DISCARD:
Code: Alles auswählen
postfix/smtp[708353]: warning: unsupported command in smtp_body_checks map: X DISCARD test
Re: Postfix, ausgehende Mails nach Inhalt filtern?
Nur zur Sicherheit. Poste bitte mal
was willst Du mit dem X zum Ausdruck bringen ? Das command heißt nur REJECT oder DISCARD
zusätzlich Text erst dahinter
Code: Alles auswählen
postconf -m
zusätzlich Text erst dahinter
-
- Beiträge: 24
- Registriert: 06.05.2022 15:04:32
Re: Postfix, ausgehende Mails nach Inhalt filtern?
Code: Alles auswählen
root@server:/etc/postfix$ postconf -m
btree
cidr
environ
fail
hash
inline
internal
memcache
nis
pcre
pipemap
proxy
randmap
regexp
socketmap
static
tcp
texthash
unionmap
unix
root@server:/etc/postfix$
Code: Alles auswählen
/Ein Text: ein-weiterer-Text/ REJECT
Code: Alles auswählen
postfix/smtp[714474]: warning: unsupported command in smtp_body_checks map: REJECT
Re: Postfix, ausgehende Mails nach Inhalt filtern?
Ok das ist etwas strange, aber probier mal folgendes
Was ist der Output von
oder was auch immer Du beim Text eingetragen hast.
Normalerweise sollte REJECT zurückkommen.
EDIT: Nur zur Sicherheit das File heißt smtp_body_checks.map und da ist kein Abstand ? Sieht in der Fehlermeldung nämlich so aus
Was ist der Output von
Code: Alles auswählen
postmap -q "Ein Text: ein-weiterer-Text" pcre:/etc/postfix/smtp_body_checks.map
Normalerweise sollte REJECT zurückkommen.
EDIT: Nur zur Sicherheit das File heißt smtp_body_checks.map und da ist kein Abstand ? Sieht in der Fehlermeldung nämlich so aus
-
- Beiträge: 24
- Registriert: 06.05.2022 15:04:32
Re: Postfix, ausgehende Mails nach Inhalt filtern?
Ha, es scheint zu funktionieren. Ich habe statt smtp_body_checks nur body_checks in die main.cf gesetzt, jetzt kommt:
Das wäre genau das, was ich erreichen möchte. Habe es mit "mail user@example.org" auf dem Terminal probiert, aber auch bei der Java-Application wird die Mail verworfen. Perfekt!
Vielen vielen Dank für eure Hilfe! Und wieder mal, wie geil ist Postfix...
Code: Alles auswählen
Apr 24 09:45:24 server.example.de postfix/pickup[717394]: 477D7BF5B9: uid=0 from=<root>
Apr 24 09:45:24 server.example.de postfix/cleanup[717399]: 477D7BF5B9: message-id=<20240424074524.477D7BF5B9@server.example.de>
Apr 24 09:45:24 server.example.de postfix/cleanup[717399]: 477D7BF5B9: discard: body Ein Text: ein-weiterer-Text from local; from=<noreply@server.example.de>
Vielen vielen Dank für eure Hilfe! Und wieder mal, wie geil ist Postfix...