Sendmail en Fetchmail. Een Multi-User Setup
Noot: deze configuratie gaat uit van Sendmail versie 8.9.x. Kleine verschillen kunnen optreden bij nieuwere versies. Ik gebruik nu MasqMail i.p.v. Sendmail, dus ben niet zo bekend meer met de laatste Sendmail versies.
Inleiding
Omdat Linux een multi-user systeem is, is de mogelijkheid elkaar email te sturen al in het basissysteem aanwezig. Windows-gebruikers bijvoorbeeld zijn gewend in het mail-programma een 'smtp-host' te moeten aangeven; bij een Linux-systeem kan de locale computer fungeren als smtp (Simple Mail Transfer Protocol)-host.
Gebruikers kunnen elkaar dus email sturen binnen het lokale systeem.
Adresseren gebeurt gewoon door gebruikersnaam in te vullen zonder de en de
hostname. Het mailprogramma (bijvoorbeeld pine of mutt) leest de mail die is
ontvangen bij de meeste Linux-systemen uit de directory
/var/spool/mail/<uw inlognaam>
.
Veel mensen kiezen waarschijnlijk voor een programma als Netscape Mail, vullen de smtp- en pop (Post Office Protocol) namen van hun provider in en gebruiken dat systeem om met de buitenwereld te communiceren. Erg elegant is dit niet, want interne mail, bijvoorbeeld van de printerspooler of andere lokale gebruikers wordt dan niet gezien.
Het mailsysteem moet dus alsvolgt worden geconfigureerd (en dat is eenvoudiger dat het lijkt):
- Verzonden email voor buiten het lokale systeem wordt in een wachtrij gezet en verzonden als de gebruiker online gaat. Lokale mail wordt meteen afgeleverd.
- Wanneer een mailtje voor een adres buiten het lokale systeem bestemd is, moet de afzender (bijvoorbeeld wilbert) correct worden veranderd (in wbsoft@xs4all.nl), anders klopt de afzender niet.
- Binnenkomende email, opgehaald van een bepaalde pop-server, moet bij de juiste lokale gebruiker afgeleverd worden.
Twee programma's zijn hiervoor verantwoordelijk: sendmail en fetchmail. Sendmail is een bijzonder complex programma met enorm veel mogelijkheden, waaronder geavanceerde 'address-rewriting rules'. Het programma is daardoor wel erg lastig te administreren. Er zijn alternatieve programma's als qmail (http://www.qmail.org/) en postfix (http://www.postfix.org/) die eenvoudiger zijn te configureren. Echter sendmail is (denk ik) dermate ingeburgerd dat dat het veiligste is om daarmee te beginnen.
Hieronder wordt het opzetten van een goed emailsysteem op een thuis-pc met meerdere gebruikers en internettoegang stap voor stap uit de doeken gedaan. Er wordt vanuit gegaan dat er een werkende internetverbinding kan worden gemaakt.
Sendmail
Sendmail van Eric Allman is de de facto standaard Mail Transport Agent (MTA) van het internet. Sendmail bestond al vanaf de eerste jaren van het internet, en transporteert naar schatting zo'n 80% van al het emailverkeer. De homepage van sendmail is http://www.sendmail.org.
- Installeer
sendmail
(afhankelijk van distributie). - Maak een bestand
sendmail.mc
met de volgende inhoud:
include(/usr/share/sendmail/m4/cf.m4) VERSIONID(`sendmail.mc - wilbert berendsen') OSTYPE(linux)dnl define(`SMART_HOST',`smtp.xs4all.nl')dnl FEATURE(`expensive')dnl FEATURE(`masquerade_envelope')dnl FEATURE(`always_add_domain')dnl FEATURE(`local_procmail', `/usr/bin/procmail')dnl FEATURE(`genericstable', `hash -o /etc/mail/genericstable.db')dnl GENERICS_DOMAIN(`localhost nutnix.wbsoft.nl')dnl MAILER(local)dnl MAILER(smtp)dnl LOCAL_CONFIG Cw localhost nutnix.wbsoft.nl
Let op de aanhalingstekens (linksom en rechtsom)! Overal waar u
nutnix.wbsoft.nl
ziet staan vult u de computer- en domeinnaam van uw
eigen computer in. Eventueel is alleen 'localhost' voldoende. Het pad naar
procmail moet uiteraard kloppen. We gebruiken dit programma voor het afleveren
van de mail. Ook de in de eerste regel vermelde include directory kan
verschillen. Kijk even waar sendmail's share-directory zich bevindt.
Achter 'SMART_HOST' vult u de computer in die buitenlokale mail kan verzenden, dus de smtp-server van uw provider. Het voorbeeld hier geldt voor xs4all.
sendmail.cf
dat sendmail kan lezen. Doe dit alsvolgt (als root):
m4 sendmail.mc > /etc/sendmail.cf
Door de FEATUREs masquerade_envelope en genericstable zijn we in staat om adressen te herschrijven van afzenders voor mail naar buiten de lokale machine.
Standaard gebeurt dit echter voor alle mail, dus ook de lokale. Dat moeten we dus uitzetten en dat doen we alsvolgt:
Open het bestand /etc/sendmail.cf
in uw favoriete editor (bv.
pico) en zoek de sectie
################################################## ### Local and Program Mailer specification ### ################################################## ##### @(#)local.m4 8.23 (Berkeley) 5/31/96 ##### Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=10/30, R=20/40, T=DNS/RFC822/X-Unix, A=procmail -Y -a $h -d $u Mprog, P=/bin/sh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/, T=X-Unix, A=sh -c $u
enz.enz. op. Nu wordt het tricky! Ga een paar regels naar beneden, naar:
# # Envelope sender rewriting # S10 R<@> $n errors to mailer-daemon R$+ $: $>50 $1 add local domain if needed R$* $: $>94 $1 do masquerading
en schakel de laatste regel uit door er een # voor te zetten:
#R$* $: $>94 $1 do masquerading
Doe nu hetzelfde bij
# # Header sender rewriting # S30 R<@> $n errors to mailer-daemon R$+ $: $>50 $1 add local domain if needed R$* $: $>93 $1 do masquerading
Zet ook hier weer een # voor de laatste regel:
#R$* $: $>93 $1 do masquerading
Op deze manier wordt voorkomen dat maskering van adressen ook plaatsvindt bij lokale email.
wilbert
buiten het systeem wbsoft@xs4all.nl
.
Maak een bestand /etc/mail/genericstable
met de volgende inhoud:
localname email@some.host
In ons voorbeeld dus:
wilbert wbsoft@xs4all.nl
Vul voor iedere lokale gebruiker in wat nodig is! Dus:
pietje pieter.h.j.k@een.of.ander.domein jantje j.klaassen@fun.edu
enz.enz.
genericstable.db
met het volgende commando:makemap hash /etc/mail/genericstable.db < /etc/mail/genericstable
sendmail
in de achtergrond gestart wordt met de
volgende optie: -bd
. Meestal is dit al in orde. Maar voor de zekerheid
is het goed het opstartscript van sendmail /sbin/init.d/sendmail
of
/etc/rc.d/sendmail
er even op na te kijken.
Bij SuSE's distributies kunnen sendmail-argumenten worden ingesteld in
/etc/rc.config
. Wees er zeker van dat SENDMAIL_TYPE="no"
staat
ingesteld! Anders gaat uw moeizaam gemaakte sendmail configuratie weer
verloren, omdat SuSE's SuSEconfig automatisch een sendmail.cf
aanmaakt.
/etc/rc.d/sendmail stop /etc/rc.d/sendmail start
En om de mail tijdens een openstaande internetverbinding weg te sturen typt u eenvoudig:
/usr/sbin/sendmail -q
Mocht het niet lukken stuur mij uw sendmail.mc
en sendmail.cf
en ik kijk of ik kan helpen.
Ik geef toe dat dit wat ingewikkeld is, en
het zijn ook precies dit soort dingen die in de Linux-toekomst
gemakkelijker moeten kunnen. Update mei 2002: Dit was 1999;
tegenwoordig kan het inderdaad veel makkelijker. O.a. via MasqMail,
maar ook met hulp van handige configuratietools.
Fetchmail
Fetchmail is geschreven door Eric S. Raymond. Kijk op de homepage voor een beschrijving van de ontstaansgeschiedenis en Open Source software-ontwikkeling in het algemeen. Homepage van Fetchmail: http://www.tuxedo.org/~esr/fetchmail/.
Het instellen van fetchmail is in ieder geval een stuk simpeler dan bij sendmail.
- Installeer
fetchmail
. Wordt misschien aangeboden in een pakketje samen met andere mail en pop-utilities. - Maak een bestand
.fetchmailrc
in uw home directory met de volgende inhoud:
poll pop.xs4all.nl with proto POP3 user "wbsoft", with password "wachtwrd", is wilbert here warnings 3600
Vul op de plaats van:
pop.xs4all.nl
- pop server van uw provider
wbsoft
- uw loginnaam bij de provider
wachtwrd
- uw wachtwoord bij de provider
wilbert
- uw gebruikersnaam op de lokale pc
in.
chmod 0600 .fetchmailrc
voor onbevoegden ontoegankelijk maken.
fetchmail -a
om uw mail op te halen.
Fetchmail stuurt de mail door naar de SMTP-server (sendmail) die in de
achtergrond draait, en die bezorgt de mail bij de juiste lokale gebruiker in
de mail spool directory /var/spool/mail/<uwnaam>
.
Alternatief: MasqMail
Kortgeleden kwam ik op Freshmeat de mail transfer agent (MTA) MasqMail tegen.
Deze moderne, simpele tool is nog volop in ontwikkeling, maar draait op mijn LFS systeem nu al wekenlang naar volle tevredenheid (versie 0.1.13).
MasqMail kan mail versturen tussen locale gebruikers en over het Internet (mèt herschrijven van afzenders!). Aardige punten:
- kan vele mail delivery agents (MDA) gebruiken (procmail is een hele goeie!)
- ondersteunt aliassen
- per lokale user kan een andere SMTP server geconfigureerd worden (helaas niet door de users zelf, de gebruikers kunnen natuurlijk wel hun eigen mailer configureren om dat te doen)
- kan ook mail rechtstreeks naar bestemming sturen
- MasqMail laat zich gewoon als /usr/sbin/sendmail aanroepen, dus programma's als cron, gimp en lpd komen niet in de war
- met de -g (Get) optie kan MasqMail ook nog eens mail van een POP3 account ophalen
- Belangrijk: goede documentatie en configuratievoorbeelden.
MasqMail kan sendmail voor stand-alone multi-user PC's of thuisnetwerken dus volledig vervangen, en als je een pop3 account hebt ook fetchmail!
Wie eens buiten het pad van zijn distributie wil wandelen moet MasqMail zeker eens proberen.
Over dit document
- december 1999
- Eerste opzet.
- mei 2000
- Verbeterd qua indeling en layout.
- nov 2000
- Update voor sendmail >= 8.9 en overgezet naar APT (Almost Plain Text), omgezet naar HTML met AptConvert (http://www.pixware.fr/).
- mei 2001
- Overgezet naar texinfo, sectie over MasqMail toegevoegd.
- mei 2002
- Overgezet naar XHTML. Dode links verwijderd. Sendmail info is licht verouderd.
December 1999 - Mei 2001 - Mei 2002
Laatste update: di mei 7 17:38:48 CEST 2002