Sender Rewriting Scheme (SRS) für Postfix unter Debian (Wheezy, Jessie)

Postfix Logo

Es ist schon nervig, dass es in Debian kein Paket für eine Sender Rewrite Scheme Dämon gibt. Hier nun eine kleine Anleitung wie man sich mit Hilfe eines Pakets aus den Postfix Tools das Problem vom Hals schafft. Danke an Benny Baumann für einige Vorarbeit.

Erzeugen der Hashs

Mit folgenden Skript kann man sich zufällige Hashs erzeugen lassen:

<?php
  $salt = "HIER SALT EINTRAGEN!";
  for ($i = 0; $i &lt; 10; $i++) {
    usleep(rand(5000, 100000));
    echo sha1($salt . microtime(true)) . "\n";
  }

Die Hashs kopiert man dann in eine Datei und schützt sie, indem man sie nur lesbar durch den Nutzer root macht:

$ vim /etc/postfix/pfix-srs.secrets
$ chown root.root /etc/postfix/pfix-srs.secrets
$ chmod 400 /etc/postfix/pfix-srs.secrets

Die Optionendatei

Anschließend erzeugen wir eine Optionsdatei mit unserem Editor...

$ vim /etc/default/pfix-srsd

...und speichern die folgenden Zeilen dort:

DOMAIN=example.com
SECRETS=/etc/postfix/pfix-srs.secrets
OPTIONS=-I

example.com sollte dabei durch Eure eigene Maildomain (FQDN) ersetzt werden.

Installation benötigter Pakete für pfixtools

Anschließend installieren wir die nötigen Pakete für die Postfix Tools Suite. Zum Herunterladen der Pakete benötigen wir git und zum Kompilieren benötigen wir die build-essentials

$ aptitude install libev-dev libpcre3-dev git build-essentials

Das Paket libsrs2 ist derzeit nicht für Wheezy und Jessie gepackt. Es gibt jedoch wieder ein Paket mit gleicher Versionsnummer wie das Lenny-Paket in sid. Das Paket hat sich also nicht verändert und war nur zeitweise nicht unterstützt. Wir laden es behilfsweise manuell herunter und installieren es über dpkg:

$ cd ~/
$ wget http://ftp.de.debian.org/debian/pool/main/libs/libsrs2/libsrs2-0_1.0.18-4_amd64.deb
$ wget http://ftp.de.debian.org/debian/pool/main/libs/libsrs2/libsrs2-dev_1.0.18-4_amd64.deb
$ dpkg -i libsrs2-0_1.0.18-4_amd64.deb
$ dpkg -i libsrs2-dev_1.0.18-4_amd64.deb

Dann laden den Quellcode der pfixtools herunter und kompilieren uns diesen:

$ git clone https://github.com/Fruneau/pfixtools.git
$ cd pfixtools/common
$ git clone https://github.com/Fruneau/libcommon.git
$ mv libcommon/* ./
$ rm -rf libcommon
$ make
$ cd ../pfix-srsd/
$ make

Wir erhalten eine kompilierte Datei, diese können wir nach /usr/local/bin verschieben.

Erzeugen der Init-Datei

$ vim /etc/init.d/pfix-srsd

Dies ist der Inhalt der Datei:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          pfix-srsd
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: pfixtools SRS Daemon backend for Postfix
### END INIT INFO
 
PFIXSRSD_CONFIG="/etc/default/pfix-srsd"
NAME="pfix-srsd"
DAEMON="/usr/local/bin/pfix-srsd"
PID_FILE="/var/run/pfix-srsd.pid"
if [ -f $PFIXSRSD_CONFIG ]; then
  . $PFIXSRSD_CONFIG
else
  exit 0
fi
test -x $DAEMON || exit 0
case "$1" in
  start)
    echo -n "Starting Postfix SRS Daemon: $NAME"
    start-stop-daemon -S -q -b -p $PID_FILE -x $DAEMON -- -p $PID_FILE $OPTIONS $DOMAIN $SECRETS
    echo "."
    ;;
  stop)
    echo -n "Stopping Postfix SRS Daemon: $NAME"
    if [ -f $PID_FILE ]; then
      kill `cat $PID_FILE`
      rm $PID_FILE
    fi
    echo "."
    ;;
  restart)
    $0 stop
    $0 start
    ;;
  force-reload)
    $0 restart
    ;;
  *)
    echo "Usage: $0 start|stop|restart|force-reload"
    exit 1
    ;;
esac

Anschließend machen wir das Skript ausführungsfähig:

$ chmod 755 /etc/init.d/pfix-srsd

Ausnahmedatenbank festlegen

Wir legen nun eine Datenbank an, auf die nach RFC Standard SRS nicht angewendet werden soll.

$ vim /etc/postfix/pfix-no-srs.cf

Sie sollte folgenden Inhalt besitzen:

#Addresses on mail.example.com that should not be rewritten
postmaster@mail.example.com postmaster@mail.example.com
abuse@mail.example.com abuse@mail.example.com
webmaster@mail.example.com webmaster@mail.example.com

Anschließend muss die Datei mit Postfix entsprechend übersetzt werden:

$ postmap /etc/postfix/pfix-no-srs.cf
$ postmap /etc/postfix/pfix-srs.norewrite

Anpassen der Postfix Konfigurationsdatei

Nun fehlen noch die neuen Konfigurationen in der main.cf von Postfix:

$ vim /etc/postfix/main.cf

Diese Zeilen sollten angefügt werden:

# SRS Remapping
recipient_canonical_maps = hash:/etc/postfix/pfix-no-srs.cf, tcp:127.0.0.1:10002
recipient_canonical_classes = envelope_recipient
sender_canonical_maps = hash:/etc/postfix/pfix-no-srs.cf, tcp:127.0.0.1:10001
sender_canonical_classes = envelope_sender

Postfix neustarten und testen

$ /etc/init.d/postfix reload

Init-Script in das Runlevel eintragen

$ update-rc.d pfix-srsd defaults

Changelog

  • 14.8.2015: Anpassung des Tutorials an Debian Wheezy und Jessie

Tags: