Difference between revisions of "User:Frahm"

From Univention Wiki

Jump to: navigation, search
Line 1: Line 1:
== Jabber Server with UCs ==
+
=Jabber Server mit UCS=
This article describes the set up of different Jabber servers in UCS. The scope of functions in Jabber is quite large, therfore we only respond the following points in this article.
 
  
* LDAP authentification
+
Dieser Artikel beschreibt die Einrichtung und deren Anbindung an UCS. Da der Funktionsumfang recht groß ist, wird im Artikel auf folgende Themen eingegangen:
 +
* LDAP Authentifzierung
 
* SSL/Plaintext (Port 5223)
 
* SSL/Plaintext (Port 5223)
* vCard (from LDAP)
+
* vCard (aus dem LDAP)
 
* shared roster
 
* shared roster
* Binding to other IM protocols (called 'transports' in the article)
+
* Anbindung an andere IM Protokolle (im folgendem Transports genannt)
 
* Chatrooms
 
* Chatrooms
  
The needed software packages can be installed directly on UCS, or can be downloaded as a Debian sourcecode package then translated on the UCS system and installed with the usual UCS commands.
+
Die benötigten Softwarepakete können entweder direkt über UCS installiert werden, oder als Debian Quellcodepaket heruntergeladen, auf dem UCS System übersetzt und mit den UCS üblichen Kommandos installiert werden.  
  
 
== eJabberd ==
 
== eJabberd ==
eJabberd is a Jabber server which is written in the pograming language "Erlang". By various modules he reached a wide range of functions. The eJabberd is configurable with the file '''/etc/ejabberd/ejabber.cfg'''. The following part shows the main parameters (HOSTNAME, LDAPBASE etc. have to be customized)
 
  
''Hint'': Maybe you have to install a few more packages, so that the description works correctly. The packages will be called in the section where there needed.
+
Benötigte Software Pakete: erlang-base, ejabberd, subversion, erlang-nox
  
=== General settings ===
+
eJabberd ist ein Jabber Server der in der Sprache "Erlang" geschrieben wurde, welcher durch diverse Module eine recht große Funktionsvielfalt bietet.
  
%% mapping the administrator account of the Jabber server to a normal administrator
+
Konfiguriert wird eJabberd über die Datei ''/etc/ejabberd/ejabberd.cfg''. Im folgenden werden die wichtigsten Parameter bearbeitet. NAME, DOMAINNAME, LDAPBASE etc. müssen angepasst werden.
{acl, admin, {user, "administrator", "HOSTNAME"}}.
+
Der wert von Name ist die ausgabe zweier UCR Variablen, welche durch einen Punkt getrennt werden
..
+
<pre>
%% The hostname of the Jabber server
+
ucr get hostname
{hosts, ["HOSTNAME"]}.
+
ucr get domainname
...
+
</pre>
Authentification (LDAP)
+
z.B. master.example.org
...
 
% Uncomment!
 
%{auth_mehtod, internal}
 
  
%% LDAP authentification with localhost
+
=== Allgemeine Einstellungen ===
%% LDAPBASE is the output from "ucr get ldap/base"
+
<pre>
{auth_method, ldap}.
+
...
{ldap_servers, ["localhost"]}. %list of LDAP servers
+
%% Administrator Account des Jabber Servers auf einen normalen Administrator mappen
{ldap_uids, [{"mail", "%u@mail.example.org"}]}.
+
{acl, admin, {user, "administrator", "NAME"}}.
{ldap_base, "cn=user,LDAPBASE"}. %Search base of LDAP directory
+
...
 +
%% Der Domainname des Jabber Servers
 +
{hosts, ["DOMAINNAME"]}. %Ausgabe von ucr get domainname
 +
</pre>
  
=== vCard ===
+
=== Authentifizering (LDAP) ===
  
%%Used modules:
+
<pre>
{modules
+
...
[
+
% Auskommentieren!
%% To bind the cVcard to the LDAP server
+
%{auth_method, internal}
%% More fields can be added.
+
 
 +
%% LDAP Authentifizerung mit HOSTNAME
 +
%% LDAPBASE ist die Ausgabe von "ucr get ldap/base"
 +
{auth_method, ldap}.
 +
{ldap_servers, ["NAME"]}. % List of LDAP servers
 +
{ldap_port, 7389}.
 +
{ldap_base, "cn=users,LDAPBASE"}. % Search base of LDAP directory
 +
{ldap_uidattr, "uid"}. % LDAP attribute that holds user ID
 +
</pre>
 +
 
 +
=== vCard (LDAP) ===
 +
Hier ist noch zu beachten das nur die Werte in ''{ldap_rootdn'', ''{ldap_password'' und den Wert von LDAPBASE veränderz bzw. eingetragen werden sollen. Die Restlichen Werte müssen als Standard bleiben!
 +
<pre>
 +
%% Used modules:
 +
{modules,
 +
[
 +
  %% Um die vCard an den LDAP Server zu binden
 +
  %% Weitere Felder können hinzugefügt werden.
 
   {mod_vcard_ldap, [
 
   {mod_vcard_ldap, [
  {ldap_servers, ["localhost"]},
+
    {ldap_servers, ["localhost"]},
  {ldap_rootdn, ""},
+
    {ldap_rootdn, ""}, % Hier muss etwas eingetragen werden! Vorzeugsweise der Administrator!
  {ldap_password, ""},
+
    {ldap_password, ""}, % Passwort des Administrators
  {ldap_base, "cn=user,LDAPBASE},
+
    {ldap_base, "cn=users,LDAPBASE"},
  {ldap_uids, [{"mail", "%u@mail.example.org"}]},
+
    {ldap_uidattr, "uid"},
  {ldap_filter, ""},
+
    {ldap_filter, ""},
  {ldap_vcard_map, [
+
    {ldap_vcard_map, [
    {"NIOKNAME", "%u", []},
+
      {"NICKNAME", "%u", []},
    {"FN", "%s", ["cn"]},
+
      {"FN", "%s", ["cn"]},
    {"EMAIL", "%s", ["mailPrimaryAddress"]},
+
      {"EMAIL", "%s", ["mailPrimaryAdress"]},
    {"DESC", "%s", ["description"]}
+
      {"DESC", "%s", ["description"]}
  ]},
+
    ]},
  {ldap_search_fields, [
+
    {ldap_search_fields, [
    {"User", "%u"},
+
      {"User", "%u"},
    {"Name", "givenName"},
+
      {"Name", "givenName"},
    {"Family Name", "sn"},
+
      {"Family Name", "sn"},
    {"Email", "mail},
+
      {"Email", "mail"}
  ]}
+
    ]},
  {ldap_search_reported, [
+
 
    {"Full Name", "FN"},
+
    {ldap_search_reported, [
    {"Nickname", "NICKNAME"},
+
      {"Full Name", "FN"},
    {"Description", "DESC"},
+
      {"Nickname", "NICKNAME"},
  ]}
+
      {"Description", "DESC"}
 +
    ]}
 
   ]},
 
   ]},
 
   ...
 
   ...
   %% The module "mod_vcard" should be commented out
+
   %% Das mod_vcard Modul sollte auskommentiert werden
 
   %{mod_vcard, []},
 
   %{mod_vcard, []},
 
   ...
 
   ...
]}.
+
]}.
 +
</pre>
 +
In neueren eJabberd Versionen sind die Transports bereits in der Konfigurationsdatei enthalten. Um diese zu Aktivieren genügt es die Kommentarzeile zu entfernen. Der Transport für ICQ sieht z.B. folgendermaßen aus:
 +
<pre>
 +
  %% Jabber ICQ Transport
 +
  %%{5555, ejabberd_service, [
 +
  %%                        {ip, {127, 0, 0, 1}},
 +
  %%                        {access, all},
 +
  %%                        {shaper_rule, fast},
 +
  %%                        {hosts, ["icq.localhost", "sms.localhost"],
 +
  %%                                  [{password, "secret"}]}
 +
  %%                        ]},
  
=== Shared roster ===
+
</pre>
Shared roster distributes automaticly contactlists for the Jabber users, this doesn't work correctly with the binding on the LDAP database. There is antoher module "mod_ctlextra" by which one can at at least make known each account with each (push-alltoall).
+
Falls ein ältere eJabberd Server verwendet wird müssen die Transports extra angelegt werden. Weiter Informationen dafür in die weiterführenden Links.
''Hint: Here you need SVN and Erlang Packages!''
 
cd /opt
 
svn co https://svn.process-one.net/ejabberd-modules
 
cd /opt/ejabberd-modules/mod_ctlextra/trunk
 
./build.sh
 
cp ebin/mod_ctlextra.beam /usr/lib/erlang/lib/ejabberd-1.2.2/ebin
 
  
After this, the module "mod_ctlextra" can be activated in the configuration file.
+
=== Shared Roster ===
% Used modules:  
+
Shared Roster sind verteilte, automatische Kontaktlisten für Jabber Benutzer. Leider funktionieren diese nicht richtig mit anbidung an die LDAP Datenbank. Es gibt aber ein weiteres Modul ''mod_ctlextra'' mit dessen Hilfe man zumindest jeden Account mit jedem bekannt machen kann (push-alltoall).
{modules, [
+
<pre>
 +
-> cd /opt
 +
-> svn co https://svn.process-one.net/ejabberd-modules
 +
-> cd /opt/ejabberd-modules/mod_ctlextra/trunk
 +
-> ./build.sh
 +
</pre>
 +
In neueren eJabberd Versionen
 +
<pre>
 +
-> cp ebin/mod_ctlextra.beam /usr/lib/ejabberd/ebin
 +
</pre>
 +
In älteren eJabberd Versionen
 +
<pre>
 +
-> cp ebin/mod_ctlextra.beam /usr/lib/erlang/lib/ejabberd-1.1.2/ebin
 +
</pre>
 +
Nach diesen Schritten kann das Modul ''ctl_extra'' in der Konfigurationsdatei aktiviert werden.
 +
<pre>
 +
% Used modules:
 +
{modules, [
 
   ...
 
   ...
 
   {mod_ctlextra, []}, % !!!
 
   {mod_ctlextra, []}, % !!!
 
   ...
 
   ...
 
   {mod_version, []}
 
   {mod_version, []}
]}.
+
]}.
After restarting the Jabber server
+
</pre>
/etc/init.d/ejabberd restart
+
Nach einem Neustart des Jabber Servers
the commandlineprogramm from eJabberd "ejabberdctl" knows additional commands.
+
<pre>
 +
-> /etc/init.d/ejabberd restart
 +
</pre>
 +
kennt das ejabberd Kommandozeilenprogramm "ejabberdctl" zusätzliche Befehle
 +
<pre>
 +
% Alle Accounts werden allen Accounts in der Gruppe everybody
 +
% bekannt gemacht
 +
-> ejabberdctl push-alltoall JABBERSERVER everybody
 +
 
 +
% Alle Authorisierungen löschen
 +
-> ejabberdctl rosteritem-purge -remote *.@JABBERSERVER -subs both
 +
 
 +
% user2 mit "nick" in der Roster Gruppe "group" von user1 mit Subscription Typ
 +
% "both"
 +
-> ejabberdctl add-rosteritem user1 JABBERSERVER user2 JABBERSERVER nick group both
 +
...
 +
</pre>
 +
Mit diesen Kommandos sind die ''Shared Roster'' relativ schnell zusammengebaut.
 +
 
 +
Noch ein Hinweis zur Konfigurationsdatei des ejabberd. Leider ist die Syntax etwas kompliziert und die Fehlermeldungen bei falscher Syntax sind nicht sehr aussagekräftig. Man sollte also auf jeden Punkt und jedes Komma achten.
 +
<pre>
 +
{aaa, bbb, [
 +
  {auth, method, anonymous}, %hier muss ein Komma stehen
 +
  {allow_multipble_connections, false}, %hier muss ein Komma stehen
 +
  {anonymous_protocol, sasl_anon} %hier darf kein Komma stehen
 +
  ]
 +
}. %hier muss ein Punkt stehen
 +
</pre>
 +
Hiernach müssen wir prüfen ob der eJabberd Server auch richtig läuft.
 +
<pre>
 +
ejabberctl status
 +
</pre>
 +
Die richtige Ausgabe sollte folgendermaßen aussehen:
 +
<pre>
 +
The node ejabberd@example is started with status: started
 +
ejabberd 2.1.5 is running in that node
 +
</pre>
 +
Wenn der Jabber Server richtig läuft müssen noch einige Ports in der Firewall freigeschaltet werden. Benötigt werden die Ports ''5222'' und ''5269''. Im folgenden prüfen wir ob diese Ports schon freigeschalted sind und schalten diese frei wenn die Ports noch geschlossen sind.
 +
Prüfen ob die Ports bereits offen sind:
 +
<pre>
 +
netstat -plna | grep 5222
 +
netstat -plna | grep 5269
 +
</pre>
 +
Ports in der Firewall öffnen
 +
<pre>
 +
ucr set security/packetfilter/ejabberd/tcp/5222/all=ACCEPT
 +
ucr set security/packetfilter/ejabberd/tcp/5269/all=ACCEPT
 +
</pre>

Revision as of 09:26, 19 October 2012

Jabber Server mit UCS

Dieser Artikel beschreibt die Einrichtung und deren Anbindung an UCS. Da der Funktionsumfang recht groß ist, wird im Artikel auf folgende Themen eingegangen:

  • LDAP Authentifzierung
  • SSL/Plaintext (Port 5223)
  • vCard (aus dem LDAP)
  • shared roster
  • Anbindung an andere IM Protokolle (im folgendem Transports genannt)
  • Chatrooms

Die benötigten Softwarepakete können entweder direkt über UCS installiert werden, oder als Debian Quellcodepaket heruntergeladen, auf dem UCS System übersetzt und mit den UCS üblichen Kommandos installiert werden.

eJabberd

Benötigte Software Pakete: erlang-base, ejabberd, subversion, erlang-nox

eJabberd ist ein Jabber Server der in der Sprache "Erlang" geschrieben wurde, welcher durch diverse Module eine recht große Funktionsvielfalt bietet.

Konfiguriert wird eJabberd über die Datei /etc/ejabberd/ejabberd.cfg. Im folgenden werden die wichtigsten Parameter bearbeitet. NAME, DOMAINNAME, LDAPBASE etc. müssen angepasst werden. Der wert von Name ist die ausgabe zweier UCR Variablen, welche durch einen Punkt getrennt werden

ucr get hostname
ucr get domainname

z.B. master.example.org

Allgemeine Einstellungen

...
%% Administrator Account des Jabber Servers auf einen normalen Administrator mappen
{acl, admin, {user, "administrator", "NAME"}}.
...
%% Der Domainname des Jabber Servers
{hosts, ["DOMAINNAME"]}. %Ausgabe von ucr get domainname

Authentifizering (LDAP)

...
% Auskommentieren!
%{auth_method, internal}

%% LDAP Authentifizerung mit HOSTNAME
%% LDAPBASE ist die Ausgabe von "ucr get ldap/base"
{auth_method, ldap}.
{ldap_servers, ["NAME"]}. % List of LDAP servers
{ldap_port, 7389}.
{ldap_base, "cn=users,LDAPBASE"}. % Search base of LDAP directory
{ldap_uidattr, "uid"}. % LDAP attribute that holds user ID

vCard (LDAP)

Hier ist noch zu beachten das nur die Werte in {ldap_rootdn, {ldap_password und den Wert von LDAPBASE veränderz bzw. eingetragen werden sollen. Die Restlichen Werte müssen als Standard bleiben!

%% Used modules:
{modules,
[
  %% Um die vCard an den LDAP Server zu binden
  %% Weitere Felder können hinzugefügt werden.
  {mod_vcard_ldap, [
    {ldap_servers, ["localhost"]},
    {ldap_rootdn, ""}, % Hier muss etwas eingetragen werden! Vorzeugsweise der Administrator!
    {ldap_password, ""}, % Passwort des Administrators
    {ldap_base, "cn=users,LDAPBASE"},
    {ldap_uidattr, "uid"},
    {ldap_filter, ""},
    {ldap_vcard_map, [
      {"NICKNAME", "%u", []},
      {"FN", "%s", ["cn"]},
      {"EMAIL", "%s", ["mailPrimaryAdress"]},
      {"DESC", "%s", ["description"]}
    ]},
    {ldap_search_fields, [
      {"User", "%u"},
      {"Name", "givenName"},
      {"Family Name", "sn"},
      {"Email", "mail"}
    ]},

    {ldap_search_reported, [
      {"Full Name", "FN"},
      {"Nickname", "NICKNAME"},
      {"Description", "DESC"}
    ]}
  ]},
  ...
  %% Das mod_vcard Modul sollte auskommentiert werden
  %{mod_vcard, []},
  ...
]}.

In neueren eJabberd Versionen sind die Transports bereits in der Konfigurationsdatei enthalten. Um diese zu Aktivieren genügt es die Kommentarzeile zu entfernen. Der Transport für ICQ sieht z.B. folgendermaßen aus:

  %% Jabber ICQ Transport
  %%{5555, ejabberd_service, [
  %%                        {ip, {127, 0, 0, 1}},
  %%                        {access, all},
  %%                        {shaper_rule, fast},
  %%                        {hosts, ["icq.localhost", "sms.localhost"],
  %%                                   [{password, "secret"}]}
  %%                        ]},

Falls ein ältere eJabberd Server verwendet wird müssen die Transports extra angelegt werden. Weiter Informationen dafür in die weiterführenden Links.

Shared Roster

Shared Roster sind verteilte, automatische Kontaktlisten für Jabber Benutzer. Leider funktionieren diese nicht richtig mit anbidung an die LDAP Datenbank. Es gibt aber ein weiteres Modul mod_ctlextra mit dessen Hilfe man zumindest jeden Account mit jedem bekannt machen kann (push-alltoall).

-> cd /opt
-> svn co https://svn.process-one.net/ejabberd-modules
-> cd /opt/ejabberd-modules/mod_ctlextra/trunk
-> ./build.sh

In neueren eJabberd Versionen

-> cp ebin/mod_ctlextra.beam /usr/lib/ejabberd/ebin

In älteren eJabberd Versionen

-> cp ebin/mod_ctlextra.beam /usr/lib/erlang/lib/ejabberd-1.1.2/ebin

Nach diesen Schritten kann das Modul ctl_extra in der Konfigurationsdatei aktiviert werden.

% Used modules:
{modules, [
  ...
  {mod_ctlextra, []}, % !!!
  ...
  {mod_version, []}
]}.

Nach einem Neustart des Jabber Servers

-> /etc/init.d/ejabberd restart

kennt das ejabberd Kommandozeilenprogramm "ejabberdctl" zusätzliche Befehle

% Alle Accounts werden allen Accounts in der Gruppe everybody
% bekannt gemacht
-> ejabberdctl push-alltoall JABBERSERVER everybody

% Alle Authorisierungen löschen
-> ejabberdctl rosteritem-purge -remote *.@JABBERSERVER -subs both

% user2 mit "nick" in der Roster Gruppe "group" von user1 mit Subscription Typ
% "both"
-> ejabberdctl add-rosteritem user1 JABBERSERVER user2 JABBERSERVER nick group both
...

Mit diesen Kommandos sind die Shared Roster relativ schnell zusammengebaut.

Noch ein Hinweis zur Konfigurationsdatei des ejabberd. Leider ist die Syntax etwas kompliziert und die Fehlermeldungen bei falscher Syntax sind nicht sehr aussagekräftig. Man sollte also auf jeden Punkt und jedes Komma achten.

{aaa, bbb, [
  {auth, method, anonymous}, %hier muss ein Komma stehen
  {allow_multipble_connections, false}, %hier muss ein Komma stehen
  {anonymous_protocol, sasl_anon} %hier darf kein Komma stehen
  ]
}. %hier muss ein Punkt stehen

Hiernach müssen wir prüfen ob der eJabberd Server auch richtig läuft.

ejabberctl status

Die richtige Ausgabe sollte folgendermaßen aussehen:

The node ejabberd@example is started with status: started
ejabberd 2.1.5 is running in that node

Wenn der Jabber Server richtig läuft müssen noch einige Ports in der Firewall freigeschaltet werden. Benötigt werden die Ports 5222 und 5269. Im folgenden prüfen wir ob diese Ports schon freigeschalted sind und schalten diese frei wenn die Ports noch geschlossen sind. Prüfen ob die Ports bereits offen sind:

netstat -plna | grep 5222
netstat -plna | grep 5269

Ports in der Firewall öffnen

ucr set security/packetfilter/ejabberd/tcp/5222/all=ACCEPT
ucr set security/packetfilter/ejabberd/tcp/5269/all=ACCEPT
Personal tools