Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:postfix_echo-mailer-script_installieren

Dies ist eine alte Version des Dokuments!


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:

Installation: mutt

Mit nachfolgendem Befehl kann das rpm-Paket - mutt welches unter CentOS im base-Repository verfügbar ist, installiert werden:

# yum install mutt
Loaded plugins: priorities
Setting up Install Process
1425 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package mutt.x86_64 5:1.5.20-7.20091214hg736b6a.el6 will be installed
--> Processing Dependency: urlview for package: 5:mutt-1.5.20-7.20091214hg736b6a.el6.x86_64
--> Processing Dependency: libtokyocabinet.so.8()(64bit) for package: 5:mutt-1.5.20-7.20091214hg736b6a.el6.x86_64
--> Running transaction check
---> Package tokyocabinet.x86_64 0:1.4.33-6.el6 will be installed
---> Package urlview.x86_64 0:0.9-7.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package          Arch       Version                             Repository
                                                                           Size
================================================================================
Installing:
 mutt             x86_64     5:1.5.20-7.20091214hg736b6a.el6     base     1.2 M
Installing for dependencies:
 tokyocabinet     x86_64     1.4.33-6.el6                        base     428 k
 urlview          x86_64     0.9-7.el6                           base      24 k

Transaction Summary
================================================================================
Install       3 Package(s)

Total download size: 1.7 M
Installed size: 5.6 M
Is this ok [y/N]: y
Downloading Packages:
(1/3): mutt-1.5.20-7.20091214hg736b6a.el6.x86_64.rpm     | 1.2 MB     00:00     
(2/3): tokyocabinet-1.4.33-6.el6.x86_64.rpm              | 428 kB     00:00     
(3/3): urlview-0.9-7.el6.x86_64.rpm                      |  24 kB     00:00     
--------------------------------------------------------------------------------
Total                                            13 MB/s | 1.7 MB     00:00     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : tokyocabinet-1.4.33-6.el6.x86_64                             1/3 
  Installing : urlview-0.9-7.el6.x86_64                                     2/3 
  Installing : 5:mutt-1.5.20-7.20091214hg736b6a.el6.x86_64                  3/3 
  Verifying  : 5:mutt-1.5.20-7.20091214hg736b6a.el6.x86_64                  1/3 
  Verifying  : urlview-0.9-7.el6.x86_64                                     2/3 
  Verifying  : tokyocabinet-1.4.33-6.el6.x86_64                             3/3 

Installed:
  mutt.x86_64 5:1.5.20-7.20091214hg736b6a.el6                                   

Dependency Installed:
  tokyocabinet.x86_64 0:1.4.33-6.el6         urlview.x86_64 0:0.9-7.el6        

Complete!

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket mutt installiert wurden.

# rpm -qil mutt
Name        : mutt                         Relocations: (not relocatable)
Version     : 1.5.20                            Vendor: CentOS
Release     : 7.20091214hg736b6a.el6        Build Date: Mon 28 Jul 2014 11:10:54 AM CEST
Install Date: Tue 25 Aug 2015 07:57:20 AM CEST      Build Host: c6b8.bsys.dev.centos.org
Group       : Applications/Internet         Source RPM: mutt-1.5.20-7.20091214hg736b6a.el6.src.rpm
Size        : 4518035                          License: GPLv2+ and Public Domain
Signature   : RSA/SHA1, Thu 31 Jul 2014 09:27:07 PM CEST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://www.mutt.org/
Summary     : A text mode mail user agent
Description :
Mutt is a small but very powerful text-based MIME mail client.  Mutt
is highly configurable, and is well suited to the mail power user with
advanced features like key bindings, keyboard macros, mail threading,
regular expression searches and a powerful pattern matching language
for selecting groups of messages.
/etc/Muttrc
/etc/Muttrc.local
/usr/bin/mutt
/usr/bin/pgpewrap
/usr/bin/pgpring
/usr/bin/smime_keys
/usr/share/doc/mutt-1.5.20
/usr/share/doc/mutt-1.5.20/COPYRIGHT
/usr/share/doc/mutt-1.5.20/ChangeLog
/usr/share/doc/mutt-1.5.20/GPL
/usr/share/doc/mutt-1.5.20/Mush.rc
/usr/share/doc/mutt-1.5.20/NEWS
/usr/share/doc/mutt-1.5.20/Pine.rc
/usr/share/doc/mutt-1.5.20/README
/usr/share/doc/mutt-1.5.20/README.SECURITY
/usr/share/doc/mutt-1.5.20/README.SSL
/usr/share/doc/mutt-1.5.20/Tin.rc
/usr/share/doc/mutt-1.5.20/UPDATING
/usr/share/doc/mutt-1.5.20/ca-bundle.crt
/usr/share/doc/mutt-1.5.20/colors.default
/usr/share/doc/mutt-1.5.20/colors.linux
/usr/share/doc/mutt-1.5.20/gpg.rc
/usr/share/doc/mutt-1.5.20/manual.txt
/usr/share/doc/mutt-1.5.20/mutt_ldap_query
/usr/share/doc/mutt-1.5.20/pgp2.rc
/usr/share/doc/mutt-1.5.20/pgp5.rc
/usr/share/doc/mutt-1.5.20/pgp6.rc
/usr/share/doc/mutt-1.5.20/sample.mailcap
/usr/share/doc/mutt-1.5.20/sample.muttrc
/usr/share/doc/mutt-1.5.20/sample.muttrc-tlr
/usr/share/doc/mutt-1.5.20/smime-notes.txt
/usr/share/doc/mutt-1.5.20/smime.rc
/usr/share/locale/bg/LC_MESSAGES/mutt.mo
/usr/share/locale/ca/LC_MESSAGES/mutt.mo
/usr/share/locale/cs/LC_MESSAGES/mutt.mo
/usr/share/locale/da/LC_MESSAGES/mutt.mo
/usr/share/locale/de/LC_MESSAGES/mutt.mo
/usr/share/locale/el/LC_MESSAGES/mutt.mo
/usr/share/locale/eo/LC_MESSAGES/mutt.mo
/usr/share/locale/es/LC_MESSAGES/mutt.mo
/usr/share/locale/et/LC_MESSAGES/mutt.mo
/usr/share/locale/eu/LC_MESSAGES/mutt.mo
/usr/share/locale/fr/LC_MESSAGES/mutt.mo
/usr/share/locale/ga/LC_MESSAGES/mutt.mo
/usr/share/locale/gl/LC_MESSAGES/mutt.mo
/usr/share/locale/hu/LC_MESSAGES/mutt.mo
/usr/share/locale/id/LC_MESSAGES/mutt.mo
/usr/share/locale/it/LC_MESSAGES/mutt.mo
/usr/share/locale/ja/LC_MESSAGES/mutt.mo
/usr/share/locale/ko/LC_MESSAGES/mutt.mo
/usr/share/locale/lt/LC_MESSAGES/mutt.mo
/usr/share/locale/nl/LC_MESSAGES/mutt.mo
/usr/share/locale/pl/LC_MESSAGES/mutt.mo
/usr/share/locale/pt_BR/LC_MESSAGES/mutt.mo
/usr/share/locale/ru/LC_MESSAGES/mutt.mo
/usr/share/locale/sk/LC_MESSAGES/mutt.mo
/usr/share/locale/sv/LC_MESSAGES/mutt.mo
/usr/share/locale/tr/LC_MESSAGES/mutt.mo
/usr/share/locale/uk/LC_MESSAGES/mutt.mo
/usr/share/locale/zh_CN/LC_MESSAGES/mutt.mo
/usr/share/locale/zh_TW/LC_MESSAGES/mutt.mo
/usr/share/man/man1/mutt.1.gz
/usr/share/man/man1/smime_keys.1.gz
/usr/share/man/man5/muttrc.5.gz

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 : Skript to realise a mailecho server.                         #
#                                                                            #
#                                                                            #
#                                                                            #
#                                                                            #
# Last update : 17.07.2013                                                   #
# Version     : 1.00                                                         #
#                                                                            #
# 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 : Changed mailer from mail(x) to mutt, because for example,    #
#               when German - "Umlaute" are inside the e-mail, mail(x) will  #
#               generate a application/octet-stream as seperate mime-header  #
#               for the mail body. With mutt there can be used a paramter to #
#               specify the content type as test/plain.                      #
# -------------------------------------------------------------------------- #
# 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 mutt`
 
# 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 >> $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 -e 'set content_type=test/plain' < $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.1440482916.txt.gz · Zuletzt geändert: 2015/08/25 08:08 von klaus