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 Psi, Coccinella 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ří:
specifikace správců:
admins = { "admin@example.cz", "admin@example.net" }
seznam aktivovaných modulů:
modules_enabled
povolení či zakázání registrace uživatelů:
allow_registration
uvítací zpráva zaslaná právě registrovaným uživatelům:
welcome_message
seznam uživatelů, kterým budou zasílány informace o registracích uživatelů:
registration_watchers
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:
přidání uživatele:
prosodyctl adduser uzivatel@domena.cz
odebrání uživatele:
prosodyctl deluser uzivatel@domena.cz
změna hesla uživatele:
prosodyctl passwd uzivatel@domena.cz
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:
c2s_require_encryption
- komunikace klienta se serverem (c2s) vyžaduje šifrovánís2s_require_encryption
- komunikace mezi servery (s2s) vyžaduje šifrování
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.