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:

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
tachtler/postfix_echo-mailer-script_installieren.txt · Zuletzt geändert: 2015/08/25 09:21 von klaus