Postfix és virtuális domain-ek

A HupWiki-ből...

(Postfix es virtualis domainek szócikkből átirányítva)

Tartalomjegyzék

Bevezető

A leí­rás célja bemutatni, hogyan lehet gyorsan könnyen összerakni egy több virtuális hostot kiszolgáló postfix alapú levelező szervert, ami az általa kiszolgált domain-ekhez érkező leveleket fogadja. A leí­rás megértéséhez szükséges a levelező rendszerek és protokollok működésének alapvető ismerete, továbbá némi rendszer adminisztrátori rutin.

A leí­rásnak nem célja az egyes opciók és paraméterek részletes tárgyalása, azok megtalálhatok a postfix dokumentációjában.

A leí­rás a Debian Sarge-hoz szállí­tott 2.1.5-ös verziójú postfix alapján készült, de a benne foglaltak könnyen átültethetők más operációs rendszereken futó postfixekre is.

Szükséges szoftverek

A feladat megoldásához elég telepí­teni a postfix levelező szerver azon verzióját, amit az általunk használt disztribúcióhoz adnak.

Ez Debian alatt a következő képpen történik:

$ apt-get install postfix


Feladat leí­rások

A probléma megoldását három példán keresztül fogom bemutatni. A példában szükség lesz egy fizikai gépre (ezt fogjuk fizikai.gep.hu néven emlí­teni), továbbá három olyan domain-re, amiknek a levelezését ez a fizikai gép fogja végezni (ezek rendre virtualis1.hu, virtualis2.hu és virtualis3.hu néven lesznek emlí­tve).

1. feladat: a virtualis1.hu domain-hez multidrop mailboxot fogunk rendelni, ami azt jelenti, hogy a domain-re érkező összes levél egyetlen mailbox file-ba fog megérkezni és ezeket a leveleket majd egy valahol máshol elhelyezett másik gép fogja egyetlen login/jelszó párossal elérni, mondjuk POP3 protokollon át.

2. feladat: a virtualis2.hu domain összetettebb lesz, mivel lesz benne néhány 'független' mailbox (cimzett1 és cimzett2), amiket a tulajdonosaik külön-külön saját login/jelszó párossal érnek majd el, illetve lesz benne levél továbbí­tás (cimzett3 átirányí­tása) más domain-ben lévő cí­mre.

3. feladat: egy adott virtuális domain csak bizonyos előre definiált cí­meire lehessen levelet küldeni


A feladatok megoldása

A feladatokat root (illetve vele egyenértékű) user nevében fogjuk végezni leállí­tott postfix mellett.


Előkészí­tő lépések

Mielőtt a feladatok megoldásához látunk meg kell csinálni a postfix legalapvetőbb beállí­tásait. Ez a leí­rás feltételezi, hogy a postfix valahogy, valamilyen default beállí­tásokkal települt és ezeket a leí­rás igyekszik nem figyelembe venni.

Mindenek előtt érdemes leállí­tani a postfix-et és egy teljes mentést csinálni a /etc/postfix könyvtár tartalmáról. A postfix-et utána már el se indí­tsuk amí­g nem végeztünk a beállí­tásokkal.

$ /etc/init.d/postfix stop
$ tar czvf /var/backups/postfix_conf_EEEEHHNN.tar.gz /etc/postfix


Az előkészület részeként egy nagyon minimális konfigurációt állí­tunk össze, ami csak annyit fog csinálni, hogy a fizikai.gep.hu gép levelezését fogja kiszolgálni.

Ehhez a /etc/postfix/main.cf file-t kell az alábbiak szerint megszerkeszteni:

myhostname = fizikai.gep.hu
myorigin = $myhostname
mydestination = $myhostname, localhost
inet_interfaces = all
alias_database = hash:/etc/aliases
virtual_maps = hash:/etc/postfix/virtual


A fentiekről pár szóban:

  • myhostname: a postfix-et futtató gép neve, ez meg fog jelenni a kimenő levelek fejlécében is és ha a később virtuális domain-eket szolgálunk ki, akkor a hozzájuk tartozó MX rekordokat is erre kell állí­tani
  • myorigin: gyakorlatilag megfelel a myhostname-nek, az erről a szerverről küldött levelek fejlécébe fog bekerülni az értéke
  • mydestination: a helyben kézbesí­tendő domain-ek felsorolása. Fontos, hogy ide nem kerülhet virtuális domain neve és majd a virtuális domain-ek listájába sem kerülhet bele az ide beí­rt érték
  • inet_interfaces: itt állí­tjuk be, hogy több hálózati interface esetén a postfix melyiken figyeljen
  • alias_database: a helyi kézbesí­tést segí­tő alias lista "helyiuser: másik helyi user" vagy "helyiuser: masik@tavoliuser.hu" formában
  • virtual_maps: lehetővé teszi, hogy bizonyos cí­mre érkező leveleket bizonyos más lokális vagy távoli cí­mre továbbí­tson a postfix. A file szerkezete a következő mintát követi: "root@fizikai.gep.hu valakimas@masikdomain.hu"

A fentiekről bővebb információ a www.postfix.org -on érhető el.

A /etc/aliases file esetleges módosí­tása után ki kell adni a newaliases parancsot annak érdekében, hogy a változások életbe lépjenek, majd újra kell indí­tani a postfix-et.

$ newaliases
$ /etc/init.d/postfix restart


A virtual file módosí­tása után azt a postmap paranccsal 'le kell fordí­tani' bináris formátumú lookup táblává, majd a postfixet újra kell indí­tani:

$ postmap /etc/postfix/virtual
$ /etc/init.d/postfix restart


Konfiguráció modosí­tása után a restart parméter helyett a reload is megfelel, í­gy nem szakad meg a szolgáltatás, csak az új beállí­tások kerülnek beolvasásra.

Ezeknél már nem is kell sokkal több ahhoz, hogy a postfix már ki tudjon szolgálni kéréseket, de a fenti három feladat megoldásához ez még kevés.

A postfix-et hagyjuk továbbra is lekapcsolt állapotban, illetve ha fut, állí­tsuk le!


Az 1. feladat megoldása

A feladat viszonylag egyszerű, fogadni kell a virtualis1.hu domain-re érkező leveleket és azokat berakni egyetlen postaládába.

Ehhez szükségünk lesz arra, hogy virtuális hostokat tudjunk kezelni, tehát a /etc/postfix/main.cf -et tovább bőví­tjük í­gy:

virtual_mailbox_domains = virtualis1.hu
virtual_mailbox_maps = hash:/etc/postfix/virtual_mailbox_maps
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_mailbox_base = /var/mail
virtual_mailbox_limit = 0


Magyarázat:

  • virtual_mailbox_domains: itt kell szóközökkel elválasztva felsorolni az összes virtuális domaint, amit ki szeretnénk majd szolgálni. Fontos: nem kerülhet ide a $myhostname változó vagy annak az értéke.
  • virtual_mailbox_maps: annak a lookup táblának a neve, amiben a virtualis domain-ekhez tartozó cí­mek fel vannak sorolva. Ha ez a file módosul, akkor a módosí­tást postmap-pel a fent bemutatott módon érvényesí­teni kell, majd reload-olni kell a postfixet
  • virtual_uid_maps és virtual_gid_maps: két olyan ID (uid és gid), amiknek a nevében a helyi kézbesí­tésért felelős daemon majd dolgozik. Érdemes olyat választani, amit a rendszer userek sosem kapnak majd meg.
  • virtual_mailbox_base: az itt megadott könyvtár alá jönnek majd létre azok a mailbox-ok, amikbe a cí­mzettek levelei érkeznek
  • virtual_mailbox_limit: egy-egy mailbox file maximális mérete megabyte-ban, 0 esetén végtelen


Most pedig lássuk a lényeget, azaz a multidrop-os mailboxot.

Ehhez a /etc/postfix/virtual_mailbox_maps file-t kell a következő képpen módosí­tani:

postmaster@virtualis1.hu  letolto.vh1
@virtualis1.hu  letolto.vh1


A fentiek egy kis magyarázatot igényelnek. Az első, postmaster-es sorra azért van szükség, hogy a virtualis1.hu domain regisztrációja sikeres legyen, mivel regisztrációkor ellenőrzik, hogy az MX rekordba felvenni szándékozott szerver valóban kiszolgálja-e az adott domaint. A sor végén található letolto.vh1 annak a mailbox file-nak a neve, amibe a postmasterre érkező levelek kerülnek. Ez a mailbox file a $virtual_mailbox_base -ben megadott könyvtár alatt található.

A második sor pedig arra szolgál, hogy minden, a @virtualis1.hu cí­mre érkező levél az első sorhoz hasonlóan a letolto.vh1 nevű mailbox file-ba kerüljön.

Az ebbe a mailbox file-ba érkező leveleket aztán a virtualis1.hu domain gazdája valamilyen módon (POP3, IMAP) eléri és a leveleit onnan letölti magának és otthon szortí­rozza őket. Azt, hogy a mailbox hogyan érhető el (protokollok beállí­tása, felhasználók karbantartása) a téma szerteágazó volta miatt ez a leí­rás nem tárgyalja.

A file szerkesztése után futtassuk rá a postmap-et és reload-oljuk a postfix-et:

$ postmap /etc/postfix/virtual_mailbox_maps
$ /etc/init.d/postfix restart


Ezzel elmondhatjuk, hogy az 1. feladatot teljesí­tettük, szerverünk mostantól képes fogani a virtualis1.hu domain-re érekző leveleket.


A 2. feladat megoldása

A probléma némileg bonyolultabb, mert több egymástól független mailboxot fogunk kezelni és lesz olyan levél, amit továbbí­tani kell majd másik domain-re.

Először módosí­tsuk a /etc/main.cf file-t az alábbiak szerint:

virtual_maps = hash:/etc/postfix/virtual
virtual_mailbox_domains = virtualis1.hu virtualis2.hu


Ezzel felvettük a kiszolgálandók listájába a virtualis2.hu domaint.

Módosí­tsuk a /etc/postfix/virtual_mailbox_maps file-t:

postmaster@virtualis2.hu  cimzett2.vh2
cimzett1@virtualis2.hu  cimzett1.vh2
cimzett2@virtualis2.hu  cimzett2.vh2
@virtualis2.hu letolto.vh2

Az /etc/postfix/virtual file-ba írjuk bele:

cimzett3@virtualis2.hu  valaki@masikdomain.hu


A cimzett1.vh2 és cimzett2.vh2, letolto.vh2 mailboxok tartalmát külön-külön login/jelszó párossal lehet elérni. Ezzel meg is oldottuk a különálló mailcí­mek és a maildrop illetve a levél továbbí­tás problémáját, mivel minden levél ami nem a cimzett1@virtualis2.hu vagy a cimzett2@virtualis2.hu cí­mre érkezik automatikusan a gyűjtő (maildrop) mailboxba kerül, a cimzett3@virtualis2.hu pedig forwarolódik tovább a megadott külső címre.

Végül az /etc/postfix/virtual_mailbox_maps -re és az /etc/postfix/virtual -ra ráfuttatjuk a postmap-et és reload-oljuk a postfix-et.

A 3. feladat megoldása

3. feladat: egy adott virtuális domain csak bizonyos előre definiált cí­meire lehessen levelet küldeni. Ez egyben azt is jelenti, hogy nem lehet multidropot használni.

Ehhez megint vesszük a /etc/postfix/main.cf -et és í­gy módosí­tjuk:

smtpd_sender_restrictions = check_recipient_access hash:/etc/postfix/szukitett_cimzettek


A /etc/postfix/virtual_mailbox_maps-be ez kerül:

postmaster@virtualis3.hu cimzett3.vh3
cimzett1@virtualis3.hu cimzett1.vh3
cimzett2@virtualis3.hu cimzett2.vh3
cimzett3@virtualis3.hu cimzett3.vh3


A /etc/postfix/szukitett_cimzettek-be pedig ez kerül:

cimzett1@virtualis3.hu OK
cimzett2@virtualis3.hu OK
cimzett3@virtualis3.hu OK
virtualis3.hu REJECT


Mindkét file-ra postmap majd postfix reload és a harmadik probléma is megoldásra került.