Min mailserver (del 2) - Postfix

I dette blog-indlæg fortsætter jeg fra forrige blogindlæg med at få lavet en mail-server. Her viser jeg hvordan jeg gør Debian-serveren klar til at modtage emails for det fiktive domæne version42.dk - og min løsning er baseret på Postfix.

Det første jeg stort set altid gør på en Linux-maskine er at installere “sudo”, hvilket gør system-administration en del nemmere, idet alle root-kommandoer kan køres hvis man skriver “sudo” foran kommandoen.

Skriv root-password efter “su -”

$ su - 
# apt-get install sudo

Efter pakken er installeret

# visudo

Efter linien med “ROOT ALL=(ALL:ALL) ALL” tilføj en linie med dit brugernavn efterfulgt med “ALL=(ALL:ALL) ALL” dvs. for mig “pto” bliver det således

Illustration: Privatfoto

(Tryk på billedet for at få bedre opløsning)
Tryk ctrl-x og svar “j” og retur så er filen gemt. Det er i øvrigt editoren “nano”, der kom op - den er ret nem at anvende. Skriv nu “exit” og se at prompten ændrede sig fra “#” til “$” - du er nu ikke længere root, men har rettigheder til at kunne installere programmer som root.

$ apt-get install postfix

Skriv dit bruger-password for at installere - det er ikke root-passwordet.

Nu skal vi til at rette Postfix til. Det er et “mail transfer”-program (MTA) som kan modtage emails på port 25. Postfix er nok stadig den bedste MTA - rasende hurtig og nem at arbejde med. Postfix blev skrevet for ca 16 siden af Wietse Venema (fra Holland). Jeg kender ham konferencen Linuxforum 2006. Han er sjov og vældig kvik. Tilbage til Postfix opsætningen….

I mit eksempel vil jeg gerne modtage emails på det fiktive domæne “version42.dk” og lad mail-serveren hedde “mail.version42.dk”, dvs. i DNS skal man kunne lave slå mail.version42.dk op som MX-record for version42.dk.

Nu er “version42.dk” fiktivt, men vi kan prøve domænet “sslug.dk” hos http://mxtoolbox.com/
(eller en af de mange andre steder på nettet til navneopslag). Skriv “mx:DOMÆNENAVN” få mail-serveren. For “sslug.dk” ser det ud til at “mail.sslug.dk” på IP-adressen 185.38.172.81
er email-modtager - det er fint.

Det meste af opsætningen handler om at rette tre-fire linier i /etc/postfix/main.cf - så derfor starter vi

$ sudo nano /etc/postfix/main.cf

  1. Check at linien med myhostname svarer til det fulde navn på maskinen

    myhostname = mail.version42.dk

  2. Skriv alle de domæner og mail-servere, som maskinen skal kunne modtage mails fra i mydestination - i mit tilfælde er det (serveren) mail.version42.dk og (for domænet) version42.dk samt “localhost” -dvs maskinen selv

    mydestination = mail.version42.dk, version42.dk, localhost

  3. Det er god stil, at mail-serveren udgiver sig som den reverse-DNS server som man får når man slår IP-adressen op

    smtpd_banner = mail.version42.dk

  4. Er der en mail-server længere ude på nettet som maskinen skal aflevere emails til så skal den skrives i “relayhost”. Det er normalt at hosting-firmaet kan svare på om det er nødvendigt.
    For hjemme-mailservere er dette oftest nødvendigt. Jeg anvender der fiktive server smtp.DININTERNETUDBYDER.dk

    relayhost = smtp.DININTERNETUDBYDER.dk

Lad de andre linier i filen være som de er. Gem filen med “ctrl-x” og genindlæs postfix-opsætningen.

$ sudo service postfix reload

Nu kan vi prøve at maile os selv. Først fra samme maskine.

$ echo "virker dette" | mailx -s testmail pto

“mailx” er et enkelt mail-program. Argumenterne “-s testmail pto” laver en mail med emne-fejl “testmail” og jeg emailer brugeren “pto”. Indhold af mailen (“virker dette”) laver jeg med echo forrest i kommandoen. Man kan også bruge “mail $USER” og trykke ctrl-d når mailen er færdig.

For at teste at mailen er kommet ind bruger jeg som det kan ses “mail”, som er et meget basalt interface til at læse emails med. Brugen er “d” for delete”, “p” for print dvs. vise og “q” for quit.
Der er mere info om dette f.eks. på http://dsl.org/cookbook/cookbook_38.html

Virkede det med at få mailen ind? Så er turen kommet til at prøve udefra. Fra en gmail/hotmail skal du nu kunne skrive til dit brugernavn på Linux-maskinen “@version42.dk” - i mit tilfælde “pto@version42.dk”. En lidt mere hardcore vej til test kan findes på denne URL http://www.port25.com/how-to-check-an-smtp-connection-with-a-manual-teln...
Det er “telnet version42.dk 25”, skrive “EHLO version42.dk” osv. se de linier, der er markeret med rødt på følgende billeder.

På mail.version42.dk kan jeg nu læse mailen - igen med det spændende hi-tech program "mail".

I næste blog-indlæg lægger jeg en IMAP server ind (Dovecot) og web-mail klient (Roundcube) ind så det bliver MEGET nemmere at læse og skrive emails - men for nu er det fint med “mail og mailx” til tests.

Kommentarer er som altid velkomne nedenfor.

/pto

Kommentarer (49)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Troels Arvin

Har du overvejet at benytte Kolab? Det virker som en ret velgennemtænkt og sammenhængende løsning, baseret på velgennemprøvede elementer (såsom Postfix).

Jeg eksperimenterede lidt med Kolab i generation 2, men dengang krævede de en højst underlig installationsplatform ("OpenPKG"). Nu om dage (med generation 3) installeres den med udvalgte distributioners normale pakkehåndteringssystem.

Keld Simonsen

Kunne du ikke skrive lidt om krypteret mail? Det skulle være ganske let bare at bruge STARTTLS i postfix, men jeg har endnu ikke selv prøvet at sætte det op.

Krypteret forbindelse mellem MTA og MUA kunne også være interessant.

IMHO bør man nu om dage (The post-Snowden era) altid sætte mail op til som default til at være krypteret, og jeg tror det er ganske let, og velfungerende.

Carsten Larsen

Fantastisk artikel, og her et lille supplement: Den mest banale spam kan f.eks. udgås ved blot at tilføj reject_rbl_client zen.spamhaus.org, reject_rhsbl_helo dbl.spamhaus.org, reject_rhsbl_sender dbl.spamhaus.org til smtpd_recipient_restrictions.

Baldur Norddahl

Du skal også have DKIM med før det kan regnes som en seriøs installation. Alle de store email udbydere (gmail, hotmail etc) tjekker en DKIM signatur og giver det vægt i antispam filteret. Det kan derudover forhindre scammere i at misbruge dit domæne.

Så jeg vil mene at det ikke er valgfrit i en moderne installation.

Lasse Laursen

apt-get install sudo
adduser foo sudo

Er nok lidt lettere :)

Desuden en anden artikel som beskriver helt setup af Postfix + Dovecot med MySQL som backend (man kan bruge MariaDB eller Postgres i stedet): https://library.linode.com/email/postfix/postfix2.9.6-dovecot2.0.19-mysql

Endelig er det en god ide at anonymisere sine headers: https://we.riseup.net/debian/mail#getting-your-postfix-anonymized

... og lidt om DKIM signing af emails via Opendkim: http://blog.rimuhosting.com/2012/05/17/setting-up-domains-keys-dkim-on-p...

Torben Jensen

Det kunne være interessant hvis du evt i del3 gennemgik strategier til hvordan mailserveren kunne styres / automatiseres ved at sende mail til en bestemt adresse. Ganske som man gjorde det i majordomo engang.

Eks:
mail til nestor@fiktiv.dk
emne: ferie til
body: jeg er på ferie til næste uge.

Det og lignende kan alle brugere nemlig finde ud af. Der er mange andre grunde til at det kunne være nyttigt. Også fra admin-side, til oprettelse af nye mails

subject: admin AdMiNPaA$ opret mail
body: John Doe;mailadresse@fiktiv.dk;HeMmMeLig222

Der er umiddelbart ingen sikkederhed, men hvor det ikke er krævet er den slags admin "nemt".

Bare et forslag.

Ville også gerne lære mere om spamassassin / Bayesian filtering. Greylisting. Og limits på postfix, så man kan undgå at nogle kan sende bruger x,y og z mails i ubegrænset størrelse.

Lars K. Hansen

Jeg har haft mail-/web-/backup-server på en Debian tidligere - men livet er, synes jeg, bare for kort til det :-)

Nu har jeg en Synology NAS som fungere perfekt som mail-/web-/backup-server - det tog 1 time at sætte det op og den kører som smurt :-)

Men held og lykke med dit projekt, jeg følger med for at se hvordan du gør det kontra hvordan jeg gjorde det dengang.

Martin Kofoed

En pudsig ting jeg stødte på engang, var en virusinficeret Windows-maskine på hjemmenetværket (ingen grund til at nævne navne), der sendte spammails. Den sendte bl.a. til diverse honeypots, som derefter kylede min IP-adresse i en CBL. Resultatet skulle man lede i logfiler for at finde, men effekten var, at min MTA (Postfix) i al stilfærdighed måtte opgive at sende mails ...

Derfor: forsøg at holde din MTA's IP-adresse ude af CBL'er.

Undgå også at sætte familiemedlemmers ISP'er op i DNS'en som et quick-fix for, at de må sende mails med dit domæne som afsender. Det er langt bedre at sætte TLS op og lade dem logge ind på din server for at droppe mails på port 587 (submission).

Jesper Nielsen

En ting man skal være opmærksom på er, at der er servere der nægter at modtage mail fra IP adresser der er fra et dynamisk "range".

F.eks. har jeg en IP fra fullrate, og selv om at den aldrig ændre sig, er der servere der ikke vil modtage mail. Man skal også være opmærksom på at dns opslag på IP adressen ikke giver adressen på mailserveren men en fullrate adresse. Det giver også problemer.

Desuden har jeg oplevet problemer med at sende til gmail, men jeg tror at de problemer er løst ved at sætte spf op. Det er dog lidt svært at teste da google modtager mail uden at melde fejl men aldrig leverer dem videre til modtagerens mailboks.

Jens Jönsson

Man skal også være opmærksom på at dns opslag på IP adressen ikke giver adressen på mailserveren men en fullrate adresse.

En workaround på det er at lade mailserveren svare med DNS navnet fra IP-adressen.
Det er ikke 100% nødvendigt at den svarer med det domæne navn, som den modtager e-mails for. Det vil jo være et problem ifht mailservere der modtager mails for mange forskellige domæner.

Michael Rasmussen

Reglen er, at systempost skal være identisk med serverens hostnavn. Derfor kan man slippe udenom PTR problemet, som også Jens Jönsson skriver, ved at navngive ens server i forhold til, hvorledes ens "offentlige" IP har reverse resolving. Altså:
Domæne: pto.dk 1.2.3.4 (PTR ix1234.router1.some.isp.dk)
MX: mail.pto.dk A record som også er 1.2.3.4
Host: ix1234.router1.some.isp.dk

Post vil derfor blive stemplet med afsender MTA ix1234.router1.some.isp.dk, og ligeledes vil HELO fra server, såfremt smtpd_banner har default indhold (smtpd_banner = $myhostname ESMTP), give samme svar.

Min erfaring er dog, at såfremt dit domæne har korrekt opsat SPF record, er de kun få mail servere, der ikke vil modtage post - oftest pedantisk konfigurerede hjemmeservere.

SPF fail: "v=spf1 a mx -all" (- (minus) for FAIL, the mail should be rejected)
SPF soft fail: "v=spf1 a mx ~all"(a debugging aid between NEUTRAL and FAIL. Typically, messages that return a SOFTFAIL are accepted but tagged)

Jeg har valgt korrekt hostnavn og SPF fail version i stedet for at spoofe PTR.

PS petertoft.dk har forøvrigt en forkert PTR record.

Christian Nobel

En ting man skal være opmærksom på er, at der er servere der nægter at modtage mail fra IP adresser der er fra et dynamisk "range".

F.eks. har jeg en IP fra fullrate, og selv om at den aldrig ændre sig, er der servere der ikke vil modtage mail. Man skal også være opmærksom på at dns opslag på IP adressen ikke giver adressen på mailserveren men en fullrate adresse. Det giver også problemer.

Det sker desværre for de mailservere hvor den såkaldte IT ansvarlige har fået den knaldede ide at abonnere på Trend Micro's "løsninger".

Og Trend Micro mener at rDNS opslag er en åh-så-god ide til at bekæmpe spam - for det er helt klart at Trend er meget klogere end f.eks. Fullrate, Telenor og mange andre internetudbydere som tilbyder faste IP adresser uden rDNS record, hvilket heller ikke er noget krav for udveksling af mails.

Men Trend ved bedre, så de gør gerne vold på standardene, til stor gene for mange, herunder også store aktører som Amazon, da det giver dem svare problemer med at skalere mailservere i skyen.

Carsten Larsen

Jeg har valgt korrekt hostnavn og SPF fail version i stedet for at spoofe PTR.

At en ISP ikke gider at bruge ressourcer på at vedligeholde PTR records i deres DNS server - på IP adresser de i øvrigt ikke selv benytter, og derfor heller ikke ved hvilke domæner der er koblet op på - er da ikke det samme som et PTR svar fra den pågældende adresse er spoofing. Tværtom er det netop ISP'en der "spoofer" ved ikke at give brugeren mulighed for at vedligeholde PTR informationer.

Erik Trolle

Jeg har ledt efter noget der fungere hurtigt i en webklient. Og har fundet http://citadel.org/ . Den er sat op på en Raspberry Pi på en ADSL2+ forbindelse på en dynamisk IP. Beskrivelse af opsætningen: http://goo.gl/RrJLXh
Citadel er en groupware server med egen Webserver. Jeg kan ikke give min 100% mening, da jeg ikke er færdig med at sætte den op. Men førstehånds indtrykket er at den køre ret hurtig på en så lille maskine.

Hvis andre har prøvet den ville jeg gerne høre deres mening.

Keld Simonsen

Jeg så gerne en vejledning med postfix, der er på linje med hvad sendmail og exim implementerer mht starttls. Både sendmail og exim genererer automatisk ved default installation en MTA med starttls, man skal bare fjerne nogen kommentarer i sendmails konfiguration, så kører det. Diverse certifikater er allerede lavet som en del af installationen af sendmail-pakken.

Om DKIM så også er automatisk installeret, det tvivler jeg på. Og jeg tror at installation og konfigurering er simpelt. Men jeg har ikke læst ordentligt på lektien, så jeg kan tage grueligt fejl.

men måske var det en idé at have en beskrivelse hvor man fører konfigurering op til et niveau som sendmail med autogenereret starttls konfiguration, og så en udbygning med DKIM-konfiguration, og en pro et kontra diskussion.

Baldur Norddahl

Kun Keld :-)

Men du undgaar igen den varme groed. Du er ikke faerdig med din installation foer at du har behandlet DKIM, SPF og DMARC. Du kan ikke bare lade som om at udviklingen har staaet stille de sidste 10 aar. Du kan undlade at installere anti-spam paa din mailserver, det er dit eget problem. Men naar du undlader DKIM, SPF og DMARC er det os alle der lider skade. Dobbelt saa, naar det er en vejledning, som kan faa andre til at tro at det er ok.

Uden DMARC kan andre misbruge dit domaene og uden DKIM oedelaegger du email forwarding for uskyldige modtagere af mail fra dig.

Naar dit domaene bliver misbrugt er skadeslidte ikke altid dig. Oftest er det modtageren der lokkes til noget uvederhaeftigt og lider oekonomisk tab. Om ikke andet, saa boer vi alle soerge for at vores domaener ikke bruges som afsender af spam.

Keld Simonsen

Jeg bruger ikke sendmail. Men der er en del der gør det, vist især på BSD-maskiner.
Anyway, jeg ville gerne se på hvordan postfix automatisk kan laves til at køre starttls, og det gør sendmail og exim, så jeg tænkte på at hugge kode fra dem til postfix, hvis postfix ikke allerede har koden.

Omkring DKIM etc., så er det da fint at beskrive det, og jeg vil da gerne køre med det hvis det var let at sætte op.

Lars Rasmussen

Det er ikke nødvendig med flere servere eller Postfix-instanser.

Den samme Postfix-instans kan svare på flere IP-adresser, hvis man har en multi-homed server, der eksempelvis har IP-adresserne 17.18.19.20 og 20.19.18.17.

I filen /etc/postfix/master.cf, master(5) kan man konfigurere Postfix pr. interface; f.eks. ved at indsætte to "logiske" linier, der giver forskellige bannere afhængigt af, hvilken IP-adresse der svarer:

17.18.19.20:smtp inet n - - - - smtpd -o smtpd_banner=smtp.domain1.org

20.19.18.17:smtp inet n - - - - smtpd -o smtpd_banner=smtp.domain2.org

Logiske linier fortsætter så længe den efterfølgende linie starter med et eller flere mellemrum eller tab.

Michael Rasmussen

Du forveksler domæne navn med MX. Flere domnæner kan deles om samme mail server, det afgørende er, hvad domænernes MX record fortæller til omverdenen, hvilken mail server der er ansvarlig for at udsende mail på vegne af domænet, så hvis version42.dk, version43.dk og version44.dk alle har denne MX: MX 10 mail.version41.dk, vil andre mail servere forvente at videresende mail til alle domænerne til serveren mail.version41.dk.

Log ind eller Opret konto for at kommentere
Brugerundersøgelse Version2
maximize minimize