.

Mit Postfix Disclaimer basteln |

Zur Zeit geistern vermehrt Warnungen vor einer Abmahnwelle durch die Presse. Grund ist eine zum 01.01.2007 gültig gewordene Erweiterung des § 125a Abs. 1 Satz 1 des EHUG.

Hier wurde die bei Geschäftsbriefen ohnehin schon bestehende Pflicht zur Angabe der Handelregisterangaben auch auf eMails ausgeweitet.

Da man zwar alle Mitarbeiter auf diesen Umstand hinweisen kann, aber noch lange nicht sicher ist, dass dieser von allen gelesen (geschweige denn auch umgesetzt) wird, haben wir uns daher entschlossen, unserem MTA Postfix diese Aufgabe anzuvertrauen.

Dieser soll nun unter alle ausgehenden eMails des Hauses die gewünschten Angaben druntertackern.

Und da nicht nur wir das Problem haben dürften, hier eine kurze Beschreibung, wie wir das umgesetzt haben:

Grundlage für die Umsetzung war das Tool “alterMIME“, das u.a. ermöglicht, MIME-kodierte Dateien um Disclaimer zu erweiteren.

Wir haben uns im Großen und Ganzen bei der Installation und Konfiguration an die dort verlinkte Anleitung zur Konfiguration von alterMIME unter Postfix gehalten:

Nach dem Herunterladen und Kompilieren von altermime mit:
$ wget http://www.pldaniels.com/altermime/altermime-0.3.7.tar.gz
$ tar xvf altermime-0.3.7.tar.gz
$ cd altermime-0.3.7
$ make

(Und nein: es fehlt beim “tar” kein Parameter “z” ;) – Das Archiv heisst zwar so, ist aber nicht gezippt).

kommt das Programm nach /usr/local/bin und wird dort für jedermann ausführbar:
# cp altermime /usr/local/bin/
# chmod 755 /usr/local/bin/altermime

Wir lassen den Filter als User “postfix” ausführen, unter dem bei uns auch der MTA selbst läuft, halten uns aber in der Anleitung an das o.g. Vorbild und richten dafür einen extra Benutzer “filter” ein:
# useradd -r -c "Postfix Filter" -m -d /var/spool/filter filter

Und jetzt zum eigentlichen Script “/etc/postfix/disclaimer/filter”, das bei uns dafür sorgt, dass nur ausgehende Nachrichten mit dem Disclaimer versehen werden. Wir filtern das über die Absender-eMail-Adresse, die als erster Parameter an das Filter-Script übergeben wird:
#!/bin/bash
#
# Wo sind meine Sachen?
INSPECT_DIR=/var/spool/filter
SENDMAIL=/usr/sbin/sendmail
ALTERMIME=/usr/local/bin/altermime
#
SENDER_DOMAIN=meine-domain.de
COPYRIGHT_HEADER="Wichtiger Text"
#
# Fehlercodes:
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
#
# Aufraeumen nicht vergessen:
trap "rm -f in.$$" 0 1 2 3 15
#
# und los geht es
cd $INSPECT_DIR || { echo $INSPECT_DIR existiert nicht; exit $EX_TEMPFAIL; }
cat >in.$$ || { echo Kann eMail nicht speichern; exit $EX_TEMPFAIL; }
#
# Domain aus uebergebener Absenderadresse filtern:
DOMAIN=${2##*@}
#
if [ "$DOMAIN" == "$SENDER_DOMAIN" ]; then
$ALTERMIME --input=in.$$ \
--disclaimer=/etc/postfix/disclaimer/disclaimer.txt \
--disclaimer-html=/etc/postfix/disclaimer/disclaimer.txt \
--xheader="X-Copyrighted-Material: $COPYRIGHT_HEADER" || \
{ echo Message content rejected; exit $EX_UNAVAILABLE; }
else
$ALTERMIME --input=in.$$ \
--xheader="X-Copyrighted-Material: $COPYRIGHT_HEADER" || \
{ echo Message content rejected; exit $EX_UNAVAILABLE; }
fi
#
$SENDMAIL "$@" <in.$$
exit $?

Das Ganze muss jetzt noch für den Filter-User ausführbar gemacht werden:
# chgrp filter /etc/postfix/disclaimer/filter
# chmod 750 /etc/postfix/disclaimer/filter

Der Text, der in die eMail eingefügt werden soll, muss jetzt als /etc/postfix/disclaimer/disclamaimer.txt angelegt werden.

Jetzt fehlt noch das Wichtigste: die Einbindung von alterMIME in die Postfix-Umgebung. Dies geschieht über die Erweiterung der /etc/postfix/master.cf.

Da bei uns der Mailserver nur eine IP-Adresse hat, und zusätzlich zum alterMIME auch noch Amavis mit der Mailfilterung beschäftigt ist (es wollen ja auch noch Spams und Viren bekämpft werden), sieht unsere master.cf in den angepassten Teilen jetzt so aus (hier unsere komplette master.cf.zip):


# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - n - - smtpd
-o content_filter=smtp-amavis:[127.0.0.1]:10024
#
# [...hier noch das Standardzeug ...]
#
smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=dfilt:
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
dfilt unix - n n - - pipe
flags=Rq user=filter argv=/etc/postfix/disclaimer/filter -f ${sender} -- ${recipient}

Nach einem
# postfix reload

sollten die Hinweise nun in keinen ausgehenden elektronischen Nachrichten mehr fehlen, überprüfbar ist das im Mail.log über einen grep auf “dfilt”.

68 Antworten zu 'Mit Postfix Disclaimer basteln'
  1. Thinker:

    Exakt das hab ich Montag auch gebastelt… Auch wenn mir diese Lösung absolut nicht gefällt, sie killt zuverlässig signierte Mails… Aber sie ist mir lieber als 20mal Outlook hinterherzurennen.

  2. Joerg Reichel:

    Hallo,

    danke für dieses sehr nützliche Skript, es ist fast unveränderbar zu übernehmen, aber achtung ein paar kleine Tippgfehler haben sich im filter-script eingeschlichen in form von leerzeichen wo keine hingehören..

    An ein einer Steller beim Disclaimer haben wir noch ein problem was wohl aber mehr html ist. Die Text Mails gehen gut, wenn aber html Disclaimer angehängt werden so kommen diese dann mit teilweise umbrüchen an wo nie welche gesetzt wurde, so stehen dann im Quelltext der angekommenen Mail Umbrüche die nicht im Disclaimerquelltext sind, daher sind dann mitunter auch leerzeichen im Disclaimer der ankommenden mail. Wäre für tipps sehr dankbar. j.reichel@asklepios.com

  3. Stefan:

    @Joerg: eigentlich sollte das Script auch unverändert laufen, ich habe es direkt vom Server in den Beitrag einkopiert. Ansonten: könntest Du mir die Tippfehler kurz mitteilen, dann könnte ich diese im Beitrag korrigieren? Tia.

    Du kannst für HTML-Mails ja auch einen eigenen Disclaimer speichern und altermime über den Parameter “-disclaimer-html” mit auf den Weg geben, dann sollte das Problem der Vergangenheit angehören.

    Gruß
    Stefan

  4. Bernhard Dawuidow:

    Hallo,
    das Leerzeichen ist in der Zeile “$SENDMAIL “$@”

  5. Bernhard Dawuidow:

    seltsam. mein restlicher Kommentar ist weg? dann nochmal.

    in der master.cf ist auch ein Fehler. es muss heissen:
    flags=Rq user=filter argv=/etc/postfix/disclaimer/filter -f${sender} — ${recipient}

  6. Bernhard Dawuidow:

    achja. ich würd den Pfad zum altermime in eine Variable stecken. der installiert sich standardmässig in /usr/local/bin/altermime

    achja. und für alle die mehr als eine Domain haben kann man das über “if [ "$DOMAIN" == "$SENDER_DOMAIN" -o $DOMAIN" == "$NOCHEINE_SENDER_DOMAIN"]; then” lösen ($NOCHEINE_SENDER_DOMAIN muss natürlich oben definiert sein)

    Gruss
    Bernhard

  7. Frank Mueller:

    Hallo!
    Ich habe mal das erweiterte Script von Bernhard online gestellt. Es ist auf 3 Domains erweitert und hoffentlich fehlerfrei ;-)

    http://www.mfsnet.org/linux/postfix-disclaimer/filter.zip

    Gruss
    Franky

  8. Stefan:

    Ups – da hatte ich meine Ichbastelnochdaranrum-Konfigurationen für die Erstellung des Posts benutzt *hüstel*.

    Ich habe den Beitrag berichtigt und auch Altermime nach Bernhards Tipp in eine Variable geschoben.

    Ich hoffe, so ist es jetzt korrekt …

    Gruß
    Stefan

  9. Alex:

    Sehr schöne Anleitung!

    Wenn man sowieso AMAVIS verwendet, dann kann man auch gleich die %local_domains verwenden:

    DOMAINLIST=/etc/amavis/local_domains
    DOMAIN=${1##*@}
    CHECK=” `cat ${DOMAINLIST} | tr ‘\n’ ‘ ‘`”
    if [ "${CHECK}" != "${CHECK/ ${DOMAIN}/}" ] ; then
    ## footer hinzufügen
    fi

    Außerdem war ich nicht in der Lage die Parameter gleich an sendmail durchzureichen.
    Mein master.cf ruft das Filterscript deshalb mit
    …/filter ${sender} ${receiver}
    auf.
    Die Zeile im Script lautet dann:
    $SENDMAIL -f $1 — $2

  10. Joerg Reichel:

    Hallo, danke für die rege diskusion, wie gesagt bei uns läuft es nun auch nur eins ist aufgefallen wenn man in einer eigenen Signatur im Outlook ein bmp logo hat dann hängt altermime nur den Textdisclaimer an und nicht die html version. Sprich wenn der empfänger nicht auf plaintext sein outlook stellt sieht er den disclaimer nicht. hat jemand dafür eine lösung parat. Ist sehr schade da unsere Ärzte sehr gern das Asklepios logo ind er Signatur haben wollen. Und momentan erstmal die nur über ne dienstanweisung gelöst werden konnte die das verbietet. mfg

  11. Simon Brüchner:

    Danke, das war genau was wir gesucht haben.
    Es hat zwar nicht sofort funktioniert, aber mit ein bisschen Mühe lief es dann.

  12. Simon Brüchner:

    Was mache ich falsch wenn E-Mails die von Outlook verschickt werden korrekt den Disclaimer enthalten, aber E-Mails welche automatisch von PHP auf dem gleichen Server mit mail() versendet werden, nicht?

  13. Tobias Krämer:

    @alex Du hast in deinem Skript die Debug Option gesetzt – kann ich irgendwo sehen, was altermime mit den Emails macht?

  14. Tobias Krämer:

    mal wieder zu schnell getippt – ich meien natürlich Frank ;-)

  15. Stefan:

    @Simon: Wahrscheinlich ist die Domain der Mails, die Du direkt über mail() sendest nicht als Sender-Domain in Deinem Filterscript eingetragen.

    @Tobias: Leite den Output von Altermime einfach in eine Datei in ein für den Filter-User beschreibbaren Verzeichnis, also z.B.:

    $ALTERMIME –input [...] >>/tmp/altermime.log

    Gruß
    Stefan

  16. Tobias Krämer:

    danke stefan – das log tut jetzt soweit. Hab jetzt die problematische Stelle gefunden – kann damit aber leider nichts anfangen.

    mime_alter.c:1540:AM_add_disclaimer:DEBUG: Main Headers have been read
    mime_alter.c:1578:AM_add_disclaimer:DEBUG: Inserting disclaimer into an email with no boundary
    mime_alter.c:1229:AM_add_disclaimer_no_boudary:DEBUG: Inserting disclaimer into a non-boundary email
    mime_alter.c:1238:AM_add_disclaimer_no_boudary:DEBUG: Conditions right for HTML disclaimer to be added
    mime_alter.c:946:AM_add_disclaimer_insert_html:DEBUG: Starting to attempt to insert HTML disclaimer
    WARNING: Could not insert HTML disclaimer into email
    mime_alter.c:1263:AM_add_disclaimer_no_boudary:DEBUG: Done, text-inserted=0, html-inserted=0
    mime_alter.c:1581:AM_add_disclaimer:DEBUG: Inserting done, txt-inserted=0 html-inserted=0
    Done.

    Sagt das jemandem was?

  17. Thomas:

    Hi Folks,
    ich sehe Ihr habt jede Menge Erfahrungen gesammelt.
    Ich habe bei uns auch altermime im Einsatz und es funktioniert soweit.

    Mein Problem ist jetzt nur, da wir nur einen Mailserver verwenden für incoming and outgoing mail werden die disclaimer an alle mails angehängt. Also auch an die, die nur für internen gebrauch sind.
    Hat jemand eine Idee wie ich disclaimer nur an mails anhängen kann die unser haus verlassen sollen?

    Danke Thomas

  18. Stefan:

    @Thomas: lies einfach den Beitrag ganz oben …

  19. Oliver:

    Hallo zusammen,

    vielleicht koennt ihr mir helfen:
    habe nach der guten Anweisung von oben alles so eingebaut:
    [master.cf]

    smtp inet n – n – – smtpd
    -o content_filter=lmtp:127.0.0.1:10030
    pickup fifo n – n 60 1 pickup
    -o content_filter=lmtp:127.0.0.1:10030

    ## ## Added by Kaspersky Anti-Virus Installer ##
    127.0.0.1:10030 inet n n n – 20 spawn
    user=kluser argv=/opt/kav/5.5/kav4mailservers/bin/smtpscanner

    127.0.0.1:10031 inet n – n – – smtpd
    -o content_filter=discl:
    -o local_recipient_maps=
    -o relay_recipient_maps=
    -o smtpd_restriction_classes=
    -o smtpd_client_restrictions=
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o mynetworks=127.0.0.0/8
    -o strict_rfc821_envelopes=yes
    -o smtpd_error_sleep_time=0
    -o smtpd_soft_error_limit=1001
    -o smtpd_hard_error_limit=1000

    discl unix – n n – – pipe
    flags=Rq user=discl argv=/etc/postfix/disclaimer -f ${sender} — ${recipient}
    [end of master.cf]

    Leider kommt Postfix mit der Fehlermeldung zurueck, mit der ich nichts so recht anfangen kann:

    Feb 28 12:28:18 mail postfix/lmtp[21421]: 1A82A7EF: to=, relay=127.0.0.1[127.0.0.1], delay=0, status=bounced (host 127.0.0.1[127.0.0.1] said: 552 Error ! (in reply to end of DATA command))

    WAS habe ich falsch gemacht???

    Viele Gruesse & danke
    -Oliver

  20. Stefan:

    Hi Oliver,

    habe gerade nur kurz auf Deine master.cf geschaut.

    <Vermutung>
    Entferne einmal den Content-Filter aus der “pickup”-Zeile, Du stolperst irgendwie über den lmtp.
    </Vermutung>

    Gruß
    Stefan

  21. Mathias:

    Zum Grusse,

    nun bastel ich schon seit zwei tagen an dieser Disclaimer-Geschichte.
    im Grunde sollte ich einfach die Signatur im Usermin für jeden User einbauen, aber ich will wissen wie es geht b.z.w. was ich falsch mache.
    Problem an der Sache ist, ich hab den Server nicht eingerichtet und weiss nicht was da sonst alles noch so läuft.
    Soweit ich das feststellen konnte werkelt hier ein Amavis mit Spamassasin.
    Hier mal einfach die Felermeldungen aus der /var/log/mail:
    Mar 1 11:57:39 haupthaus postfix/master[23748]: fatal: /etc/postfix/master.cf: line 75: bad transport type: smtp_data_done_timeout=1200
    Mar 1 12:10:20 haupthaus postfix/postfix-script: fatal: the Postfix mail system is not running
    Mar 1 12:11:03 haupthaus postfix/postfix-script: starting the Postfix mail system
    Mar 1 12:11:03 haupthaus postfix/master[26411]: fatal: /etc/postfix/master.cf: line 76: bad transport type: disable_dns_lookups=yes
    Mar 1 12:15:45 haupthaus postfix/postfix-script: starting the Postfix mail system
    Mar 1 12:15:45 haupthaus postfix/master[26561]: fatal: bind 127.0.0.1 port 10025: Address already in use
    Mar 1 12:21:07 haupthaus postfix/postfix-script: starting the Postfix mail system
    Mar 1 12:21:07 haupthaus postfix/master[26652]: fatal: /etc/postfix/master.cf: line 78: bad transport type: content_filter=dfilt:
    Mar 1 12:26:42 haupthaus postfix/postfix-script: starting the Postfix mail system
    Mar 1 12:26:42 haupthaus postfix/master[26807]: fatal: /etc/postfix/master.cf: line 78: bad transport type: content_filter=dfilt:
    Mar 1 12:51:27 haupthaus postfix/postfix-script: starting the Postfix mail system
    Mar 1 12:51:27 haupthaus postfix/master[27267]: fatal: /etc/postfix/master.cf: line 78: bad transport type: content_filter=dfilt:

    meine master.cf:
    smtp inet n – n – 2 smtpd -o content_filter=smtp:[127.0.0.1]:10024

    #628 inet n – n – – qmqpd
    pickup fifo n – n 60 1 pickup
    cleanup unix n – n – 0 cleanup
    qmgr fifo n – n 300 1 qmgr
    #qmgr fifo n – n 300 1 oqmgr
    #tlsmgr unix – – n 1000? 1 tlsmgr
    rewrite unix – – n – – trivial-rewrite
    bounce unix – – n – 0 bounce
    defer unix – – n – 0 bounce
    trace unix – – n – 0 bounce
    verify unix – – n – 1 verify
    flush unix n – n 1000? 0 flush
    proxymap unix – – n – – proxymap
    smtp unix – – n – – smtp
    # When relaying mail as backup MX, disable fallback_relay to avoid MX loops
    relay unix – – n – – smtp
    -o fallback_relay=
    # -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
    showq unix n – n – – showq
    error unix – – n – – error
    discard unix – – n – – discard
    local unix – n n – – local
    virtual unix – n n – – virtual
    lmtp unix – – n – – lmtp
    anvil unix – – n – 1 anvil
    #localhost:10025 inet n - n - - smtpd -o
    content_filter=
    #^^die hab ich auskommentiert
    scache unix - - n - 1 scache

    maildrop unix – n n – – pipe
    flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
    cyrus unix - n n - - pipe
    user=cyrus argv=/usr/lib/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
    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=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
    procmail unix – n n – – pipe
    flags=R user=nobody argv=/usr/bin/procmail -t -m /etc/procmailrc ${sender} ${recipient}

    smtp unix – - n – 2 smtp
    #-o smtp_data_done_timeout=1200
    #-o disable_dns_lookups=yes
    #^^die beiden hab ich dann auch mal auskommentiert
    localhost:10025 inet n – n – - smtpd
    -o content_filter=dfilt:
    -o local_recipient_maps=
    -o relay_recipient_maps=
    -o smtpd_restriction_classes=
    -o smtpd_client_restrictions=
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o mynetworks=127.0.0.0/8
    -o strict_rfc821_envelopes=yes
    -o smtpd_error_sleep_time=0
    -o smtpd_soft_error_limit=1001
    -o smtpd_hard_error_limit=1000
    dfilt unix - n n - - pipe
    flags=Rq user=filter argv=/etc/postfix/disclaimer/filter -f ${sender} — ${recipient}

  22. Mathias:

    Ach ja….

    ……
    74 smtp unix – - n – 2 smtp
    75 #-o smtp_data_done_timeout=1200
    76 #-o disable_dns_lookups=yes
    77 #^^die beiden hab ich dann auch mal auskommentiert
    78 localhost:10025 inet n – n – - smtpd
    79 -o content_filter=dfilt:
    ……

  23. Mathias:

    dieses Problem hab ich gelöst,^^ allerdings macht er irgendwie nix die mails werden nicht mit einem Disclaimer versehen

    localhost:10025 inet n – n – - smtpd
    -o content_filter=dfilt:
    wenn ichs so lasse^^ bekomme ich den Fehler: Mar 2 02:56:44 haupthaus postfix/master[5943]: fatal: bind 127.0.0.1 port 10025: Address already in use

    ich dachte mir ich nehm einfach den nächsten port also 10026 aber wie gesagt macht er nix

    diese Konfigurationsdatei hab ich erstellt
    da steht nur nix drin
    wäre über Hilfe dankbar.
    MFG Mathias

  24. Stephan:

    Hi,
    hat noch jemand Probleme mit Umlauten in der Mail?
    Sobald ein Umlaut in der Email ist, wird die HTML-Signatur unschön.
    Ser gut zu sehen in der T-Online Weboberfläche. Es tauchen “=” auf.

    Wenn ich darauf achte keine Umlaute in die Mail zu schreiben funktioniert es sehr gut?
    Jemand eine Idee?

    Ansonsten keine Probleme mit Umlaute.
    System: Debian Sarge mit UTF-8.

    MFG
    Stephan

  25. Rene:

    Ich habe riesige Probleme!
    Das Tool funktioniert zwar grundsätzlich ABER:

    1.
    Wenn eine E-Mail UTF8 codiert wird (das passiert im Outlook sobald man ein Eurozeichen in die E-Mail einträgt), hängt das Tool den Disclaimer nicht dran.

    2.
    Noch viel schlimmer kommts wenn die E-Mail ISO codiert ist: Sobald eine E-Mail einen Punkt “.” auf einer ansonsten leeren Zeile stehen hat, schneidet das Tool die komplette E-Mail ab dort ab.

    Hat jemand ähnliche Erfahrungen gemacht, oder sogar eine Lösung?

    Rene

  26. Stefan:

    Wenn Ihr keine Umlaute in den Disclaimer schreibt (ist doof, ich weiß), sollte es funktionieren, denn in diesem Fall ändert altermime nicht die Kodierung der Original-Mail.

    Das mit dem Abschneiden der Mail nach der Zeile mit dem Punkt liegt daran, dass für SMTP der DATA-Bereich und damit der eigentliche Mailtext zu Ende ist (siehe beispielsweise den untersten Code-Abschnitt in diesem Artikel: SMTP-Auth mit telnet testen).

    Da fällt mir jetzt ad hoc auch keine Abhilfe ein :(

  27. Heiko:

    Hallo!

    Ich habe das Script auch bei uns laufen.
    Jetzt ist natürlich nur die Frage wie man es “abschalten” kann dass auch alle internen EMails den Dissclaimer kommen.
    Ich hatte folgendes ausprobiert.

    # Domain aus uebergebener Absenderadresse filtern:
    DOMAINFROM=${2##*@}

    # Domain aus uebergebener Empfaengeradresse filtern:
    DOMAINTO=${4##*@}
    #

    if [ $DOMAINFROM == $SENDER_DOMAIN -a $DOMAINTO != $SENDER_DOMAIN ]; then
    $ALTERMIME –input=in.$$ \
    –disclaimer=/etc/postfix/disclaimer/disclaimer.txt \
    –disclaimer-html=/etc/postfix/disclaimer/disclaimer.html \
    –xheader=”Organisation: TDDK GmbH” || \
    { echo Message content rejected; exit $EX_UNAVAILABLE; }
    else
    $ALTERMIME –input=in.$$ \
    –xheader=”x-Information: Processed by Altermime” || \
    { echo Message content rejected; exit $EX_UNAVAILABLE; }
    fi

    Aber wenn ich jetzt eine Mail an mehrere Adressen sende und die erste Empfängeradresse eine interne und die zweite eine externen Adresse, dann wird natürlich kein Disclaimer angehangen.

    Hat jemand von euch villeicht eine Idee wie ich den Disclaimer an interne Adressen vermeide?????

  28. Joerg Peter:

    Hallo,

    habe es jetzt nach viel Gehirnschmalz auch bei mir laufen. Bei mir musste ich die Änderungen wie Heiko vom 7.03. geschrieben hat auch durchführen. Wird eine Mail an mehrere eMail Adresse gesendet (externe und interne gemischt), so wird bei mir der Disclaimer angehängt, das stört mich nicht weiter. Aber …

    kann man das Problem mit der Leerzeile mit einem PUNKT in Griff bekommen?

    Schicke ich eine Mail weg und füge noch eine Zeile mit dem Inhalt “.” ein, so wird die Mail ab dort abgebrochen. Vielleicht hat jemand einen Tipp dazu.

    Viele Grüße
    Jörg Peter

  29. Juergen:

    Hallo,
    bei mir landen die Mails leider in einer Schleife, was Postfix mit “too many hops” quitiert. Ich nutze ebenfalls Amavis. Ändert sich denn die Zeile in der main.cf “content_filter = smtp-amavis:[127.0.0.1]:10024″? Ansonsten hab ich alles genau wie oben beschrieben, aber die Schleife bleibt. :-(

  30. Heiko:

    Hallo Joerg Peter,

    ich habe ein Lösung gefunden wie ich alle Empfänger-Domains ein einer Schleife auslese und dann vergleiche.
    Damit wird der Disclaimer angehangen, wenn eine externe Adresse enthalten ist.
    Leider klappt das nur bis 6 Empfäger richtig, schicke ich eine Mail an beispielsweise 7 Empfänger die alle eine interne Adresse haben wird der Disclaimer trotzdem drangehangen.
    Das hat irgendetwas mit insgesamt 10 Übergabeparametern zu tun.
    Jetzt bastel ich gerade an einer Version in der ich einfach eine Funktion aufrufe, an die alle Parameter übergeben werden und mit switch die Parameter ab der ersten Empfäger-Adresse immer ermittelt werden, wenn dann eine externe Adresse dabei ist, wird die Funktion mit return 1 beendet.
    Den Return Wert will ich nun Prüfen und wenn er 1 ist soll der Disclaimer angehangen werden.
    Das klappt aber nicht ganz….
    Kann mir jemand helfen?
    Ich stelle das Script morgen hier rein…

  31. Heiko:

    AN Joerg Peter nochmal!

    Das Problem mit dem “.” wirst du nciht wegbekommen.
    Das ist das Syntax von SMTP.
    Du kannst einfach mal spaßeshalber eine EMail mit deinem Mail Programm schreiben.
    Text:
    “Hallo das ist
    .
    ein Test”

    Du wirst sehen das selbst da nur das “Hallo das ist” ankommt.

    MfG

    Heiko

  32. Heiko:

    Habe es nun hinbekommen!

    Ich übergebe einfach alle Übergabeparameter an eine Funktion.
    In der Funktion gehe ich dann alle Empfänger mit Switch durch.
    Sobald ein externer ermittelt wird, wird die Funktion beendet und ein Rückgabe Wert festgelegt.
    Mit hilfe dessen ich dann einen Disclaimer anhänge oder nciht.

    Hier das vollständige Script:

    #!/bin/bash
    #
    # Deklarieren der Work Folder
    INSPECT_DIR=/var/spool/filter
    SENDMAIL=/usr/sbin/sendmail
    ALTERMIME=/usr/bin/altermime
    #
    # Deklarieren der SENDER-Domain
    SENDER_DOMAIN=test.de
    #
    # Fehlercodes:
    EX_TEMPFAIL=75
    EX_UNAVAILABLE=69
    #
    # Aufraeumen nicht vergessen:
    trap “rm -f in.$$” 0 1 2 3 15

    #
    # Uebergebe Sender Adresse ermitteln
    SENDER=${2}

    # Domain aus uebergebener Absenderadresse filtern:
    DOMAINFROM=${2##*@}

    function checkrecipients {
    shift 3
    PARAM=$#
    for (( I=1; $I in.$$ || { echo Kann eMail nicht speichern; exit $EX_TEMPFAIL; }

    #Wenn Rueckgabewertes = 10 dann wird der Disclaimer angehangen
    if [ $Wert == 10 ]; then
    $ALTERMIME –input=in.$$ \
    –disclaimer=/etc/postfix/disclaimer/disclaimer.txt \
    –disclaimer-html=/etc/postfix/disclaimer/disclaimer.html \
    –xheader=”ORGANISATION: Test” || \
    { echo Message content rejected; exit $EX_UNAVAILABLE; }
    fi

    fi

    # Weitersenden der Email
    $SENDMAIL “$@”

  33. Heiko:

    Hier das Script, das obere ist leider unvollständig!


    #!/bin/bash
    #
    # Deklarieren der Work Folder
    INSPECT_DIR=/var/spool/filter
    SENDMAIL=/usr/sbin/sendmail
    ALTERMIME=/usr/bin/altermime
    #
    # Deklarieren der SENDER-Domain
    SENDER_DOMAIN=test.de
    #
    # Fehlercodes:
    EX_TEMPFAIL=75
    EX_UNAVAILABLE=69
    #
    # Aufraeumen nicht vergessen:
    trap “rm -f in.$$” 0 1 2 3 15

    # Domain aus uebergebener Absenderadresse filtern:
    DOMAINFROM=${2##*@}

    function checkrecipients {
    shift 3
    PARAM=$#
    for (( I=1; $I in.$$ || { echo Kann eMail nicht speichern; exit $EX_TEMPFAIL; }

    #Wenn Rueckgabewertes = 10 dann wird der Disclaimer angehangen
    if [ $Wert == 10 ]; then
    $ALTERMIME –input=in.$$ \
    –disclaimer=/etc/postfix/disclaimer/disclaimer.txt \
    –disclaimer-html=/etc/postfix/disclaimer/disclaimer.html \
    –xheader=”ORGANISATION: Test GmbH” || \
    { echo Message content rejected; exit $EX_UNAVAILABLE; }
    fi

    fi

    # Weitersenden der Email
    $SENDMAIL “$@”

  34. Marc:

    Problem mit dem Punkt auf einer einzelnen Zeile lösen:
    aus
    SENDMAIL=/usr/sbin/sendmail
    wird
    SENDMAIL=”/usr/sbin/sendmail -i”

  35. Patrick:

    @Marc Vieelen lieben Dank für den Hinweis, das hat mir mein Ostern gerettet :-D Wünsche allen frohe Feiertage!

  36. Steffen:

    Hallo erstmal

    eine wirklich sehr gute Anleitung zur Konfiguration mit Postfix.
    Auch bei uns läuft es fast reibungslos, nur HTML-E-Mails aus Outlook erhalten den Disclaimer fehlerhaft. Der Disclaimer enthält dann Leerzeichen an Stellen wo keine waren und Gleichheitszeichen. Ich habe schon jede erdenkliche Codierung getestet, immer das gleiche ergebnis.
    Mails, die per Thunderbird versandt worden sind, funktionieren dagegen perfekt.
    Ich hoffe jemand kann mir helfen

  37. Andreas W.:

    Naja erstelleinen disclaimer.txt und einen disclaimer.html
    im Script noch anpassen und fertig

  38. Steffen:

    das hab ich gemacht. wie gesagt, wenn ich mit dem Thunderbird sowohl html-e-mails als auch plaintext versende erscheint der disclaimer überall tadellos. nur aus outlook heraus gibts probleme.

  39. Andreas W.:

    Bei mir klappts mit 200 clients (Outlook 2000)

    Nur, wenn man die Absenderdomain nicht ausnimmt werden Besprechungsanfragen verrissen… die Erkennt er nicht mehr als Anfragen.

  40. Michael B.:

    also ich benutze die version 0.3.3
    bei dieser funktionieren die disclaimer einwandfrei
    sowohl plain text / html und auch mit anhängen.
    bei den anderen versionen danach funktioniert entweder der disclaimer nicht vernünftig oder er wird nicht angehangen.

  41. Stefan:

    @Andreas W.: In der aktuellen Development-Version sollte altermime Besprechungsanfragen richtig verarbeiten:

    07 Mar 2007:
    -PLD:DEV:
    Added text/calendar detection, this allows us to implicitly
    avoid adding disclaimers into these bodies by virtue of the
    fact that alterMIME won’t detect it as a “plain or HTML”
    text body.

  42. Andreas W.:

    Ja “sollte” – Leider tut es das nicht. An den Einladungen hängt trotzdem die Signatur.
    Habe vorhin extra nochmal den aktuelle Source (DEV) gezogen:

    alterMIME v0.3.8 (Jan-24-2007)

    Einstellungen in Outlook “alle Einladungen im iCal Format senden”

  43. Andreas W.:

    calendar=$(cat in.$$ | grep -o text/calendar)

    if [ "$DOMAIN" == "$SENDER_DOMAIN" ] && [ "$calendar" != "text/calendar" ] ; then

    $ALTERMIME –input=in.$$ \
    –disclaimer=/etc/postfix/disclaimer/disclaimer.txt \
    –disclaimer-html=/etc/postfix/disclaimer/disclaimer.html \
    –xheader=”ORGANISATION: Test GmbH” || \
    { echo Message content rejected; exit $EX_UNAVAILABLE; }
    fi

    So gehts auch….

  44. Stefan:

    Eine super Idee :)

    so bekommt man evtl. auch das Problem in den Griff, dass die Signierung von Mails zerstört wird (siehe ersten Kommentar von Thinker):

    bSigniert=$(cat in.$$ | grep -c application/pgp-signature)
    if [ $bSigniert -gt 0 ]; then

    Ist noch nicht getestet, unterläuft dann auch den eigentlichen Zweck des Disclaimers, sofern geschäftliche Mails signiert werden. Aber wer seine Mails sowieso schon signiert, sollte auch dazu zu bewegen sein, die Handelsregisterangaben des Unternehmens in seine Text-Signatur mit aufzunehmen…

  45. Andreas W.:

    Naja, ist momentan ein Workaround. Ich habe erst den sauberen Weg getestet und mit dem Entwickler gesprochen. Er vermutet durch den Sprachunterschied ein Problem – konnte ich im Sourcecode nicht nachvollziehen. Hab ein Debug-Log erstellt und gemailt.

    Der Nachteil dieser Lösung ist, dass nicht ein Header geprüft wird – sonder nach dem Text gesucht. Dann kann ein Mitarbeiter der das mitbekommt einfach application/pgp-signature oder text/calendar in die Mail tippen und die Pflichtsignatur ist weg.

    Wenn ich ne Info habe, melde ich mich auf jeden Fall wieder

  46. Jakob Curdes:

    Hallo,

    eigentlich habe ich gedacht, das klappt alles wunderbar bei meiner Installation :-) ) . Im Prinzip stimmt das auch. Ich habe den ganz einfachen Fall einer Postfix konfiguration durch die nur ausgehende Mails laufen und an alle soll der disclaimer angehängt werden. Das klappt eigentlich auch hervorragend, nur mit “Text-Mails” habe ich ein Problem. Der interne Mailer mach leider aus einer Text-Mail eine MIME-Mail mit ungültiger MIME-Struktur, d.h. er packt oben einen mime-part dran, dann kommt der beginn eines weiteren mime-parts, dann der originaltext und dann ist Ende, wie bei einer ASCII-Mail – also kein schliessendes boundary.

    Konsequenterweise weigert sich altermime, den footer anzufügen; ich habe schon den code angeschaut aber noch nicht gefunden, wie ich ihn so manipulieren könnte, dass er auch in diesen Fällen einen footer anfügt. Das ist im Prinzip natürlich gefährlich, aber in diesem Fall ist die Umgebung total kontrolliert und es kommen nur HTML-Mails (die sowieso korrekt verarbeitet werden) vor und eben diese pseudeo-text-mails, die immer die gleiche Struktur haben. Hat jemand eine Idee ?

    Grüße,
    Jakob Curdes

  47. Torsten:

    Es fehlt eine Prüfung auf

    application/pkcs7-mime
    application/x-pkcs7-signature

    damit smime signierte und/oder verschlüsselte Mails diesem Verfahren nicht unterzogen werden (würde dem Sinn von Singnierung ja zuwieder laufen).

    Gruß

  48. Evgenij:

    Wie kann man einfügen von disklaimer bei weiterleitung abschalten?
    Danke!

  49. Stefan:

    @Evgenij: Da fällt mir auf die Schnelle leider keine zufriedenstellende Lösung zu ein. Denn eine Weiterleitung lässt sich leider nicht einfach über eine Headerzeile in der Mail erkennen, und eine Durchforstung des eMail-Betreffs auf “Fwd”, “WG”, … wäre auch nicht wirklich zuverlässig.

    Zum Umlaut-Problem: Ich hatte das Problem jetzt kürzlich auch auf einem Mailserver.

    Gelöst hat sich das Ganze durch Zufall, beim letzten Update von Spamassassin. Hier mein Glücksgriff.

  50. Seb:

    Ich hab das jetzt genau so gemacht wie angegeben. Die Text wird allerdings nicht angehängt, logfile wird keines erstellt und in /var/log/mail.log wird nichts vom Filter aufgeführt.

    Ich fahre Debian Sarge und hab das ganze mit altermime-0.3.8 und 0.3.3 probiert.

  51. Seb:

    Ich habe jetzt bemerkt dass das script gar nicht aufgerufen wird. Also muss es an der master.cf liegen, was ist falsch?
    http://seb-com.de/master.cf

  52. Stefan:

    Du hast in Deiner master.cf amavis nicht aufgerufen (wie bei uns mit: content_filter=smtp-amavis:[127.0.0.1]:10024 beim SMTP-Service) , wartest aber dann auf Port 10025 auf die von dort zurückgegebenen, gefilterten Mails. Erst dann rufst Du als Content-Filter “dfilt” auf.

    Wenn Du amavis nicht einsetzt, erweitere die Zeile für SMTP um den Content-Filter dfilt:

    smtp      inet  n       -       n       -       -       smtpd
       -o content_filter=dfilt:
  53. Seb:

    Mh, ok das leuchtet mir jetzt ein. Vielen Dank!
    Und funktionieren tut es jetzt auch noch, oh man ist das schön :D

  54. Seb:

    Eine Frage noch, wie kann ich den Text nur für eine bestimmte Mail-Adresse zuschneiden?

  55. Stefan:

    Du kannst einfach das Filter-Script entsprechend anpassen, etwa in der Art:

    # Domain aus uebergebener Absenderadresse filtern:
    ABSENDER=$2
    #
    case "$ABSENDER" in
       foo@bar.de)
          FILEDISCLAIMER=disclaimer_foo
          ;;
       foobar@foobar.de)
          FILEDISCLAIMER=disclaimer_foobar
          ;;
       *)
          FILEDISCLAIMER=disclaimer
          ;;
    esac
    #
    # und (fast) weiter wie bisher
    #
    if [ "$DOMAIN" == "$SENDER_DOMAIN" ]; then
       $ALTERMIME --input=in.$$ \
          --disclaimer=/etc/postfix/disclaimer/$(FILEDISCLAIMER).txt \
          --disclaimer-html=/etc/postfix/disclaimer/$(FILEDISCLAIMER).txt \
          --xheader="X-Copyrighted-Material: $COPYRIGHT_HEADER" || \
          { echo Message content rejected; exit $EX_UNAVAILABLE; }
    
    [...]
    

    Jetzt musst Du nur noch fuer die einzelnen Absender entsprechende Dateien unter /etc/postfix/disclaimer anlegen.

    Gruß
    Stefan

  56. sabi stephan:

    wg Leerzeichen / Zeilenumbrüche in Signatur (bei html-Format) Mal im source der versandten Mail gekuckt: nach x Zeichen (ich glaub 72) kommt zwangsweise ein Umbruch, egal ob vorher ein linebreak war. Der Umbruch wird im Source sichtbar: da steht dann ein Leerzeichen gefolgt von einem =. Das = wird nicht ausgegeben, aber das Leerzeichen schon. Das macht natürlich im HTML ein Leerzeichen, wo garkeins hingehört, z.B. mitten im Wort. Wie gesagt: ich hab mir den Quelltext der empfangenen html-Mails mal angesehen und bin zu folgender Lösung gekommen:
    Diese zwei Zeilen werden wie 1 Zeile gelesen: (sozusgen kein html-break drin, und zeilenumbruch wird dann ignoriert)
    blablabla blablabla
    2. zeile blablabla irgendein text

    Also habe ich einfach die Zeilen mit Leerzeichen aufgefüllt (bissl experimentiert, ob 72 Zeichen pro Zeile oder 76 oder was auch immer):
    blablabla 1. zeile……………
    2.zeile………………………………………………………..
    usw……………………………………………….

    Dann sieht alles sauber aus beim Empfänger.

    hth

  57. falcon5:

    Vielen Dank für den Howto.
    Ich möchte mal wissen ob es auch möglich ist um ein Disclaimer im MySQL zu setzen.

  58. Stefan:

    Da Altermime als Parameter nur den Pfad auf eine Datei, die den Disclaimer-Text enthält entgegennimmt, nicht aber den Text selbst, hast Du leider keine einfache Möglichkeit, die gewünschten Daten über eine Datenbankabfrage zu ermitteln.

    Die einzige Möglichkeit, z.B. je nach Absendeadresse unterschiedliche Fußtexte an die ausgehenen eMails zu hängen ist, für jeden Disclaimer eine eigene Datei anzulegen, und diese im Shellscript je nach Absender ($2) über ein if-Konstrukt zuzuweisen (siehe meinen Kommentar vom 2.8.2007).

  59. maddin:

    Hi Leute!

    Ich hab ein Problem und zwar kommen die E-Mails nicht an, laut log werden sie einwandfrei gefiltert, aber sie werden nach dem filtern anscheinend nicht mehr weitergeleteitet oder gesendet, hier der log-Eintrag:

    Jan 5 19:02:57 debian-test2 postfix/pipe[11117]: 64799C7BC9: to=, relay=dfilt, delay=0.13, delays=0.07/0.02/0/0.04, dsn=2.0.0, status=send (delivered via dfilt service)

    Kann sich das jemand erklären?

    Viele Grüße,
    Martin

  60. Stefan:

    Hi Martin,

    zwei Dinge sind komisch an Deinem Log-Eintrag:
    - Hinter “to=” sollte die Empfänger-Mail-Adresse folgen
    - statt “send” sollte “sent” in der Zeile stehen

    Ich vermute einen Fehler in der master.cf oder falsche Zugriffsrechte auf Dein Filter-Script.

    Wobei mir Zweiteres weniger wahrscheinlich erscheint, da in diesem Fall zumindest die eMail-Adresse nach dem “to=” auftauchen sollte.

  61. Stefan R:

    Hey,

    habe das Howto durchgearbeitet und auch die Komentare beachtet, aber bei mir will es nicht laufen,

    ich bekomme keine fehlermeldungen in der log, die email kommt beim empfänger an aber ohne disclaimer

  62. Stefan:

    @Stefan R

    Hast Du die master.cf überprüft (siehe ein paar Kommentare weiter oben)? Außerdem musst Du sicherstellen, dass altermime ausführbar ist und auch auf den Disclaimer-Text zugreifen kann.

  63. Stefan R:

    @Stefan

    danke für die Antwort.

    die master.cf hab ich geprüft

    inhalt:

    #
    # DO NOT SHARE THE POSTFIX QUEUE BETWEEN MULTIPLE POSTFIX INSTANCES.
    #
    # ==========================================================================
    # service type private unpriv chroot wakeup maxproc command + args
    # (yes) (yes) (yes) (never) (100)
    # ==========================================================================
    smtp inet n – n – – smtpd
    -o content_filter=dfilt:
    #628 inet n – n – – qmqpd
    pickup fifo n – n 60 1 pickup
    cleanup unix n – n – 0 cleanup
    qmgr fifo n – n 300 1 qmgr
    #qmgr fifo n – n 300 1 nqmgr
    rewrite unix – – n – – trivial-rewrite
    bounce unix – – n – 0 bounce
    defer unix – – n – 0 bounce
    flush unix n – n 1000? 0 flush
    proxymap unix – – n – – proxymap
    smtp unix – – n – – smtp
    relay unix – – n – – smtp
    -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
    showq unix n – n – – showq
    error unix – – n – – error
    local unix – n n – – local
    virtual unix – n n – – virtual
    lmtp unix – – n – – lmtp
    #
    # Interfaces to non-Postfix software. Be sure to examine the manual
    # pages of the non-Postfix software to find out what options it wants.
    #
    # maildrop. See the Postfix MAILDROP_README file for details.
    #
    maildrop unix – n n – – pipe
    flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
    #
    # The Cyrus deliver program has changed incompatibly, multiple times.
    #
    # old-cyrus unix – n n – – pipe
    flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}

    procmail unix – n n – – pipe
    flags=R user=nobody argv=/usr/bin/procmail -t -m /etc/procmailrc $(sender) $(recipient)

    dfilt unix – n n – – pipe
    flags=Rq user=filter argv=/etc/postfix/disclaimer/filter -f ${sender} — ${recipient}

    altermime kann ich ausführen und bekomm die befehlsliste.

  64. Stefan R:

    ok mittlerweile geht nen teil.
    nun bekomm ich den fehler, wenn ich ne mail verschicke:

    (expanded from ): bad address syntax

    also ich bekomm dann vom postfix ne email zurück


    If you do so, please include this problem report. You can delete your own text from the attached returned message.

    The mail system

    (expanded from ): bad address syntax

  65. Stefan R:

    ich hab mein Problem gefunden!

    Amavis gibt die email an Altermime, altermime wieder zu amavis!
    danach bekomm ich

    to many hops …

    ich verzweifle noch.

    sorry für die vielen komentare ;/ aber google ist nicht sehr hilfreich gerade

  66. Stefan:

    Wie rufst Du denn amavis auf? In der von Dir geposteten master.cf steht nichts davon.

  67. Joerg Peter:

    Hallo,
    ich habe jetzt auf Version 3.10 upgedatet, weil ich ein Problem hatte und dachte ich könnte es mit dem Update lösen. Okay, ging nicht. Und zwar werden manche eMail Anlagen einfach gelöscht. Und zwar wird der Filter auch aufgerufen bei Mails die ich empfange. Und bei denen wird dann kein Disclaimer angehängt, aber die Anlagen werden nicht “durchgereicht”. Außerdem habe ich dann versucht das >>/tmp/altermime.log zu füllen, was aber immer leer ist. Daher ist meine Fehlersuche nur sehr eingeschränkt möglich. Hier mein Codesnip

    if [ $DOMAIN == $SENDER_DOMAIN1 -o $DOMAIN == $SENDER_DOMAIN2 -o $DOMAIN == $SENDER_DOMAIN3 ]; then
    echo $ALTERMIME –input=in.$$ \
    –debug –verbose \
    –xheader=”X-Copyrighted-Material: $COPYRIGHT_HEADER” || \
    { echo Message content rejected; exit $EX_UNAVAILABLE; }
    else

    Wie bzw. wo muß ich dieses >> /tmp/altermime.log eintragen damit alles reingeschrieben wird *grübel*. Gibt es eine Möglichkeit zu sagen “so wie sie ist weiterleiten”?

    Cu
    Jörg Peter

  68. Stefan:

    Hallo Jörg Peter,

    klar, das Script wird für alle Mails aufgerufen, deswegen ja auch die Abfrage der $DOMAIN in dem Script selbst, um altermime nur für ausgehende Nachrichten aufzurufen.

    Das “>> /tmp/altermime.log” gehört an das Ende der Zeile “$ALTERMIME –input …”, wobei in Deinem Post noch ein Fehler im Script ist.

    Das “echo” vor “$ALTERMIME” muss weg.

    Das Problem, dass Anlagen von Mails unterschlagen werden, habe ich nicht. Was ich mir vorstellen kann, ist dass im E-Mail-Text in einer Zeile nur ein Punkt steht, was normalerweise das Ende der Mail anzeigt.

    Im Kommentar von Marc vom 5.April 2007 gibt’s eine Lösung hierzu.

    Gruß
    Stefan

Eine Antwort eintragen

*benötigt

*benötigt / nicht sichtbar

Kalender
Februar 2007
M D M D F S S
 1234
567891011
12131415161718
19202122232425
262728EC
Ereignisse
    • Keine Termine.
Kategorien
Archiv
Wichtiges!?

.