För stora sajter kan det vara värt att välja sendmail på grund av det är "otroligt lättanvänt" (väldigt relativ känsla när man känner till qmail) men du måste avgöra om du vill ha sendmail+IDA eller sendmail 8.x:
Kom ihåg: linuxnybörjare eller personer som vill ha säkerhet och/eller lätt konfiguration bör istället använda smail eller qmail, vilka är lättare att använda och säkrare.
Om din distribution inte innehåller ett installeringsfärdigt paket med sendmail (.rpm för RedHat, Caldera och Suse, .deb för Debian) så ladda hem källkoden och kör:
cd / ; tar -zxvf sendmail5.67b+IDA1.5.tgz
/usr/local/lib/mail/CF
och kopiera exempelfilen local.m4
till
ditt_datornamn.m4
.Editera denna fil och byt ut hostname, aliases och smarthost mot de som är korrekta för din
sajt. Standardfilen är för en endast-uucp sajt som har domäniserade huvuden och som 'pratar' med en smart värd.
Kör sedan make ditt_datornamn.cf
och flytta resultatet till /etc/sendmail.cf
README.linux
.Du kommer att behöva ändra lite grann i filerna så att Makefile
fungerar. Ändra bara i .m4
filen, kör
make sendmail.cf
och börja testa det.
uucpxtable
.
.cf
-fil så måste du frysa
konfigurationen med /usr/lib/sendmail -bz
för att ändringarna skall ha någon effekt.Du bör också updatera din version till åtminstonde 5.67b eftersom det finns ett elakt säkerhetshål i 5.67a och
tidigare. En annan bra sak är att, om du har mail.debug satt och du kör syslogd, så kommer dina
inkommande och utgående e-postmeddelanden att loggas. Se filen /etc/syslog.conf
för mer information.
Källkoden för sendmail+IDA finns på ftp://vixen.cso.uiuc.edu. Det krävs inga patchar om du kör en kärna som 1.00.
Om du kör en kärna >1.1.50, så kommer du att få skoj med att ta bort de flesta Linux-specifika patchar som nu finns i vanilla källkoden. (Jag *sade* ju att sendmail+IDA bara var för gamla kärnor :-)
Det är extremt självklart var detta behövs: kör bara make
och när det blir fel, gå till den raden i
källkoden och kommentera bort den Linux-specifika koden som finns där.
Om du skall köra sendmail+IDA så rekommenderar jag starkt att du tar versionen sendmail5.67b+IDA1.5 eftersom alla nödvändiga Linux-specifika patchar nu finns i vanilla källkoden och flera säkerhetsläckor som FANNS i de gamla versionerna har täppts till.
Nu är linux kärnan på 2.0 och du bör välja sendmail 8.x istället för sendmail+IDA.
sendmail.m4
Sendmail+IDA kräver att du sätter upp en sendmail.m4
fil istället för att ändra direkt i filen
sendmail.cf
. Det fina med detta är att det är enkelt att sätta upp konfigurationer som är extremt svåra
(om inte totalt omöjliga för de flesta) att sätta upp korrekt i smail eller traditionell sendmail.
En sendmail.m4
fil som motsvarar ovanstående exempel med smail ser ut som följer:
dnl #------------------ SAMPLE SENDMAIL.M4 FILE ------------------ dnl # dnl # (the string 'dnl' is the m4 equivalent of commenting out a line) dnl # dnl # you generally don't want to override LIBDIR from the compiled in paths dnl #define(LIBDIR,/usr/local/lib/mail)dnl # where all support files go define(LOCAL_MAILER_DEF, mailers.linux)dnl # mailer for local delivery define(POSTMASTERBOUNCE)dnl # postmaster gets bounces define(PSEUDODOMAINS, BITNET UUCP)dnl # don't try DNS on these dnl # dnl #------------------------------------------------------------- dnl # dnl # names we're known by define(PSEUDONYMS, myhostname.subdomain.domain myhostname.UUCP) dnl # dnl # our primary name define(HOSTNAME, myhostname.subdomain.domain) dnl # dnl # our uucp name define(UUCPNAME, myhostname)dnl dnl # dnl #------------------------------------------------------------- dnl # define(UUCPNODES, |uuname|sort|uniq)dnl # our uucp neighbors define(BANGIMPLIESUUCP)dnl # make certain that uucp define(BANGONLYUUCP)dnl # mail is treated correctly define(RELAY_HOST, my_uucp_neighbor)dnl # our smart relay host define(RELAY_MAILER, UUCP-A)dnl # we reach moria via uucp dnl # dnl #-------------------------------------------------------------------- dnl # dnl # the various dbm lookup tables dnl # define(ALIASES, LIBDIR/aliases)dnl # system aliases define(DOMAINTABLE, LIBDIR/domaintable)dnl # domainize hosts define(PATHTABLE, LIBDIR/pathtable)dnl # paths database define(GENERICFROM, LIBDIR/generics)dnl # generic from addresses define(MAILERTABLE, LIBDIR/mailertable)dnl # mailers per host or domain define(UUCPXTABLE, LIBDIR/uucpxtable)dnl # paths to hosts we feed define(UUCPRELAYS, LIBDIR/uucprelays)dnl # short-circuit paths dnl # dnl #-------------------------------------------------------------------- dnl # dnl # include the 'real' code that makes it all work dnl # (provided with the source code) dnl # include(Sendmail.mc)dnl # REQUIRED ENTRY !!! dnl # dnl #------------ END OF SAMPLE SENDMAIL.M4 FILE -------
Till skillnad från de flesta Unixdistributioner, så har inte Linux en lokal e-postutdelare som standard. Men deliver eller procmail är vanligtvis installerat, så ingen komplexitet kommer att läggas till denna redan komlexa konfiguration. Jag rekommenderar att använda de vanligt förekommande deliver eller procmail programmen, som kan vara valbara paket i en Linuxdistribution.
För att göra detta så måste du definiera en LOCAL_MAILER_DEF
i filen sendmail.m4
som pekar på en fil
som ser ut som följer:
# -- /usr/local/lib/mail/mailers.linux -- # (local mailers for use on Linux ) Mlocal, P=/usr/bin/deliver, F=SlsmFDMP, S=10, R=25/10, A=deliver $u Mprog, P=/bin/sh, F=lsDFMeuP, S=10, R=10, A=sh -c $u
Det finns även inbyggt standard för deliver i filen Sendmail.mc
som inkluderas i filen
sendmail.cf
. För att använda det så skall du inte använda filen mailers.linux
utan istället definiera
följande i din sendmail.m4
:
dnl --- (in sendmail.m4) --- define(LOCAL_MAILER_DEF, DELIVER)dnl # mailer for local delivery
Tyvärr så förutsätter Sendmail.mc
att deliver är installerat i /bin
, vilket inte är fallet
med Slackware 1.1.1 (som installerar det i /usr/bin
). I så fall måste du antingen göra en symbolisk
länk eller kompilera om deliver från källkoden så att det hamnar i /bin
. Notera att procmail
generellt är bättre än deliver, till exempel för filtrering av e-post.
Att sätta upp speciellt uppträdande för sajter eller domäner görs genom ett antal dbm
tabeller istället
för att ändra direkt i filen sendmail.cf
.
Se Julinumret 1994 av Linux Journal (om du fortfarande kan hitta det :-), dokumentationen i källkoden eller i sendmail kapitlet i Networking Administration Guide för mer detaljer.
När man inte använder någon av de valbara dbm tabellerna så skickar sendmail e-post via RELAY_HOST
och
RELAY_MAILER
som är definierade i filen sendmail.m4
som används för att generera sendmail.cf
.
Det är lätt att gå förbi det genom poster i domaintable eller uucpxtable.
En generell sajt som finns på Internet och förstår DNS, eller en som är endast-uucp och vidarebefodrar all
e-post via UUCP genom en smart RELAY_HOST
, behöver antagligen inte specificera några tabellposter alls.
I stort sett alla system bör sätta makrona DEFAULT_HOST
och PSEUDONYMS
, vilka definierar det
kanoniska namnet på sajten och alias som den är känd som.
Om allt du har är en vidarebefodringsdator och vidarebefodringsutdelare så behöver du inte sätta dessa
standardvärden eftersom det fungerar automagiskt. UUCP-datorer behöver antagligen också sätta UUCPNAME
till dess officiella uucp-namn.
De behöver också sätta RELAY_MAILER
och RELAY_HOST
vilket sätter på 'smarthost' routing genom en
vidarebefodrande e-post utdelare.
Transportprotokollet som skall användas definieras i RELAY_MAILER
och skall vanligtvis vara UUCP-A för
UUCP-sajter. Om din sajt är endast-smtp och förstår DNS så skall du ändra RELAY_MAILER
.
Om du har en SLIP-sajt så kan du göra på det enkla sättet och bara vidarebefodra all utgående e-post till din
leverantör som sedan kan hantera den. För att göra så så skall du definiera ISOLATED_DOMAINS
och
VALIDATION_DOMAINS
till din domän. Du skall även definiera RELAY_HOST
till att vara din leverantör
och RELAY_MAILER
till att vara TCP. Självklart skall du fråga om lov innan du ställer in ett annat system
till att vara din RELAY_HOST
.
Sendmail 8.7.x från Berkeley var den senaste stora revisionen efter sendmail5. Den hade underbart inbyggt stöd
för linux: bara make linux
och allt var klart.
Du klarar dig antagligen bäst genom att ta en av de olika binärdistributionerna från något av Linuxarkiven istället för att kämpa med saker som Berkeley dbm själv.
Det finns en bra distribution av sendmail 8.6.12 från Jason Haar (j.haar at lazerjem.demon.co.uk
) på
sunsite.unc.edu i /pub/Linux/system/Mail/delivery/sendmail-8.6.12-bin.tgz som innehåller dokumentationen från
källkoden och en väldigt trevlig snabbeskrivning av hur man kör sendmail v8 för vanliga konfigurationer.
Med sendmail v8 vill man konfigurera så lite som möjligt för att få jobbet gjort. Följande är ett exempel som iallafall skall få dig på rätt väg.
mc
-fil
Liksom sendmail+IDA så använder sendmail v8 m4 till att processa en konfigurationsfil till en sendmail.cf
som används av sendmail. Följande är den mc
-fil som jag använder för närvarande på min sajt (ppp till
Internet för utgående e-post, uucp för inkommande e-post).
dnl divert(-1) #--------------------------------------------------------------------- # # this is the .mc file for a linux host that's set up as follows: # # - connected to Internet for outbound mail (ppp here) # - connected via UUCP for incoming mail # - domainized headers # - no local mailer (use 'deliver' instead) # - no DNS running so don't canonicalize outgoing via DNS # - all non-local outbound mail goes to the RELAY_HOST over smtp # (we run ppp and let our service provider do the work) # # vds 3/31/95 # #--------------------------------------------------------------------- include(`../m4/cf.m4') VERSIONID(`linux nodns relays to slip service provider smarthost')dnl Cwmyhostname.myprimary.domain myhostname.UUCP localhost OSTYPE(linux) FEATURE(nodns)dnl FEATURE(always_add_domain)dnl FEATURE(redirect) FEATURE(nocanonify) dnl MAILER(local)dnl MAILER(smtp)dnl MAILER(uucp)dnl define(`RELAY_HOST', smtp:my.relay.host.domain) define(`SMART_HOST', smtp:my.relay.host.domain) define(`UUCP_RELAY', smtp:my.relay.host.domain) define(`LOCAL_MAILER_PATH', `/bin/deliver') define(`LOCAL_MAILER_ARGS', `deliver $u')
Det finns några skillnader. Hittills har jag hittat följande:
Istället för runq
så skall man köra sendmail -q
för att köra e-postkön!
Till skillnad från de flesta operativsystem så hade Linux inte 'inbyggd' e-post. Du var tvungen att ha ett program som kunde dela ut den lokala e-posten, till exempel lmail, procmail eller deliver.
Men, alla nyare distributioner inkluderar en lokal utdelare nu.
Dokumentation för hur man använder de olika finns i binärversionen av sendmail5.67b+IDA1.5 (på sunsite) som nämns ovan.