Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:postfix_echo-mailer-script_installieren

Postfix Echo-Mailer-Script installieren

Ein „Echo-Mailer“ ist die Möglichkeit eine e-Mail an eine bestimmte e-Mail-Adresse zu senden, und die eigene gesendete e-Mail, inklusive Header-Zeilen in einer sogenannten „Antwort-e-Mail“ - zurück zu erhalten.

Mit einem „Echo-Mailer“, kann so z.B. die Funktionalität eines Mailservers getestet werden, oder auch die Funktionalität und Qualität einer e-Mail selbst überprüft und verbessert werden.

Voraussetzungen

Für die Realisierung eines „Echo-Mailers“ sind nachfolgende wenige Voraussetzungen notwendig:

Skript: mailecho

Nachfolgendes Skript, welches ursprünglich von Ralf Hildebrandt entwickelt wurde, stellt die eigentliche Funktionalität und das Kernstück dar, um einen „Echo-Mailer“ zu realisieren.

Nachfolgend der Inhalt des Skriptes:

#!/bin/bash
 
##############################################################################
# Script-Name : mailecho.sh                                                  #
# Description : Script to realise a mailecho server.                         #
#                                                                            #
#                                                                            #
#                                                                            #
#                                                                            #
# Last update : 25.08.2015                                                   #
# Version     : 1.10                                                         #
#                                                                            #
# Author      : Klaus Tachtler, <klaus@tachtler.net>                         #
# DokuWiki    : http://www.dokuwiki.tachtler.net                             #
# Homepage    : http://www.tachtler.net                                      #
#                                                                            #
# Base script : mailecho                                                     #
# created by  : Ralf Hildebrandt, <Ralf.Hildebrandt@computerbeschimpfung.de> #
# Homepage    : http://www.arschkrebs.de/                                    #
#                                                                            #
#  +----------------------------------------------------------------------+  #
#  | This program is free software; you can redistribute it and/or modify |  #
#  | it under the terms of the GNU General Public License as published by |  #
#  | the Free Software Foundation; either version 2 of the License, or    |  #
#  | (at your option) any later version.                                  |  #
#  +----------------------------------------------------------------------+  #
#                                                                            #
# Copyright (c) 2013 by Klaus Tachtler.                                      #
#                                                                            #
##############################################################################
 
##############################################################################
#                                H I S T O R Y                               #
##############################################################################
# Version     : 1.10 - 25.08.2015                                            #
# Description : Add header line to mail(x), because for example, when German #
#               "Umlaute" are inside the e-mail, mail(x) will generate a     #
#               application/octet-stream as content_type. To prevent mail(x) #
#               from doing that, add a view parameter for charset options    #
#               and some encoding parameter to the mail(x) call.             #
# -------------------------------------------------------------------------- #
# Version     : 1.00 - 17.07.2013                                            #
# Description : Created the script to realise a mailecho server.             #
# -------------------------------------------------------------------------- #
# Version     : x.xx                                                         #
# Description : <Description>                                                #
# -------------------------------------------------------------------------- #
##############################################################################
 
##############################################################################
# >>> Normaly there is no need to change anything below this comment line. ! #
##############################################################################
 
# Variables.
MKTEMP_COMMAND=`command -v mktemp`
RM_COMMAND=`command -v rm`
CAT_COMMAND=`command -v cat`
SED_COMMAND=`command -v sed`
HEAD_COMMAND=`command -v head`
LOGGER_COMMAND=`command -v logger`
MAIL_COMMAND=`command -v mailx`
 
# Files.
FILE_IN=`$MKTEMP_COMMAND`
FILE_OUT=`$MKTEMP_COMMAND`
 
#
# Main.
#
 
# Clear temp files.
$RM_COMMAND -f $FILE_IN $FILE_OUT
 
# Incoming data.
$CAT_COMMAND > $FILE_IN
 
# Get and format data.
# Tachtler - In /etc/postfix/master.cf --> pipe MUST have argv=... ${sender}
SENDER=$1
# Tachtler - Use only if /etc/postfix/master.cf --> pipe does NOT support ${sender}
# SENDER=`egrep "^From: " $FILE_IN | $HEAD_COMMAND -1 | $SED_COMMAND "s,^From: ,,"`
SUBJECT=`egrep "^Subject: " $FILE_IN | $HEAD_COMMAND -1 | $SED_COMMAND "s,^Subject: ,,"`
 
# Check spam status.
egrep "X-Spam-Status: Yes" $FILE_IN
HAM=$?
 
# Check if sender is empty or if it is spam.
if [ "$SENDER" = "" ]
then
     # Tachtler - Logging
     # $LOGGER_COMMAND -t echo -i -p daemon.info "< From=<>, ignored."
     $RM_COMMAND $FILE_IN
     exit 0
else
     # Tachtler - Logging
     # $LOGGER_COMMAND -t echo -i -p daemon.info "< From=<$SENDER>"
     if [ "$HAM" = "0" ]
     then
         # Tachtler - Logging
         # $LOGGER_COMMAND -t echo -i -p daemon.info "< SPAM, ignored."
         $RM_COMMAND $FILE_IN
         exit 0
     fi
fi
 
# Generate answer email.
echo "From: mx1.tachtler.net Echo <echo@tachtler.net>" > $FILE_OUT
echo "Subject: Re: $SUBJECT" >> $FILE_OUT
echo "To: $SENDER" >> $FILE_OUT
echo "Content-Type: text/html" >> $FILE_OUT
echo >> $FILE_OUT
$CAT_COMMAND <<EOT >> $FILE_OUT
Now, you have successfully reached: 
               ___       __      ___       ___  __         ___ ___
   |\/| \_/ /|  |   /\  /   |__|  |  |    |__  |__)  |\ | |__   |  
   |  | / \  |. |  /~~\ \__ |  |  |  |___ |___ |  \ .| \| |___  |
 
In case of problems please contact: postmaster@tachtler.net
 
------ This is a copy of your message, including all the headers ------
 
EOT
 
$SED_COMMAND 's/^/> /' $FILE_IN >> $FILE_OUT
$CAT_COMMAND <<EOT >> $FILE_OUT
 
------------------- End of the copy of your message -------------------
 
  Automagically brought (back) to you by mx1.tachtler.net Echo Mailer
EOT
 
# Tachtler - Only if mail(x) is not available
# /usr/sbin/sendmail -i -t -f "" < $FILE_OUT 
$MAIL_COMMAND -i -t -S ttycharset=UTF-8 -S sendcharsets=UTF-8 -S encoding=8bit < $FILE_OUT
# Tachtler - Logging
# $LOGGER_COMMAND -t echo -i -p daemon.info ">   to=<$SENDER>"
$RM_COMMAND -f $FILE_IN $FILE_OUT
exit 0

Das Skript kann nun unter nachfolgendem Verzeichnis im Dateisystem abgelegt werden:

  • /usr/lib/mailecho.sh

Mit nachfolgendem Befehl, sollte das Skript ausführbar gemacht werden:

# chmod 755 /usr/lib/mailecho.sh

Postfix: Konfiguration

Damit eine eingehende e-Mail angenommen wird und diese auch an den Absender zurückgesendet wird, sind nachfolgende Konfigurationen im MTA - Postfix - notwendig.

Postfix: transport

Nachfolgende Ergänzung in der der Konfigurationsdatei von Postfix ist notwendig, um die eingehende e-Mail anzunehmen und an das Skript weiterzureichen.

  • /etc/postfix/transport
echo@tachtler.net	echo:

:!: WICHITG - Anschließend ist die Konfigurationsdatei mit nachfolgendem Befehl noch in das entsprechende Format umzuwandeln!

Das Umwandeln in das, hier verwendete btree-Format, kann mit nachfolgendem Befehl durchgeführt werden:

# postmap btree:/etc/postfix/transport

Um zu überprüfen, ob die Umwandlung erfolgreich durchgeführt wurde, kann nachfolgender Befehl ausgeführt werden, welcher in etwa nachfolgende Anzeige hervorbringen sollte:

# ll /etc/postfix/transport*
-rw-r--r-- 1 root root   24 Jul 17 14:28 /etc/postfix/transport
-rw-r--r-- 1 root root 8192 Jul 17 14:35 /etc/postfix/transport.db

Postfix: main.cf

Nachfolgende Ergänzung in der der Konfigurationsdatei von Postfix ist notwendig, um die Konfigurationsdatei

  • /etc/postfix/transport

überhaupt zu verwenden.

Überprüfen Sie bitte, ob nachfolgende Zeile in der Konfigurationsdatei

  • /etc/postfix/main.cf

enthalten ist. Evtl. ist ein anderes Format als das btree-Format angegeben, oder die Angabe des Formats fehlt, wobei dann das Format hash verwendet wird (Nur relevanter Ausschnitt):

...
transport_maps = btree:/etc/postfix/transport
...

Zusätzlich sollte noch nachfolgende Zeile in die Konfigurationsdatei ebenfalls mit aufgenommen werden:

...
echo_destination_recipient_limit = 1
...

Die Zeile bewirkt, dass nicht ungewollt viele parallele e-Mail-Anfragen an den „Echo-Mailer“ von dem selben Absender eingeliefert werden können, sondern eben nur eine, pro Zeiteinheit.

Siehe auch hierzu den externen Link Postfix.org - postconf(5)

Postfix: master.cf

Nachfolgende Ergänzung in der Konfigurationsdatei von Postfix ist notwendig, um den Transport der eingegangenen e-Mail an das Skript durch Postfix zu gewährleisten:

# Tachtler
echo      unix  -       n       n       -       1       pipe
  flags=DRhu user=nobody argv=/usr/lib/mailecho.sh ${sender}

:!: HINWEIS - Um nicht mit gefälschten From: <…> Adressen als „Relay“ benutzt werden zu können, sollte auf jeden Fall

argv=... ${sender}

mit dem Programm pipe (wie oben dargestellt) genutzt werden.

:!: WICHTIG - Dies hat den Hintergrund, dass der Absender aus dem ENVELOP ermittelt wird, und nicht aus dem From: <…> aus der e-Mail heraus gefiltert werden muss.

Auszug aus der man-Page von pipe(8), siehe auch den externen Link Postfix.org - ManPage - pipe(8)

...
              ${sender}
                     This macro expands to  the  envelope  sender
                     address. By default, the null sender address
                     expands  to  MAILER-DAEMON;  this   can   be
                     changed  with  the null_sender attribute, as
                     described above.

                     This information is modified by the  q  flag
                     for quoting.
...

Anschließend ist ein Neustart von Postfix erforderlich, was mit nachfolgendem Befehl durchgeführt werden kann:

# service postfix restart
Shutting down postfix:                                     [  OK  ]
Starting postfix:                                          [  OK  ]

Um zu überprüfen, ob der Restart erfolgreich durchgeführt wurde und um eventuelle Probleme erkennen zu können, empfiehlt es sich mit nachfolgendem Befehl die LOG-Verarbeitung von Postfix zu beobachten:

# tail -f /var/log/maillog
Jul 17 14:44:24 rechner60 postfix/postfix-script[621]: stopping the Postfix mail system
Jul 17 14:44:24 rechner60 postfix/master[1429]: terminating on signal 15
Jul 17 14:44:25 rechner60 postfix/postfix-script[694]: starting the Postfix mail system
Jul 17 14:44:25 rechner60 postfix/master[695]: daemon started -- version 2.6.6, configuration /etc/postfix

Erster Test

Nachdem die oben gezeigten Konfigurationsschritte durchgeführt worden sind, soll nun der erste Test erfolgen. Dazu muss nur eine e-Mail an die entsprechend vorbereitete e-Mail-Adresse geschickt werden, auf die der „Echo-Mailer“ reagiert.

Um die eingehende und ausgehende e-Mail im LOG von Postfix zu beobachten, kann nachfolgender Befehl verwendet werden, welcher auch in etwa nachfolgende Einträge in der LOG-Datei

  • /var/log/maillog

erzeugen sollte:

# tail -f /var/log/maillog
Jul 18 10:54:58 rechner60 postfix/smtpd[26917]: connect from rechner60.dmz.tachtler.net[192.168.0.60]
Jul 18 10:54:58 rechner60 postfix/smtpd[26917]: NOQUEUE: client=rechner60.dmz.tachtler.net[192.168.0.60]
Jul 18 10:55:01 rechner60 postfix/smtpd[26801]: connect from rechner70.dmz.tachtler.net[192.168.0.70]
Jul 18 10:55:01 rechner60 postfix/smtpd[26801]: 58E425F119: client=rechner60.dmz.tachtler.net[192.168.0.60]
Jul 18 10:55:01 rechner60 postfix/cleanup[26920]: 58E425F119: message-id=<20130718105458.Horde.zvLmxxTKlAqF3clP-b5GbQ4@buero.tachtler.net>
Jul 18 10:55:01 rechner60 postfix/qmgr[9205]: 58E425F119: from=<klaus@tachtler.net>, size=2253, nrcpt=1 (queue active)
Jul 18 10:55:01 rechner60 postfix/smtpd[26917]: disconnect from rechner60.dmz.tachtler.net[192.168.0.60]
Jul 18 10:55:01 rechner60 postfix/smtpd[26801]: disconnect from rechner70.dmz.tachtler.net[192.168.0.70]
Jul 18 10:55:01 rechner60 postfix/pickup[26388]: A304D5F11E: uid=99 from=<nobody>
Jul 18 10:55:01 rechner60 postfix/pipe[26921]: 58E425F119: to=<echo@tachtler.net>, relay=echo, delay=0.32, delays=0.06/0.01/0/0.25, dsn=2.0.0, status=sent (delivered via echo service)
Jul 18 10:55:01 rechner60 postfix/qmgr[9205]: 58E425F119: removed
Jul 18 10:55:01 rechner60 postfix/cleanup[26920]: A304D5F11E: message-id=<51e7ad65.qcfjQsAzZgchk+wY%echo@tachtler.net>
Jul 18 10:55:01 rechner60 postfix/qmgr[9205]: A304D5F11E: from=<nobody@tachtler.net>, size=3439, nrcpt=1 (queue active)
Jul 18 10:55:05 rechner60 postfix/smtpd[26801]: connect from rechner70.dmz.tachtler.net[192.168.0.70]
Jul 18 10:55:05 rechner60 postfix/smtpd[26801]: BD2B65F119: client=rechner70.dmz.tachtler.net[192.168.0.70]
Jul 18 10:55:05 rechner60 postfix/cleanup[26920]: BD2B65F119: message-id=<51e7ad65.qcfjQsAzZgchk+wY%echo@tachtler.net>
Jul 18 10:55:05 rechner60 postfix/qmgr[9205]: BD2B65F119: from=<nobody@tachtler.net>, size=4810, nrcpt=1 (queue active)
Jul 18 10:55:05 rechner60 postfix/lmtp[26966]: A304D5F11E: to=<klaus@tachtler.net>, relay=192.168.0.70[192.168.0.70]:10024, delay=4.4, delays=0.33/0.02/0.01/4, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[192.168.0.60]:10025): 250 2.0.0 Ok: queued as BD2B65F119)
Jul 18 10:55:05 rechner60 postfix/qmgr[9205]: A304D5F11E: removed
Jul 18 10:55:06 rechner60 postfix/lmtp[26967]: BD2B65F119: to=<klaus@tachtler.net>, relay=192.168.0.80[192.168.0.80]:24, delay=0.35, delays=0.05/0.01/0.02/0.27, dsn=2.1.5, status=sent (250 2.1.5 Ok)
Jul 18 10:55:06 rechner60 postfix/qmgr[9205]: BD2B65F119: removed

Eine e-Mail, welche an den „Echo-Mailer“ gesendet wurde, könnte in etwa wie folgt aussehen:

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/postfix_echo-mailer-script_installieren.txt · Zuletzt geändert: 2015/08/25 09:21 von klaus