sendmail address rewriting mini-HOWTO

Thomas Roessler, roessler@guug.de,
Vertaald door: Ellen Bokhorst, bokkie@nl.linux.org

v0.0, 6 mei 1998


Dit document is een beknopte beschrijving van hoe het configuratiebestand van sendmail voor dial-up toegang kan worden ingesteld voor de thuisgebruiker.

1. Introductie

We gaan ervan uit dat je het soort Internet toegang hebt welke tegenwoordig op universiteiten en online services het meest gebruikelijk schijnt te zijn: je belt in op het netwerk van je provider met PPP over een seriële verbinding. Je inkomende mail wordt gespoold op de POP- of IMAP-server van je ISP, terwijl uitgaande berichten via SMTP worden verzonden. Je hebt geen eigen domeinnaam, dus voor alles moet je gebruik maken van één adres.

We gaan ervan uit dat je reeds een tamelijk recente versie van Eric Allman's sendmail (tijdens dit schrijven is de huidige versie 8.8.8 en deze voldoet prima) hebt geïnstalleerd.

In dit document wordt voor een deel naar specifieke eigenschappen van een Debian GNU/Linux systeem verwezen; gebruikers van andere distributies zullen dit in de gaten moeten houden.

Zorg dat je de volgende informatie bij de hand hebt:

De te plannen configuratie dient twee hoofddoelen:

  1. Het versturen van mail tussen diverse lokale gebruikers moet mogelijk zijn.
  2. De buitenwereld moet voor de lokale gebruikers het ISP mailadres laten zien, en niet de lokale adressen.

Om dit te bereiken, zullen we gebruik maken van de genericstable feature van sendmail.

2. Bestandsoverzicht

We zullen alle configuratiebestanden van sendmail in een aparte directory onder /etc plaatsen: /etc/mail. Gewoonlijk verwacht sendmail dat deze bestanden direct onder /etc voorkomen. Om problemen te voorkomen, moet /etc/sendmail.cf een symbolische link zijn naar /etc/mail/sendmail.cf.

De volgende bestanden zullen in /etc/mail worden geplaatst:

Een aantal van deze bestanden zullen worden vergezeld door .db bestanden. Deze bevatten hashed databases voor direct gebruik door sendmail.

We gaan ervan uit dat het cf deel van sendmail's directorystructuur onder een directory genaamd /usr/lib/sendmail.cf voorkomt. Dit is het geval op Debian GNU/Linux systemen. Andere distributies plaatsen dit op verschillende lokaties. Raadpleeg alsjeblieft de met je distributie meegeleverde documentatie voor details.

3. Sendmail configureren

3.1 Het hoofdconfiguratiebestand

Sendmail maakt gebruik van een zeer complex regelsysteem voor z'n configuratie. Ondanks dat je hier heel veel handige truuks mee uit kunt halen, is het ongebruikelijk en het kost nogal wat tijd om een sendmail.cf bestand vanaf begin af aan te schrijven. Als je hierin bent geïnteresseerd, zou je dit document nu niet verder moeten lezen, maar in plaats daarvan het "Bat Book" van O'Reilly moeten lezen.

In plaats van deze regels met de hand aan te gaan passen, zullen we vertrouwen op de m4 macro processor om ons configuratiebestand vanuit kant-en-klare delen, die met sendmail worden gedistribueerd, samen te stellen.

Laten we eens kijken naar de eerste regels van het sendmail.mc bestand:


include(/usr/lib/sendmail.cf/m4/cf.m4)
VERSIONID(`sendmail.mc - roessler@guug.de')
OSTYPE(debian)
define(`ALIAS_FILE',`/etc/mail/aliases')

Aan het begin is cf.m4 ingesloten. Dit m4 macro bestand bevat heel veel macrodefinities voor de rest van het bestand. Zorg dat het pad dat je hier opgeeft correct is - het pad dat we in ons voorbeeld weergeven is kenmerkend voor Debian GNU/Linux. De OSTYPE macro wordt gebruikt om een aantal nuttige standaardwaarden voor bepaalde configuratiewaarden te geven. Als je geen Debian systeem gebruikt, zou je hier het woord "debian" door "linux" moeten vervangen. ALIAS_FILE vertelt sendmail waar het moet zoeken naar de lijst met aliassen.

De volgende regels vertellen sendmail gebruik te maken van de genericstable feature, en waar het de benodigde configuratiebestanden kan vinden:


FEATURE(masquerade_envelope) FEATURE(genericstable, `hash
-o /etc/mail/genericstable')
GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain') 

De masquerade_envelope feature vertelt sendmail header rewriting toe te passen op de envelope zender van een bericht. Dit is het mailadres waarnaar externe mailbezorg subsystemen hun foutverslagen met betrekking tot de bezorging van mail en waarschuwingsberichten zullen doorsturen. De generics* bestanden zullen hierna worden uitgelegd.

Nu moeten we een zogenoemde smart host definiëren, dat is een computer die uitgaande mail voor je systeem afhandelt. Dit kan een andere computer zijn dan je ISP's POP en IMAP-servers. Neem contact op met de helpdesk als je twijfelt. De code in het hoofdconfiguratiebestand:


define(`SMART_HOST',`mail-out.je.provider')

Vervang mail-out.je.provider alsjeblieft door de fully qualified hostname van je internet service provider.

De laatste twee regels bestaan uit de "mailer" definities die sendmail nodig heeft om erachter te komen hoe diverse typen mail moeten worden afgehandeld:


MAILER(local)
MAILER(smtp)

Om een sendmail.cf bestand van dit sendmail.mc bestand te genereren, typ je (als root) de volgende opdrachten:


# m4 sendmail.mc > _sendmail.cf
# mv -f _sendmail.cf sendmail.cf

Let op de techniek waarbij m4's uitvoer naar een tijdelijk bestand wordt weggeschreven die daarna naar de juiste lokatie wordt verplaatst. Dit helpt ons te voorkomen dat sendmail deels geschreven configuratiebestanden inleest.

3.2 Adres rewriting

Ten eerste moeten we aan sendmail opgeven welke adressen als lokaal moeten worden aangemerkt (en dus zijn onderworpen aan rewriting). Dit is heel simpel: plaats gewoon de fully qualified hostname van je computer in het bestand /etc/mail/genericsdomain. Om achter de fully qualified name van je host te komen, typ je de volgende opdracht:


 $ hostname -f 

Laten we ons nu gaan bezig houden met de rewriting tabel: /etc/mail/genericstable. Dit bestand bestaat uit door twee spaties gescheiden kolommen. In de eerste kolom staat het lokale adres, in de tweede kolom het email-adres dat daarvoor in de plaats moet worden gebruikt. Het bestand zou er ongeveer zo uit kunnen zien:


harry   harryx@je.isp
maude   maudey@haar.isp
root    fredx@je.isp
news    fredx@je.isp

Voor iedere account op de lokale computer moet één regel voorkomen, zodat automatisch gegenereerde mail die het lokale systeem uitlekt, de correcte header informatie bevat.

Om redenen van performance, maakt sendmail niet direkt gebruik van dit tekstbestand, maar verwacht in plaats daarvan een "hashed" versie. Typ de volgende opdracht om het te genereren:


# makemap -r hash genericstable.db < genericstable

De rewriting regels uit genericstable zijn niet van toepassing op lokale mail of berichten die je van buitenaf ontvangt - de indeling wordt alleen gebruikt als een bericht je lokale systeem verlaat voor je ISP's smart host.

3.3 Aliassen

Het aliassenbestad bevat aanvullende lokale namen die alleen geldig zijn voor lokale berichten. Dit is handig voor administratieve accounts zoals root die automatisch gegenereerde berichten van je systeem ontvangen.

Een redelijk begin voor /etc/mail/aliases zou er als het volgende bestand uit kunnen zien:


root: fred
news: root
postmaster: root
mail: root
www: root

nobody: /dev/null
MAILER-DAEMON: nobody

Dit voorbeeld zal lokale mail voor de root, news, postmaster, mail, en www gebruikers forwarden naar fred, en de berichten voor nobody en MAILER-DAEMON zullen worden doorgestuurd naar /dev/null.

Net als de genericstable, kunnen er in aliases heel veel regels voorkomen. Dus wederom zou het niet efficiënt voor sendmail zijn als we het tekstbestand dat we juist hebben beschreven zouden gebruiken. Hetzelfde mechanisme als voor genericstable wordt gebruikt voor aliases: er wordt een "hashed" database gegenereerd. In plaats van makemap direct te gebruiken, kun je deze keer de opdracht newaliases typen. Het zal automatisch voor alles zorgdragen wat nodig is.

4. Meer leesstof

De sendmail source-distributie bevat heel wat documentatie. Lees het, in het bijzonder het bestand cf/README.

Als je geïnteresseerd bent je in de configuratie-opties van sendmail te verdiepen, koop dan het "Bat Book" van O'Reilly: Bryan Costales, Eric Allman, en Neil Rickert: "sendmail". O'Reilly, 1993.