2.6. Sendmail

Sendmail er en MTA (Mail Transfer Agent). Den bruges til at dirigere post rundt på systemet og lytter normalt også på smtp porten. Sendmail er et meget komplekst program at sætte op og meget komplekst at forstå. Hvis du er begynder, vil vi anbefale, at du ikke begynder at sætte dig dybdegående ind i sendmail lige nu, medmindre du har brug for det. Vi vil her kort forsøge at forklare, hvornår dit system anvender sendmail, hvorfor/hvornår det er farligt, og hvilke alternativer, der er.

2.6.1. Hvorfor er sendmail farlig?

Sendmail er en meget gammel sag, og den har et ret dårligt rygte, hvad sikkerhed angår, men er uhyre anvendt. Den har eksisteret i mange år og har i tidens løb haft mange slemme sikkerhedshuller. Se ftp://koobera.math.uic.edu/www/maildisasters/sendmail.html. Disse er dog blevet rettet efterhånden - men der kan komme nye. Da sendmail er et meget komplekst program, kan der også godt være nogle fejl, som der går lang tid, før nogen opdager. Sendmail kører med root-privilegier, d.v.s., den har adgang til hele systemet og kan gøre alt, hvad en administrator også kan gøre. Den fungerer på de fleste systemer som daemon, dvs., at den kører hele tiden og lytter på sin port (sendmail kører default på port 25), om der er noget mail, den skal tage imod. Hvis sendmail kører som daemon, og der er et sikkerhedshul i den, kan enhver ude fra nettet sende en forespørgsel til dens port og udnytte sikkerhedshullet. En af grundene til, at man ofte hører skrækhistorier om sendmail, er at den kører på langt de fleste maskiner, der håndterer post på internettet. Fordi den kører på så mange systemer, er det let nok at finde et system at udnytte, hvis man har fundet et sikkerhedshul. Det er dog ofte folk, der kører gamle versioner af sendmail, der er udsat. Hvis man hele tiden holder sin sendmail opdateret, er risikoen ikke så stor. Hent den nyeste version på http://www.sendmail.org/.

2.6.2. Skal jeg slå sendmail fra?

Det er desværre ikke så smart at slå sendmail helt fra - med mindre man i stedet installerer et sikrere alternativ som qmail eller postfix - da flere dele af systemet skal kunne levere mails internt på maskinen. Skal maskinen imidlertid ikke acceptere mail udefra, men kun fordele mail lokalt, kan man lade være med at lade sendmail køre i "daemon mode", hvor den lytter på en port. Man kan i stedet starte den i "queue mode". Sendmail kører stadig som en baggrundsproces, som med jævne mellemrum kommer frem og tømmer mailkøen. F.eks. en gang i timen, eller en gang hvert kvarter. Men den lytter ikke længere efter forespørgsler på port 25. Sendmail startes i "daemon mode", der tømmer mailkøen en gang i timen, ved at starte den med parametrene

sendmail -q1h

i stedet for

sendmail -bd -q1h

hvor -q1h betyder at køen tømmes en gang hver time, og bd betyder, at den startes i "daemon mode". Sendmail startes normalt fra et startup script. I Red Hat er det /etc/rc.d/init.d/sendmail. I SuSE skal man i /etc/rc.config ændre linjen

SENDMAIL_args="-bd -q30m -om"

til

SENDMAIL_args="-q30m -om"

Parameteren -q30m betyder, at mail-køen tømmes hver 30. minut. Hvis man ikke vil køre sendmail i "daemon mode", kan man ændre i startup scriptet. Hvis man slet ikke vil køre sendmail, skal man fjerne det symlink, der er til sendmail startup scriptet under de forskellige runlevels kataloger. I Red Hat er det /etc/rc.d/rcN.d, hvor N er runlevel nummeret. På Debian hedder det /etc/rcN.d. Red Hat eksempel: Prøv at skrive

[robin@sherwood robin]$ ls -l /etc/rc.d/rc3.d |grep sendmail
lrwxrwxrwx   1 root     root           18 Oct  3  1998 S80sendmail -> ../init.d/sendmail

Der kan man se at sendmail bliver startet i runlevel 3. Hvis sendmail ikke skal startes, skal dette symlink slettes. Ligeså under de andre runlevels, og husk også at slette shutdown symlinkene til sendmail (dem der starter med K).

Man kan også vælge at køre sendmail i "queue mode", selvom man har brug for, at maskinen tager imod mails udefra. Dette kræver, at man anvender en anden smpt-daemon, f.eks. optuse smtpd (http://www.optuse.com). Den tager sig af indgående smtp og lægger posten over i sendmails kø, hvor sendmail så kan overtage. Vi kan også nævne smap/smapd, som er en del af TIS Internet i Firewall Toolkit (http://www.tis.com/research/software/fwtk/fwtk_over.html).

2.6.3. Sikring af sendmail

Hvis du kører sendmail som i "dameon mode", kan du sikre den. Du kan bl.a enable nogle security options i /etc/sendmail.cf - som er en ret forvirrende fil ved første blik. Man kan f.eks. sætte linjen

O privacyoptions=authwarnings,needmailhelo, noexpn, novrfy

ind i sin /etc/sendmail.cf. authwarnings aktiverer "email authentication warnings", så man får "x-authentication-warning"-beskeder i sine brevhoveder, som f.eks.

X-Authentication-Warning: sherif.nottingham.dk: sherif owned process doing -bs.

authwarnings er pr. default slået til. needmailhelo gør, at den maskine, der vil sende mail til sendmail, skal identificere sig før den får lov. novrfy forhindrer VRFY kommandoen, som bruges til at bekræfte, om et bestemt brugernavn findes på maskinen. noexpn forhindrer EXPN, som er en kommando, der bruges til at finde ud af hvilken bruger/program på systemet en e-postadresse reelt peger på, dvs., hvem et mail alias dækker over, hvem der modtager root mails på systemet etc.

Prøv at skrive telnet hostname 25, hvor hostname er navnet på en maskine, der har sendmail (evt. din egen linux box - du behøver ikke 2 forskellige maskiner til dette). Sendmail bruger normalt port nummer 25. Så du kan faktisk kommunikere direkte med sendmail på maskinen ved at bruge telnet:

[robin@sherwood robin]$ telnet bohr 25
Trying 192.168.0.1...
Connected to bohr.herne.dk.
Escape character is '^]'.
220 sherwood.dk ESMTP Sendmail 8.9.3/8.9.3; Mon, 19 Jul 1999 22:47:59 +0200
VRFY robin
250 <robin@sherwood.dk>
EXPN robin
250 <robin@sherwood.dk> 

Vi fik at vide at maskinen kører sendmail version 8.9.3, at robin fandtes på maskinen, og at mail til robin går til robin. Skal andre også have dette - og måske mere følsomme ting - at vide? Hvad nu hvis robin bare var et mail alias for brugeren marion - kommer det andre ved? Skal andre kunne se, at roots mail også går til marion? Vi prøver samme kommando, når VRFY og EXPN er slået fra.

[robin@sherwood robin]$ telnet bohr 25
Trying 192.168.0.1...
Connected to bohr.herne.dk.
Escape character is '^]'.
220 sherwood.dk ESMTP Sendmail 8.9.3/8.9.3; Mon, 19 Jul 1999 22:53:17 +0200
VRFY robin
252 Cannot VRFY user; try RCPT to attempt delivery (or try finger)
EXPN robin
502 Sorry, we do not allow this operation

Der er flere muligheder. Man kan nøjes med at slå expn og vrfy fra, indtil den fremmede maskinen har identificeret sig selv. Se http://hoth.stsci.edu/man/man1m/sendmail.html.

2.6.4. Mail relaying

Derudover skal man slå mail relaying fra. Det gøres i accessfilen - /etc/sendmail.cf indeholder oplysningerne om, hvor den ligger. På Red Hat hedder den /etc/mail/access. Der må gerne stå f.eks.

localhost.localdomain           RELAY
localhost                       RELAY

- dette tillader relaying for den lokale maskine. Men der må ikke stå andre linjer med RELAY. (Man kan f.eks. også bruge IP-adressen på sit interne netværk og tillade intern mail relaying). Hvis man tillader extern mail relaying - dvs. at folk, der logger ind udefra, kan sende mails, så det ser ud som om, de er sendt indefra - så kan man risikere, at spammere bruger en som afsender for deres spam. Så selvom det til tider kunne være praktisk at logge ind på sin computer, når man er ude, og sende post med sin "hjemmeadresse" som afsender, så tillader internetsikkerheden i dag ikke dette. Man bliver meget upopulær, hvis nogle garvede internet folk opdager, at man har mail relaying slået til. Man kan komme på deres sortlister, så en masse folk ikke kan modtage mail fra ens domæne etc. Man kan dog også træffe andre foranstaltninger imod mail relaying end at slå det fra i sendmail.

Læs desuden man sendmail.

Der skal også nævnes, at der findes interessante alternativer til sendmail: qmail (http://www.qmail.org) og postfix (http://www.porcupine.org/postfix-mirror/start.html). Begge er fra begyndelsen designet med tanke på sikkerhed. De er bl.a.sikrere, fordi smtpd her er en selvstændig proces, som ikke kan skrive til nogen filer. Hver lille delopgave foretages af et separat program, som kun har en snæver, veldefineret funktion. Sendmail er derimod designet som et enkelt do-it-all program. Det er en grundlæggende i designfejl, som gør den håbløs i sikkerhedssammenhæng.

Vi kommer ikke her nærmere ind på qmail og postfix, men har man et i seriøst mailserver behov, kan det godt anbefales at kigge nærmere på disse to programmer.