Mails per UUCP
Inhaltsverzeichnis
Einleitung
In der Regel gibt es einen E-Mail Provider der alle Konten beherbergt und E-Mails für die gewünschten Domains empfängt und ablegt. Der Kunde müsste nun diese E-Mails gesondert abrufen, entweder über einen E-Mail Client oder ensprechende Hilfsprogramme, wie [Fetchmail]]. Bei vielen Konten kann dies jedoch recht aufwendig werden, besonders wenn neue Mitarbeiter hinzukommen und andere gehen. Da viele Unternehmen bereits eigene E-Mail Server besitzen, werden dort ebenfalls E-Mail Konten geführt. Um diese doppelte Kontenführung zu vermeiden, ist es sinnvoll die Mailverwaltung komplett auf dem Kunden E-Mail Server abzuwickeln. Der E-Mail Provider nimmt die E-Mails für die Domain nur noch an und legt sie in einem Pool ab, das Einsortieren in die entsprechenden Konten entfällt. Um nun an diesem Pool zu gelangen, stellen einige Provider verschiedene Lösungen zur Verfügung. In diesem Fall, stelle ich das Übertragen dieses "Pools" per UUCP da.
UUCP
Auszug aus Wikipedia:
UUCP (Unix to Unix CoPy) ist ein Protokoll zur Übertragung von Dateien zwischen verschiedenen Computern, insbesondere solchen mit dem Betriebssystem Unix, über große Entfernungen.
Der Provider muss Serverseitig UUCP unterstützen, was heutzutage eine Seltenheit geworden ist. Bei kleineren Provider ist die Wahscheinlichkeit aber dennoch hoch, das dieser UUCP einrichtet.
Installation
Es gibt verschiedene UUCP Implementierungen, die bekannteste ist die Version von Taylor
Um UUCP nutzen zu können, sollte es selbstständlich vorher installiert werden. Dazu werden am besten die Pakete deiner Distribution verwendet.
- Beispiel Debian:
apt-get install uucp
- Beispiel Gentoo:
emerge taylor-uucp
Sollten keine (aktuellen) Pakete vorliegen, kann man sich Taylor-UUCP auch herunterladen und selber kompilieren.
Einrichtung
Wir haben Bertha (der Server im Internet, der die Mails für unsere Domains, empfängt) und Frieda (der E-Mail Server der Firma). Ein Merkmal von UUCP ist, das die Konfiguration auf beiden Seiten fast identisch ist. Kümmern wir uns zuerst um Bertha.
Bertha
Die Konfigurationsdateien liegen zumeist unter /etc/uucp. Dort befinden sich in der Regel bereits fertige Dateien, die nur noch abgeändert müssen. Auf der Seite des Servers müssen folgende Dateien angepasst werden:
- /etc/uucp/config
Diese Datei ist die globale Konfigurationsdatei, in der der Name des Servers steht und die einzelnen Konfigurationsdateien der Clients.
- Beispiel:
nodename bertha max-uuxqts 2 # limit of parallel uuxqts run-uuxqt 1 # run uuxqt after every n packet(s) received sysfile /etc/uucp/sys.frieda # Pfadangabe zu unsere Frieda Konfigurationsdatei
- /etc/uucp/port
Da wir ausschließlich UUCP über TCP benutzen, teilen wir ihm dies in dieser Datei mit:
- Beispiel:
port TCP type tcp
- /etc/uucp/sys.frieda
Diese Datei beinhaltet den Pool den Frieda abrufen kann, einen Benutzernamen sowie das Passwort. Außerdem noch die Kommandos, die Frieda verwenden kann.
- Beispiel:
system frieda #das Gegenüber muss Frieda sein commands rmail rsmtp rgsmtp rcsmtp call-login paulus # Benutzernamen call-password secret # Das Passwort
UUCP verfügbar machen
Damit wären die UUCP Konfigurationen auf Bertha fast abgeschlossen, aber UUCP zum einen muss der UUCP Dienst ja noch irgendwie gestartet werden und die Mails müssen in einen Pool umgeleitet werden. Zum starten, trage ich den UUCP Dienst in die inetd.conf od. xinetd.conf ein.
- Beispiel /etc/xinetd.conf:
service uucp { only_from = 0.0.0.0 port = 540 socket_type = stream protocol = tcp user = uucp server = /usr/sbin/uucico server_args = -I /etc/uucp/config -l type = UNLISTED wait = no }
- Beispiel /etc/inetd.conf:
uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/sbin/uucico -l
Es sollte noch darauf geachtet werden, dass das Verzeichnis /var/spool/uucp existiert und dem Benutzer/Gruppe uucp (chmod uucp:uucp /var/spool/uucp) gehört. Auch das Log Verzeichniss /var/log/uucp sollte existieren, mit gleichen Rechten (chmod uucp:uucp /var/log/uucp). Einige Distributionen arbeiten hier etwas schlampig und achten nicht darauf.
Der xinetd bzw. der inetd sollten an dieser Stelle neugestartet werden.
Mails der Domain nach UUCP umleiten
Damit nun auch die Mails der Domains nach UUCP umgeleitet werden, müssen wir dem MTA ([Damit Frieda sich Bertha gegenüber Authentifizieren kann und Mail Transfer Agent]) dies mitteilen. Da ich nur Postfix verwende, kann ich nur dessen Konfiguration hier aufführen.
Damit Postfix etwas vom UUCP weiß, teile wir ihm das mit Hilfe der /etc/postfix/master.cf mit:
- Beispiel:
uucp unix - n n - - pipe flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
In der Regel, sollte in solcher Eintrag schon vorhanden sein. Wichtig ist darauf zu achten, das Postfix den User uucp verwendet, da es sonst zu Zugriffverletzungen bzw. Zugriffsrechte Problemen kommt.
Das eigentliche "Umleiten" findet jedoch in der /etc/postfix/transport statt. Damit Postfix diese Datei beachtet, muss in die /etc/postfix/main.cf folgender Eintrag:
- Beispiel:
transport_maps = hash:/etc/postfix/transport
Nun können wir die /etc/postfix/transport editieren:
- Beispiel:
domain.foo uucp:frieda
Nicht vergessen ein postmap /etc/postfix/transport , sowie ein postfix reload auszuführen.
Damit werden alle Mails, die an die Domain "domain.foo" gehen, an UUCP weitergereicht. Diese wandern dann in einen Pool, der dann von frieda abgeholt werden kann.
An dieser Stelle wäre es sinnvoll, eine Testmail abzusenden, an die Domain "domain.foo". Auf zwei Konsolen wirft man am besten gleich ein:
- Beispiel:
tail -f /var/log/mail.log
tail -f /var/log/uucp/Log
Ist die Mail korrekt angekommen, sollte ein neues Verzeichnis frieda in /var/spool/uucp entstanden sein:
- Beispiel:
ls -al /var/spool/uucp/frieda/ drwxr-xr-x 4 uucp uucp 35 Nov 6 2004 . drwxr-xr-x 12 uucp uucp 4096 Mar 19 2004 .. drwxr-xr-x 2 uucp uucp 27 Nov 6 2004 C. drwxr-xr-x 2 uucp uucp 19 Nov 6 2004 D. -rw------- 1 uucp uucp 4 Nov 6 2004 SEQF
Hat alles geklappt, wäre wir hier auf Bertha fertig.
Frieda
Hier lässt sich das Ganze etwas kürzen. Die Einrichtung ist nahezu identisch. Da ich es bevorzuge Mails von Frieda nach wie vor per SMTP zu versenden, können wir uns den xinetd/inetd und Postfix Teil sparen. Es müssen nur die UUCP Konfigurations Dateien angepasst werden.
- /etc/uucp/config
Auch hier wieder, die globale Konfigurations Datei.
- Beispiel
nodename frieda sysfile /etc/uucp/sys # Die Konfigurationsdatei für den Abruf von Bertha max-uuxqts 2 # limit of parallel uuxqts run-uuxqt 1 # run uuxqt after every n packet(s) received
- /etc/uucp/sys
Die Konfigurationsdatei für Bertha.
- Beispiel:
system bertha commands rmail rnews command-path /usr/bin /usr/sbin call-login paulus call-password secret time any address domain.foo # FQDN oder IP-Adresse port TCP protocol et chat ogin: \d\L word: \P
Unter Umständen kann es noch hilfreich sein, in die /etc/hosts Bertha einzutragen:
- Beispiel:
123.124.124.85 bertha
Ein ping bertha sollte eine korrekte Antwort zurückliefern, wenn nicht eine Firewall die Pings blockt etc.
Mails von Bertha abrufen (lassen)
Damit wir nun unsere testmail abrufen können, werden wir zum User uucp und starten den Abruf.
su - uucp /usr/sbin/uucico -f --debug 7 -S bertha
Das debug 7sorgt dafür, das in /var/log/uucp/Log ordentlich was drinsteht ;-) Es sollte nun die Testmail abgerufen und dem lokalen SMTP server übergeben werden. Es versteht sich von selbst, das dieser sich für domains von "domains.foo" verantwortlich fühlt, ansonsten werden diese Mails abgelehnt.
Damit das Ganze auch per cron funktioniert, habe ich eine Datei dafür:
- Beispiel /usr/local/bin/uucp-poll
#!/usr/bin/perl -w # # $Id$ # # Running uucico as user uucp for system uranus # $ENV{'PATH'} = '/bin:/usr/bin'; system "/usr/sbin/uucico -S bertha -p TCP -x chat,handshake"; system "/usr/sbin/sendmail -q";
Nicht vergessen, Datei ausführbar zu machen:
chmod +x /usr/local/bin/uucp-poll
Dieser Cronjob muss als User UUCP ausgeführt werden, sonst kommt es zu Fehlermeldungen.
Ende
Hat alles geklappt, steht der Einrichtung weiterer Domains nichts mehr im Wege.
TODO
Da diese Version Kennwörter und Mails unverschlüsselt überträgt, ist es sinnvoll den Datenweg zu sichern. Dies geschieht z.b über SSH bzw. stunnel. Ich werde demnächst den Weg über Stunnel beschreiben, bis dahin kann man auch diesen Artikel verwenden.