Exim

Fra GNUskole
Hopp til: navigasjon, søk

Installere Exim

Exim er en e-post-tjener som er meget enkel å sette opp (du klarer dette faktisk på 10 minutter), i motsetting til Sendmail som er standard i de fleste Linux-installasjoner. Heldigvis har de flete laget systemer for lett å ta i bruk Exim i stedet for Sendmail.

Installasjon CentOS6

Før du kan installere exim må du legge til pakkesamlingen epel:

rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-7.noarch.rpm

Du må åpne et terminalvindu som root og skrive:

yum install exim

Exim blir da installert og du må gjøre noen endringer i konfigurasjonsfilen exim.conf, som du finner i /etc/exim/.

Hvis systemet har postfix installert fra før (noe det har i CentOS6), er det viktig at du erstatter postfix med Exim. Hvis ikke risikerer du at alt fungerer - helt til du restarter maskinen og sendmail "overtar" som e-posttjener igjen. Dette kan gjøres slik:

chkconfig postfix off
service postfix stop
chkconfig exim on
service exim start

Det er også lurt å skrive kommandoen...

alternatives --config mta

...og velge exim.

Man må også installere Dovecot.

# yum install dovecot

Etter installasjon må man også starte Dovecot

# service dovecot start

Installasjon Ubuntu

{Denne må noen skrive...}

Konfigurere Exim

Hele Exim styres av filen /etc/exim/exim.conf, og den er full av gode eksempler i forhold til de ulike innstillingene du må gjøre. Det meste er satt bra opp på forhånd, så de endringene du må gjøre er egentlig å føye til de lokale opplysningene.

Vanlig oppsett

Det første vi skal endre er navnet tjeneren skal bruke:

primary_hostname = mail.minskole.no

(Ta vekk #-tegnet først i setningen for at Exim skal bry seg om det som står der.) Husk at dette navnet må være registrert i DNS. Det er strengt tatt ikke nødvendig å fylle ut dette feltet, men for sikkerhetsskyld er det greit å vite hva som står her.

Så kommer vi til at aller viktigste. For at noen overhode skal få lov til å bruke Exim til å sende e-post, må maskinene dere ha lov til det.

hostlist replay_from_hosts = 127.0.0.1 : localhost : 10.0.xxx.xxx/16

Hvis det bare er hovedtjeneren skal kunne sende e-post trenger du ikke la det stå annet enn 127.0.0.1 som er localhost (altså selve hovedtjeneren).

Internt på skolen kan det være kjedelig å alltid måtte skrivene domenenavnet i en e-post (det bak @-tegnet). Den neste endringen gjør at Exim automatisk setter inn skolens domenenavn hvis man sender en e-post uten en adresse bak @-tegnet. Og det er jo nokså nyttig.

qualify_doman = minskole.no

Exim som SMTP-klient (avansert)

Hvis du ønsker at brukere skal kunne koble seg opp til exim utenfra for å kunne sende epost ut i verden, f.eks. hvis du har satt opp en mobiltelefon til å motta og å sende epost, må du gjøre et par endringer i hvordan exim fungerer.

Dette innebærer at du må åpne opp i brannmuren for at trafikk på port 465 (SMTP/S) når inn til exim - og da skal du alltid begynne å bekymre deg for sikkerhet! Men vi skal gjøre det sikkert...

Du må endre et del linjer i exim.conf. Finn linjen:

#auth_advertise_hosts = ${if eq {$tls_cipher}{}{}{*}}

...og ta vekk #-tegner. Så må du finne:

auth_advertise_hosts =

...og sette et #-tegn foran.

Til slutt i exim.conf finner du dette:

#PLAIN:
#  driver                     = plaintext
#  server_set_id              = $auth2
#  server_prompts             = :
#  server_condition           = ${if saslauthd{{$2}{$3}{smtp}} {1}}
#  server_advertise_condition = ${if def:tls_cipher }
#
#LOGIN:
#  driver                     = plaintext
#  server_set_id              = $auth1
#  server_prompts             = <| Username: | Password:
#  server_condition           = ${if saslauthd{{$1}{$2}{smtp}} {1}}
#  server_advertise_condition = ${if def:tls_cipher }

Ta vekk alle #-tegnene her.

Så må du kjøre disse kommandoene:

service exim restart
service saslauthd start
chkconfig saslauthd on

Du bør nok også sette opp dovecot slik at du også kan lese epost utenfra - ikke bare sende.

Starte Exim

Da skulle du være klar til å starte Exim med kommandoen:

# service exim start

Hvis du vil at Exim skal starte hver gang maskinen restartes (noe som jo unektelig er en fordel) må du skrive:

# chkconfig exim on

Hver gang du gjør en endring i exim.conf-filen må du restarte Exim-tjeneren med kommandoen

# servcie exim restart

for at endringene skal tre i kraft.

Problemer

Av og til oppstår det problemer med levering av e-post. Noen forårsakes dette av at meldinger blir "frosset" av Exim, og da kan det "hope seg opp" en kø med meldinger som ikke blir levert til mottaker. Sjekk loggene til exim, og hvis meldinger er frosset kan de "tines" med følgende oppskrift:

Sjekk køen til exim med kommandoen (kjørt som rootbrukeren)

exim -bp

Som utputt gir denne en liste over køen, og noen av e-postene kan typisk være merket som "frozen":

20h  1.8K 1HaEA1-0001ML-OX <bruker1@mittdomene.no>
         bruker2@mittdomene.no

17h  6.0K 1HcHBa-0011V3-6w <presidenten@whitehouse.gov>
         bruker2@mittdomene.no

Det første som står er hvor lenge exim har forsøkt å levere meldingen uten å lykkes. Det neste er en medings-ID. Vi ser her at den første e-posten er forsøkt sendt fra bruker1@mittdomene.no til bruker2@mittdomene.no, mens bruker2 i siste eksempel har fått e-post fra selveste presidenten(!).

For å prøve å levere en eller flere meldinger kan vi gi kommandoen exim -M fulgt av meldings-IDene på følgende måte:

exim -M 1HaEA1-0001ML-OX 1HcHBa-0011V3-6w

En ny exim -bp vil da ikke liste de aktuelle e-postene hvis Exim har klart å levere dem.

Det er naturligvis en årsak til at Exim fryser innkommende meldinger framfor å levere dem, og her må man feilsøke i loggene. Ofte er det rettighetsproblemer eller feilkonfigurasjoner som er årsaken. Andre feilkilder kan være galt satt opp antivirusprogramvare eller antispamprogramvare. Listen er uendelig, men denne oppskriften gir en måte å "kriselevere" e-post på.

Feilsøking

Exim har sin egen loggmappe, /var/log/exim der hovedfilene heter main.log, reject.log og panic.log. Normale hendelser som start og stopp av Exim, sending og mottak av e-post vil logges i main.log. Til å begynne med vil loggen nok se litt rotete ut, med flere linjer for hver e-post og kryptiske koder, men med litt trening kjenner man igjen det meste.

Filen reject.log vil inneholde alt som avvises av Exim. Det kan være flere grunner til at e-post avvises. For eksempel kan tjeneren få post som skal til andre domener enn de Exim er satt opp til å håndtere. Disse avvises og sendes ikke videre. En del (dårlig skrevet!) spam-programvare "snakker" heller ikke SMTP korrekt, og slike henveldelser avvises også av Exim. Har man satt opp en antivirus eller antispam-løsning som Exim snakker med vil også avvist e-post fra disse systemene logges her.

Til slutt hav vi panic.log som for eksempel logger at Exim ikke klarte å lese konfigurasjonsfilen sin (kanskje den inneholder trykkfeil idet Exim startes?) og detaljer rundt dette.

En helt normal e-post som sendes vil i main.log se slik ut:

2007-11-27 12:52:00 1Iwyyu-2132xc-3R <= are@hjemmmenett.net H=localhost (hjemmenett.net)  
[127.0.0.1]U=[U2FsdGVkX1+3xL2Cme+FvXs1DZUaVTsv5ZPoGvke8v4=] P=esmtp S=1463  
id=20071127115056.M6124@hjemmenett.net
2007-11-27 12:52:00 1Iwyyu-2132xc-3R => bare@skolenett.no R=smarthost T=remote_smtp  
H=mail.ispadresse.no [181.167.137.31]
2007-11-27 12:52:00 1Iwyyu-2132xc-3R Completed

Her ser vi tre linjer som inneholder mye kryptisk kode, men også noe som ser kjent ut. Første linje sier at Exim mottok en forespørsel fra maskinen (H=host) localhost om å sende en e-post fra are@hjemmenett.net med protokollen (P=protocol) esmtp. Selve e-posten har den lange ID-en.

Neste linje sier at Exim har prøvd å sende denne via en rute (R=route) som heter "smarthost" som den leser i konfigurasjonsfilen. Der står det også at den skal bruke transportmetoden (T=transport) "remote_smtp" (som betyr at den skal sende e-posten via smtp). Se tilsvarende smarthost-konfigurasjon ovenfor.


Tips og triks i Exim

En fantastisk side med tips og triks

http://bradthemad.org/tech/notes/exim_cheatsheet.php

Her finner du en godt knippe med kommandoer du bør kunne for lett å administrere exim fra kommandolinjen.

Lage en kopi av all inn- og utgående epost

Noen ganger er det nødvendig at det blir lagret en kopi for ettertiden av all inn- og utgående epost (f.eks. for å følge arkiveringsregler o.l.). Dette er ikke så vanskelig å sette opp i exim.

Du må legge inn litt tekst under overskriften begin routers. Det er viktig at dette er den første "routeren".

traffic_tap:
 unseen
 no_expn
 no_verify
 transport = local_copy
 driver = accept

Så må du legge inn transportøren "local_copy" et sted under "begin transports".

local_copy:
 driver = appendfile
 delivery_date_add
 envelope_to_add
 return_path_add
 maildir_format = true
 create_directory = true
 directory = /var/mail_archive/$tod_logfile/

Pass på at katalogen /var/mail_archive eksisterer før du restarter exim-tjenesten. Nå vil exim lagre en kopi av all inn- og utgående epost i en dato-katalog i /var/mail_archive.

Jeg skal se om dette er noe som er lett å kombindere med Lurker. Det regner jeg med - det er bare å bruker "driver = pipe" i transportøren, og da med de rette kommandoene i etterkant... :-)

aliases-filen

Filen /etc/aliases brukes av Exim til å omdirigere innkommende e-post. Hvis jeg vil at all e-post til bruker1 skal egentlig sendes til bruker2 føyer jeg dette til i slutten av aliases-filen:

bruker1:       bruker2

Da vil all e-post til bruker1 bli omdirigert til bruker2. Dette kan også brukes til å omdirigere e-post til ikke-eksisterende brukere til eksisterende brukere. For eksempel kan adressen post@minskole.no omdirigeres til bruker2@minskole.no slik:

post:          bruker2

Et annet eksempel kan være slik:

Ola.Normann:   bruker2

Da vil all e-post sendt til ola.normann@minskole.no bli levert til bruker2. Det siste eksempelet er f.eks. hvis en lærer bytter skole:

Kari.Normann:  kari.normann@denandreskolen.no

Da vil all e-post sendt til kari.normann@minskole.no bli sendt videre til kari.normann@denandreskole.no. Veldig praktisk, men pass på at aliases-filen din ikke blir full av slike unntak.

Enkle distribusjonslister i Exim

Hvis du vil at e-post til e-postadressen allesammen@minskole.no skal sendes til alle som jobber på skolen er det upraktisk å bruke alias-filen. Da er det enklere å sette opp Exim som en enkel tjener for distribusjonslister.

I eksempelet tar jeg for gitt at du har opprettet et eget epost-liste-domene, som f.eks. @liste.minskole.no. Det er greit å skille "vanlige" e-poster fra liste-eposter, spesielt når du skal føye til en ny rute i exim.conf.

I exim.conf må du føye til dette etter begin routers og gjerne under den ordinære "dnslookup:"-ruten.

epostlister:
  driver = redirect
  domains = liste.minskole.no  # Dette er e-postlistedomenet du har laget.
  more = false
  senders = minskole.no        # Dette begrenser tilgangen til e-postlisten til avsendere fra minskole.no-domenet
  file = /etc/exim/lister/$local_part  # Her ligger listene
  errors_to = postmaster@minskole.no   # Sender feilmeldinger til postmesteren i domenet.
  forbid_pipe
  forbid_file

Du må også føye til liste.minskole.no til domainlist local_domains øverst i exim.conf.

Tenk igjennom hvem som skal få feilmeldinger. Av og til kan det være greit at den som sender e-posten ut får feilmeldingene, men i begynnelsen kan det komme en del sære meldinger om uleverbare e-poster, og avsender har som regel ikke lov til å gjøre endringer i epostlistene - og bør derfor ikke få feilene direkte i retur.

OBS! Oppdaget at du ikke kan la f.eks. post i aliases videresendes til f.eks. ledelsen@liste.minskole.no hvis du begrenser tilgang til e-postlisten. Eksterne som sendes post til post@minskole.no vil da få returnert eposten. De ikke har lov til å sende e-post til ledelsen@liste.minskole.no, fordi de ikke sender den fra minskole.no-domenet.

Restart exim.

Så kan du lage en tekstfil i katalogen /etc/exim/lister som heter f.eks. allesammen. I dette dokumentet skriver du inn e-posten til de som skal motta e-post sendt til allesammen@liste.minskole.no (ny linje - ny epost). Når du har laget filen vil epostadressen allesammen@liste.minskole.no være en gyldig e-postadresse. Du kan lage flere filer i denne katalogen, og de vil da bli gyldige e-postadresser som sender ting videre til e-postadressene i de respektive filene. Du kan la en liste inneholder e-postadresselister, f.eks. kan allesammen inneholde listene:

avdeling1@liste.minskole.no
avdeling2@liste.minskole.no
avdeling3@liste.minskole.no
ledelsen@liste.minskole.no

Da vil e-post sendt til allesammen@liste.minskole.no sendes til disse listene - som igjen sender det videre til e-postadressen i dem.

Du kan la disse listene ligge hvor du vil, men det er viktig at exim har leserettigheter til dem ;-)

Konfigurere Exim til å bruke en fast SMTP-tjener til levering av all e-post (avansert)

Hvis du vil at utgående e-post ikke skal leveres direkte til e-posttjeneren som skal motta utgående e-post, men f.eks. sende all e-post via ISPs SMTP-tjener gjør du dette ved å gjøre disse endringene i exim.conf:

#dnslookup:
#  driver= dnsloopup
#  domains = ! +local_domains
#  transport = remote_smtp
#  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
#  no_more

smarthost:
  driver = manualroute
  domains = ! +local_domains
  transport = remote_smtp
  route_list = * mail.ispadresse.no

og restarte Exim. Da vil all e-post sendes direkte til SMTP-tjeneren på mail.ispadresse.no og ikke til den adressen som står etter @-tegnet i e-posten. mail.ipsadresse.no vil sende den videre dit den skal.

Hvorfor er dette noe å ta hensyn til?

Svarene er mange, men det hele har mest med søppelpost (SPAM) å gjøre. De store ISPene på Internett merker at mesteparten av e-posten som passerer gjennom tjenerne faktisk er søppelpost. Dette er selvsagt ressurskrevende, så for å ikke bruke dataressursene på å analysere/filtrere/levere søppelpost har de begynt å rett og slett avvise e-post fra enkelte maskiner (dette kalles svartelisting). Dette er vel og bra, men siden de fleste maskiner som sender ut søppelpost faktisk er vanlige hjemmedatamaskiner som har blitt infisert eller "overtatt" av spam-programmer har de store ISPene begynt å svarteliste e-post som kommer direkte fra hjemmedatamaskiner. Det betyr ikke at hjemmebrukere ikke kan sende e-post, fordi alle hjemmebrukere stiller inn e-postprogrammet sitt til å sende via ISPens e-posttjener. Det er altså e-post som kommer direkte fra hjemmedatamaskiner de store ISPene blokkerer for.

Av og til kan man risikere å havne i en situasjon der e-posttjeneren man setter opp faktisk havner i en IP-serie som er svartelistet, og da vil man ikke kunne sende e-post til adresser hos de ISPene som bruker slik svartelisting. Til andre går det helt greit. Løsningen er da å gjøre som over; la din e-posttjener sende utgående e-post via den lokale internettleverandøren sin e-posttjener.

Konfigurere Exim til å sende bestemte e-postdomener videre til andre SMTP-tjenere (avansert)

Hvorfor har du lyst til å gjøre dette? Jo, hvis du har flere SMTP-tjenere på innsiden av nettet ditt. Du har for eksempel en testutgave av Zimbra kjørende på en separat maskin og det hadde vært fint om f.eks. minepost.no gikk til den vanlige SMTP-tjeneren, mens zimbratest.no gikk til Zimbra SMTP-tjeneren. Dette kan du ordne ved å sette opp Exim på den vanlige SMTP-tjeneren din slik...

Først må du legge domenet som skal til Zimbra-tjeneren inn i "domainlist relay_to_domains" i /etc/exim/exim.conf - det må ikke stå under "domainlist local_domains"!

domainlist relay_to_domains = zimbratest.no

Du kan nå sjekke et godt stykke lengre nede i exim.conf om det under "dnslookup:" står "domains =+relay_to_domains". Hvis det gjør det er Exim nå klar for å videre sende e-post til zimbratest.no.

Men... før du restarter Exim må du passe på at du i den lokale SMTP-tjeneren har lagt inn innside-IPen til zimbra-tjeneren i /etc/hosts (eller du kan legge IPen inn i brannmurens hosts-funksjon - i alle fall i IPCop, hvis du bruker brannmuren som DNS-tjeneren for maskinene på innsiden av nettet). Det er viktig å gjøre dette så e-posten ikke blir sendt til utside-IPen og havner i den lokale SMTP-tjeneren igjen. Det tar ikke langt tid før du da har noen e-poster som blir parkert som problematiske.

Så kan du restarte Exim, og alt skulle virke ok.

Endre avsenderdomene for utgående e-post (avansert)

En standard Exim-installasjon har en tendens til å sende utgående e-post fra "bruker@maskin.minskole.no", mens man gjerne ønsker å ha avsenderadressen som "bruker@minskole.no", som jo blir korrekt e-post. For å få dette til kan man legge inn en omskrivingsregel i Exim-konfigurasjonsfilen. I avsnittet "begin rewrite" legger man inn følgende:

begin rewrite
  *@*.minskole.no  $1@minskole.no Ffrs

Nå vil alt som står mellom "@" og "minskole.no" strippes fra avsenderadressene. "Ffrs" er opsjoner til omskrivingen: F og f betyr at "From"-feltet omskrives. r og s er betyr at henholdsvis "Reply-To:" og "Sender"-headerene omskrives.