Email met UUCP: professionele oplossing voor inbellers

ArticleCategory:

System Administration

AuthorImage:

[Photo of the Author]

TranslationInfo:

original in en Guido Socher

en to nl Tom Uijldert

AboutTheAuthor:

Guido gebruikt al jaren UUCP en vindt het de beste manier om je email systeem aan het Internet te koppelen.

Abstract:

UUCP is een oudje onder de Internet protocollen. Het is in veel gevallen al vervangen door modernere protocollen maar het is nog steeds het beste protocol om te gebruiken voor email over inbelverbindingen. Helaas zijn tegenwoordig een groot aantal gebruikers niet op de hoogte van de mogelijkheden van dit protocol en verwachten deze service dan ook niet. Hierdoor zijn er veel ISP's die deze service niet meer bieden.

ArticleIllustration:

[Illustratie]

ArticleBody:

Inleiding

UUCP is al een heel oud protocol en werd vooral gebruikt voor het kopiëren van bestanden tussen diverse Unix machines. Vandaar de naam "Unix to Unix CoPy". Deze oude machines waren niet permanent verbonden met het netwerk. In de plaats daarvan werd regelmatig ingebeld op andere machines voor het overseinen van data.

Om het bestand mynotes.txt te kopiëren naar een ander systeem, genaamd "mars", kan men het volgende commando gebruiken:

$ uucp mynotes.txt mars!~/mynotes.txt
Het bestand wordt tijdelijk in een spool directory opgeslagen en overgeseind naar het betreffende systeem zodra er een verbinding is gemaakt. Tegenwoordig wordt dit als zodanig niet meer gebruikt en nemen meer moderne protocollen als TCP/IP en scp dit werk over.

UUCP kon echter nog veel meer. Het stelde je in staat een aantal commando's op het andere systeem uit te voeren. Om op data van stdin het commando rnews los te laten op de machine mars kun je het volgende commando geven:

$ cat somedata.txt | uux - mars!rnews
Wederom wordt het commando rnews niet direct uitgevoerd, maar pas nadat een inbelverbinding is gelegd met het betreffende systeem. Ook dit keer wordt het commando geparkeerd in de spool directory.

Wat heeft dit nu te maken met email?
Email is nou typisch een toepassing waarbij het niet uit maakt of de berichten wat worden vertraagd. Normaal gesproken zal je op gezette tijden je email lezen, op een aantal daarvan antwoorden componeren en het vervolgens "versturen". Je wilt deze antwoorden niet de hele tijd op je scherm hebben staan maar ze gewoon "versturen" en doorgaan met andere bezigheden. Of het nu ook daadwerkelijk meteen wordt verstuurd of wat later zal je worst wezen, als het op een gegeven moment maar wordt afgeleverd.

Dit is nu precies wat je betrouwbaar en makkelijk kunt doen met UUCP.

Je eigen email systeem

UUCP is zeer flexibel. Je kan het zo instellen dat je een complete mailserver hebt voor je hele netwerk. Je Linux-doos kan fungeren als het centrale mail systeem voor dit lokale netwerk.

[A private 
mail system connected via dialup]

Een systeem op deze manier opzetten kan heel makkelijk zijn voor het hele gezin en erg economisch voor een klein bedrijf. Je kunt een willekeurig aantal email adressen uitgeven en tegelijkertijd kun je toe met slechts één inbelverbinding naar je ISP. Een bedrijf zal waarschijnlijk regelmatig (bijvoorbeeld ieder uur) inbellen, een gezin kan dit doen als ze voor andere doeleinden toch al moeten inbellen.

Samengevat: Email met UUCP is niet ouderwets. Het is gemakkelijk, economisch en een goede toepassing van UUCP.

Hoe werkt het?

Met UUCP krijg je een eigen MX Domain (MX=Mail Exchanger, het domein-gedeelte van je email adres) toegewezen van je ISP. Als dus bijvoorbeeld je ISP bereikbaar is onder www.my-friendly-isp.com dan zou hij Joe Miller het domein miller.my-friendly-isp.com toe kunnen wijzen. Alle mail, gericht aan dat domein, zal dan naar de mailserver van Joe Miller worden gestuurd via UUCP. Joe kan vervolgens een willekeurig aantal adressen aanmaken en toewijzen zoals: [email protected], [email protected], [email protected]... Wat Joe ook maar wil. Daar Linux altijd een mail-server bevat die alle protocollen aan kan, zoals pop, imap, nfs of gewoon mailbox direct op het bestandssysteem... is er geen beperking aan gebruikers welke mailsystemen ze gebruiken om hun email te lezen.

UUCP is een zelfstandig protocol wat direct op beschikbare hardware kan draaien (een connectie via modem dus, zonder de noodzaak van ppp). Het kan echter ook over TCP/IP draaien, wat een aantal extra mogelijkheden geeft.

Zo kun je bijvoorbeeld een behoorlijke ISP uitzoeken met een goede connectie (backbone) naar het Internet (in Amsterdam bijvoorbeeld) maar inbellen via een willekeurige ISP via goedkope lokale verbindingen. Omdat UUCP toch boven op TCP/IP draait maakt het niet meer uit waar je UUCP-ISP zit. Hij is altijd via Internet bereikbaar.

Het instellen

De meeste Linux distributies hebben al een uucp pakket, wat meestal Tailer UUCP is. Als het niet op je CD's staat kun je het krijgen bij www.airs.com/ian

Behalve UUCP heb je ook nog een mail systeem nodig dat UUCP begrijpt. Hier gaan we in op sendmail maar de meeste andere systemen kennen ook UUCP. Een systeem dat UUCP begrijpt zal over het algemeen een commando rmail in het rpm of deb pakket hebben.

Post wordt je toegestuurd via commando's vanaf een andere machine, zoals in het voorbeeld met uux/rnews hierboven. rmail is het commando dat de mail ontvangt en doorstuurt via de UUCP-"pijplijn" voor verwerking in het mailsysteem.

Je ISP heeft de volgende gegevens nodig voor het opzetten van iets dergelijks:

Gegevens die je van je ISP nodig hebt:

Stap-voor-stap testen

UUCP over TCP/IP maakt gebruik van poort 540. Je kunt dit dus gemakkelijk uittesten voordat je UUCP gaat instellen. Om zeker te zijn van een goede verbinding en instelling kun je het volgende commando gebruiken:
$ telnet uucp.my-friendly-isp.com 540
Je krijgt dan het volgende:
Trying 1.2.3.42...
Connected to uucp.my-friendly-isp.com
Escape character is '^]'.
login:
Voer je naam en wachtwoord in:
Trying 1.2.3.42...
Connected to uucp.my-friendly-isp.com
Escape character is '^]'.
login: linux
Password: tux.1234
Shere=mfic
Na een geslaagde login zal de andere kant antwoorden met "Shere", wat betekent "System here", gevolgd door de naam van het systeem (controleer dit met de naam, opgegeven door de ISP).
Om de verbinding te verbreken kun je ctrl-] intikken en q voor het verbreken van de telnet verbinding:
^]
telnet> q
Connection closed.
Nu weet je zeker dat alles goed is opgezet aan de andere kant.

Instellen van het UUCP systeem

Om nu email te kunnen verzenden en ontvangen via UUCP moet je dit nog instellen via de UUCP configuratiebestanden. Deze zijn meestal te vinden in /etc/uucp. De volgende bestanden moeten worden aangepast: Al deze bestanden moeten eigendom van gebruiker uucp zijn en van de groep uucp. Het bestand call mag niet leesbaar zijn voor iedereen ($ chmod 640 call). Logbestanden worden meestal naar /var/log/uucp geschreven en hierin moet een subdirectory aanwezig zijn met de naam van het systeem waarmee verbinding wordt gelegd. Vergewis je ervan dat gebruiker uucp schrijfrechten heeft in beide directories.

call
# call file
# The format is just remote-system-name login-name password.
mfic linux tux.1234

port
# port file
# No need to change this
type tcp
port tcp
service 540

sys
# sys file
# defines information about the remote system
# system name of your ISP:
system mfic
# the server of your ISP:
address uucp.my-friendly-isp.com
# do not change the next 3 lines, see documentation of Tailer UUCP
# for details
time Any 2
port tcp
chat-timeout 60
# allowed commands:
commands rmail
# take the password and user name from the call file:
call-login *
call-password *
# do not change the next line:
chat ogin: \L assword: \P
#

config
# The config file just defines the path names
# of the other files and directories as well as your
# system name.
# Your system name:
nodename oblelix
# max number of request from other systems to execute in parallel:
max-uuxqts 2
# The UUCP spool directory
spool /var/spool/uucp
# The other fields are usually already compiled into
# as defaults:
# pubdir /var/spool/uucppublic
# logfile /var/log/uucp/Log
# statfile /var/log/uucp/Stats
# debugfile /var/log/uucp/Debug
# callfile /etc/uucp/call
# ....
Start na het instellen het programma uuchk, waarschijnlijk te vinden in sbin: /usr/sbin/uuchk

Deze geeft uitvoer die een samenvatting geeft van je instellingen, inclusief standaard waarden die je niet hebt ingesteld. De machine van je ISP (uucp.my-friendly-isp.com in ons voorbeeld) zul je terugzien onder "phone number":

Phone number uucp.my-friendly-isp.com
Dit lijkt gek maar is wel correct voor UUCP over TCP/IP. Ga vooral na dat directories, log- en debug-bestanden naar de juiste plaats wijzen en eigendom zijn van gebruiker uucp.

Je zou nu email moeten kunnen ontvangen via UUCP maar je lokale mail-programma (MTA=Mail Transfer Agent) moet nog weten dat hij mail voor domein miller.my-friendly-isp.com mag afhandelen. Instelling hiervan hangt af van het programma dat je gebruikt als MTA. In het geval van sendmail moet je de volgende regel hebben in het bestand /etc/sendmail.cw:

# sendmail.cw define the domains for which we handle mail
miller.my-friendly-isp.com
We zijn nu klaar voor het testen van email-ontvangst via UUCP. Het versturen zal nog niet werken daar sendmail nog niet volledig is ingesteld. Geef het volgende commando:
$ /usr/sbin/uucico -x 11 -S mfic
mfic is de UUCP systeemnaam van my-friendly-isp.com

Open een tweede terminal-window en bekijk de resultaten met $ tail -f /var/log/uucp/Debug. De "-x 11" geeft het hoogste debug-niveau aan en dien je alleen tijdens testen te gebruiken. Je ziet nu alle details van het UUCP-protocol. Let op eventuele fouten. Wanneer je op het eind het volgende ziet:

uucico mfic - (2001-06-22 20:20:57.73 1020) Call complete (31 seconds 42835 bytes 1381 bps)
dan werkt alles. Gefeliciteerd!

Geef vervolgens het commando "uulog". Dit geeft een meer compacte samenvatting betreffende de mails die je via UUCP/mail hebt ontvangen.

Het instellen van sendmail voor het versturen van mail via UUCP

Sendmail gebruikt de m4 pre-processor voor het configureren. Andere mailsystemen zoals postfix hebben leesbare configuratiebestanden en kunnen direct worden veranderd. We zullen ons hier beperken tot sendmail omdat ik daar ervaring mee heb. Je wordt van harte uitgenodigd om je ervaringen met andere MTA's met ons te delen via de "talkback" pagina hieronder. Voor postfix heb ik gezien dat je kennelijk alleen het bestand transport/transport.db hoeft in te stellen en uucp moet definiëren in master.cf. Dat schijnt het wel te zijn maar ik heb niet veel ervaring met postfix.

Het zou kunnen zijn dat het instellen via m4 geen onderdeel uitmaakt van de sendmail-distributie. Zoek op je CD's naar een pakket met de naam "sendmail-cf".

Maak een nieuw bestand sendmail-uucp.mc aan in de directory cf van sendmail (waarschijnlijk iets als /usr/lib/sendmail- cf/cf):


#divert(-1)
# `This is config sends outgoing mail via uucp using /usr/bin/uux
#
# 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, Jan 28 2001, without DNS')
undefine(`BITNET_RELAY')
undefine(`DECNET_RELAY')
undefine(`UUCP_RELAY')
OSTYPE(`linux')
MASQUERADE_AS(miller.my-friendly-isp.com)
MASQUERADE_DOMAIN(localdomain)
MASQUERADE_DOMAIN(localhost)
# ` add any local hostnames here:'
MASQUERADE_DOMAIN(philosophus)
# ` 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:mfic)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
Pas het bestand aan jouw systeem aan en compileer met het commando:
$ m4 sendmail-uucp.mc > sendmail.cf
Kopieer het bestand sendmail.cf naar /etc en herstart sendmail met:
$ /etc/rc.d/init.d/sendmail restart
Het hierboven gegeven pad is specifiek voor RedHat/Mandrake. Dit verschilt voor Suse, Debian, etc...

Het volgende moet in het bestand /etc/service.switch staan:

hosts   files
aliases files
Verstuur nu een email naar iemand. Dit kun je doen met je favoriete mail-programma of direct vanaf de prompt met:
$ echo "hello john, just testing..." | Mail [email protected]
Deze mail zal niet direct worden verstuurd. Het zal daarentegen klaar worden gezet in een wachtrij van UUCP voor verzending. Dat kun je zien met het volgende commando:
$ uustat -a
uustat zal de volgende uitvoer geven:
mfic.CRJjd4uAAAPs mfic joe 07-24 20:19 Executing rmail [email protected]
(sending 50 bytes)
Start nu het volgende:
$ /usr/sbin/uucico -x 11 -S mfic
mfic is wederom de UUCP-naam van my-friendly-isp.com. Je kunt nu het versturen volgen via het Debug-bestand.

Geheel geautomatiseerd

Maak het volgende /usr/bin/uumail script:

#!/bin/sh
hostn=uucp.my-friendly-isp.com
# first check that the server of my ISP is reachable.
# This requires a more recent version of ping where you can
# specify the timeout:
if ping -w 3 -qn -c 1 $hostn > /dev/null ; then
  /usr/sbin/uucico -S mfic
  #sleep 1
  #uulog -s mfic -5
else
  echo "ERROR: $hostn is down"
  exit 1
fi

Maak het uitvoerbaar via $ chmod 755 /usr/bin/uumail en laat het lopen om te zien of het werkt.

Om automatisch email's uit te wisselen iedere keer dat je verbinding legt, kun je de regel /usr/bin/uumail toevoegen aan /etc/ppp/ip-up.

Ok, dat is het dan. Je mailsysteem is klaar.

Afrondende klusjes

Het mailsysteem is nu volledig ingesteld. Alle gebruikers (/etc/passwd, commando adduser) kunnen nu automatisch mail versturen en ontvangen. Deze mail zal als gebruikelijk op worden geslagen in de buffer-directories onder /var/spool/mail en kan lokaal worden gelezen. Indien je wilt dat gebruikers het ook kunnen lezen via pop3 of imap dan zul je nog een pakket moeten installeren met de naam imap die de achtergrondprocessen (daemons) /usr/sbin/imapd en /usr/sbin/ipop3d aanlevert. Deze kun je automatisch laten opstarten door het commentaarsymbool te verwijderen uit de volgende twee regels van het bestand /etc/inetd.conf:

pop-3   stream  tcp     nowait  root    /usr/sbin/tcpd  ipop3d
imap    stream  tcp     nowait  root    /usr/sbin/tcpd  imapd

Als je xinetd hebt dan zul je een configuratiebestand hiervoor aan moeten maken (zie ook het _LF_ artikel 175 hierover). Vergeet ook niet toegang te regelen in het bestand /etc/hosts.allow wanneer gebruikers via een andere machine hun mail willen benaderen:

# hosts.allow , tcp wrapper config file
# anybody can get access to imap:
imapd: ALL
# pop3 is only allowed from 2 hosts:
ipop3d: 10.0.0.1, 10.0.0.2, 127.0.0.1

Een geschikte ISP vinden

Om een goede en betrouwbare Internet Service Provider te vinden met UUCP in de aanbieding kan nog een hele klus zijn. De meeste ISP's hebben het namelijk voorzien op Mr. WeetIkVeel van der StandaardPC.

Ik ken twee redelijke ISP's in Duitsland die ook email over UUCP bieden:

Beide zijn in wezen coöperaties waarbij je je aansluit om de service te verkrijgen. Kost je rond de 11 tot 20 Euro per maand.

We kunnen bij linuxfocus.org ook een beperkt aantal email connecties over UUCP aanbieden voor de echte linux-fans wanneer je onze organisatie steunt, hetzij financieel dan wel door met ons samen te werken. Neem bij interesse contact met me op.

Een goede manier om een ISP met UUCP te vinden in je eigen land is wellicht het raadplegen van zoekmachines als Google. De kleinere ISP's die wat meer klant- en service-gericht zijn zullen dit hoogstwaarschijnlijk in hun pakket hebben.