Inhaltsverzeichnis
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:
- Funktionsfähiger MTA - hier soll Postfix zum Einsatz kommen
- Ein Skript, welches ursprünglich von Ralf Hildebrandt entwickelt wurde und welches unter Postfix Echo-Mailer-Script Installieren - Skript: mailecho heruntergeladen werden kann!
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:
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 ------ Return-Path: <klaus@tachtler.net> Delivered-To: echo@tachtler.net Received: from viruswall.dmz.tachtler.net (rechner70.dmz.tachtler.net [192.168.0.70]) by mx1.tachtler.net (Postfix) with ESMTP id 58E425F119 for <echo@tachtler.net>; Thu, 18 Jul 2013 10:55:01 +0200 (CEST) Authentication-Results: viruswall.dmz.tachtler.net (amavisd-new); dkim=pass (1024-bit key) reason="pass (just generated, assumed good)" header.d=tachtler.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tachtler.net; h= content-disposition:mime-version:content-type:content-type :accept-language:user-agent:subject:subject:from:from:message-id :date:date:received:received:received; s=main; t=1374137698; x= 1375952099; bh=z6uV185AEX062CjLrzorV7J4g7TbCxIndhD1VYsViSc=; b=Z fHjNZ0BwtbI1W+z+a85acbHFrrJkhHGGINN9U+o8qzHgfzLH0VneRVq5on6YiX0P J2/lYkTmOry6JkB0B4G5uDALbNqRvVUUWHAxd3ml1Q874mEm18Srwp34gQdq4qE0 d4kftrQfjX58lev6LuAaEct37kedyw9iKDzTT7uplM= X-Amavis-Modified: Mail body modified (using disclaimer) - viruswall.dmz.tachtler.net X-Virus-Scanned: amavisd-new at tachtler.net Received: from mx1.tachtler.net ([192.168.0.60]) by viruswall.dmz.tachtler.net (viruswall.dmz.tachtler.net [192.168.0.70]) (amavisd-new, port 10024) with ESMTP id JblUdLFtPkN9 for <echo@tachtler.net>; Thu, 18 Jul 2013 10:54:58 +0200 (CEST) Received: from localhost (rechner60.dmz.tachtler.net [192.168.0.60]) by mx1.tachtler.net (Postfix) with ESMTP for <echo@tachtler.net>; Thu, 18 Jul 2013 10:54:58 +0200 (CEST) Received: from mx1.tachtler.net (mx1.tachtler.net [88.217.171.167]) by www.tachtler.net (Horde Framework) with HTTP; Thu, 18 Jul 2013 10:54:58 +0200 Date: Thu, 18 Jul 2013 10:54:58 +0200 Message-ID: <20130718105458.Horde.zvLmxxTKlAqF3clP-b5GbQ4@buero.tachtler.net> From: Klaus Tachtler <klaus@tachtler.net> To: echo@tachtler.net Subject: Test Echo-Mailer! User-Agent: Internet Messaging Program (IMP) H5 (6.1.2) Accept-Language: de,en Content-Type: text/plain; charset=UTF-8; format=flowed; DelSp=Yes MIME-Version: 1.0 Content-Disposition: inline Hallo, dies ist eine Test e-Mail! Klaus. ------------------- End of the copy of your message ------------------- Automagically brought (back) to you by mx1.tachtler.net Echo Mailer