• email
  • facebook
  • linkedin
  • google+
  • pinteres

A Postfix beállítása

Ez a leírás elavult, újabb változata megtalálható ezen a linken, amely Ubuntu 12.04-es telepítést mutat be.

1.   Alapbeállítások

Az előzőek után következhet a Postfix beállítása.

A feltett csomagok:

  • postfix postfix-pgsql postfix-tls postfix-pcre

Illetve még a levelezéshez (ez utóbbiak nem kötelezők, de hasznosak):

  • mailx
  • mutt

Telepítés után az alapbeállításokat érdemes elvégezni a /etc/postfix/main.cf fájlban:

smtpd_banner = $myhostname ESMTP $myorigin
biff = no

append_dot_mydomain = yes
#delay_warning_time = 4h

message_size_limit = 25000000
home_mailbox = Maildir/

Network beállítások ugyanitt:

myhostname = mester.nir.hu
mydomain = nir.hu
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = test.nir.hu mester.nir.hu, localhost.nir.hu, localhost, localhost.localdomain
relayhost =
mynetworks = 127.0.0.0/8
inet_interfaces = $myhostname, localhost
#mailbox_command =
mailbox_size_limit = 0
recipient_delimiter = +

A levelező szerver külső elérésének a beállításai -- itt szabályozhatjuk, hogy milyen ellenőrzések történjenek levélküldéskor:

Az ellenőrzés sorrendje:

  • smtpd_client_restrictions
  • smtpd_helo_restrictions
  • smtpd_sender_restrictions
  • smtpd_recipient_restrictions
  • smtpd_data_restrictions
#szokásos alapbeállítás
smtpd_helo_required = yes

smtpd_client_restrictions =
    permit_mynetworks,
    #ezeket érdemes megfontolni:
    #reject_rbl_client relays.ordb.org,
    #reject_rbl_client opm.blitzed.org,
    #reject_rbl_client list.

smtpd_helo_restrictions =
    #elég szűk alapbeállítás
    reject_invalid_hostname,
    permit
    # megfontolandók
    #reject_rbl_client relays.ordb.org,
    #reject_rbl_client opm.blitzed.org

smtpd_sender_restrictions =
    #engedjük a saját networköket
    permit_mynetworks
    # szokásos alapbeállítások
    permit_sasl_authenticated,
    reject_unknown_sender_domain,

smtpd_recipient_restrictions =
    #engedjük a saját networköket
    permit_mynetworks
    #bárkinek küldhet, aki már sasl-al autentikálta magát
    permit_sasl_authenticated,
    #az ismeretlen címzetteket eldobjuk
    reject_unauth_destination,

smtpd_data_restrictions =
    reject_unauth_pipelining,
    permit

A reject_unauth_destination ellenőrzési tartománya (azaz itt nézi meg, az ezen címre érkező leveleket kell-e fogadni): relay_domains, mydestination, inet_interfaces, proxy_interfaces, virtual_alias_domains vagy virtual_mailbox_domains

Fontos még a rendszerszintű aliaszok megadása az /etc/aliases fájlban (ez minden jól konfigurált levelezőrendszer alapfeltétele), például a root aliaszé (és ami még esetleg lokálisan kellhet). A fájl szerkesztése után adjuk ki a newalises parancsot. A fájl tartalma:

mailer-daemon:  postmaster
postmaster:     root
hostmaster:     root
nobody:         root
www:            root
clamav:         root
svn:            root

root:           root@nir.hu
szabolcs:       parszab@nir.hu

Az /etc/mailname fájlban még adjuk meg milyen szerver nevet szeretnénk használni:

mester.nir.hu

Ezek után már tudunk is leveleket küldeni. De ez még csak a munka alapja. Mi lesz az adatbázis eléréssel és a virtulis felhasználókkal? Vagy például mi van, ha TLS titkosítással (is) szeretnénk az SMTP szerverünket elérhetővé tenni? A java még hátra van.

2.   Virtuális userek és PostgreSQL

Hogy a postfix konfiguráció elérje az adatbázist, először is az /etc/postfix/main.cf fájlban kell beállítanunk a postgresql mapping fájlok elérését:

#Relay domains es transport maps postgresből
relay_domains = pgsql:/etc/postfix/pgsql-relay_domain_maps.cf
transport_maps = pgsql:/etc/postfix/pgsql-transport_maps.cf

virtual_mailbox_base = /data/mail
virtual_gid_maps = static:10000

#virtual_alias_domains = pgsql:/etc/postfix/pgsql-virtual_alias_domains.cf
virtual_alias_maps = pgsql:/etc/postfix/pgsql-virtual_alias_maps.cf
virtual_mailbox_domains = pgsql:/etc/postfix/pgsql-virtual_mailbox_domains.cf
virtual_mailbox_maps = pgsql:/etc/postfix/pgsql-virtual_mailbox_maps.cf
virtual_uid_maps = pgsql:/etc/postfix/pgsql-virtual_uid_maps.cf

A virtual_alias_domains mapping fájlra nem lesz szükségünk, ezért kommenteztem ki -- nem lehet valami egyszerre ebben is és a virtual_mailbox_domains táblában is -- de bizonyos konfigurációk esetén hasznos lehet ez is.

Figyelem: a következő fájlokban a * jelek közé illesztett nagybetűs stringek ismét változók, mindenki helyettesítse be őket értelemszerűen, az adatbázis létrehozásánál megadottakkal.

A /etc/postfix/pgsql-virtual_alias_maps.cf fájlba ezt írjuk:

user = *POSTFIXUSER*
password = *POSTFIXPASS*
hosts = localhost
dbname = mail
table = aliases
select_field = destination
where_field = email
additional_conditions = AND active = TRUE

A /etc/postfix/pgsql-virtual_mailbox_domains.cf fájlba pedig:

user = *POSTFIXUSER*
password = *POSTFIXPASS*
hosts=localhost
dbname = mail
table = domains
select_field = domain
where_field = domain
additional_conditions = AND backupmx = FALSE AND active = TRUE

A pgsql-virtual_mailbox_maps.cf fájla tartalma:

user = *POSTFIXUSER*
password = *POSTFIXPASS*
hosts = localhost
dbname = mail
table = users
select_field = homedir || '/' || maildir
where_field = email
additional_conditions = AND active = TRUE

A pgsql-virtual_uid_maps.cf fájl:

user = *POSTFIXUSER*
password = *POSTFIXPASS*
hosts = localhost
dbname = mail
table = users
select_field = uid
where_field = email
additional_conditions = AND active = TRUE

A pgsql-relay_domain_maps.cf fájl tartalma ez:

user = *POSTFIXUSER*
password = *POSTFIXPASS*
hosts = localhost
dbname = mail
table = domains
select_field = domain
where_field = domain
additional_conditions = AND backupmx = TRUE AND active = TRUE

A pgsql-transport_maps.cf fájl:

user = *POSTFIXUSER*
password = *POSTFIXPASS*
hosts = localhost
dbname = mail
table = domains
select_field = transport
where_field = domain
additional_conditions = AND active = TRUE

A beérkezett levelek kézbesítése különböző transzportok/handlerek segítségével történik. Ezek különleges esetekre való konfigurálásával kapcsolatban lásd:

Két izgalmas eset, hogyha

  1. második szintű MX vagyunk, vagy ha
  2. első szintűek vagyunk, de tovább kell küldenünk a leveleket egy másik gépre.

Ezekkel a lehetőségekkel is foglalkozik az iménti linken elérhető leírás. A lényeg: mindkét esetben a relay transzportot kell használnunk. Az első esetben felvesszük az adott domainnél az adatbázisban transzportnak hogy relay:, és beállítjuk, hogy backup MX vagyunk. Így a gép egy MX lookup után a nálunk nagyobb prioritású gépnek továbbítja a levelet. Itt a lényeg igazából az, hogy az adatbázis backupmx mezője adott domainnél TRUE lesz, így a relay_domains lekérdezés visszaadja majd a domaint, és a postfix tudja, hogy mi a teendő vele.

A második esetben a fentiek mellett a fogadó gép címét is meg kell adni, pl: relay:[their.mail.host.tld], így lookup nincs, és a levelek egyből a megadott címre továbbítódnak. Itt az a fontos, hogy a transzport és a célgép címének értéke a transport_maps lekérdezésben a postfix tudomására jut.

Hasznos leírás a relay hosztolásról és spamek elkerüléséről: http://slacker.com/~nugget/projects/postfixrelaymaps/

Ha relayezés esetén is szűrni szeretnénk a címzettek szerint, és már itt eldobni az ismeretleneket, akkor a relay_recipient_maps-et használhatjuk. Ennek segítségével az ellenőrzés megoldható a távoli gépen futtatott adatbázis lekérdezésekkel is. Ezzel nem biztos, hogy érdemes vacakolni, pláne ha csak egy gépünk van.

Transzportnak egyébként megadhatunk néhány egyéb, például SMTP transzportot is: smtp:[their.domain.com]. Ahol lehet, ezt ne használjuk, hagyatkozzunk inkább relayekre: sokszor mikor SMTP transzportot használunk, valójában relayre van szükségünk.

A mi esetünkben az alapértelmezés mindenesetre virtual: lesz, így a leveleket a virtuális kézbesítő kézbesíti majd a virtuális felhasználóknak.

Megjegyzés: az adatbázis mapping fájlokban konkrét query-t is megadhatunk:

query = SELECT domain FROM domains WHERE domain='%s' AND active='true' AND backupmx = TRUE

A harmadik részben a TSL és a SASL autentikáció beállítása következik.