Správa linuxového serveru: XMPP (Jabber) server Prosody

Instant messaging, tedy komunikace prostřednictvím „okamžitých zpráv“, se stala velmi populární. Existuje celá řada protokolů, služeb i klientů sloužící k realizaci tohoto typu komunikace. Jedním z protokolů je i Jabber/XMPP, který je populární nejenom ve sféře uživatelů Linuxu a svobodného softwaru. Jakým způsobem je možné postavit si vlastní XMPP server, je předmětem tohoto dílu.

Obecně o Jabberu a XMPP

Jak už bylo řečeno, existuje řada protokolů pro výměnu „okamžitých zpráv“. Řada z nich je však uzavřená, centralizovaná a podléhá restriktivním licenčním podmínkám či ještě navíc nutnosti instalovat proprietární software, který komunikaci zajišťuje (v některých případech nemusí být takový software pro Linux ani dostupný). XMPP je protokol, který je decentralizovaný a otevřený. Jednou z jeho stěžejních vlastností je i rozšiřitelnost, která umožňuje na Jabberu stavět další služby a činit jej tak pro uživatele atraktivnější.

Otevřenost protokolu a související možnost jej použít volně, dle libosti, dala vzniknout řadě implementací XMPP serverů i klientů. Oproti řadě jiných protokolů a podobných služeb má Jabber ještě jednu zásadní odlišnost – je decentralizovaný. To znamená, že nemá žádný centrální bod, na kterém by komunikační síť závisela a bez kterého by nikdo s nikým nemohl komunikovat. Jabber se z tohoto pohledu podobá e-mailu - serverů je celá řada, mohou spolu navzájem komunikovat, přičemž uživatelé se mohou rozhodnout, jaký server si zvolí, popřípadě mají možnost si založit vlastní Jabber server (viz dále), a stále mají možnost komunikovat s uživateli ostatních serverů.

Jabber nebo XMPP? Dříve se protokol XMPP jmenoval Jabber. Nyní se toto označení používá spíše pro službu, zatímco novější XMPP se používá pro samotný protokol. Vztah mezi výrazy Jabber a XMPP je tak podobný jako mezi výrazy e-mail a SMTP.

Uživatelé Jabberu jsou identifikováni pomocí JID (Jabber ID), které má totožný tvar jako e-mailová adresa: jmeno@domena.cz.

Klienty

Klientů pro Jabber existuje ohromné množství. Na tomto serveru byly mj. představeny multiplatformní klienty PsiCoccinella a Gajim. Známým klientem je i multiplatformní a multiprotokolový Pidgin nebo rovněž multiprotokolový klient pro prostředí KDE, Kopete. Existují také klienty pro konzoli určené pro milovníky příkazové řádky, jedná se např. o klient Mcabber či s Pidginem distribuovaný Finch. Jsou rovněž dostupné klienty pro webový prohlížeč i mobilní zařízení. Podrobnější seznam klientů naleznete jednak na Wikipedii, na wiki českého Jabber portálu a také na webu XMPP nadace.

Servery

Jabber serverů existuje také celá řada. Existují v C napsané servery jabber14 a jabber2, v Erlangu napsaný ejabberd, v Javě napsané Openfire a Tigase a v neposlední řadě i odlehčený server Prosody napsaný v Lua (ten bude představen v tomto dílu). Tento soupis rovněž není úplný, obsáhlý seznam jsem nalezl na webu XMPP nadace.

Prosody

Prosody je lehký XMPP server napsaný v jazyce Lua a vydaný pod MIT/X11 licencí. Snaží se o jednoduchost konfigurace (to budete moci posoudit níže) a nenáročnost na zdroje (to mohu potvrdit, jelikož mi běží na dvou serverech a na obou si alokuje kolem 10 MB virtuální paměti). Díky tomu se výborně hodí na osobní VPS nebo servery s omezenými zdroji.

Instalace

Ve vámi používané distribuci byste mohli najít balíček Prosody přímo v repozitářích (pokud ne, nezbude vám nic jiného než Prosody nainstalovat ze zdrojových kódů). Distribuce založené na Debianu by měly mít Prosody v repozitářích k dispozici, nicméně vývojářský tým tohoto serveru nabízí ještě svůj vlastní repozitář, kde byste měli najít vždy aktuální verzi. Tak či onak, pro instalaci by měl postačit příkaz:

aptitude install prosody

Konfigurace

Pokud sledujete tento seriál pravidelně, určitě tušíte, že po vzoru konfigurace webových serverů bude distribuce Debian strukturu konfiguračních souborů pro Prosody upravovat podobným stylem. Konfiguraci naleznete v adresáři /etc/prosody. Hlavním konfiguračním souborem je prosody.cfg.lua, pro konfigurační soubory jednotlivých virtuálních hostů je určen adresář conf.avail, přičemž aktivní konfigurační soubory je třeba nalinkovat symbolickým odkazem do conf.d.

Jako první asi budete chtít vytvořit nastavení pro vámi používanou doménu, tedy vytvořit příslušný virtual host, který umístíte do /etc/prosody/conf.avail a vytvoříte symbolický odkaz na něj do /etc/prosody/conf.d. Nejjednodušší záznam vypadá takto:

VirtualHost "example.cz"

Nastavení v prosody.cfg.lua jsou nastavení globální. Nastavení pod jednotlivými direktivami VirtualHost by měla být specifická pro daný virtual host. Můžete tak specifikovat odlišná nastavení pro různé domény, zejména pak nastavení jednotlivých komponent, např. modulu pro konference (kde pak můžete specifikovat konkrétní doménu):

Component "conference.example.cz" "muc"

Výchozí nastavení v Debianu má zakázané registrace uživatelů a jedinou funkční doménou je localhost. Po nastavení jedné nebo více domén můžete uvažovat o úpravě hlavního konfiguračního souboru a přizpůsobit si globální nastavení. Mezi podstatné volby patří:

Obecně lze doporučit projít si tento soubor a jeho komentáře a upravit si nastavení podle svých představ.

Vytváření a rušení uživatelských účtů

Prosody má k dispozici nástroj pro řízení jeho chodu, a sice prosodyctl. Tímto nástrojem můžete provádět změny za běhu, zejména pak přidání uživatele, odebrání uživatele a změna hesla uživatele:

SRV záznamy DNS

Preferovaným způsobem navazování spojení v rámci XMPP klientů i serverů je využívání SRV DNS záznamů, které udávají, kde konkrétně běží příslušné služby (viz příslušné RFC). V případě XMPP se jedná o dvě služby, resp. dva porty, port pro připojení klientů (5222) a port určený pro komunikaci mezi servery 5269. Z tohoto hlediska je velmi vhodné pro XMPP server příslušné SRV záznamy nastavit. Tyto záznamy mají následující podobu:

_xmpp-server._tcp.example.cz.  IN SRV   0 0 5269   hostname.
_xmpp-client._tcp.example.cz.  IN SRV   0 0 5222   hostname.

Zde nahraďte example.cz za název domény, kde chcete nasadit Jabber server (toto je doménové jméno v JID); hostname pak nahraďte za jméno serveru, kde váš Jabber server běží. Pokud chcete, můžete upravit i čísla portů. Dvě nuly zde udávají prioritu a váhu (v tomto pořadí).

Následující SRV záznam sice již ze specifikace XMPP protokolu zmizel a jakýkoliv software pracující s XMPP aktualizovaný během posledních několika let by jej neměl vyžadovat, nicméně z důvodu zpětné kompatibility může být vhodné zvážit přidání i tohoto záznamu. Přinejmenším je to jedna z věcí, kterou byste měli vést v patrnosti při řešení případných problémů, pokud tento SRV záznam nepoužijete.

_jabber._tcp.example.cz.       IN SRV   0 0 5269   hostname.

SSL/TLS nastavení

Jabber komunikaci je velmi vhodné šifrovat, nejlépe platným certifikátem, kterému budou vaši klienti věřit. Problematika certifikátů a možnosti získání důvěryhodného certifikátu zdarma byly probrány dříve v seriálu. Zde už předpokládám, že certifikát k dispozici máte. Specifikace certifikátu by měla přijít do nastavení příslušného virtual hostu, konkrétně do sekce ssl:

VirtualHost "example.cz"

  ssl = { 
    key = "/etc/certs/example.key";
    certificate = "/etc/certs/example.crt";
  }

Podstatné volby ovlivňující nastavení SSL/TLS jsou především tyto:

Více o pokročilém nastavení SSL/TLS v Prosody se dozvíte v dokumentaci.

Jabber a transporty

Na závěr zmíním možnost komunikace s ostatními sítěmi pomocí transportů. Chcete-li propojit svůj Jabber/XMPP server se sítěmi jako ICQ, AIM, MSN apod., můžete použít některý z projektů jako např. spectrum. Na jeho wiki naleznete prakticky veškeré potřebné informace, jak tuto komponentu nastavit a integrovat s Prosody. Spectrum není součástí Debianu Squeeze, ale projekt má k dispozici repozitáře pro Debian, tudíž použitím tohoto nástroje nepřijdete o snadnou aktualizaci.