Cover Image

Sette opp Postfix for autentisert relay via tredjepartsmailserver

 Tue 2017-08-08    SysAdm

Denne posten beskriver 6 enkle steg for å sette opp Postfix til å videresende mail via tredjeparts mailserver med autentisering via SASL. Jeg kjører Postfix på FreeBSD, så filstier vil variere noe mellom de forskjellige *nix-variantene. Linux har heller ikke ports, så der får man enten bruke det distromaintainer mener man bør ha, eller kompilere sin egen fra kildekode.

  1. Installer Postfix fra ports:
    Den enkleste måten å gjøre dette på er portmaster mail/postfix. Spesifiser følgende options:
      +---------------------------- postfix-3.3.0_1,1 -------------------------------+
      | +--------------------------------------------------------------------------+ |
      | | [ ] BDB         Berkeley DB support                                      | |
      | | [ ] BLACKLISTD  Enable blacklistd support (FreeBSD 11.0 and later only)  | |
      | | [ ] CDB         CDB maps lookups                                         | |
      | | [x] DOCS        Build and/or install documentation                       | |
      | | [x] EAI         Email Address Internationalization (SMTPUTF8) support    | |
      | | [ ] INST_BASE   Install into /usr and /etc/postfix                       | |
      | | [ ] LDAP        LDAP maps (uses WITH_OPENLDAP_VER)                       | |
      | | [ ] LDAP_SASL   LDAP client-to-server SASL auth                          | |
      | | [ ] LMDB        LMDB maps                                                | |
      | | [ ] MYSQL       MySQL database support                                   | |
      | | [ ] NIS         Network Information Services/YP support                  | |
      | | [x] PCRE        Use Perl Compatible Regular Expressions                  | |
      | | [ ] PGSQL       PostgreSQL database support                              | |
      | | [x] SASL        Cyrus SASL support (Dovecot SASL is always built in)     | |
      | | [ ] SQLITE      SQLite database support                                  | |
      | | [ ] TEST        SMTP/LMTP test server and generator                      | |
      | | [x] TLS         Secure network connection support via TLS                | |
      | |-------------- Kerberos network authentication protocol type -------------| |
      | | ( ) SASLKRB5    If your SASL req. Kerberos5, select this                 | |
      | | ( ) SASLKMIT    If your SASL req. MIT Kerberos5, select this             | |
      | +--------------------------------------------------------------------------+ |
      +------------------------------------------------------------------------------+
      |                       <  OK  >            <Cancel>                           |
      +------------------------------------------------------------------------------+
    
    

    Dette er alt som trengs for formålet. Pass på å få med SASL-støtte, ellers vil ikke autentisering mot relayhost fungere. Den innebygde Dovecot SASL-støtten ser ikke ut til å fungere helt som den skal; jeg har hvertfall ikke fått AUTH mot relayhost til å fungere uten Cyrus SASL.

  2. Opprett en passordmap-fil som tilordner brukernavn/passord for spesifiserte mailservere.
    Filen kan hete hva som helst; jeg kalte den /usr/local/etc/postfix/relay_passwd. Innholdet i filen må se ut som dette: mail.server.com USERNAME:PASSWORD Erstatt "mail.server.com" med mailserveren du har fått tillatelse til å bruke. USERNAME og PASSWORD er da brukernavnet og passordet du vanligvis autentiserer med mot mailserveren.
  3. Sett riktige tilgangsrettigheter for filen:
    # chown root:wheel /usr/local/etc/postfix/relay_passwd
    # chmod 0600 /usr/local/etc/postfix/relay_passwd
  4. Opprett en hash fra passordmapping-filen:
    # postmap /usr/local/etc/postfix/relay_passwd
  5. Endre config for Postfix i /usr/local/etc/postfix/main.cf:
    relayhost = [mail.server.com]:587
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = hash:/usr/local/etc/postfix/relay_passwd
    smtp_sasl_security_options =Hvis serveradmin/ISPen din blokkerer utgående port 25 (noe som er vanlig i disse dager), kan man bruke alternative porter. 587 er som regel åpen, men andre porter kan også brukes; kontakt serveradmin for mailserveren for disse. Portnummeret spesifiserer som angitt over med :587 etter [mail.server.com].
  6. Reload eller restart Postfix:
    # service postfix restart
    eller
    # /usr/local/etc/rc.d/postfix restart
    eller
    # postfix reload

Andre ting å passe på angående Postfix:

Hvis innstillingene over ikke fungerer, må du sjekke at Postfix har blitt kompilert med SASL-støtte. Hvis installasjonen din av Postfix ikke har dette, må du muligens oppgradere til siste versjon av Postfix. Pass på å velge SASL via Cyrus-SASL. Hvis systemet ditt ikke har blitt oppdatert på en stund må muligens Perl, libicu og en rekke andre ports for å få alt på stell.
freebsd-update og portmaster/portupgrade kan være hensiktsmessig å kjøre først.

Fungerende config:

Endre myhostname = SERVER.NAME.CHANGE.ME og relayhost = [MAIL.SERVER.COM]:587:

/usr/local/etc/postfix/main.cf:

queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
data_directory = /var/db/postfix
mail_owner = postfix
myhostname = SERVER.NAME.CHANGE.ME
inet_interfaces = all
unknown_local_recipient_reject_code = 550
mynetworks_style = subnet
relayhost = [MAIL.SERVER.COM]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/usr/local/etc/postfix/relay_passwd
smtp_sasl_security_options =
debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/local/sbin/sendmail
newaliases_path = /usr/local/bin/newaliases
mailq_path = /usr/local/bin/mailq
setgid_group = maildrop
html_directory = /usr/local/share/doc/postfix
manpage_directory = /usr/local/man
sample_directory = /usr/local/etc/postfix
readme_directory = /usr/local/share/doc/postfix
inet_protocols = ipv4
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated      defer_unauth_destination
compatibility_level = 2
append_dot_mydomain = yes
relay_domains = $mydestination
smtputf8_enable = no

Merk at denne configen kun gjør at serveren kan sende mail UT - Postfix tar ikke imot mail fra utsiden, den vet ingenting om eventuelle lokale brukere. Alt den gjør er å ta imot mail fra systemet og sende det til serveren angitt i relayhost. Configen mangler direktiver for oppsett av SSL/TLS for SMARTTLS og kryptert kommunikasjon/handshake med mottagende server. Dette kommer etterhvert og vil da bli lagt inn.