Az Exim és a Mailman együtt =========================== [Ez a fájl Nigel Metheringhamz "HOGYANIS - Az Exim és a Mailman együtt" dokumentációjának egy kivonata, amelyben a 2.0.x verziójú Mailman-ról és a 3-as verziójú Exim-ről lehet olvasni. A frissített dokumentációban a 2.1-es Mailman és 4-es Exim összekapcsolásáról is lehet olvasni. Az eredeti dokumentációt az alábbi címen lehet olvasni: http://www.exim.org/howto/mailman.html ] Mailman beállítása ------------------ A Mailman-t nem kell a hagyományostól eltérő módon beállítani, mint ahogy az a Mailman telepítési dokumentációjában le van írva. Mindössze a mailman uid/gid értékeit kell az Exim konfigurációjának megfelelő helyein megadni. Exim beállítása --------------- Az Exim beállításával a Mailman-ben létrehozott listák automatikusan, további bejegyzések nélkül megjelennek és használhatóak lesznek. Ennek a beállításnak a hátránya az, hogy gyenge teljesítménnyel működik olyan rendszereken, amelyek több különböző levelező tartomány listáit szolgálják ki. Igaz, hogy a Mailman képes kezelni virtuális tartományok kezelésére, de egyelőre nem képes kezelni ugyanaz a telepített Mailman azonos névvel, de eltérő tartományban található listákat. Ez a jövőben változni fog. (Lejjebb különböző változatokról lehet olvasni, amelyekkel a virtuális tartományokat lehet megfelelően kiszolgálni.) A később bemutatott konfigurációs állomány részleteket azon már működő Exim konfigurációs részbe kell elhelyezni, amely azon tartomány levelezéséért felelős, ahol a lista működik. Ha ez a tartomány eltér az Eximben megadott tartományoktól, akkor a következőket kell tenni: * adjuk hozzá a local_domains-hez a lista tartományát, pl. sajat.listam.domain * adjuk a "domains=sajat.listam.domain" beállítást a lista átirányító (director) részéhez * (ha szükséges) a többi átirányítónál vegyük fel ezt a tartományt a figyelmen kívül hagyandó tartományok közé. [Megjegyzés: a leírásban található beállítások mind 3-as, mind 4-es Eximhez egyaránt használhatóak. 3-as Eximnél 'local_domains' beállításra van szükségünk, míg a 4-es verzióban többnyire a 'local_domains'-ben megadott tartománylistára. Ha nem így használjuk az Eximet, akkor valószínűleg alapos Exim beállítási ismeretekkel rendelkezünk, így nem lesz nehéz módosítani a később ismertetett beállításokat. 4-es Eximben az átirányítók (directors) rész megszűnt, szerepét a routers rész vette át, így ha 4-es Eximet használunk, akkor mindenhol ahol a dokumentáció átirányítót említ mi routert értsünk.] Függetlenül attól, hogy melyik Exim verziót használjuk az Exim konfigurációs állományának általános beállítások részébe néhány változóz kell megadnunk. Továbbá egy új továbbító részt is létre kell majd hoznunk. 3-as Eximnél egy új átirányító, míg a 4-es verzióban egy új router tölti be majd ugyanazt a szerepet. Végül pedig érdemes tudni, hogy ezekkel a beállításokkal ugyanazon a gépen egymás mellett működhet a Mailman 2.0-ás és 2.1-es verziója is. Ekkor "mailman" helyett hivatkozhatunk "mm21" névvel a másik, újabb verzióra, pl. MM21_HOME, mm21_transport, stb. Általános beállítások ~~~~~~~~~~~~~~~~~~~~~ Először is ez Exim konfigurációs állományának elejéhez adjuk a következő változókat. A változók segítségével egyszerűbben kezelhetőek a később megadott átirányító és router beállítások. Természetesen a saját rendszerünk szerint módosítsuk a megadott értékeket. # A telepített Mailman 'home' könyvtára MAILMAN_HOME=/usr/local/mailman MAILMAN_WRAP=MAILMAN_HOME/mail/mailman # Mailman felhasználó és csoport azonosítója, egyeznie kell a Mailman # bellításakor használt --with-mail-gid kapcsolónál megadott értékkel MAILMAN_UID=mailman MAILMAN_GID=mailman Transport rész Exim 3-hoz ~~~~~~~~~~~~~~~~~~~~~~~~~ Az Exim konfigurációs állományának transports fejezetéhez adjuk a következő sorokat, kb. az első és második "end" tartalmú sor közé kell beszúrni a következőket: mailman_transport: driver = pipe command = MAILMAN_WRAP \ '${if def:local_part_suffix \ {${sg{$local_part_suffix}{-(\\w+)(\\+.*)?}{\$1}}} \ {post}}' \ $local_part current_directory = MAILMAN_HOME home_directory = MAILMAN_HOME user = MAILMAN_USER group = MAILMAN_GROUP Átirányító rész Exim 3-hoz ~~~~~~~~~~~~~~~~~~~~~~~~~~ Ha 3-as Eximet használunk, akkor a konfigurációs állomány átirányító részéhez a következőket kell adni (az átirányítók a második és harmadik "end" tartalmú sor között találhatóak). Fontos, hogy itt számít a sorrend -- pl. ha ezt az irányítót az aliasállomány átirányítójára való hivatkozás elé tesszük, akkor a Mailman bejegyzései (aliases) a rendszer bejegyzéseknél magasabb érvényűek lesznek. # A listához tartozó összes címet kezeli ez a rész. # Automatikusan azonosítja a listákat a MAILMAN_HOME könyvtárban # található lists/$local_part/config.pck állományok alapján. mailman_director: driver = smartuser require_files = MAILMAN_HOME/lists/$local_part/config.pck suffix_optional suffix = -bounces : -bounces+* : \ -confirm+* : -join : -leave : \ -owner : -request : -admin transport = mailman_transport Router rész Exim 4-hez ~~~~~~~~~~~~~~~~~~~~~~ 4-es Eximben az átirányítók helyett routereket kell használni. Ezen túl a konfigurációs állomány felépítése is megváltozott -- ABC sorrendet használ, így itt a router rész a transport rész elé kerül. Tegyük a router beállítást a router részbe, amely a "begin routers" sor után kezdődik. El ne felejtsük, hogy a megadott sorrend itt még inkább számít. mailman_router: driver = accept require_files = MAILMAN_HOME/lists/$local_part/config.pck local_part_suffix_optional local_part_suffix = -bounces : -bounces+* : \ -confirm+* : -join : -leave : \ -owner : -request : -admin transport = mailman_transport Transport rész Exim 4-hez ~~~~~~~~~~~~~~~~~~~~~~~~~ A 4-es Eximhez használhatjuk a 3-as Eximben megadott transport bejegyzést, nyugodtan másoljuk be valahova a "begin transports" sor után a 3-as Eximnél ismertetett beállításokat. Megjegyzés ~~~~~~~~~~ Az Exim-et úgy kell beállítani, hogy a kézbesítés elfogadható mértékű legyen - pl. a max_recipients ne valami nagyon kis érték legyen, és a biztonsági beállítások is értelmes szintet eredményezzenek - pl. 127.0.0.1 címről (evidensen) engedélyezett a relaying, de máshonnan nagyon nem. Párhuzamos küldési módot is be lehet állítani. A kézbesítések idő- túllépésére figyelmeztető üzeneteket legalább a listákhoz kapcsolódó címeknél kapcsoljuk ki, ha nem szeretnénk nagyon sok ilyen üzenetet kapni, amikor a címzett gép nem érhető el. Problémák ~~~~~~~~~ * A Mailman annyi MAIL FROM/RCPT TO hívást használ, amennyi szükséges. Ennek következtében 10 vagy 100 üzenetnél is többet próbál meg egy kapcsolat alatt elküldeni, amely több mint az Exim alapesetben beállított engedélyezett küldése (smtp_accept_queue_per_connection). Emiatt az Exim várakozólista módba kapcsol és nagy késésekkel fogja az üzeneteket továbbítani. A probléma elkerülésére adjunk az SMTP_MAX_SESSIONS_PER_CONNECTION változónak (a ~mailman/Mailman/mm_cfg.py állományban) az Exim smtp_accept_queue_per_connection értékénél kisebb értéket * A Mailman-nak figyelmen kívül kellene hagynia az Exim kézbesítés időtúllépéséből (delay) eredő üzeneteit, annak ellenére, hogy az Exim ezeket sohasem küldi el a listákra. A Mailman 2.1-ben a visszapattanások kezelése és a VERP támogatása nagyban segítheti a visszapattanások nyomonkövetését. * A listák létezésénél ellenőrzi a beállítás, hogy található-e a listához config.pck fájl. Ha töröljük a listát, akkor ügyeljünk hogy töröljük a listához tartozó config.pck fájlt is. * Ha hibás felhasználói azonosítóra hivatkozva nem történik kézbesítés, akkor ellenőrizzük, hogy a MAILMAN_UID és MAILMAN_GID váltózóknak helyesen adtuk-e meg a Mailman ezen értékeit. Figyeljünk arra is, hogy a rendszerszintű aliases fájlban nem található a listához közvetlenül kapcsolódó bejegyzés. Címzett azonosítása ~~~~~~~~~~~~~~~~~~~ Az Exim címzett azonosítás funkciója nagyon hasznos, mivel segítségével az SMTP kapcsolat ideje alatt el lehet vetni a nem ismert címzettű leveleket. Ez a funkció a saját tartományukba külső címekről érkező levelek esetén hasznos. A Mailman listák forgalmánál a levelek a saját szerverünkről indulnak és különböző külső, tőlünk független tartományokba kerülnek elküldésre. Minden egyes levél több címzettnek kerülhet továbbításra -- akár egyszerre 500-nak is, ha a Mailman alapértelmezett értékét használjuk és nem módosítottuk az SMTP_MAX_RCPTS értékét. A Mailman listák forgalmán címzett azonosítást végezve problémák merülhetnek fel. Általában az Exim a Mailman listákról érkező üzenetek minden címzettjét megpróbálja elérni. Ehhez mindössze pár keresést végez a DNSben minden egyes címzettnél, azonban ez a keresés a kézbesítést nagyon lelassíthatja. Ezért célszerű kikapcsolni a címzett azonosítást a Mailman forgalomra. 3-as Exim alatt a következőt kell elhelyezni az általános beállítások részben: receiver_verify_hosts = !127.0.0.1 4-es Eximnél valószínűleg az alapértelmezett címzett azonosítási ACL kifejezésben (az "RCPT TO" ACL-ben) már engedélyezve van ez a funkció: accept domains = +local_domains endpass message = unknown user verify = recipient Ekkor csak a saját tartományba érkező levelekre végez címzett azonosítást az Exim. (Ez a megoldás nem teljesen azonos azoknál az üzeneteknél alkalmazott címzett azonosítási funkcióval, amelyek nem-127.0.0.1 hostokról érkeznek, de működik a Mailman esetében.) SMTP Callback ~~~~~~~~~~~~~ Az Exim SMTP callback képességével még hatékonyabban lehet azonosítani a hibás feladócímeket, mint a hagyományos feladó ellenőrzéssel. Sajnos nagyon sok szerver a visszapattanási üzenet fejlécében hibás feladót tüntet fel (annak ellenére, hogy csak egy üres feladó címet kéne használniuk ilyen esetekben). Azért, hogy a Mailman a visszapattanó címeket kezelni tudja szükséges a Mailman listákon fogadni az ilyen leveleket, még akkor is ha ezek nem alkalmasak visszapattanások azonosítására. Ezért többnyire célszerű kikapcsolni az SMTP callback ellenőrzést a visszapattanó levelekre. Exim 4 esetén ezt a következő beállítással lehet elérni az "RCPT TO" ACL részben: # Fogadjuk a visszapattanásokat a listán még akkor is ha a callback vagy # más ellenőrzések nem jártak sikerrel warn message = X-WhitelistedRCPT-nohdrfromcallback: Yes condition = \ ${if and {{match{$local_part}{(.*)-bounces\+.*}} {exists {MAILMAN_HOME/lists/$1/config.pck}}} \ {yes}{no}} {yes}{no}} accept condition = \ ${if and {{match{$local_part}{(.*)-bounces\+.*}} {exists {MAILMAN_HOME/lists/$1/config.pck}}} \ {yes}{no}} {yes}{no}} # Most ellenőrizhetjük a feladó címét az SMTP callback funkcióval. deny !verify = sender/callout=90s Ha a fejlécben található címekre is szeretnénk SMTP callback ellenőrzést végrehajtani, akkor a "DATA" ACL-t a következőképpen kell megadni: deny !condition = $header_X-WhitelistedRCPT-nohdrfromcallback: !verify = header_sender/callout=90s VERP használata Eximmel és Mailmannel ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ VERP esetén a listatagoknak a leveleket külön-külön küldjük el, a VERP beállításáról a ~mailman/Mailman/Defaults.py állományban lehet bővebben olvasni. Röviden, a következőket kell feltüntetni a ~mailman/Mailman/mm_cfg.py állományban a VERP használatához: VERP_PASSWORD_REMINDERS = 1 VERP_PERSONALIZED_DELIVERIES = 1 VERP_DELIVERY_INTERVAL = 1 VERP_CONFIRMATIONS = 1 (A fenn említett átirányítok képesek a VERP visszapattanások kezelésére is.) Virtuális tartományok ~~~~~~~~~~~~~~~~~~~~~ Virtuális tartományok kezelésére megoldás lehet az a módszer, hogy minden egyes virtuális tartományhoz külön-külön telepített Mailmant használunk. (Jelenleg csak ezzel a módszerrel lehet ugyanazon a rendszeren azonos névvel, de eltérő tartományokban listákat üzemeltetni.) Ez esetben ne adjuk meg a MAILMAN_HOME és MAILMAN_WRAP változókat, töröljük azokat az általános beállítások részből. Módosítsuk a director (router) részeket valahogy így: require_files = /virtual/${domain}/mailman/lists/${lc:$local_part}/config.pck a transports részeket pedig így: command = /virtual/${domain}/mailman/mail/mailman \ ${if def:local_part_suffix \ {${sg{$local_part_suffix}{-(\\w+)(\\+.*)?}{\$1}}} {post}} \ $local_part current_directory = /virtual/${domain}/mailman home_directory = /virtual/${domain}/mailman Lista ellenőrzése ~~~~~~~~~~~~~~~~~ A következőkben bemutatjuk, hogy hogyan lehet ellenőrizni egy működő rendszeren, hogy az Eximnek megadott listák címei megfelelően működnek. A példában az mems-exchange.org levelezőszerveren működő quixote-users@mems-exchange.org listán mutatjuk be a szükséges parancsokat ("% " jelzi a Unix shell promptját): % exim -bt quixote-users quixote-users@mems-exchange.org router = mailman_main_router, transport = mailman_transport % exim -bt quixote-users-request quixote-users-request@mems-exchange.org router = mailman_router, transport = mailman_transport % exim -bt quixote-users-bounces quixote-users-bounces@mems-exchange.org router = mailman_router, transport = mailman_transport % exim -bt quixote-users-bounces+luser=example.com quixote-users-bounces+luser=example.com@mems-exchange.org router = mailman_router, transport = mailman_transport Ha az "exim -bt" parancsok kimenete hasonlít valamennyire a fentiekhez, akkor az jó jel, mert azt jelenti hogy az Exim a megfelelő Mailman bejegyzéshez továbbítja az eltérő üzeneteket. Azonban messze nem jelenti azt, hogy az Exim és Mailman telepítés biztosan tökéletesen működik! A dokumentum készítői ~~~~~~~~~~~~~~~~~~~~~ Eredeti szerzője Nigel Metheringham . Mailman 2.1-es és Exim 4-es verzióhoz adaptálta Merlin . Ellenőrízte/formába öntötte/pontosította/egyszerűsítette Greg Ward .