Linux mail oppsett

Dette er mitt oppsett av postfix i mitt lokalnett. Jeg opererer med det fiktive domenenavnet acme.net. Følgende funksjoner er ønsket:

Jeg har hittil kjørt sendmail på server og qmail på arbeidstasjon, men har nå konvertert til postfix begge steder og dette dokumentet viser hvordan jeg har konfigurert begge deler. (Installasjon av postfix / fjerning av sendmail er beskrevet nedenfor.)

Opplysninger om mail-konti

Arbeidsstasjon

Arbeidstasjoner skal sende mail til local mail-server og ikke motta mail. All mail handteres av server. MUA henter mail fra server vha. POP e.l.

/etc/postfix/main.cf

Her settes en del verdier for at utgående mail forwardes til server.

  # Sette domenenavn til acme.net for ufullstendige adresser
  myorigin = $mydomain
  # Hindre utidige dial-on-demand oppkoblinger
  disable_dns_lookups = yes
  # Forwarde all mail til lokal server
  relayhost = mail.acme.net
  # Ikke relay'e mail for andre enn seg selv
  mynetworks_style = host

MUA (epost-klient) sender sin mail med kommando sendmail -f acc@myisp.net for at envelope sender adresse skal bli korrekt (ute i den store verden). Ellers skal epostklienter settes opp til å sende og hente email til/fra mail.acme.net via lokal brukerkonto og passord. ISP-konti skal ikke blandes inn i det hele tatt, det handteres fra serveren ved at fetchmail henter all mail fra ISP og fordeler på lokale brukerkonti.

Server

Serveroppsettet skal håndtere det meste av evt. "finurligheter" i mailoppsettet, slik at intet overlates til mailoppsett til bruker på klientmaskin. Det eneste jeg ser jeg ikke har overlatt til server er å passe på at avsenderadresse (inkl. envelope) omskrives fra xxx@acme.net til yyy@myisp.net. Det kunne vært fikset enkelt v.h.a. sender_canonical_maps (jfr. recipiant_canonical_maps. Imidlertid er dette ikke noe problem da de fleste e-post programmer (MUA's) handterer dette korrekt selv (jeg er bare oppmerksom på dette selv fordi mutt (som jeg bruker) må eksplisitt handtere dette selv (se siste avsnittet ovenfor).

/etc/postfix/main.cf

.

  # Sette domenenavn til acme.net for ufullstendige adresser
  myorigin = $mydomain
  # Fortelle postfix hva som skal oppfattes som lokal mail
  mydestination = $myhostname, localhost.$myhostname, $mydomain
  # Relay'e kun for eget lokalnett
  mynetworks = 192.168.1.0/24, 127.0.0.0/8
  # Lytte til alle aktive interfaces ('all' er defalt, da)
  inet_interfaces = all
  # Address-rewrite for adresser som faktisk er lokale brukere
  recipient_canonical_maps = hash:/etc/postfix/recipient_canonical
  # Det som ikke leveres lokalt sendes ISP
  relayhost = mail.myisp.net
  # Men ISP-mail sendes ikke umiddelbart (cron)
  defer_transports = smtp
  # Ikke send varsel om manglende levering før etter 12 timer
  delay_warning_time = 12

/etc/postfix/recipient_canonical

Denne filen inneholder alle navn som lokal mailserver skal handle mail for, og kan se slik ut:

  # Mailadresser (internett) som skal "mappes" til lokale konti
  acc@myisp.net    arne
  alias@myisp.net  arne
  #(pluss andre som skal mappes til lokal konto)
Kjør kommando postmap /etc/postfix/recicpient_canonical for å generere oppslagstabell for postfix.

/usr/sbin/sendmail

For å sende mail fra køen til ISP, kjøres denne kommandoen fra et (cron-) script (dette er postfix sin sendmail):

  /usr/sbin/sendmail -q
Dette kan f.eks. settes opp slik (som 'root'):
  crontab -e
Og tast inn følgende:
  MAILTO=arne
  # Send mail at 17:15 mon-fri
  15 17 * * 1-5 /usr/sbin/sendmail -q
Se cron.html for litt mer info om formatet på crontab, men du finner ut enda mer med kommando man 5 crontab i Linux-konsollet. (Setningen 'MAIL=arne' er bare for å sende output fra jobben som mail til meg selv.)

Installasjon av postfix 1.1.2

På arbeidsstasjon har jeg installert Mandrake 8.1 med postfix, men på server kjører jeg Red Hat 7.2 og valgte derfor hente postfix fra nettet og installere fra source. Jeg hentet siste snapshot (ca. jan/feb 2002) i det jeg antar at den er stabil (nok). Siste offisielle versjon er ganske gammel (et års tid).

Kompilering

Fra en høvelig katalog kjøres følgende kommandoer for å pakke ut filarkivet og kompilere Postfix (dette kjøres som vanlig bruker):

  tar -zxvf postfix-1.1.2.tar.gz
  cd postfix-1.1.2
  make
Kompilering tok noen minutter på min litt slitne server.

Stoppe sendmail

Følgende kommandoer ble kjørt (som 'root'):

  # sjekke at mail-kø er tom
  /usr/bin/mailq
  # stoppe 'sendmail'
  /etc/rc.d/init.d/sendmail stop
  # sjekke at sendmail prosesser er borte
  ps aux | grep sendmail
  # rydde litt
  mv /usr/sbin/sendmail /usr/sbin/sendmail.OFF
  mv /usr/bin/newalias /usr/bin/newalias.OFF
  # (de to neste "filene" er bare symlinker til /usr/sbin/sendmail)
  rm -f /usr/bin/mailq
  rm -f /usr/bin/newaliases
  chmod 755 /usr/sbin/sendmail.OFF /usr/bin/newalias.OFF

Installere

Husk å kompilere Postfix først (se ovenfor) og fortsett som 'root'! Opprette bruker for postfix (her er UID og GID satt til 491) og installere postfix:

  groupadd -g 491 postfix
  groupadd -g 492 postdrop
  useradd -u 491 -g 491 -s /bin/false -d /var/spool/mail -M -c Postfix postfix
  make install
Hvis du skal oppgradere en tidligere postfix-installasjon, kjøres make upgrade. Godta gjerne alle defaultverdier for install-script (release 1.1.2 fra 25. jan. 2002 har noen flere parametre enn tidligere versjoner (aug. og nov. 2001)):
  install_root = /
  tempdir = <aktiv katalog>
  config_directory = /etc/postfix
  daemon_directory = /usr/libexec/postfix
  command_directory = /usr/sbin
  queue_directory = /var/spool/postfix
  sendmail_path = /usr/sbin/sendmail
  newaliases_path = /usr/bin/newaliases
  mailq_path = /usr/bin/mailq
  mail_owner = postfix
  setgid_group = postdrop
  manpage_directory = /usr/local/man
  sample_directory = /etc/postfix
  readme_directory = no -> /etc/postfix
Opprett alias for postfix i /etc/aliases
  postfix: root

Kjø kommando newaliases etterpå. NB: Konfigurer helst /etc/postfix/main.cf først.

Oppstart

Sjekk filen /etc/syslog.conf:

  mail.err    /dev/console
  mail.debug  /var/log/maillog
Hos meg var setningen mail.* /var/log/maillog (elns) allerede på plass, så ingen endring var nødvendig.

Nå er vi klare til å starte, bare et par kommandoer først:

  postfix check               # Kontrollere oppsett
  tail /var/log/maillog       # Se etter feilmeldinger i loggen
  chmod 1777 /var/spool/mail  # Jeg fant klage på dette i loggen
Da skulle det bare være å starte opp postfix med kommandoen
  postfix start
Hvis alt fungerer, kan en fjerne sendmail (filene vi renamet til ...OFF tidligere).

Det siste som gjenstår er å fjerne oppstart av sendmail fra /etc/rc.d/rd.[35] og lage oppstart for postfix. For å starte postfix ved restart kan denne oppstartsfilen brukes: /etc/rc.d/init.d/postfix. Den kopierte jeg rått fra Mandrake-maskinen min. Jeg antar at den skulle funke ok. Til slutt må lage vi symlinker fra /etc/rc.d/rc[35].d/ til /etc/rc.d/init.d/postfix (og fjerne symlinken S80sendmail):

  cd /etc/rc.d/rc3.d
  ln -s ../init.d/postfix S80postfix
  rm -f S80sendmail
  cd ../rc5.d/
  ln -s ../init.d/postfix S80postfix
  rm -f S80sendmail
Kommando chkconfig --level 35 postfix on (f.eks.) kan også brukes, men jeg er vant til å gjøre det på denne måten (og ikke glem å fjerne sendmail fra oppstart).


Grasmyr, 2002.02.18, Arne Hanssen