Mails per UUCP

aus PUG, der Penguin User Group
Wechseln zu: Navigation, Suche

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.