uucpssh.org: UUCP e-mail für Linuxfans

ArticleCategory: Hardware

SystemAdministration

AuthorImage:[Here we need a little image from you]

[Photo of the Author]

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in en Guido Socher

en to de Guido Socher

AboutTheAuthor:[A small biography about the author]

Guido bevorzugt UUCP e-Mail, weil es sich perfekt in Linux integriert.

Abstract:

In der Windowswelt empfängt man Mails mit POP3 oder IMAP und schickt rausgehende Mail direkt über SMTP. Dieses in unterschiedliche Protokolle aufgesplittete Verfahren verursacht alle möglichen Kopfschmerzen, besonders dann, wenn man laufend einen anderen Internetprovider benutzt.

UUCP ist ein altes Protocoll, aber es ist wirklich eine clevere Lösung, um E-Mail zu senden und zu empfangen. uucpssh.org bietet darüberhinaus noch sehr flexible Weiterleitungsmöglichkeiten.

ArticleIllustration:

uucp mail

ArticleBody:

Einführung

uucpssh.org bietet eine wirklich sehr gute E-Mail Lösung für Linuxbenutzer. Diese Lösung kombiniert E-Mailtransport über UUCP mit der Sicherheit von SSH und bietet zusätzlich noch flexible Weiterleitungsmöglichkeiten.

UUCP ist ein sehr altes Protocol und wurde unrsprünglich benutzt, um Dateien zwischen Unixsystemen zu kopieren. Daher der name "Unix to Unix Copy". Diese frühen Computersysteme waren nicht permanent miteinander verbunden. Über Modem wurden in regelmäßigen Abständen die Daten ausgetauscht. UUCP ist ideal, um Sachen zu transportieren, die eine "batch job" Charakteristik haben, wie z.B. E-Mail oder News.

Heute wird UUCP nicht mehr als allgemeines Medium zum Dateienaustausch benutzt. Es ist aber immer noch sehr gut für E-Mail, speziell dann, wenn man unterwegs ist. Mit UUCP kann man im wireless Lan am Flughafen genauso seine E-Mail lesen und senden wie zu Hause im eigenen Netzwerk. Man muss dazu nicht einen Konfigurationsparameter ändern.

Der technische Teil

Nun werden wir sehen, wie man E-Mail über UUCP durch einen SSH Tunnel konfiguriert.

Für die, die sich jetzt wundern, wie man das unter XP oder 98 macht .... Man braucht Linux! Dies ist eine Lösung speziell für Linux oder Unixsysteme im Allgemeinen.

Ein E-Mailsystem besteht aus MUAs (mail user agents), das Programm, wo man die Mail eintippt und liest, und MTAs (mail transport agents), auch als Mail Server bekannt. Beispiele für MUAs sind mutt, Kmail, Thunderbird, etc... MTAs transportieren die Mail von einem Computer zum anderen. Da UUCP/SSH Transportprotokolle sind, ist es klar, daß wir die UUCP/SSH Lösung benutzen, um MTAs zu verbinden.

In anderen Worden: wir werden lokal auf unserem Linuxcomputer einen Mailserver konfigurieren und dann UUCP anstatt SMTP für reinkommende und rausgehende E-Mail benutzen.

UUCP ist der Transportmechanismus, der die Tatsache, daß wir nicht immer mit dem Internet verbunden sind, vor dem MTA versteckt. UUCP transportiert die Mail als "batch" (Stoß), wann immer wir möchten, daß E-Mail ausgetauscht wird.

SSH ist schließlich das Protokol, mit dem wir UUCP transportieren und die Verbindung zu uucpssh.org aufbauen.

Um uucpssh.org UUCP E-Mail zu nutzen, braucht man seine eigene Domain, da die Verteilung der Mail auf Domainbasis funktioniert. Erst der lokale MTA auf unserem Linuxrechner wird die Mail an die einzelnen Benutzer auf unserem Rechner verteilen.

Da uucpssh.org die Mail nur nach Domain sortiert, hat man selbst die volle Flexibilität beim Benutzernamen (das Zeug was vor dem "@" in der E-Mailadresse steht. Man kann so viele Benuteradressen und Aliase wie man möchte haben und sie jeder Zeit änderen.

Was ist eine MX-domain?

Ein Domainname ist so etwas wie linuxfocus.org, das ist vermutlich den meisten Leuten klar. Um einen Domainnamen zu haben, braucht man einen DNS-Server. Das Internet funktioniert auf Protokollebene nicht mit Namen, sondern mit Nummern, IP Adressen. Ein DNS Server übersetzt einen Namen in eine IP Adresse und diese Nummer wird dann benutzt, um eine Verbindung zwischen zwei Rechnern aufzubauen (z.B zu einem Webserver oder einem Mailserver).

Hat man zwei physikalisch verschiedene Rechner für Webeseiten und FTP, dann muß man diesen unterschiedliche Namen geben. Z.B linuxfocus.org und ftp.linuxfocus.org.
Das ist jedoch bei E-Mail nicht der Fall, weil es einen speziellen DNS Eintrag für Mail gibt: MX (Mail Exchanger). Man kann seine Webseiten auf einem Rechner, linuxfocus.org, haben und gleichzeitig seine linuxfocus.org E-Mail auf einem anderen Rechner bei uucpssh.org (z.B deinName@linuxfocus.org).

Mit anderen Worten: wenn man zu uucpssh.org umzieht, braucht man nur die MX-Domain umziehen lassen.

Die Sache aufsetzen, MTA-Teil

Wir fangen mit der Konfiguration des MTA an. In diesem Artikel werden wir xim, postfix und sendmail besprechen. Jeder von ihnen ist für UUCP geeignet.

Exim 3

Füge folgendes im Hauptteil (am Anfang der Datei) von exim.conf ein:
trusted_users = uucp
primary_hostname = your.own.mail.domain
local_domains = your.own.mail.domain
Im Transportabschnitt füge folgendes hinzu:
# Transport for uucp
uucp:
  driver = pipe
  user = nobody
  command = "/usr/bin/uux -r - ${host}!rmail ${pipe_addresses}"
  return_fail_output = true
Am Anfang (!!) des Abschnittes "router" folgendes einfügen:
# Router for uucp (which domains are uucp domains):
# This must come before lookuphost!
uucphost:
  transport = uucp
  driver = domainlist
  route_list = * uucpssh byname
Die Konfiguration kann mit dem Befehl exim -bV getestet werden und danach startet man exim neu, um die Konfiguration zu aktivieren (/etc/init.d/exit restart).

Exim 4

Füge folgendes im Hauptteil (an Anfang der Datei) von exim.conf ein:
trusted_users = uucp
primary_hostname = your.own.mail.domain
domainlist local_domains =  your.own.mail.domain
domainlist relay_to_domains =
hostlist   relay_from_hosts = 127.0.0.1
In dem TRansportabschnitt füge folgendes hinzu:
# Transport for uucp
uucp:
  driver = pipe
  user = uucp
  command = "/usr/bin/uux -r - ${host}!rmail ${pipe_addresses}"
  path = /usr/local/bin:/usr/bin:/bin
  return_fail_output
Am Anfang (!!) des Abschnittes "router" folgendes einfügen:
# Router for uucp (which domains are uucp domains):
# This must come at the beginning of the router section
uucphost:
  transport = uucp
  driver = manualroute
  domains = ! +local_domains
  route_list = * uucpssh byname
Die Konfiguration kann mit dem Befehl exim -bV getestet werden und danach startet man exim neu, um die Konfiguration zu aktivieren (/etc/init.d/exit restart).

Sendmail

Sendmail nutzt einen m4 Pre-Prozessor für die Konfiguration. Das m4 Konfigurationssystem ist vermutlich nicht im selben Paket wie Sendmail selbst enthalten. Bei den meisten Distributionen heißt das Paket "sendmail-cf" oder ähnlich.

Man legt eine neue sendmail-uucp.mc Datei in dem cf Verzeichnis an (vermutlich /usr/lib/sendmail-cf/cf):

#divert(-1)
# `This is config sends outgoing mail via uucp 
#
# to generate a sendmail.cf out of this .mc file 
# use the sendmail sources
# and run m4 thisfile.mc > sendmail.cf.'
divert(0)
include(`../m4/cf.m4')
VERSIONID(`UUCP, without DNS')
undefine(`BITNET_RELAY')
undefine(`DECNET_RELAY')
undefine(`UUCP_RELAY')
OSTYPE(`linux')
MASQUERADE_AS(your.own.mail.domain)
MASQUERADE_DOMAIN(localdomain)
MASQUERADE_DOMAIN(localhost)
# ` needed if you use an internal domain that does not exist: '
FEATURE(`masquerade_envelope')
FEATURE(always_add_domain)
# ` read allowed domains from cw file: '
FEATURE(use_cw_file)
FEATURE(local_procmail)
# `important for uucp:'
FEATURE(accept_unresolvable_domains)dnl
# `the /etc/passwd entry: mail:*:8:12:mail:/var/spool/mail:'
define(`confDEF_USER_ID',``8:12'')
define(`confSAFE_QUEUE',`True')
define(`confDELIVERY_MODE',`background')dnl
# 'replace mfic by the UUCP system name of your ISP:'
define(`SMART_HOST',uucp-uudom:uucpssh)dnl
define(`confSERVICE_SWITCH_FILE',/etc/service.switch)dnl
define(`confHOSTS_FILE',/etc/hosts)dnl
define(`UUCP_MAILER_MAX',1024000)dnl
MAILER(procmail)dnl
MAILER(local)dnl
MAILER(smtp)dnl
MAILER(uucp)dnl
Diese Datei kompiliert man mit dem Befehl:
m4 sendmail-uucp.mc > sendmail.cf
kopiere die sendmail.cf Datei nach /etc und starte sendmail neu.
/etc/init.d/sendmail restart

In der Datei /etc/service.switch sollte man folgendes eintragen:
hosts   files
aliases files

Postfix

Siehe auch Postfix FAQ (http://www.postfix.org/faq.html#uucp-tcp) und den Abschnitt wie man UUCP als "default transport" benutzt.
In /etc/postfix/main.cf fügt man folgendes ein:
relayhost=uucpssh
default_transport=uucp
und in /etc/postfix/master.cf braucht man diesen Eintrag:
uucp unix - n n - - pipe
  flags=F user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)

Die Sache aufsetzen, UUCP Teil

Die uucp Software ist von http://www.airs.com/ian/uucp.html erhältlich, man sollte aber zuerst die CDs seiner Linuxdistribution checken. Alle größeren Distributionen haben Pakete für UUCP. Falls man trotzdem UUCP selbst aus den Quellen kompilieren möchte, sollte man beachten, daß UUCP zumindest bis Version 1.07 sehr merkwürdige Pfade benutzt. Einige ausführbare Dateien werden z.B nach /usr/lib/uucp installiert. Alle Pakete der Distributionen haben diese Probleme behoben. Bei gentoo gibt es jedoch in älteren Versionen ein Problem. gentoo linux installiert in Version 1.06 die Dateien im richtigen Verzeichnis (/usr/bin, /usr/sbin, /etc/uucp), aber die in die Programme hineinkompilierten Pfade sind in einigen Fällen immer noch falsch.

Ich werde weiter unten einige Tips geben, wie man Probleme mit der UUCP Installation finden kann.

Für die Konfiguaration von uucp solltest du im Verzeichnis /etc/uucp/ zumindest die folgenden Dateien haben:

In der uucp Welt sollte jede Installation von uucp einen Namen haben. Dieser Name wird beim Handshake zweier uucp Systeme zu Beginn ihrer Kommunikation überprüft. uucpssh.org heißt uucpssh (alles in Kleinbuchstaben) und dein Systemname ist das, was du definierst, wenn du einen Account bei uucpssh.org einrichtest. Im unteren Beispiel ist das mailtux.

Editiere die Datei /etc/uucp/sys und füge am Ende das folgende hinzu:
system uucpssh
myname mailtux
time any
address main.uucpssh.org
port SSH
protocol t
remote-send /
remote-receive ~
chat ""
Editiere die Datei /etc/uucp/port und füge am Ende folgendes hinzu:
port SSH
type pipe
command /usr/bin/ssh -C -x -o batchmode=yes uucp@main.uucpssh.org
Editiere die Datei /etc/uucp/call und füge folgendes hinzu:
uucpssh mailtux your-random-string-get-it-from-uucpssh.org-admin-page

Überprüfe jetzt deine Konfiguration durch Laufenlassen des Befehls "uuchk". Korrigiere alle Syntaxfehler, wenn nötig.

Um Emails nach uucpssh.org weiterzuleiten, benutzen wir ssh als user uucp. Stell sicher daß ein User in /etc/passwd mit dem Namen uucp definiert ist und es ein gültiges Home-directory gibt.
Überprüfe auch, dass uucico das s-bit gesetzt hat und zum User uucp gehört. Das Program, wenn es von irgendeinem User ausgeführt wird, muß immer so laufen, als ob es vom User uucp ausgeführt worden wäre. Dasselbe gilt für uux:
-r-sr-sr-x    1 uucp     uucp  225008 Mar  7  2002 /usr/sbin/uucico
-r-sr-xr-x    1 uucp     uucp   93920 Mar  7  2002 /usr/bin/uux

Die Sache aufsetzen, SSH Teil

Wir müssen jetzt einen DSA Schlüssel für ssh generieren und ihn auf die uucpssh.org admin page hochladen. Wie dies gemacht wird, ist ebenfalls auf der admin page beschrieben. Ich wiederhole es hier nur einfach.
- Werde uucp user (su - uucp)
- Führe ssh-keygen -t dsa aus
- Gib kein Passwort an.
- Lade den Inhalt von ~uucp/.ssh/id_dsa.pub auf deine 
  uucpssh.org admin page hoch.

Testen

Sende eine Email an jemanden außerhalb deines Hosts und überprüfe, ob es via uucp in die Warteschlange gepackt wird:
uustat -a

Die Email sollte in den Verzeichnissen /var/spool/uucp/uucpssh/C./ und /var/spool/uucp/uucpssh/D./ landen. Laß
uulog -40
laufen, um zu sehen, was passiert. Überprüfe die log Dateien in /var/log für deinen Mailer und /var/log/uucp für uucp. Diese Dateien können dir einige Hinweise geben, falls etwas nicht funktioniert. Wenn das obige nicht funktioniert hat, dann liegt der Fehler irgendwo in der Konfiguartion deines MTA (mail servers).

Wenn der obige Test OK war, dann teste die SSH Verbindung. Log dich als User uucp (su - uucp als root) ein und laß das folgende laufen:
ssh uucp@main.uucpssh.org -v
Nach dem Akzeptieren des RSA Schlüssels des Servers solltest du einen uucp prompt sehen (etwas wie "Shere...").

Schließlich testen wir noch das Rausschicken unserer sich in der Warteschlange befindenden Email mit dem Befehl:
/usr/sbin/uucico -x 11 -S uucpssh
Das -x11 fügt die maximale Menge an Debuginformationen hinzu. Wenn etwas schief geht, solltest du in /var/log/uucp/Debug Hinweise finden.

Um hereinkommende Emails zu testen, schicke eine Email von außerhalb an yourUserId@your.own.mail.domain und hole dann die Emails mit dem folgenden Befehl von uucpssh.org ab:
/usr/sbin/uucico -x 11 -S uucpssh
Überprüfe bei Problemen wieder /var/log/uucp/Debug. Eingehende Emails werden zuerst in die Warteschlange von /var/spool/uucp/uucpssh/X./ gepackt und dann automatisch an dein MTA geschickt, mit dem Befehl /usr/sbin/uuxqt und /usr/bin/rmail. gentoo linux hatte hier einen Bug: Es suchte nach uuxqt unter /usr/lib/uucp/ und erwartete die Konfigurationsddateien in /usr/conf/uucp. Ich reparierte diese gentoo spezifischen Fehler durch Erzeugen einiger softlinks.
Überprüfe das Log deines MTA und du solltest sehen, daß die Email empfangen und an dich "geliefert" wurde.

Täglicher Gebrauch

Einmal richtig installiert, gib es nicht mehr viel zu tun. Laß einfach das folgende laufen
/usr/sbin/uucico -S uucpssh
uulog -5
um Emails mit dem Internet auszutauschen. Ich bevorzuge es, totale Kontrolle darüber zu haben und laß es manuell durch ein Script laufen, aber du kannst auch das folgende
/usr/sbin/uucico -S uucpssh
zu /etc/ppp/ip-up hinzufügen und es wird jedes Mal ausgeführt, wenn du dich mit dem Internet verbindest.

Links


Viel Spaß mit UUCP mail!