Muss nur noch S-nail 'ne Mail senden

Mailprogramm für Linux

Für einen kleinen Linux-Rechner wie Raspberry Pi o.ä. braucht man meist keinen Mailserver und will vielleicht trotzdem hin und wieder mal eine Mail verschicken. Wenn man Zugang zu einem SMTP-Server hat reicht z.B. auch S-nail. Dieses Programm basiert auf Heirloom mailx, früher bekannt als nail. Der Vorteil dieses Programms ist, dass es nicht im Hintergrund ständig auf eine Mail wartet, gerade bei knappen Ressourcen nicht ganz unwichtig. S-Nail kann auch S/MIME-Nachrichten verschicken und natürlich kann man damit auch EMails empfangen.

Aktuell ist Version 14.9 (14.9.11 bei Debian Buster, 14.9.22 bei Debian Bullseye), noch im Jahr 2022 soll Version 15 erscheinen. Dabei wird es Veränderungen im Syntax geben. In der Konfiguration kann man deswegen derzeit zwischen [v15-compat] und [no v15-compat] wählen.

Installiert wird es mit

sudo apt install s-nail

Die Systemweite Konfiguration lässt sich in der Datei /etc/s-nail.rc anpassen. Individuelle Anpassungen können auch in der Datei ~/.mailrc eingetragen werden. Diese muss erst angelegt und anschließend vor dem Zugriff durch unbefugte geschützt werden.

Standardmäßig versucht s-nail die Emails über sendmail zu verschicken. Allerdings kann man auch einen SMTP zum Verschicken der Emails eingeben. Für GMail wäre das der folgender (v15-Kompatibler) Eintrag:

~/.mailrc
set v15-compat
set from='Your Name <MyName@gmail.com>'
set mta=smtps://USER:PASS@smtp.gmail.com:465

USER und PASS müssen dabei URL encoded sein, außerdem müssen die Zugriffsrechte der Datei auf chmod 0600 gesetzt werden.

Alternativ können die Daten auch in der Datei ~/.netrc gespeichert werden.

~/.mailrc
set v15-compat
set from='Your Name <MyName@gmail.com>'
set netrc-lookup 
set mta=smtps://smtp.gmail.com:465
~/.netrc
machine *.gmail.com login USER password PASS

Natürlich müssen in diesem Fall die Zugriffsrechte auf die Datei ~/.netrc mittels chmod 0600 auf den User beschränkt werden.


S/MIME Verschlüsselung

s-nail kann automatisch ausgehende EMails mit S/MIME signieren und verschlüsseln. Dafür benötigt man ein persönliches Zertifikat und den privaten Schlüssel dazu. Für die Verschlüsselung benötigt man außerdem natürlich das öffentliche Zertifikat des Empfängers. Diese Zertifikate werden von verschiedenen Stellen (CAs) ausgestellt. Dabei ist es weniger wichtig, von vom das Zertifikat ausgestellt wurde. Wichtig ist, dass man dem Aussteller vertraut. Das kann ein kommerzielles Unternehmen sein (wenn man diesem Vertraut) oder eine nichtkommerzielle Organisation bzw. das "Netz des Vertrauens". Dies kommt z.B. bei CAcert zum Einsatz.

Ausgangspunkt ist hier eine PKCS#12-Datei, die das öffentliche Zertifikat und den privatem Schlüssel enthält. Für s-nail muss diese Datei ins PEM-Format konvertiert werden. Dies erfolgt mit openssl:

openssl pkcs12 -in cert.p12 -out certpem.pem -clcert -nodes

Damit wird eine Datei certpem.pem erzeugt, die den privaten Schlüssel und das Zertifikat enthält. Lässt man den Parameter -nodes weg, wird der private Schlüssel zusätzlich mit einem Passwort gesichert. In diesem Fall muss man das Passwort bei der Verwendung der Schlüsseldatei eingeben. Man kann auch beider Teile in einzelne Dateien extrahieren:

openssl pkcs12 -in cert.p12 -out cert.pem -clcerts -nokeys
openssl pkcs12 -in cert.p12 -out key.pem -nocerts -nodes

Damit s-nail anschließend die EMails beim Ausgang automatisch signiert wird die Datei ~/.mailrc entsprechend ergänzt:

set smime-sign
set smime-sign-cert-MyName@gmail.com=certpem.pem

Wenn die Schlüsseldatei mit einem Passwort gesichert wurden, so wird dies von s-nail natürlich benötigt. Dazu kann man das Passwort ebenfalls in die bereits für den Login verwendete Datei .netrc speichern:

machine gmail.com.smime-cert-key login MyName password PASSWORD

Anschließend kann das Versenden von EMail getestet werden:

echo "Testnachricht" | s-nail -s Testmail empfaenger@example.com

Um die EMail vor dem Versenden auch automatisch zu verschlüsseln, muss s-nail das öffentliche Zertifikat des Empfängers kennen. Dazu kann dieses ebenfalls in der Datei .mailrc eingetragen werden:

set smime-encrypt-empfaenger@example.com=empfaenger.pem

Da die Datei .netrc unter anderem die Zugangsdaten für das EMailpostfach und auch das Kennwort für das SMIME-Zertifikat enthält, ist es wichtig, diese Datei vor dem Zugriff durch Dritte zu schützen!

Zusammenfassung

Folgende Einträge sind für einen Account bei GMail und die Verschlüsselung/Signierung mittels S/MIME erforderlich:

~/.mailrc
set v15-compat
set from='Your Name <MyName@gmail.com>'
set netrc-lookup 
set mta=smtps://smtp.gmail.com:465

set smime-sign
set smime-sign-cert-MyName@gmail.com=certpem.pem
set smime-encrypt-empfaenger@example.com=empfaenger.pem
~/.netrc
machine *.gmail.com login USER password PASS
machine gmail.com.smime-cert-key login MyName password PASSWORD
Stand: 02.03.2022