MODULÁRNÍ SYSTÉM KOMUNIKACE (MSGSERVER) Vladimír Pávek, Jihčeská vědecká knihvna v Českých Budějvicích Velmi blíbenu frmu elektrnické kmunikace se krmě e-mailu stal zasílání krátkých textvých zpráv tzv. SMS (Shrt Message Service) pmcí mbilních telefnů. Mžnst bezplatnéh zasílání SMS z webvých stránek byla nedávn velice mezena. Příspěvek ukazuje technické i prgramvé řešení, jak si zavést např. SMS bránu a umžnit tak právněným sbám desílaní SMS z vlastních privátních webvých stránek. Mdularita řešení umžňuje rzšiřvání další aplikace. 1. Ppis systému Systém kmunikace MsgServer využívá prstředků mbilní kmunikace GSM mdem (the Glbal System fr Mbile Cmmunicatins) a Internetu. Klade si za cíl umžnit všem autrizvaným sbám rzesílání zpráv (SMS, e-mail) pmcí vzdálenéh přístupu (webvých stránek). Systém dále umžňuje příjem zpráv SMS a jejich zpracvání např. přepsláním na zvlenu e-mail adresu. Systém MsgServer se z hlediska sftware skládá ze 3 základních částí (kmpnent): WWW webvá php aplikace zajišťující vzdálené uživatelské rzhraní DB PstgreSQL databáze, tvřící jádr celéh systému MsgServer daemns kmunikační deamni, kteří služí k rzesí lání/příjmu zpráv z/d DB Z hlediska hardware je t pak např. PC běžné knfigurace s vlně dstupným sftware (Linux, webvý server (nejlépe Apache) s pdpru PHP, databázvý sftware PstgreSQL, systémvý prgram mail pr zasílání mailů). Jádrem celéh systému kmunikace MsgServer je databáze db_message, přes kteru prbíhá veškerá kmunikace. Na jedné straně s databází kmunikují MsgServer daemni, kteří dtud vyzvedávají zprávy k deslání jim příslušející a desílají je a také sem ukládají zprávy příchzí. Na druhé straně je t mdul WWW, který d DB vkládá zprávy (SMS, e-mail) k deslání. Základní princip fungvání systému ilustruje následující brázek: 127
Vzhledem ke své mdularitě je d buducna celý systém mžn rzšiřvat další mduly plnící různé funkce (např. autmatické rzesílání zpráv, autmatické reakce na příchzí zprávy pdle jejich bsahu, zaslání infrmace pčtu výpůjček, rezervací či dalších infrmací čtenářském účtu, ale např. i autmatické prdlužvání výpůjček pmcí SMS apd.), další MsgServer deamni pr rzesílání přes jiná připjení např. k deslání (zařazení) zpráv na nějaké webvé stránky (news) apd.). 1.1 WWW WWW mdul je tvřen webvu php aplikací umžňující právněným uživatelům (knihvníkům) zadat telefnní čísl a/neb email adresu a napsat zprávu. Mdul pak dále zajistí předání (zápis) pžadavku na deslání d databáze DB a přehlednu statistiku. Tyt webvé stránky mají následující pdbu: 128
Uživatelské rzhraní lze rzdělit na 2 základní části: část pr deslání zprávy statistika zpráv v DB část pr deslání zprávy V tét části se zadává pžadvaná zpráva určená k deslání přes systém kmunikace MsgServer. Pvinně je nutné vyplnit buď telefnní čísl a/neb email, dále text zprávy a PIN. Důležité je veškeré texty (předmět, text) vyplňvat BEZ DIAKRITIKY!!! Telefnní čísl: zvlí se správná předvlba perátra a zadá příslušné telefnní čísl. Prgram následně spjí předvlbu a zadané čísl dhrmady a zkntrluje frmát výsledku. Tent výsledek musí být 13 znaků dluhý (včetně pčátečníh + ) a musí se skládat výhradně z číslic 0-9. Email: zadává se email adresáta (čtenáře). Tat emailvá adresa musí být ve frmátu *@*, tedy aplikace kntrluje přítmnst znaku @ a alespň jednh znaku před a za tímt symblem. Předmět: tt plíčk je nepvinné a týká se puze deslaných emailů. Maximální délka je 255 znaků a text nesmí bsahvat diakritiku. Text: zde se vyplňuje text desílané zprávy. Tt plíčk je pvinné. V případě, že se jedná SMS (je vyplněn telefnní čísl), nesmí text přesáhnut délku 160 znaků, resp. bude na tut délku říznut. Na tent fakt zárveň upzrní nápis, který se bjeví pd editačním plem pr text při překrčení délky 160 znaků (nutn mít zapnutý JavaScript). Pžadvané datum deslání: tady je mžn vyplnit datum a čas, kdy má být zpráva deslána. Tt ple je nepvinné a je standardně nastaven na aktuální datum a čas, cž znamená kamžité deslání zprávy. Datum i čas je mžné měnit libvlně. Nekrektní datum, např. 31.2.2003, bude převeden na svůj krektní ekvivalent, v tmt případě 3.3.2003. PIN: je pvinně vyplňvaný autrizační kód, který je věřván na platný účet v databázi. Pkud je kód vyplněn chybně (neexistuje žádný platný účet s tímt PINem), systém se na určitý čas uspí (tím se částečně předejde autmatizvanému zkušení PINů). statistika zpráv v DB Statistika zpráv je rzdělena na příchzí a dchzí zprávy. Pdle jejich stavu v DB se pak rzlišují zprávy zpracvané (tzn. deslané dchzí neb zpracvané příchzí), čekající (tzn. zprávy připravené k deslání resp. nezpracvané příchzí) a chybné (tzn. strnvané dchzí zprávy (např. z důvdu neplatnéh telefnníh čísla apd.). Dále je v tabulce slupeček pslední, kde je datum pslední zpracvané příchzí a v přádku deslané dchzí zprávy. V tét tabulce je mžné zběžně kntrlvat funkčnst celéh systému kmunikace. Pkud např. existují chybné neb čekající zprávy neb datum 129
pslední dchzí/příchzí zprávy je starší, může t ukazvat na nějaku chybu systému (typicky např. neběží MsgServer daemni a je ptřeba je restartvat). 1.2 DB Databáze db_message bsahuje tabulky a pmcné databázvé funkce (ulžené prcedury v jazyce plpgsql) pr zalžení účtů, nastavení knfiguračních knstatnt, apd.. Tyt funkce je mžné zavlat přím v DB pmcí příkazu select. V tabulkách jsu ulženy veškeré infrmace desílaných a přijímaných zprávách, dále bsahují infrmace knfiguraci celéh systému i jedntlivých jeh částí a v nepslední řadě i lg, kde se ukládají veškeré infrmace činnsti systému (na různých úrvních závažnsti). Ulžené prcedury pak pskytují uživatelský interface pr práci s celu databází. 1.3 MsgServer daemn MsgServer daemn služí k vlastnímu fyzickému příjmu a desílání zpráv. Tvří jej jediný prgram msgserver, který běží nnstp na pzadí (typicky jich běží něklik, pr každé připjení jeden). Tent prgram pracuje v nastavitelných časvých intervalech (viz kapitla Nastavení systému), kdy se vždy prbudí, přijme příchzí zprávy (pkud existují), dešle dchzí zprávy (pkud existují). V případě, že není c přijímat ani desílat, pět se uspí a celý cyklus se pakuje. Veškeru činnst prgramu je mžn dle nastavení maximální lgvací úrvně (viz Nastavení systému) lgvat, a t d DB a/neb subru a/neb systémvéh lgu (syslg). Lgvání se prvádí na 7 úrvních, viz následující tabulka: Obecné zásady pr lgvací úrvně LOG_DEBUG LOG_INFO LOG_NOTICE LOG_WARNING LOG_ERR čistě infrmativní, spusta dat, c psílá a přijímá a tak inf připjvání/dpjvání (infrmativní) serial, DB infrmace přechdech a vypadnutích mezi jedntlivými smyčkami (while cykly) - (znvu)[dis]cnnectění kamkliv (DB, MSG device), start/stp prgramu nezávažné chyby, které se akrát hlásí, ale nrmálně se pkračuje dál ve zpracvání (nemají žádný efekt na výsledek) chyby, které způsbí změnu nrmálníh chdu (průběhu) prgramu - chybná práce s MSG device, DB... 130
LOG_CRIT kritické chyby, kvůli kterým buď prgram nemůže vůbec plnit svu funkci neb kvůli kterým se zahazují (nezpracvávají) zprávy (-1) zahzené zprávy buď v textvé pdbě neb v PDU (pkud se nepvedl z nějakéh důvdu rzkódvat), je na člvěku, aby ručně zjednal nápravu těcht zahzení 2 Instalace systému Systémvé pžadavky: perační systém typu unix (např. Linux) www server (nejlépe Apache) s PHP mdulem www.apache.rg www.php.net nainstalvaný databázvý sftware PstgreSQL www.pstgresql.rg v databázi nainstalvaný jazyk plpgsql přístupvé knt k databázi PstgreSQL (např. uživatel pstgres) prgram mail na desílání e-mailů Následuje ppis instalace jedntlivých kmpnent systému kmunikace MsgServer: 2.1 WWW Instalace mdulu WWW prbíhá v následujících krcích: umístit kamkliv d adresářvé struktury webvéh strmu, např. /var/www/msgserver nastavit v knfiguraci webvéh serveru tmut adresáři příslušná práva nastavení mdulu WWW (viz Nastavení systému) test zbrazení www stránky send.php (resp. index.php) 2.2 DB Pžadavky: vytvřen prstr pr datvu část databáze pmcí prgramu initdb (např. initdb U pstgres D /usr/share/pstgresql/data ) Pstup: spustit skript./install_db, který prvede následující: zalží databázi db_message spustí zakládací skripty databáze db_message naimprtuje pužívané databázvé funkce zalží d tabulek základní data nutná k prvzu systému 2.3 MsgServer daemn Pžadavky: vytvřen neveřejný adresář pr MsgServer daemn 131
(např. /usr/lcal/bin/msgserver) Pstup: zkpírvat prgram msgserver se spuštěcími skripty msgserver_start a msgserver_stp d vytvřenéh adresáře pr MsgServer daemn 3. Spuštění systému Před spuštěním systému je nutné věřit, zda běží webvý server (např. Apache) s pdpru PHP databázvý server pstgres (spuštěný s vlbu -i na standardním prtu 5432). musí být nainstalvaná (vytvřená) databáze db_message. Následně je nutné spustit MsgServer daemny (k tmu služí skript./msgserver_start nutné před spuštěním editvat a nastavit správné hdnty prměnných prstředí pr připjení k DB viz Nastavení systému). Daemny je mžné kdykliv uknčit pmcí skriptu./msgserver_stp (neb signálu 15 SIGTERM). Funkčnst systému lze testvat pmcí zprávy smstest viz kapitla Funkčnst systému. 4. Nastavení systému Nastavení systému lze rzdělit na nastavení jeh jedntlivých částí: WWW, DB, MsgServer daemna a statní. 4.1 WWW Nastavení se prvádí editací subru cmmn.php. Zde je nutné vyplnit správné údaje připjení k db (týká se většinu puze f_db_name, f_db_user, uživatele s přístupem k PstgreSQL, a hesla, které zůstává typicky prázdné) $f_db_user = 'pstgres'; $f_db_pass = ''; $f_db_name = 'db_message'; 4.2 DB Nastavení databáze spčívá puze ve správném spuštění serveru PstgresSQL. Server musí běžet na stejném strji jak MsgServer daemni na standardním prtu 5432 a musí být spuštěn s parametrem -i. 4.3 MsgServer daemn Nastavení MsgServer daemnů se prvádí jednak nastavením prměnných prstředí, jednak nastavením knstant v DB (které se zalží pr každé připjení zvlášť s defaultními hdntami při prvním spuštění příslušnéh daemna) a jednak nastavením hdnt v tabulce Připjení. 132
Prměnné prstředí Prměnné prstředí je nutné nastavit ve spuštěcím skriptu msgserver_start a jsu t tyt splečné prměnné DB_MESSAGE=db_message... jmén databáze zpráv DB_MESSAGEJM=pstgres... přihlašvací jmén DB_MESSAGEHE=... přihlašvací hesl (typicky prázdné) a tat individuální prměnná pr každé připjení: IDPRI=1... ID připjení (dpvídá ID v tabulce Připjení v DB) Knstanty v DB Knstanty v DB se zakládají autmaticky pr každé připjení zvlášť a jsu ulženy v tabulce Nastavení (nastavují se ale pmcí k tmu speciálně vytvřených databázvých funkcí). Jedná se tyt knstanty: LOG_DESTINATION... cíl lgvacích hlášek, může nabývat primárních hdnt 2, 3, 5 a jejich násbků. Jedntlivé hdnty značí tyt cíle: 2... systémvý lg (syslg) 3... databáze (tabulka Lg) 5... lkální subr na disku (se jménem msgserverl_x, kde X je ID připjení) Výsledná destinace lgvacích hlášek se určí tak, že pkud je hdnta LOG_DESTINATION dělitelná příslušnu primární hdntu, hláška se zalguje d tht cíle. Např. hdnta 15 tedy znamená, že se hláška zalguje d DB a zárveň d lkálníh subru, nikliv však d syslgu. Defaultní nastavení je LOG_DESTINATION = 3 (tedy puze DB). LOG_LEVEL... maximální lgvaná úrveň lgvacích hlášek. Tat hdnta značí, že se lgují puze hlášky tét úrvně a nižší. Lgvací úrvně viz Ppis systému MsgServer daemn. MAX_DISCONNECT_COUNT_TO_NOTIFY... maximální pčet neúspěšných pkusů připjení k msg zařízení (GSM mdem,...), p kterém se má hlásit neúspěch na nižší lgvací úrvni (LOG_NOTICE) DB_RECONNECT_TIMEOUT... timeut mezi pkusy připjení k databázi v sekundách (nemusí být celé čísl). Defaultní hdnta je 10s. MSG_DEV_RECONNECT_TIMEOUT... timeut mezi pkusy připjení k msg zařízení v sekundách (nemusí být celé čísl). Defaultní hdnta je 10s. SND_RCV_SLEEP_TIMEOUT... timeut mezi pkusy příjem/deslání v sekundách (nemusí být celé čísl), pkud není c přijímat/desílat. Defaultní hdnta je 5s. MAX_RECEIVE_BATCH_SIZE... velikst dávky přijatých zpráv. Pkud existují příchzí zprávy, přijímají se dkud jsu další 133
k dispzici neb dkud jejich pčet nepřekrčí tut velikst (pté se desílá dávka zpráv k deslání). Defaultní hdnta je 100 zpráv. MAX_SEND_BATCH_SIZE... velikst dávky desílaných zpráv. Pkud existují zprávy ve stavu k deslání, desílají se dkud jsu další k dispzici neb dkud jejich pčet nepřekrčí tut velikst (pté se přijímá dávka zpráv). Defaultní hdnta je 100 zpráv. Tabulka Připjení Tabulka připjení služí k nastavení msg zařízení. Hdnty, které lze nastavvat jsu: název připjení (ti01nazev)... název připjení ID připjení (ti01idpri)... identifikátr připjení, služí k jednznačné identifikaci danéh připjení, dpvídá prměnné prstředí IDPRI typ připjení (ti01typ )... identifikuje typ připjení, mžné hdnty jsu 1... připjení přes GSM mdem Wavecm 2... připjení přes email funkce připjení (ti01fce )... funkce připjení, mžné hdnty jsu 1... značí příjem i desílání zpráv 2... značí puze příjem zpráv 3... značí puze desílání zpráv device připjení (ti01dev )... týká se typu připjení 1 (GSM mdem), značí device (sérivý prt), ke kterému je mdem připjen 4.4 Ostatní V DB existuje ještě knstanta _APL_SMSEMAIL_MAIL (txt)... značí emailvu adresu, kam se mají autmaticky přepsílat všechny příchzí zprávy 5. Funkčnst systému Funkčnst systému kmunikace MsgServer lze čas d času testvat zasláním SMS zprávy s textem smstest (bez uvzvek, bez mezer, na veliksti písmen nezáleží) na telefnní čísl, ze kteréh se zprávy desílají. Jak reakce by měla v bezprblémvém případě zpět na mbilní telefn kamžitě přijít SMS zpráva s textem SMS OK!. Pkud tent test kmunikace neprjde, dpručuje se restartvat MsgServer deamny./msgserver_stp ps x... ujistit se, že pravdu neběží (pkud by t trval déle jak 5 minut a deamn nesknčil, je mžné pužít příkaz kill 9 PID )./msgserver_start 134
restartvat databázvý server pstgres, např. pmcí příkazů pg_ctl restart m s " i" l /var/lg/pstmaster.lg D /usr/share/pstgresql/data případně pg_ctl restart m f " i" l /var/lg/pstmaster.lg D /usr/share/pstgresql/data brátit se na ddavatele systému kmunikace 6. Bezpečnstní dpručení Z bezpečnstních důvdů jak patření prti zneužití systému cizí sbu je dpručen prvést následující krky: pr systém kmunikace vyhradit puze lkální server, ke kterému mají vzdálený přístup jen právněné sby (příp. navíc server chránit pmcí firewallu s mezením na vybrané IP apd.) pr přístup k mdulu WWW pužívat zabezpečený prtkl https přístup k adresáři mdulu WWW chránit přístupvým heslem PIN kódy vlit tak, aby nebyly snadn dhalitelné (mhu bsahvat nejen číslice, ale i znaky, a mhu být max. 255 znaků dluhé) přímý přístup k serveru pvlit puze právněným sbám nastavit všem částem minimální unixvá práva WWW: rw-r r (příkaz chmd 644...) DB: rwx------ (chmd 700...) MsgServer daemn: rwx------ (chmd 700...) 135