11. Februar 2011

Automatische Emails vom Server - Teil 2: Verarbeitung

Nachdem die Email mit getmail vom Server geladen wurde [*]
ist nun Zeit die Nachrichten auszuwerten und zu reagieren.

Dafür wird die Konfiguration für procmail angelegt:
cat .procmailrc
MAILDIR=$HOME/procmail
LOGFILE=/var/log/procmail/procmail.log
VERBOSE=off

:0 w
* ^From:.*admin@server.de
* ^Subject:.*IP-Codewort
| $HOME/sendip.sh

:0 w
* ^From:.*admin@server.de|!^FROM_DAEMON
| $HOME/weiter.sh

:0 w
/dev/null
MAILDIR gibt an, wo die Nachrichten abgelegt werden - wenn welche angelegt werden ;-)
Anschließend folgen "Rezepte" für die Bearbeitung der Emails.

Im ersten Rezept werden Nachrichten bearbeitet, deren Absender (From) der Admin ist und die im Betreff das IP-Codewort haben. Diese Nachrichten werden an das Script sendip.sh übergeben (welches noch anlegen werden muss).

Im zweiten Rezept werden die Nachrichten bearbeitet, die vom Admin kommen aber nicht das Code-Wort enthalten ODER alles anderen Nachrichten, die nicht von einem Daemon kommen. Damit sollen Endlosschleifen vermieden werden. Hier werden die Nachrichten an das Script weiter.sh übergeben - welches auch noch angelegt werden muss.

Am Ende werden alle restlichen Nachrichten gelöscht.

Automatische Emails vom Server - Teil 1: Empfang

Ausgangsproblem:
Grundsätzlich sendet der Mini-Server regelmäßig seine dynamische IP mit ddclient an den Dienst DynDns. Dadurch ist er über eine URL erreichbar. Bedingt durch eine Störung bei DynDns hat dies aber nicht funktioniert und somit war der Server von außen nicht erreichbar. Wie kommt man jetzt an die IP?

Lösung:
Per Email, den im Header der EMail ist die IP des Absenders enthalten. Außerdem kann man dann natürlich auch gleich eine EMail verschicken, die die derzeitige IP als Text enthält.

Ansatz:
Natürlich soll der Server nun nicht unnötigerweise ständig die IP-Mail durch die Gegend schicken. Am besten wäre es, wenn er dies nur auf Anforderung macht. Diese Anforderung muss der Server automatisch empfangen und verarbeiten. Eine Möglichkeit wäre also eine EMail. Die kann der Server selbstständig abrufen und auswerten. Aus Sicherheitsgründen soll er dies nur tun, wenn
1. er eine Email von einer festgelegten EMail-Adresse erhält (also zum Beispiel dem Administrator)
2. die Email ein bestimmtes Code-Wort im Betreff enthält


Umsetzung - der Empfang:
Zuerst muss der Server also autark ein Email-Konto abfragen und die enthaltenen Emails bearbeiten. Unter Linux gibt es dafür z.B. die Programme getmail und procmail
Mit getmail wird das Email-Konto abgefragt und die Nachrichten anschließend zur Weiterverarbeitung an procmail übergeben.

Zuerst also die Pakete installieren
apt-get install getmail4 procmail

Anschließend wird ein neuer User sysmail eingerichtet, der sich um die ganze Geschichte kümmert.
adduser sysmail
Der User sysmail soll dabei keinen Zugang zum FTP-Server haben und wird deshalb in die Datei /etc/ftpusers eingetragen. Zusätzlich wird er nach der gesamten Einrichtung für die Bash gesperrt /etc/passwd

Die Konfigurationen für getmail und procmail erfolgen im Home-Verzeichnis von sysmail.
cat .getmail/getmailrc
[options]
delete = false
message_log = /var/log/getmail/getmail.log
read_all = false

[retriever]
type = SimpleIMAPSSLRetriever
server = imap.googlemail.com
port = 993
username = sysmail@server.de
password = ******
#mailboxes = ("INBOX","[Gmail]/Alle Nachrichten")
mailboxes = ("INBOX",)

[destination]
type = MDA_external
path = /usr/bin/procmail
Dabei bedeutet die Optionen, dass
-die Nachrichten nach dem Herunterladen nicht gelöscht werde
-die Log-Datei im entsprechenden Verzeichnis angelegt wird (sysmail braucht dort Schreibrechte!)
-nur neue Dateien heruntergeladen werden

Dann kommen die Angaben zum EMail-Konto. In diesem Fall für der sicheren (SSL-)Zugang über IMAP zum Server von Googlemail. Alternative wäre auch POP3 und ein unsicherer Zugang möglich.
mailboxes gibt an, welche IMAP-Ordner abgefragt werden sollen.

Am Ende noch die Konfiguration für die Weiterverarbeitung, hier werden alle Nachrichten an procmail übergeben. Alternative könnte man die Nachrichten z.B. auch lokal ablegen.

Das Verzeichnis .getmail und die Datei getmailrc sollten nur für den User sysmail lesbar sein:
chmod 700 .getmail; chmod 600 .getmail/getmailrc

Aufgerufen wird getmail als User sysmail mit getmail, da procmail aber noch nicht eingerichtet ist lass wir das.