[HowTo] eJabberd on PLD + MSN + IRC + GG Transports

[

Własny serwer jabbera – jak to poważnie brzmi. Postaram się w maksymalnym skrócie opisać (krok po kroku) jak zainstalować i skonfigurować eJabberda na PLD i dodać do niego parę transportów. Zaczynamy.

1. Najważniejsza rzecz to oczywiście zainstalować serwer jabbera.


# poldek -ivh ejabberd

2. Konfiguracja (od razu weźmiemy pod uwagę, że chcemy mieć trzy transporty GG, IRC i MSN).

Edytujemy naszym ulubionym edytorem plik /etc/jabber/ejabberd.cfg

{acl, admin, {user, "admin"}}.
% user z prawami administratora, dowolny login
{acl, local, {user_regexp, ""}}.
{access, pubsub_createnode, [{allow, all}]}.
{access, configure, [{allow, admin}]}.
{access, register, [{deny, all}]}.
{welcome_message,
 {"Welcome!",
  "Welcome to Jabber.",
  "For information about Jabber visit http://jabber.org"}}.
{registration_watchers, ["user@localhost"]}.
% user, który będzie powiadamiany o rejestracjach do serwera jabbera
{access, announce, [{allow, admin}]}.
{access, c2s, [{deny, blocked},
               {allow, all}]}.
{shaper, normal, {maxrate, 1000}}.
{shaper, fast, {maxrate, 50000}}.
{access, c2s_shaper, [{none, admin},
                      {normal, all}]}.
{access, s2s_shaper, [{fast, all}]}.
{access, muc_admin, [{allow, admin}]}.
{access, muc, [{allow, all}]}.
{access, local, [{allow, local}]}.
{auth_method, internal}.
{hosts, ["localhost", "jabber.nasza_domena.pl"]}.
% nasze hosty, które będziemy używać (zewnętrzne domeny muszą istnieć)
{max_user_sessions, 10}.
{language, "en"}.
{listen,
[{5222, ejabberd_c2s, [{access, c2s}, {shaper, c2s_shaper}, {max_stanza_size, 65536}, starttls, {certfile, "/etc/jabber/jabber.pem"} ]}, {5223, ejabberd_c2s, [{access, c2s}, {max_stanza_size, 65536}, tls, {certfile, "/etc/jabber/jabber.pem"}]}, {5269, ejabberd_s2s_in, [{shaper, s2s_shaper}, {max_stanza_size, 131072} ]}, {5348, ejabberd_service, [{access, all}, {host, "msn.jabber.nasza_domena.pl", [{password, "hasło z /etc/jabber/secret"}]}]}, {5349, ejabberd_service, [{access, all}, {host, "gg.jabber.nasza_domena.pl", [{password, "hasło z /etc/jabber/secret"}]}]}, {5347, ejabberd_service, [{access, all}, {hosts, ["ircnet.jabber.nasza_domena.pl", "freenode.jabber.nasza_domena.pl"], [{password, "hasło z /etc/jabber/secret"}]}]}, {5280, ejabberd_http, [http_poll, web_admin]} ]}. {s2s_use_starttls, true}. {s2s_certfile, "/etc/jabber/jabber.pem"}. {domain_certfile, "jabber.nasza_domena.pl", "/etc/jabber/jabber.pem"}. {outgoing_s2s_port, 5269}. {modules, [ {mod_register, [{access, register}]}, {mod_roster, []}, {mod_privacy, []}, {mod_adhoc, []}, {mod_configure2, []}, {mod_disco, []}, {mod_stats, []}, {mod_vcard, []}, {mod_offline, []}, {mod_echo, [{host, "echo.nasza_domena.pl"}]}, {mod_private, []}, {mod_irc, []}, {mod_muc, [{access, muc}, {access_create, muc}, {access_admin, muc_admin}]}, {mod_pubsub, [{access_createnode, pubsub_createnode}]}, {mod_time, []}, {mod_last, []}, {mod_version, []} ]}.

3. Wygenerowanie certyfikatów dla połączeń SSL/TLS

# openssl genrsa -out /etc/jabber/jabber.key 1024
# openssl req -new -x509 -days 365 -key /etc/jabber/jabber.key -out /etc/jabber/jabber.crt
# cat /etc/jabber/jabber.crt >> /etc/jabber/jabber.key
# mv /etc/jabber/jabber.key /etc/jabber/jabber.pem
# rm -f /etc/jabber/jabber.crt

4. Transport Gadu-Gadu


# poldek -ivh jggtrans

Ustawiamy najważniejsze opcje w /etc/jabber/jggtrans.xml

<service jid="gg.jabber.nasza_domena.pl"/>
<connect id="gglinker">
    <ip>127.0.0.1</ip>
    <port>5349</port>
    <secret>hasło z /etc/jabber/secret</secret>
</connect>
<spool>/var/spool/jabber/gg.jabber.atwa.us/</spool>
<admin>admin@jabber.nasz_domena.pl</admin>
<acl>
        <allow who="admin@jabber.nasza_domena.pl" what="iq/query?xmlns=http://jabber.org/protocol/stats"/>
        <deny who="*" what="iq/query?xmlns=http://jabber.org/protocol/stats"/>
        <allow who="*"/>
        <deny what="iq/query?xmlns=jabber:x:register"/>
        <allow what="presence"/>
        <deny/>
 </acl>

Następnie tworzymy katalog, w którym będą trzymane dane userów używających transportu

# mkdir -p /var/spool/jabber/gg.jabber.nasza_domena.pl
# chown -R root:jabber /var/spool/jabber/
# chmod -R g+w /var/spool/jabber/

5. Transport MSN

Instalujemy najważniejsze rzeczy:


# poldek -ivh python-Twisted python-Twisted-ssl python-TwistedWords python-TwistedWeb python-TwistedXish python-Imaging python-pyOpenSSL

Teraz trzeba już ręcznie ściągnąć transport stąd. Wypakowujemy go i ustawiamy config.
W src/config.py:

jid = "msn.jabber.nasza_domena.pl"
host = "127.0.0.1"
compjid = ""
spooldir = "/var/lib/ejabberd/"
discoName = "MSN Transport"

mainServer = "127.0.0.1"
website = ""
port = "5348"
secret = "hasło z /etc/jabber/secret"

Natomiast w config.xml (jeśli nie ma to tworzymy z templatu) ustawiamy te same opcje tylko w formacie XMLowym.
Musimy niestety utworzyć jeszcze 2 symlinki bo PyMSNt źle szuka naszych zainstalowanych rozszerzeń pythona:

# ln -s /usr/share/python2.4/site-packages/twisted/words /usr/lib[64]/python2.4/site-packages/twisted/words
#  ln -s /usr/share/python2.4/site-packages/twisted/xish /usr/lib[64]/python2.4/site-packages/twisted/xish

Odpalamy PyMSNt:


# ./PyMSNt &

6. Uruchamiamy eJabberda i tworzymy konto administratora

# service ejabberd start
# ejabberdctl ejabberd@localhost register admin jabber.nasza_domena.pl hasło_do_konta_admina
# service jggtrans start

I to praktycznie cała filozofia. Pod adresem http://server:5280/admin/ zastaniemy ładnego web admina dzięki któremu możemy trochę monitorować nasz serwer, dodawać i usuwać userów, zmieniać im hasła itd. Sam user ma oczywiście możliwość zmiany hasła przez swojego klienta jabbera. Czy ja czasem nie zapomniałem o transporcie ircowym? Nie, eJabberd ma wbudowany transport IRCa i stąd wystarczyło tylko odblokować odpowiedni port i usługę w ejabberd.cfg i transport od razu działa.
Jakbym o czymś zapomniał albo coś jednak nie działało to “bijcie!” i piszcie do mnie albo tutaj w komentarzach. Bijcie!

About the author

Bartosz

iOS and OS X software engineer. Currently working in Berlin, Germany.

By Bartosz