Inhaltsverzeichnis

Postfix CentOS 7 - alterMIME einsetzen

Die OpenSource-Variante von alterMIME kann zu folgenden Aktionen in Bezug auf e-Mail's genutzt werden:

Herunterladen

Nachfolgende Beschreibung bindet das Drittanbieter-Repository von EPEL ein, damit darüber die Installation erfolgen kann.

Installation

Nachfolgendes rpm-Paket ist zur Installation erforderlich:

Die Installation von altermime, kann durch ausführen des nachfolgenden Befehls durchgeführt werden:

# yum info altermime
Loaded plugins: changelog, priorities
[root@vml70060 ~]# yum install altermime
Loaded plugins: changelog, priorities
387 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package altermime.x86_64 0:0.3.10-10.el7 will be installed
--> Finished Dependency Resolution

Changes in packages about to be updated:


Dependencies Resolved

================================================================================
 Package            Arch            Version                 Repository     Size
================================================================================
Installing:
 altermime          x86_64          0.3.10-10.el7           epel           57 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 57 k
Installed size: 131 k
Is this ok [y/d/N]: y
Downloading packages:
altermime-0.3.10-10.el7.x86_64.rpm                         |  57 kB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : altermime-0.3.10-10.el7.x86_64                               1/1 
  Verifying  : altermime-0.3.10-10.el7.x86_64                               1/1 

Installed:
  altermime.x86_64 0:0.3.10-10.el7                                              

Complete!

Die Installation von altermime, kann durch ausführen des nachfolgenden Befehls durchgeführt werden:

# rpm -qil altermime
Name        : altermime
Version     : 0.3.10
Release     : 10.el7
Architecture: x86_64
Install Date: Fri 28 Apr 2017 08:28:38 AM CEST
Group       : Applications/Internet
Size        : 133763
License     : BSD
Signature   : RSA/SHA256, Sat 19 Jul 2014 05:31:35 AM CEST, Key ID 6a2faea2352c64e5
Source RPM  : altermime-0.3.10-10.el7.src.rpm
Build Date  : Wed 16 Jul 2014 06:00:49 PM CEST
Build Host  : buildvm-02.phx2.fedoraproject.org
Relocations : (not relocatable)
Packager    : Fedora Project
Vendor      : Fedora Project
URL         : http://www.pldaniels.com/altermime/
Summary     : Alter MIME-encoded mailpacks
Description :
alterMIME is a small program which is used to alter MIME-encoded mailpacks.

alterMIME can:

 * Insert disclaimers
 * Insert arbitary X-headers
 * Modify existing headers
 * Remove attachments based on filename or content-type
 * Replace attachments based on filename
/usr/bin/altermime
/usr/share/doc/altermime-0.3.10
/usr/share/doc/altermime-0.3.10/CHANGELOG
/usr/share/doc/altermime-0.3.10/LICENCE
/usr/share/doc/altermime-0.3.10/README

Konfiguration

Postfix alterMIME Aufruf-Script

Zur Konfiguration von alterMIME ist es notwendig eine Systemgruppe namens altermime mit folgendem Befehl zu erstellen:

# groupadd -g 107 -r altermime

und einen Systembenutzer ebenfalls namens altermime mit folgendem Befehl zu erstellen:

# useradd -c "Postfix alterMIME Filter" -d /var/spool/altermime -g altermime -m -r -s /sbin/nologin -u 107 altermime

Zu Überprüfung, ob das erstellen einer Systemgruppe namens altermime erfolgreich war kann folgender Befehl mit nachfolgender Ausgabe genutzt werden:

# cat /etc/group | grep altermime
altermime:x:107:

Zu Überprüfung, ob das erstellen eines Systembenutzers namens altermime ebenfalls erfolgreich war kann folgender Befehl mit nachfolgender Ausgabe genutzt werden:

# cat /etc/passwd | grep altermime
altermime:x:107:107:Postfix alterMIME Filter:/var/spool/altermime:/sbin/nologin

Eine Überprüfung, ob das home-Verzeichnis angelegt wurde, kann mit folgendem Befehl durchgeführt werden und sollte eine Ausgabe in etwa wie folgende anzeigen:

# ll -la /var/spool/altermime
total 16
drwx------   2 altermime altermime   59 Apr 28 10:18 .
drwxr-xr-x. 11 root      root      4096 Apr 28 10:18 ..
-rw-r--r--   1 altermime altermime   18 Dec  7 00:19 .bash_logout
-rw-r--r--   1 altermime altermime  193 Dec  7 00:19 .bash_profile
-rw-r--r--   1 altermime altermime  231 Dec  7 00:19 .bashrc

Abschließend kann das automatisch neu angelegte home-Verzeichnis mit folgendem Befehl und nachfolgender Ausgabe von unnötigem „Balast“ bereinigt werden:

# rm /var/spool/altermime/.* -f
rm: cannot remove ‘/var/spool/altermime/.’: Is a directory
rm: cannot remove ‘/var/spool/altermime/..’: Is a directory

* Die beiden Hinweise können getrost ignoriert werden!

Zuerst wird mit folgendem Befehl ein neues Verzeichnis mit Namen /etc/postfix/altermime erstellt:

# mkdir /etc/postfix/altermime

Anschließend eine shell-Script-Datei mit dem Namen altermime.sh mit folgendem Befehl angelegt.

# touch /etc/postfix/altermime/altermime.sh

Der Inhalt des shell-Script /etc/postfix/altermime/altermime.sh sollte wie folgt aussehen, welches von HowtoForge - Oliver Meyer erstellt wurde, und dem ich auch noch ein paar Ergänzungen hinzugefügt habe!

#!/bin/sh
 
# Localize these.
ALTERMIME_EXE=/usr/bin/altermime
INSPECT_DIR=/var/spool/altermime
SENDMAIL="/usr/sbin/sendmail.postfix -G -i"
DISCLAIMER_ADDRESSES=/etc/postfix/altermime/disclaimer_addresses
 
# Exit codes from <sysexits.h>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
 
# Clean up when done or when aborting.
trap "rm -f in.$$" 0 1 2 3 15
 
# Start processing.
cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }
cat >in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }
 
# Obtain - ONLY - From address
FROM_ADDRESSES=`grep -m 1 "From: " in.$$ | cut -d "<" -f 2 | cut -d ">" -f 1`
 
if [ `grep -wi ^${FROM_ADDRESSES}$ ${DISCLAIMER_ADDRESSES}` ]; then
        $ALTERMIME_EXE --input=$INSPECT_DIR/in.$$ \
                       --disclaimer=/etc/postfix/altermime/disclaimer_$FROM_ADDRESSES.text \
                       --disclaimer-html=/etc/postfix/altermime/disclaimer_$FROM_ADDRESSES.html \
                       --force-for-bad-html \
                       --xheader="X-alterMIME: Mail body modified (using disclaimer) - `hostname`" \
                       || { echo Message content rejected; exit $EX_UNAVAILABLE; }
else
        $ALTERMIME_EXE --input=$INSPECT_DIR/in.$$ \
                       --disclaimer=/etc/postfix/altermime/disclaimer_default.text \
                       --disclaimer-html=/etc/postfix/altermime/disclaimer_default.html \
                       --force-for-bad-html \
                       --xheader="X-alterMIME: Mail body modified (using disclaimer) - `hostname`" \
                       || { echo Message content rejected; exit $EX_UNAVAILABLE; }
fi
 
$SENDMAIL "$@" <in.$$
 
exit $?

:!: WICHTIG - Ein „Disclaimer“ wird nur ausgehenden e-Mails angehängt!

Um das shell-Script ausführbar zu machen müssen die Besitzrechte wie folgt, mit folgendem Befehl gesetzt werden:

# chown root.altermime /etc/postfix/altermime/altermime.sh

und die Zugriffsrechte wie folgt, mit nachfolgendem Befehl gesetzte werden:

# chmod 750 /etc/postfix/altermime/altermime.sh

Postfix alterMIME Standard Disclaimer

:!: WICHTIG - Zur Steuerung das bei ausgehenden e-Mails ein „Disclaimer“ angehängt werden soll, ist noch eine Standard „Disclaimer-Datei“ für PLAIN-Text und HTML nach folgendem Schema angelegt werden:

und

Die Dateien können mit folgenden Befehlen angelegt werden:

# touch /etc/postfix/altermime/disclaimer_default.text

und

# touch /etc/postfix/altermime/disclaimer_default.html

:!: Abschließend muss noch der Inhalt der Standard „Disclaimer“-Datei entsprechend angepasst werden. Hier ein Beispiel für

-- 
 
------------------------------------------
e-Mail  : postmaster@tachtler.net
Homepage: http://www.tachtler.net
------------------------------------------

:!: HINWEIS - Nach dem Trennzeichen

--

sollte noch ein Leerzeichen folgen, da sonst einige Clients den „Disclaimer“ nicht richtig vom „Body“ der e-Mail separieren können!

* Danke für den Hinweis von Juri Haberland

und

<br>
<span style="font-family:monospace; color:#000000">--&nbsp;</span><br>
<br>
<span style="font-family:monospace; color:#000000">------------------------------------------</span><br>
<span style="font-family:monospace; color:#000000">e-Mail&nbsp;&nbsp;:&nbsp;postmaster@tachtler.net</span><br>
<span style="font-family:monospace; color:#000000">Homepage:&nbsp;http://www.tachtler.net</span><br>
<span style="font-family:monospace; color:#000000">------------------------------------------</span><br>
<br>

:!: HINWEIS - Nach dem Trennzeichen

--

sollte noch ein Leerzeichen (&nbsp;) folgen, da sonst einige Clients den „Disclaimer“ nicht richtig vom „Body“ der e-Mail separieren können!

* Danke für den Hinweis von Juri Haberland

Postfix alterMIME Individuelle Disclaimer

:!: WICHTIG - Zur Steuerung für welche ausgehenden e-Mail-Absender ein „Disclaimer“ angehängt werden soll, ist noch die Konfigurationsdatei mit den e-Mail-Adressen als einfache Liste notwendig!

Mit folgendem Befehl kann die Konfigurationsdatei im Verzeichnis /etc/postfix/altermime und mit dem Namen disclaimer_addresses erstellt werden:

# touch /etc/postfix/altermime/disclaimer_addresses

Der Inhalt sind die e-Mail-Absenderadressen, welche mit einem „Disclaimer“ ausgehend versorgt werden sollen. Hier ein Beispiel:

postmaster@tachtler.net
abuse@tachtler.net

:!: WICHTIG - Da wir benutzerbezogene „Disclaimer“ verwenden möchten, muss für jede e-Mail-Adresse in der Konfigurationsdatei /etc/postfix/altermime/disclaimer_addresses jeweils auch eine „Disclaimer-Datei“ für PLAIN-Text und HTML nach folgendem Schema angelegt werden:

und

Die Dateien können mit folgenden Befehlen angelegt werden:

# touch /etc/postfix/altermime/disclaimer_postmaster@tachtler.net.text
# touch /etc/postfix/altermime/disclaimer_abuse@tachtler.net.text

und

# touch /etc/postfix/altermime/disclaimer_postmaster@tachtler.net.html
# touch /etc/postfix/altermime/disclaimer_abuse@tachtler.net.html

:!: Abschließend muss noch der Inhalt der jeweiligen benutzerbezogenen „Disclaimer“-Datei entsprechend angepasst werden. Hier ein Beispiel für

-- 
 
------------------------------------------
e-Mail  : postmaster@tachtler.net
Homepage: http://www.tachtler.net
------------------------------------------

:!: HINWEIS - Nach dem Trennzeichen

--

sollte noch ein Leerzeichen folgen, da sonst einige Clients den „Disclaimer“ nicht richtig vom „Body“ der e-Mail separieren können!

* Danke für den Hinweis von Juri Haberland

und

<br>
<span style="font-family:monospace; color:#000000">--&nbsp;</span><br>
<br>
<span style="font-family:monospace; color:#000000">------------------------------------------</span><br>
<span style="font-family:monospace; color:#000000">e-Mail&nbsp;&nbsp;:&nbsp;postmaster@tachtler.net</span><br>
<span style="font-family:monospace; color:#000000">Homepage:&nbsp;http://www.tachtler.net</span><br>
<span style="font-family:monospace; color:#000000">------------------------------------------</span><br>
<br>

:!: HINWEIS - Nach dem Trennzeichen

--

sollte noch ein Leerzeichen (&nbsp;) folgen, da sonst einige Clients den „Disclaimer“ nicht richtig vom „Body“ der e-Mail separieren können!

* Danke für den Hinweis von Juri Haberland

Postfix alterMIME /etc/postfix/master.cf

Um alterMIME in Postfix zu integrieren, sind nachfolgende Konfigurationseinstellungen in der Postfix-Konfigurationsdatei /etc/postfix/master.cf notwendig.

Die relevanten Änderungen gegenüber der Standard-Konfiguration, sind mit folgendem Kommentar

# Tachtler - alterMIME

versehen.

Anpassungen vorhandener Einstellungen in /etc/postfix/master.cf (nur relevanter Ausschnitt):

(Nur relevanter Ausschnitt):

# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
...
...
...
# Tachtler - new - 
# Outgoing traffic from trusted networks, with amavisd-new (altermime).
192.168.1.60:smtp      inet  n       -       n       -       -       smtpd
  -o content_filter=
  -o smtpd_proxy_filter=192.168.0.70:10024
  -o smtpd_client_connection_count_limit=4
  -o smtpd_proxy_options=speed_adjust
192.168.0.60:smtp      inet  n       -       n       -       -       smtpd
  -o content_filter=
  -o smtpd_proxy_filter=192.168.0.70:10024
  -o smtpd_client_connection_count_limit=4
  -o smtpd_proxy_options=speed_adjust
127.0.0.1:smtp      inet  n       -       n       -       -       smtpd
  -o content_filter=
  -o smtpd_proxy_filter=192.168.0.70:10024
  -o smtpd_client_connection_count_limit=4
  -o smtpd_proxy_options=speed_adjust
# Tachtler - new -
# Outgoing traffic, BACK from amavisd-new from smtpd_proxy_filter.
192.168.0.60:10025     inet  n       -       n       -       -       smtpd
  -o content_filter=
  -o smtpd_proxy_filter=
  -o smtpd_milters=
  -o smtpd_authorized_xforward_hosts=127.0.0.0/8,192.168.0.0/24,192.168.1.0/24,192.168.2.0/24,88.217.171.167/32
  -o smtpd_client_restrictions=
  -o smtpd_helo_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_relay_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o smtpd_data_restrictions=
  -o mynetworks=0.0.0.0/32,127.0.0.0/8,192.168.0.0/24,192.168.1.0/24,192.168.2.0/24,88.217.171.167/32
  -o receive_override_options=no_unknown_recipient_checks
# Tachtler - new -
# Outgoing traffic, BACK from amavisd-new from content_filter.
192.168.0.60:10027     inet  n       -       n       -       -       smtpd
  -o content_filter=
  -o smtpd_proxy_filter=
  -o smtpd_milters=
  -o smtpd_authorized_xforward_hosts=127.0.0.0/8,192.168.0.0/24,192.168.1.0/24,192.168.2.0/24,88.217.171.167/32
  -o smtpd_delay_reject=no
  -o smtpd_client_restrictions=
  -o smtpd_helo_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_relay_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o smtpd_data_restrictions=reject_unauth_pipelining
  -o smtpd_end_of_data_restrictions=
  -o smtpd_restriction_classes=
  -o mynetworks=0.0.0.0/32,127.0.0.0/8,192.168.0.0/24,192.168.1.0/24,192.168.2.0/24,88.217.171.167/32
  -o smtpd_error_sleep_time=0
  -o smtpd_soft_error_limit=1001
  -o smtpd_hard_error_limit=1000
  -o smtpd_client_connection_count_limit=0
  -o smtpd_client_connection_rate_limit=0
  -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters
  -o local_header_rewrite_clients=
...
...
...
# Tachtler - enabled - 
submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  # Tachtler - alterMIME
  -o content_filter=altermime:
  -o lmtp_use_tls=yes
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
  -o smtpd_recipient_restrictions=
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
...
...
...
pickup    unix  n       -       n       60      1       pickup
  -o content_filter=lmtp:[192.168.0.70]:10026
  -o lmtp_use_tls=yes
...
...
...
# Tachtler - alterMIME
altermime unix  -       n       n       -       4       pipe
  flags=Rq user=altermime null_sender= argv=/etc/postfix/altermime/altermime.sh -f ${sender} -- ${recipient}