Wstęp
Protokół jabber służy głównie do przesyłania wiadomości typu
Instant Messaging (czyli działa podobnie jak inne znane
komunikatory np. icq, tlen, gadu-gadu itp.). Zaletą jabbera
jest to, że jest otwarty, zapewnia darmową i pełną infrastrukturę
(serwery, a także klienty) dla osób prywatnych i użytkowników
komercyjnych. Charakteryzuje się także dużym bezpieczeństwem -
rozmowy, a także komunikacja między serwerami może być
szyfrowana.
W PLD jest kilka serwerów obsługujących komunikację
protokołu XMPP, który jest fundamentem Jabbera -
zatwierdzonym przez IETF w formie RFC (RFC od 3920 do 3923).
Używany przez wielu ISP jabberd
w wersji 1.4, zdobywający popularność ejaberd
czy opisywany poniżej jabberd w
wersji 2.0.
Opisana zostanie podstawowa konfiguracja, umożliwiająca
połączenia szyfrowane, a do składowania danych przez
jabberd2 wykorzystamy
silnik SQL Postgresql.
Instalacja
Pakiet jabberd2 instalujemy
za pomocą poldka:
poldek> install jabber-common jabberd |
Oczywiście, jeżeli do tej pory nie mamy zainstalowanego
Postgresql należy
zainstalować go także. Należy pamiętać, że
jabberd2 może współpracować
także z MySQL,
sqlite3, a także znacznie
prostrzą wersją bazy db.
Konfiguracja DNS i rekordów SRV
Zanim zaczniemy, musimy stworzyć domenę, która
jednoznacznie będzie wskazywała na maszynę Jabbera.
Dodamy także rekordy SRV, które służą do zapytań
domenowych przez demony Jabbera.
Przykład konfiguracji zostanie przedstawiony dla
serwera nazw Bind. Zmian
dokonujemy w odpowiednim pliku stref w katalogu
/var/lib/named/M.
; Jabber
jabber IN A 10.1.1.1 ;Tu wpisujemy IP naszej domeny
_jabber._tcp.jabber IN SRV 20 0 5269 domena.org.
_xmpp-server._tcp.jabber IN SRV 20 0 5269 domena.org.
_xmpp-client._tcp.jabber IN SRV 20 0 5222 domena.org. |
Oczywiście nie możemy zapomnieć o zmianie rekordu
serial w strefie domeny i restarcie demona
named
Konfiguracja portów (jeżeli korzystamy z firewall-a)
W przypadku wykorzystwania zapór ogniowych w systemie
powinniśmy otworzyć porty tcp dla następujących
portów:
-
5222 - Dla komunikacji klienckiej
(połączenie nieszyfrowane)
-
5223 - Dla komunikacji klienckiej
(połączenie szyfrowane SSL)
-
5269 - Dla komunikacji między
serwerami Jabbera
-
5347 - Dla komunikacji między
serwerami Jabbera, wykorzystany przez dodatkowe transporty
(np. transport GG)
Pamiętać należy, że powyższe porty są ustalone umownie
i w plikach konfiguracyjnych demona Jabber, a także
rekordach SRV możemy je
zmienić (np. dla portu klienckiego ustalić port 80) -
jednak zaleca się pozostawić proponowane wyżej porty.
Oczywiście, jeżeli nie chcemy aby nasz serwer był
widoczny na zewnątrz naszej sieci (np. jest
przeznaczony tylko dla wewnętrzej sieci intranetowej)
nie otwieramy portu przeznaczonego do komunikacji
między serwerami (u nas to porty 5269 i 5347).
Podstawowa konfiguracja Jabberd2
Możemy wreszcie skonfigurować wstępnie usługę
jabberd2. Wszystkie pliki
konfiguracyjne znajdują się w katalogu
/etc/jabber.
W pliku /etc/jabber/c2s.xml w
okolicy tagu "local" dodajemy naszą domenę:
<!-- Local network configuration -->
<local>
<!-- Who we identify ourselves as. This should correspond
to the ID (host) that the session manager thinks it is. You can
specify more than one to support virtual hosts, as long as you
have additional session manager instances on the network to
handle those hosts. The realm attribute specifies the auth/reg
or SASL authentication realm for the host. If the attribute is
not specified, the realm will be selected by the SASL
mechanism, or will be the same as the ID itself. Be aware that
users are assigned to a realm, not a host, so two hosts in the
same realm will have the same users.
If no realm is specified, it will be set to be the same as the
ID. -->
<id>jabber.domena.org</id> |
W pliku /etc/jabber/sm.xml w pierwszych
linijkach także dodajemy naszą domenę:
<sm>
<!-- Our ID on the network. Users will have this as the domain part of
their JID. If you want your server to be accessible from other
Jabber servers, this ID must be resolvable by DNS.s
(default: localhost) -->
<id>jabber.domena.org</id> |
Jeżeli chcemy, aby nasz serwer komunikował się z innymi
serwerami w pliku /etc/jabber/jabberd.cfg
kasujemy "#" w linijce z "s2s":
# After sm and c2s are configured to use a fully qualified domain name
# and proper SRV records are set in DNS uncoment this to enable
# communication
# with other Jabber servers
s2s /etc/jabber/s2s.xml |
Podstawowa konfiguracja jest już zrobiona. Domyślne ustawienie
tzw. "storage" czyli sposobu trzymania przez jabbera
informacji o użytkownikach jest zrobione w PLD w
db. Przy małej ilości użytkowników
jest to wystarczający sposób. Jednak przy większej ich
ilości, bardziej praktyczne jest trzymanie tych danych w
bazie SQL.
Konfiguracja dla SQL (Postgresql)
Przy poprawnie działającym postgresie, z uprawnionego
dla niego użytkownika tworzymy bazę
jabberd2
$ createdb -U postgres jabberd2 |
Następnie przypisujemy do tej bazy użytkownika
jabberd2 i ustalamy dla niego
hasło i opcje dostępu do bazy:
$ createuser -P -U postgres jabberd2
Enter password for user "jabberd2":
Enter it again:
Shall the new user be allowed to create databases? (y/n) n
Shall the new user be allowed to create more new users? (y/n) n
CREATE USER |
Teraz musimy wypełnić nowoutworzoną bazę odpowiednimi tabelami
i polami. Z katalogu
/usr/share/doc/jabberd-2* należy
rozpakować (najlepiej do katalogu użytkownika, który może
działać na bazie postgresa) plik
db-setup.pgsql.gz. Po rozpakowaniu
przechodzimy do katalogu, gdzie został rozpakowany plik
db-setup.pgsql i wykonujemy:
$ psql -U jabberd2 jabberd2
jabberd2=>\i db-setup.pgsql |
Baza postgresa jest gotowa. Połączenie z bazą będzie
odbywać się po localhost, tak więc musimy zadbać o to,
żeby postgres umożliwiał takie połączenie
Została nam jeszcze konfiguracja w plikach jabbera.
W pliku /etc/jabber/sm.xml
szukamy sekcji "storage" i zmieniamy na:
<!-- Storage database configuration -->
<storage>
<!-- By default, we use the MySQL driver for all storage -->
<driver>pgsql</driver> |
Dla porządku dodamy, że zamiast
pgsql, możemy także wykorzytać: mysql,
ldap, sqlite (w zależności od mechanizmu jaki
wybraliśmy).
W tym samym pliku szukamy następnie sekcji "pgsql" aby
w odpowiednim miejscu wpisać hasło dostępu do bazy
jabberd2. Możemy tam także zmienić sposób dostępu:
<!-- PostgreSQL driver configuration -->
<pgsql>
<!-- Database server host and port -->
<host>localhost</host>
<port>5432</port>
<!-- Database name -->
<dbname>jabberd2</dbname>
<!-- Database username and password -->
<user>jabberd2</user>
<pass>tu_wpisujemy_hasło_do_bazy</pass> |
Podobne zmiany wykonujemy w pliku
/etc/jabber/c2s.xml. Umożliwiają one
autentykacje użytkowników jabbera:
<!-- Authentication/registration database configuration -->
<authreg>
<!-- Backend module to use -->
<module>pgsql</module> |
I dalej w tym samym pliku (sekcja "pgsql")
<!-- PostgreSQL module configuration -->
<pgsql>
<!-- Database server host and port -->
<host>localhost</host>
<port>5432</port>
<!-- Database name -->
<dbname>jabberd2</dbname>
<!-- Database username and password -->
<user>jabberd2</user>
<pass>tu_wpisujemy_hasło_do_bazy</pass>
</pgsql> |
Po zrestartowaniu demona jabberd możemy się już cieszyć bardziej
zaawansowaną funkcjonalnością naszego komunikatora.
Szyfrowanie
Przed konfiguracją samego jabbera, musimy sprawdzić
czy mamy pakiet openssl i
wygenerować klucz:
# openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout privkey.pem -out server.pem |
sam parametr -days 3650 możemy
ustawić na krótszy lub dłuższy (oznacza on długość
ważności certyfikatu - w naszym przypadku 10 lat).
Po wykonaniu powyższego polecenia i wpisaniu
odpowiedzi na zadane pytania (zwróćmy tylko uwagę, abyśmy
w polu Common Name wpisali naszą
domenę, obsługiwaną przez serwer jabbera) usuniemy
hasło z klucza prywatnego:
# openssl rsa -in privkey.pem -out privkey.pem |
Następnie połączymy oba klucze w jeden plik i
skasujemy klucz prywatny:
# cat privkey.pem >> server.pem
# rm privkey.pem |
Zmieniamy nazwę naszego certyfikatu (dla porządku),
przenosimy w odpowiednie miejsce i nadajemy prawa:
# mv server.pem /var/lib/openssl/certs/jabber.pem
# chown root:jabber /var/lib/openssl/certs/jabber.pem
# chmod 640 /var/lib/openssl/certs/jabber.pem |
Została nam jeszcze konfiguracja Jabbera. W pliku
/etc/jabber/c2s.xml znajdujemy
tag "ssl-port" i odkomentujemy go:
<!-- Older versions of jabberd support encrypted client connections
via an additional listening socket on port 5223. If you want
this (required to allow pre-STARTTLS clients to do SSL),
uncomment this -->
<ssl-port>5223</ssl-port>
</local> |
Zdejmujemy komentarz także z tagu "require-starttls"
(kilka linijek wyżej):
<!-- Require STARTTLS. If this is enabled, clients must do STARTTLS
before they can authenticate. Until the stream is encrypted,
all packets will be dropped. -->
<require-starttls/> |
Teraz w każdym z pięciu plików konfiguracyjnych
znajdujących się w /etc/jabber
tj. router.xml, sm.xml, resolver.xml, s2s.xml, c2s.xml
znajdujemy zakomentowany ciąg wskazujący na nasz
certyfikat:
<!--
<pemfile>/etc/jabber/server.pem</pemfile>
--> |
Kasujemy komentarze (czyli <!-- i -->) i wpisujemy
odpowiednią scieżkę do naszego certyfikatu:
<pemfile>/var/lib/openssl/certs/jabber.pem</pemfile> |
Kolejny restart demona jabber i możemy cieszyć się
połączeniami szyfrowanymi.
Zakończenie
Opisane powyżej sposoby konfiguracji nie wyczerpują
oczywiście wszystkich aspektów. Zachęcamy do
odwiedzenia strony z oryginalną
dokumentacją jabbera. Mimo,
że niektórym może sprawić problem język angielski, to
podane przykłady w jasny sposób omawiają także
zaawansowane zagadnienia.
|