Postfix és virtuális domain-ek
A HupWiki-ből...
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.