sendmail Måns Nilsson, KTHNOC/SUNET 10 oktober 2005 Sammanfattning I denna laboration ska du öva på bland annat: Installera Sendmail Skapa en konfiguration med m4 Namn: Personnummer: Godkänd datum: Signatur: $Id: sendmail-labb.tex,v 1.2 2005/10/05 14:05:31 mansaxel Exp $ Spar den här laborationen! 1
Innehåll 1 Inledning 2 2 Administrativia 2 3 Konfiguration 3 3.1 Filer................................. 4 3.2 Bygge................................ 5 3.3 Test................................. 6 4 Redovisning 6 5 Återställning 7 1 Inledning sendmail är ett av de mest utskällda programpaketen som finns. Många har haft åsikter om det, många har gett sig på att skriva nåt bättre. Många har letat fel och brister i det och hittat dem. Men ännu flera har stångat sig blodiga mot konfigurationen och till sist lyckats producera en fungerande konfiguration. Så många, att idag kanske 60% av all epost på Internet transporteras med sendmail eller derivat av den. Idag levereras så gott som alla Unixar, Linuxar, och BSD er med en sendmail som standard-mta. Undantagen kan räknas på en hand. Därför anser vi att det är viktigt att ha någon kunskap om hur sendmail ska hanteras. Framförallt vill vi ta bort skräcken för konfigurationssystemet, som förvisso är komplext, men också kapabelt till mycket specialkonfiguration. Uppdelat i moment ska du ta dig igenom: Skapa konfigurationsfil för sendmail. Driftsätta den och verifiera funktion. Utöka konfigurationen. Detta är i sig en ganska krävande laboration om du inte är van vid Unixsystemadministration. Det borde dock gå lättare nu när du (förhoppningsvis) har gjort en del sånt här i de tidigare laborationerna. Det viktigaste målet med dessa laborationer är att vänja dig vid att umgås med nätverksapplikationer i en Unix-kontext. Att arbeta i dessa sammanhang är i mångt och mycket en fråga om att veta var man ska hitta svaret på en fråga. 2
Därför lägger vi stor vikt vid informationssökning. Svaren presenteras inte direkt, utan man måste läsa sig till dem. 2 Administrativia Det första vi ska göra är att ta backup på systemets egna konfiguration (Men bara om det behövs!) och kopiera den delen av systemet som man använder för att bygga nya konfigurationsfiler med till en egen katalog. Bli root om du inte redan är det och skriv: prompt> cd /etc prompt> test -s /usr/local/mail-bak.tgz tar zcvf /usr/local/mail-bak.tgz mail prompt> cd /usr/share prompt> tar cf - sendmail (cd /usr/local/ ; tar xvf - ) Förklaring. Rad för rad skrev du nu: Gå till katalogen /etc Om och bara om filen /usr/local/mail-bak.tgz inte finns, skapa en backup av katalogen /etc/mail i filen /usr/local/mail-bak.tgz. (Det går bra att trycka enter efter, kommandotolken vet att det kommer mera, och väntar snällt.) Gå till katalogen /usr/share Kopiera hela katalogstrukturen sendmail/ till /usr/local/ När du är så här långt så kan du börja arbeta med din konfiguration. Det första du ska göra är att titta på den dokumentation som följer med. Läs igenom /usr/local/sendmail/cf/readme. Den beskriver i princip hur man gör för att bygga sig en konfiguration. Men den är lite kryptisk, så ta en titt på http://www.sendmail.org/ där det finns en mer lättläst version. Behåll den länken framme i din vävbläddrare och läs vidare. 3 Konfiguration En gång i tiden var Sendmail svårt att konfigurera. En genomsnittlig konfigurationsfil är ca 32KByte stor och full av avsnitt som # strip group: syntax (not inside angle brackets!) and trailing semicolon R$* $: $1 <@> mark addresses R$* < $* > $* <@> $: $1 < $2 > $3 unmark <addr> R@ $* <@> $: @ $1 unmark @host:... R$* :: $* <@> $: $1 :: $2 unmark node::addr R:include: $* <@> $: :include: $1 unmark :include:... 3
R$* [ IPv6 $- ] <@> $: $1 [ IPv6 $2 ] unmark IPv6 addr R$* : $* [ $* ] $: $1 : $2 [ $3 ] <@> remark if leading colon R$* : $* <@> $: $2 strip colon if marked R$* <@> $: $1 unmark R$* ; $1 strip trailing semi R$* < $* ; > $1 < $2 > bogus bracketed semi och så är det fortfarande. Men numera finns ett system baserat på makropreprocessorn m4 som kompilerar ihop en konfigurationsfil från en liten receptfil som är betydligt mer läsbar: divert(0)dnl OSTYPE(solaris2)dnl DOMAIN(generic)dnl FEATURE( no_default_msa )dnl define( confcw_file, -o /etc/mail/sendmail.cw )dnl MAILER(local)dnl MAILER(smtp)dnl 3.1 Filer sendmail läser i huvudsak sin konfiguration från /etc/mail/sendmail.cf. I den filen kan det finnas pekare till andra filer, huvudsakligen listor över olika undantag från standardbeteendet. Vidare ner i filen finns alla de olika transportmetoder som sendmail kan skicka brev över definierade. Det är dessa som ser ut som om man bankat huvudet i tangentbordet. Dem ska vi inte röra, det behöver man inte om man inte har mycket speciella krav. Och det har vi inte. Andra filer som kommer på fråga är: (notera att man kan definiera om deras namn i sendmail.cf! Här refererar vi till standardnamnet!) /etc/mail/aliases Här definierar man undantag från regeln att post bara tas emot för användare med konto på maskinen, så att: De som har ett konto på maskinen får sin post levererad. Andra mottagare (local-part) 1 med epostadress i någon av domänerna i klass w (se nedan) är okända. /etc/mail/aliases innehåller rader som är uppställda efter formatet: nisse: skicka.till@annan.dator edvard.persson: kalle listan: :include: /fil/med/adresser/en.per.rad vilket alltså ska läsas som All post som kommer till nisse skickas vidare till epostadressen skicka.till@annan.dator, all post till edvard.persson ska till local-part kalle 2 samt All post som kommer till listan ska skickas till mottagarna som finns uppradade i filen. Mottagarna kan vara alias de med. 1 Delen före i en adress, se RFC 2821, avsnitt 2.3.10 2 kalle kan ju förstås vara ett lokalt konto eller ännu ett alias. Rekursion: Se Rekursion 4
/etc/mail/local-host-names (fd sendmail.cw) Innehåller listan på de hostnamn som ska betraktas som lokala, dvs man ska börja leta i local-part efter rätt mottagare istället för att gräva efter en annan dator som kan ta emot brevet 3. Det här kan också definieras direkt i sendmail.cf, i klass w som: Cwlocalhost /etc/mail/access Denna fil är inte inkluderad som standard, men är rätt ställe för att sätta upp vem som får använda vår sendmail som relä. Den innehåller rader med hostnamn eller IP-adress och ett klassificerande ord som kan vara t ex. REJECT eller RELAY. Mer information finns i README-filen sök på access_db. 3.2 Bygge Vi ska först ta oss igenom monterandet av en ny sendmail.cf. Gå först ner i katalogen /usr/local/sendmail/cf/cf. Kopiera så generic-bsd4.4.mc till ett annat namn: prompt> cp generic-bsd4.4.mc annat_bra_namn.mc Redigera därefter med ledning av README och www.sendmail.org den nya filen (och i förekommande fall hjälpfilerna) så att de tillsammans tillhandahåller följande funktionalitet: Ett sätt att definiera att vi vill acceptera post för 2 olika namn, <musikord>.lab.kthnoc.net och ert riktiga hostnamn. (hint se ovan) Ett sätt att definiera att ert lokala nät och det nätverk ni tilldelats (dvs. en bit av 192.168.0.0/16) får lov att använda er som SMTP-relä. (hint se ovan) Bonus: Ändra sendmails hälsningsmeddelande. När ni har stoppat in vad ni anser vara en vettig konfiguration ska ni låta m4 bygga en ny sendmail.cf till er. Ställ dig i /usr/local/sendmail/cf/cf och gör så här: prompt> m4../m4/cf.m4 annat_bra_namn.mc > min-sendmail.cf Filen ni nyss skapade behöver kopieras till rätt plats: 3 RFC 2821 säger att man inte får routa mail baserat på local-part förrän det här villkoret är uppfyllt. 5
cp min-sendmail.cf /etc/mail/sendmail.cf I de övriga filerna ska ni dels implementera det som beskrivits ovan, och dels i aliasfilen stoppa in lite till: Post till Postmaster ska skickas till en annan adress, där någon läser och förstår den så att vi kan uppfylla RFC 2821. För /etc/mail/access liksom /etc/mail/aliases gäller att de måste konverteras till hash-databaser för att sendmail ska kunna använda dem. För alias-filen, läs mansidan för newaliases. För access-filen finns det inget färdigt kommando, utan man behöver köra makemap. Hur står beskrivet i README, eller på http://www.sendmail.org/m4/anti_spam.html. 3.3 Test När ni har skapat sendmail.cf och redigerat övriga filer så att allt ligger på plats är det dags att testa. Kontrollera först att det inte finns en sendmail igång redan: prompt> ps ax grep sendmail Ser ni något i stil med: 443?? Is 0:00.04 sendmail: accepting connections (sendmail) så måste ni stoppa den genom att skriva prompt> kill 443 (byt förstås ut numret mot rätt processid) så att ni sedan kan skriva prompt> /usr/sbin/sendmail -bd -q15 för att starta programmet. Testa nu att er sendmail svarar, att ni kan skicka mail till den som kommer fram, och att den kan användas som relä. Ett väldigt användbart redskap är telnet till port 25, som ni provade redan i första laborationen. Ett annat viktigt redskap är loggläsning; sendmail berättar vad den gör genom att logga flitigt. Använd tail -f på /var/log/maillog så kommer ni att snabbt se vad som händer. För att kolla att reläreglerna fungerar måste ni ta hjälp av en annan grupp. 4 Redovisning När ni är klara så här långt och allt har gått bra så är ni färdiga att redovisa. För att få godkänt på laborationen ska ni kunna visa upp och förklara vägen fram till: En vänlig sendmail som svarar på port 25 6
sendmail ska acceptera post för: Domänen <musikord>.lab.kthnoc.net Er dators riktiga namn. Två olika nät, dels ert LAN och dels det nät ni fått er tilldelade ska få lov att använda er som SMTP-relä. Post till Postmaster för samtliga domäner ni accepterar post för ska gå till en människa som läser och förstår den. 5 Återställning När ni är godkända ska ni: Rensa bort er konfiguration genom att skriva över den med originalkonfigurationen: cd /etc ; rm -rf mail ; tar zxvf /usr/local/mail-bak.tgz Boota om datorn. 7