# Automatische E-Mail-Signierung mit Signing-Milter für Postfix
<spanstyle="float:right">*[IV-Sicherheitsteam](https://www.uni-muenster.de/IT-Sicherheit), September 2020*</span>
*Zielgruppe: IT-Administratoren der WWU*
Der [Postfix Mail Transfer Agent](http://www.postfix.org/)(MTA) unterstützt das [Sendmail v8 Milter-Protokoll](http://www.postfix.org/MILTER_README.html)(kurz für *Mail Filter*). Die Milter-Schnittstelle ermöglicht eine Vielzahl von Addons, die E-Mails nach Spam untersuchen oder z.B. automatisch digital signieren. Dadurch können E-Mails von (*vertrauenswürdigen*) Anwendungen, die selbst kein S/MIME unterstützen, nachträglich digital signiert werden.
> Nicht in jedem Fall macht es Sinn eine automatisch versendete E-Mail digital zu signieren! Dies sollte nur geschehen, wenn Inhalt und Absender unter Kontrolle und vertrauenswürdig sind. Keinen Sinn macht es z. B. E-Mails mit von (beliebigen) Nutzern erfassten Informationen per se zu signieren, wie bei Anmelde- oder Kommentarfunktionen.
[[_TOC_]]
## Signing-Milter Installation
### CentOS/Redhat Linux
Das Addon [signing-milter](https://signing-milter.org/) ermöglicht die automatische S/MIME-Signierung von E-Mails während sie einen Mail Transfer Agent (MTA) durchlaufen.
#### Abhängigkeiten installieren
Das yum-Repository Fedora Extra Packages for Enterprise Linux (EPEL) aktivieren und Abhängigkeiten per `yum` installieren.
Den Plugin-Quellcode von der Webseite [https://signing-milter.org/](https://signing-milter.org/) herunterladen und auspacken. Danach folgende Befehle ausführen.
```bash
make
make install
yum erase sendmail
```
### Dienst in systemd konfigurieren
Die Datei `/etc/systemd/system/signing-milter.service` anlegen:
Die globalen Einstellungen werden in `/etc/default/signing-milter` vorgenommen.
**Beispielkonfiguration:**
```bash
# use in /etc/default/signing-milter
DISABLE_HOURLY_STATISTIK_LOGGING='yes'
DISABLE_DAILY_STATISTIK_LOGGING='yes'
#OPTIONS="-x -k /var/signing-milter-tmp"
#OPTIONS="-x -u user -g group"
OPTIONS="-x"
```
Bei Bedarf die Option `-k` mit hinzu nehmen. Dann werden alle Mails in unsignierter und signierter Form im Ordner `/var/signing-milter-tmp` abgelegt.
Sollte die Anwendung als `root` ausgeführt werden, muss entweder der Nutzer `signing-milter` existieren oder es müssen Nutzer und Gruppe mittels den Optionen `-u` und `-g` angegeben werden.
Die Option `-f` kann genutzt werden, damit das Tool die Absenderadresse für die Signatur aus dem zusätzlichen Header `X-Signer` ausliest anstatt den `Return-Path` zu nutzen.
Zu Debug-Zwecken kann die Option `-d 7` gesetzt werden.
### Zertifikate festlegen
Die Datei `/etc/signing-milter/signingtable` legt fest, welches Zertifikat für welche E-Mail-Adresse genutzt wird. Sie hat die Form:
**Hinweis:** Sollte `sendmail` verwendet werden, kann es sein, dass eine Adresse der Form `user@hostname` genutzt wird, die eventuell nicht mit der tatsächlichen Absender-Adresse übereinstimmt. Dies liegt daran, dass das Tool die `Return-Path` Adresse nutzt. Entweder muss dann in der Tabelle diese Adresse eingeben werden oder es muss die Option `-f` genutzt werden, die die Absenderadresse aus dem Header `X-Signer` ausliest.
### Schlüsseldatei konvertieren (pkcs#12 nach PEM)
Die Schlüsseldateien müssen im PEM Format unverschlüsselt vorliegen:
**Hinweis:** Da der unverschlüsselte private Schlüssel einen hohen Schutzbedarf hat, muss sichergestellt werden, dass das System ordnungsgemäß abgesichert ist (siehe [*"Standards für sichere Administration"*](https://www.uni-muenster.de/imperia/md/content/iv-sicherheit/standards_f__r_sichere_administration.pdf)), um einen fremden Zugriff auf den privaten Schlüssel zu verhindern! Es ist sinnvoll, ein extra Gruppen-Zertifikat zu verwenden, z. B. "*GRP: Automatischer E-Mail-Versand*" mit entsprechender OU-Angabe.