Kovácsmûhely

Elektronikuslevél-beépítés Tartsuk ébren weboldalunk felhasználóinak az érdeklõdését: figyelmeztessük õket elektronikus levélben a számukra érdekes hírekre és vitákra!

öbb mint húsz éve használom a számítógépemet az nem is olyan nagyon bonyolult, embertársaimmal való kapcsolattartásra. Kezdetben csak de a fejlesztésre és hibakeresésre szánt idõt és erõfeszítéseket alkalmanként írogattam a helyi hirdetõtáblára, mindez sokkal érdemesebb egy létezõ csomag megtanulására fordítani. Tmára személyes és szakmai életem elválaszthatatlan részévé vált. Akinek azonban van egy kis tapasztalata a web és az adatbá- Ebben a hónapban – miközben folytatom a kicsomagolást új zisok témában, az tudja, hogy egy webfórumcsomag létre-

© Kiskapu Kft. Minden jog fenntartva chicagói otthonomban, és küzdök a felmerülõ hibákkal, hozása nemigen áll másból, mint hogy összepakol néhány amelyek megnehezítik, hogy folytassam a Bricolage-ról szóló táblát (felhasználók, üzenetek és a hírcsoportok), majd megadja cikksorozatomat – a jelenkor néhány, az elektronikus levelekkel a jogosultságot az embereknek, hogy bejegyzéseket (küldemé- kapcsolatos kérdésébe pillantok bele. Írásomban a web-, illetve nyek) helyezhessenek el az egyes hírcsoportokban. a levelezésegyesítésrõl, illetve a levelezés és az adatbázis Ezek a rendszerek több mint elégségesek egy kis vagy közepes egyesítésérõl, sõt még az SMTP-szintû levélszemét elleni méretû weboldal számára; de ha idõközben hatalmasra duz- harcról is szó esik. zadna is a rendszerünk, az elküldött üzenetek ezreivel és fel- használók százaival birkózva is valószínûtlen, hogy komoly A web és az elektronikus levél egyesítése hatása lenne ezekre a rendszerekre. Ugyanis valamennyi rend- Ma már valóban nehéz olyan nagy és korszerû weblapot szer relációs adatbázisokat használ az adattárolásra, márpedig találni, amelyen nincs megoldva felhasználói visszajelzések még a legkisebb és legegyszerûbb korszerû adatbázisrendszer és jelentkezések kérdése. A kérdés csak az, hogy miként illeszt- is képes napi néhány ezer tranzakció kezelésére. hetünk be egy fórumot a weblapunkra? A válasz legtöbb eset- Egyre gyakrabban fordul elõ azonban, hogy az egyszerû ben attól függ, hogy milyen oldalt használunk. webalapú fórum már nem bizonyul elegendõnek. Bár az embe- Amennyiben nagyobb eszközkészletet alkalmazunk, például rek általában hajlandók végignézni a webalapú fórumokat, OpenACS-t, Zope-ot vagy PHPNuke-ot, legalább egy könnyen nemigen térnek vissza nap mint nap, hogy kövessék a vita telepíthetõ csomagot fogunk találni a témában. Ilyenkor a fonalát. Hiszen míg az elektronikus levél aktív (push) médium, felület egyrészt összhangban lesz a statikus oldalakkal és az amelyben az adatokat elküldik nekünk, a fórumok passzívak egyéb alkalmazásokkal, valamint ezek az eszközkészletek (pull), ahol az új üzenetek a lekérésünkre várnak. oldalunk más részeivel azonos felhasználói és engedélyrend- Az aktív és passzív felosztás nem új találmány; akik még emlé- szert használnak a fórumok elérésére. Más szavakkal, nem keznek közülünk a web elõtti internet korára, jól tudják, hogy szükséges külön oldalgazdát és fórumgazdát kijelölnünk; ugyanezen felosztás alapján különböztettük meg a levelezõ- bárki, aki rendszerfelügyeleti jogosultságokkal rendelkezik az listákat és az Usenet hírcsoportokat. A megoldás végül az lett, oldalon, minden további beállítás nélkül képes lesz a fórumot hogy néhány mail-Usenet átjárót kellett készíteni, amelyek és bármilyen más alkalmazást futtatni. közül sokat még ma is használnak. A GNU Emacs legfrissebb Másik megoldásként a kiszolgálónkon telepített kiszolgáló- hibáiról egyaránt tájékozódhatunk, ha feliratkozunk a bug- oldali technológiákat felhasználva felrakhatunk valamilyen gnu-emacs levelezõlistára, vagy ha elolvassuk a önálló webfórumcsomagot. Ha például PHP-rendszerünk van,  gnu.emacs.bug hírcsoportot a Useneten. A két dolog egyen- tegyük fel a Phorum csomagot. Ez ugyan nem fog teljes mér- értékû, s egy átjáróprogramon alapul, amely felesleges ismét- tékben beépülni oldalunk egyéb részeibe, viszont igen haté- lések nélkül viszi át az üzeneteket egyik rendszerrõl a másikra. kony és megbízható csomag, ami MySQL és PostgreSQL alatt Létezik ilyen rendszer a webalapú fórumokhoz is? A válasz egyaránt jól mûködik. Az alapul szolgáló technológiák szerint egyértelmû igen. Végtére is nem túl nehéz elérni egy web-, rengeteg lehetõség között választhatunk, a PHP és JSP nyel- illetve adatbázisrendszeren, hogy új üzenetek érkezésekor vektõl kezdve egészen jó öreg Perlben írt CGI-programokig. bizonyos híranyagokat egy adott elektronikus levélcímlistára Természetesen kereskedelmi terméket is választhatunk, meg- küldjön el. Kifinomult figyelmeztetõrendszer felépítése sem vásárolhatunk egy olyan terméket, mint például a WebCrossing. sokkal nehezebb, létezik például egy Forums OpenACS-cso- Néhány ügyfélnél használtam már a WebCrossing-ot, és meg mag, amely lehetõvé teszi, hogy a felhasználók az adott fóru- kell mondanom, annak ellenére, hogy ez a csomag jóval több mokra vagy fórumon belüli hírcsoportokra feliratkozzanak, lehetõséget ajánl, mint a Phorum-hoz hasonló nyílt forrású majd havi, napi, illetve azonnali frissítést kérjenek maguknak. csomagok, a különbségek a legtöbb esetben nem olyan nagyok, Más szavakkal a Forum program képes elektronikuslevél-tömö- hogy megérje pénzt költeni rá, nem beszélve arról, hogy ehhez rítvényeket (digest) készíteni, pontosan úgy, ahogy azt a lista- egy olyan csomagot kellene megtanulni, amelyet nem lehet programok teszik. sem módosítani, sem fejleszteni. Végül létrehozhatjuk a saját fórumcsomagunkat is, ahogy Levél küldése azt néhány évvel ezelõtt magam is megtettem e hasábokon. Ha viszont azt szeretnénk, hogy a jelentkezõk saját elektro- A webalapú fórumok kialakítására képes programok megírása nikus levelezõprogramjukkal is üzeneteket tudjanak küldeni

72 Linuxvilág Kovácsmûhely

a listára, a dolgok bonyolultabbá kezdenek válni, ugyanis Levelezõlisták és adatbázisok figyelembe kell vennünk néhány tényezõt: Az általam ajánlható legjobb megoldás, ha mindent fejreál- lítva egy már létezõ elektronikus levéllista alapján hozunk • Biztonság és engedélyek – bárki küldhet üzeneteket és vála- létre magunknak webalapú fórumot. A szerzõje, szolhat a fórumra vagy csak a tagok tehetik meg? Ha a Dan Bernstein által készített ezmlm például rendelkezik egy fórum elérése valamilyen szinten kötött, nyilván kell tarta- ezmlm-idx nevû bõvítménykészlettel, amely többek közt nunk az engedélyezett elektronikus levélcímeket. Minthogy lehetõvé teszi, hogy a feliratkozók listáját MySQL- vagy közismerten nem túl nagy mûvészet összekalapálni egy PostgreSQL-adatbázisban tároljuk. A lista beállításakor a hamis elektronikus levélfejlécet, nem igazán lehet bizton- rendszergazda egyúttal néhány adatbázistáblát is létrehoz, sággal megállapítani, hogy a küldemény valóban a felirat- majd az ezmlm-ben beállítja õket. kozótól jött-e, esetleg éppen egy féreg vagy vírus üzenget Így egy jó webfejlesztõ létrehozhat egy elektronikus levél- a feliratkozó nevében. listát, majd azt tükrözheti a weben. Bármi, ami a webrõl • MIME – a legnépszerûbb elektronikus levelezõprogramok érkezik, úgy néz majd ki, mintha a pillanatnyilag bejelent- (különösen a Microsoft Outlook) alapértelmezés szerint kezõ felhasználótól érkezne, akinek feltételezhetõleg be egy vagy több csatolmánnyal küldik a leveleket. A Forum kell jelentkeznie a webalapú fórumalkalmazásba. Bármilyen programnak elég intelligensnek kell lennie, hogy kezelni adat, amely a pillanatnyi felhasználótól érkezik, ugyanazon tudja az ilyen típusú leveleket, kiszedve a csatolmányt és a szokásos ellenõrzésen megy keresztül, amit az ezmlm

a HTML-részeket. egyébként alkalmaz. © Kiskapu Kft. Minden jog fenntartva • Méret – amennyiben a levélfórum-átjáró nem elég okos Egyelõre úgy tûnik, hogy a mailman levelezõlista, amely ahhoz, hogy kigyomlálja a különösen nagy küldeményeket, minden MTA-val képes együttmûködni (például qmail, Send- akkor egy hatalmas küldemény postázásával bárki szolgálat- mail, és ) és folyamatos, lenyûgözõ fejlesztés alatt megtagadás- (Denial-of-Service) támadást intézhet a web- áll, semmiféle olyan megoldással nem rendelkezik, amellyel oldalunk ellen. A programnak elég okosnak kell lennie ahhoz a felhasználóit relációs adatbázisba menthetné. Ugyanakkor is, hogy az ilyen leveleket kiszûrje, és az oldal gazdájának viszonylag biztonságos, könnyen használható Berkeley DB lehetõvé tegye a felhasználói levélméretek korlátozását. fájlokban tárolja õket, így webalapú fórumcsomagunk innen • Témák – a legtöbb fórumprogram az együvé tartozó kül- kiolvashatja õket. deményeket a küldemény címe alapján együtt kezeli, vagy Ha a fórumokat levelezõlistaként használjuk, azért felmerülhet megjegyzi, hogy melyik levél melyik levélre volt válasz. néhány gond: többek között a témacsoportok kérdése, amely Igaz, ez nem túl egyszerû, de a nyomon követés a web- és – mint fentebb említettük – egészen másképp kezelhetõ az elektronikus levél egyesítése esetében is megoldható, bár elektronikus levél és a web esetében. Vegyük ehhez hozzá azt mindkét médium más típusú rendszert alkalmaz az ilyes- a tényt, hogy a legtöbb fórum a felhasználóinak lehetõvé teszi, féle dolgok nyilvántartására. hogy kiemeléseket és csatolmányokat használjanak, sõt akár szerkeszthessék is a saját küldeményeiket – és máris nyilvánva- Számos megoldást láttam az ilyen és hasonló nehézségek lóvá válik, hogy ez a házasság a két médium között nem lesz kezelésre, de mind a mai napig nem találtam olyat, amelyik éppen súrlódásmentes, mégha létre is tudjuk hozni. valamennyi kívánalmamat teljesítette volna. Mindazonáltal a szolgáltatások sok olyan ember számára hasz- A Phorum egy phorummail nevû fájlt ad nekünk, amit parancs- nosnak bizonyulhatnak, akik hajlandóak lemondani a cifra sorból kell meghívnunk, feltételezhetõen a .forward vagy dolgokról. Ehelyett ugyanis a fórumuk egyre növekvõ számú .qmail állományból, vagy a mail alias meghatározásokat tartal- jelentkezõivel vannak elfoglalva, és a felhasználóiknak megad- mazó fájlból. A rendszergazdának készítenie kell egy álnevet ják a lehetõséget, hogy eldöntsék, milyen formában szeretné- (például apartments-forum), majd a .forward fájlt a phorum- nek jelentkezni ezekre a fórumokra. mailre állítva átadja neki a kötelezõ FORUM_ID és az elhagy- ható PATH_TO_FORUM értékeket. Amint ezzel megvagyunk, qpsmtpd bárki, aki levelet ír az apartments-forum@saját.webhely címre, Ahogy nyilván önök közül is sokan, jómagam is nap mint nap egyben a fórumunkra is írhat. Nyilvánvaló módon a phorum- szenvedek a kéretlen levelek áradatától. A nyílt forráskódú mail helyes mûködéséhez az engedélyeket megfelelõen kell SpamAssassin képes kategorizálni a bejövõ leveleket, így a beállítani. levélszemét (spam) ellen folytatott küzdelmeimben kiváló A gond csak az, hogy a küldeményekkel kapcsolatban nincs szövetségesnek bizonyult. Amennyiben futtatunk már valaha különösebb biztonság; igaz ugyan, hogyha a fórum moderált, levelezõlistát, kétségtelenül felfedeztük, hogy a levélférgek a levélben érkezett üzenetek addig elfogadatlannak lesznek nemigen válogatnak: éppoly elõszeretettel küldik magukat bejelölve, amíg a moderátor meg nem nézi õket. A témakezelést a listákra, mint az egyéneknek. többféle ügyes módszerrel is elintézhetjük, úgy tûnik viszont, Bár a rendszerfelügyelet és az SMTP-kiszolgálók nem igazán hogy nemigen megoldott a MIME- vagy a levélbomba-támadá- illeszkednek szorosan cikkünk témájához, úgy éreztem, sok kezelése. Más szóval, a Phorum levélfórum elvárásainknak muszáj néhány dicsérõ sort szentelnem Ask Bjoern Hansen megfelelõen kezeli a leveleket, de ennél többet nemigen nyújt. nyílt forrású SMTP-kiszolgálójának, a qpsmtpd-nek. Az OpenACS fórumprogramja már kifinomultabb, qmail A qpsmtpd eredetileg qmail mellett mûködött, jelenleg alapú rendszert nyújt, amelyben minden kimenõ figyelmeztetõ már számos MTA-val képes együttmûködni, ideértve a üzenet egyedi azonosítóval rendelkezik. Ez azt jelenti, hogy az Sendmailt és a Postfixet. elektronikus levélüzenetre küldött válasz a kérdéses témához De miért használnánk qpsmtpd-t az alapértelmezett kerül. Igazság szerint az, hogy az OpenACS az elektronikus qmail-smtpd helyett? A -guruk számára egyszerû az levélcímeket használja bejelentkezõ névként, eléggé gyatra indok a váltásra, hiszen qpsmtpd Perlben készült. De ha ennél biztonságot ad, de továbbra is tény, hogy nagyon nehéz megál- egy kicsit kevésbé vagyunk nyelvõrültek, akkor is számos jó lítani az üzenetek hamisítását. dolgot találhatunk benne. Ugyanis a qpsmtpd az SMTP-k levél-

www.linuxvilag.hu 2004. január 73 Kovácsmûhely

küldõ eljárásait több állomásra osztja fel, mi pedig valamennyi : "FQDN required in the envelope ilyen állomáshoz saját szolgáltatásokat illeszthetünk be. sender")); A qpsmtpd saját lapjáról, a  http://www.develooper.com-ról return DECLINED; (igen, két o betû áll egymás után) töltöttem le, majd a telepítési } útmutatót követve húsz perc múlva már futott is. Ne feledjük, hogy a qpsmtpd teljes értékû SMTP-kiszolgáló, azaz nem fog Ha már volt dolgunk mod_perl alatti webfejlesztéssel, akár is- futni, ha más SMTP-kiszolgáló ellenõrzi a 25-ös kaput. merõsnek is tûnhet. A mail_handler egyrészt visszaadhat Amennyiben az SMTP-kiszolgáló rendszerindításkor való DECLINED értéket, ami azt jelenti, hogy minden simán ment, indulását és késõbbi futását a daemontools program és a levél keresztülmehet. Küldhet DENYSOFT értéket is, ami a fel- segítségével végezzük, érdemes ellenõrizni, nem maradt-e használónak azt üzeni, hogy inkább késõbb próbálkozzon. Ezt véletlenül egy régi SMTP-kiszolgálóra mutató hivatkozás a azért tesszük, mert nem szeretnénk azonnal elutasítani a leveleket /service könyvtárban. Ilyen esetben ugyanis a legközelebbi csak azért, mert a DNS-kiszolgáló leállt – kizárólag a kéretlen újraindítás után két versengõ SMTP-démonunk lesz. levélküldõket szeretnénk megbüntetni, illetve azokat, akiknek A qpsmtpd kulcselemei a plugins alkönyvtárban található nem kellene közvetlenül elküldeniük a levelet. Küldhetünk to- bõvítmények. A soronként egy bõvítményt tartalmazó vábbá DENY üzenetet, amely véglegesen elutasítja az üzenetet. config/plugins állomány segítségével magunk is beilleszthetünk Annak ellenére, hogy nemigen kapunk hozzá túlságosan jó saját bõvítményeket. Például a saját config/plugins állományom leírást, a qpsmtpd letöltését követõen néhány órával már meg

© Kiskapu Kft. Minden jog fenntartva egyik részlete így néz ki: tudtam írni az elsõ mûködõképes bõvítményemet, és biztos vagyok benne, hogy a többi felhasználó is hasonló tapaszta- # quit_fortune latokat fog szerezni. Minthogy a qpsmtpd Perlben íródott, természetesen gyorsan és könnyen elérhetjük a Perl-progra- check_earlytalker mok által hozzáférhetõ összes lehetõséget, valamint a count_unrecognized_commands 4 fejlesztést leegyszerûsítõ a CPAN-modulokat. Több szinthez is csatolhatunk bõvítményeket, többek közt a require_resolvable_fromhost helo, ehlo, connect, sõt akár a rcpt szinthez is, amelyek mindegyikén különféle teszteket végezhetünk el. Még Más szóval, megjegyzésbe tettem a quit_fortune SpamAssassin-bõvítmény is létezik qpsmtpd-hez, amely a bõvítményt, viszont aktiváltam a check_earlytalker, híres levélszemétszûrõ programot hívja meg, mielõtt a levél count_unrecognized_commands és megérkezne a levelesládánkba. require_resolvable_fromhost bõvítményeket. Körülbelül egy hónapja használok qpsmtpd-t, és a leveles- A count_unrecognized_commands értékként egyetlen ládámba vándorló kéretlen levelek száma örvendetesen meg- számot vár, amit itt meg is adtunk. csappant, mégha néhányat át is enged a SpamAssassin. Ha Ha meg szeretnénk nézni ezeket a bõvítményeket, esetleg a saját gépünkön dolgozunk, jó szívvel ajánlom a qpsmtpd-t. sajátot szeretnénk elhelyezni, lépjünk be plugins könyvtárba. Kiváló példa arra nézve, hogyan írjunk tetszõleges bõvítmé- Minden bõvítmény tartalmaz egy regisztráló alprogramot, nyeket kezelõ programot, ráadásul csak azt a levelet kapjuk amellyel a qpsmtpd valamelyik állomásához csatlakozik, meg, amelyet tényleg meg kell kapnunk. valamint egy másik alprogramot, amelyet azután az állomás meghívhat. Például a require_resolvable_fromhost Összegzés bõvítmény a következõképpen kezdõdik: A levelezés létfontosságú része az internetnek, mint azt kétség- telenül mindenki tudja, aki ezeket a sorokat olvassa. Az inter- use Net::DNS qw(mx); net azonban folyamatosan terjeszkedik, így a levelezésre több irányból is nyomás nehezedik. Ebben a hónapban a webalapú sub register { fórumokkal ismerkedhettünk meg, illetve megnéztük, mikép- my ($self, $qp) = @_; pen lehet csatlakoztatni õket a levelezõlistákhoz. Röviden $self->register_hook("mail", bepillantottunk a qpsmtpd, egy választható, különlegesen "mail_handler"); bõvíthetõre és átállíthatóra tervezett SMTP-kiszolgáló világába. } Remélem, a következõ hónapban visszatérhetünk a Bricolage és a többi nyílt forrású tartalomkezelõ rendszer birodalmába, Azaz a regisztráló alprogram értesíti a qpsmtpd-t, hogy amint nagy hangsúlyt fektetve arra, hogyan illeszthetünk be már az SMTP-ügyfél meghívja a mail parancsot, a mail_handler létezõ weboldalainkba valamilyen CMS-t. alprogramot is meg kell hívni. Ez az alprogram pedig a követ- kezõképpen mûködik: A Kapcsolódó címek megtalálhatóak az 55. CD Magazin/Elektronikuslevel könyvtárában. sub mail_handler { my ($self, $transaction, $sender) = @_; Linux Journal 2003. december, 116. szám

$sender->format ne "<>" and $self->qp->config Reuven M. Lerner ( http:/www.lerner.co.il/atf) ("require_resolvable_fromhost") Nyílt forrású programokra, valamint web- és adat- and !check_dns($sender->host) bázis-alkalmazásokra szakosodott tanácsadó. and return (DENYSOFT, Könyve, a Core Perl, 2002 januárjában jelent meg ($sender->host a Prentice Hall gondozásában. Reuven feleségével ? "Could not resolve ". $sender->host és lányaival nemrég költözött Chicagóba.

74 Linuxvilág