Ich hatte erst ueberlegt, ob ich eine Anleitung hierzu schreibe, da es an sich nicht schwer ist einen Jabber-Server aufzusetzen. Aber da dieser Server in einem privatem Netzwerk steht, des ueber eine dyndns-Adresse erreichbar ist, aber der Server ueber einen festen Domainnamen verfuegt, ist es glaube ich dennoch eine Anleitung Wert.
Fuer diesen Server benoetigt ihr eine Adresse bei einem dyndns-Anbieter (zum Beispiel dyndns.com, in unserem Beispiel wird beispiel.dyndns.de benutzt), eine Domain in eurem Besitz (hier beispiel.de) und Zugang zu den DNS-Einstellungen dieser Domain. Zusaetzlich benoetigt ihr einen DNS-Server in eurem internen Netzwerk (in diesem Beispiel wird bind9 benutzt).
Als erstes muesst ihr den Jabber-Server installieren. Ich nutze hierfuer ejabberd. Da ich Debian nutze, gestaltet sich dies sichtlich einfach:
jabberserver:~# apt-get install ejabberd
Kurz darauf ist ejabberd auch schon installiert. Unter Debian lenny wurde keine Konfiguration abgefragt. Deshalb holen wir dies mit
jabberserver:~# dpkg-reconfigure ejabberd
nach. Wir werden hier nach dem Hostname des Servers gefragt. Hier geben wir eine Subdomain unserer festen Domain an. In unserem Beispiel verwenden wir die Domain "beispiel.de". Deshalb ist unsere Subdomain die wir dem Server geben:
jabber.beispiel.de
Sehr wichtig bei dieser Domain ist, dass sie sich fuer den Server nicht mehr aendert. Denn ansonsten sind die Nutzer nicht mehr erreichbar. Aber dank der Subdomain koennen wir den Server jederzeit umziehen und es wuerde dennoch alles funktionieren.
Dann werden wir nach einem Nutzer gefragt, der Admin sein soll. Dieser heisst bei uns:
tux@jabber.beispiel.de
Nun noch das Passwort fuer diesen Nutzer eingeben und wir sind fertig.
Als naechstes erstellen wir ein Zertifikat fuer diesen Server. Dazu benutzen wir folgende Befehle:
Dieses Zertifikat ist 10Jahre gueltig. Ihr muesst hierbei aufpassen, dass der Common Name der Hostname ist. Also der Common Name muss hier jabber.beispiel.de lauten.
Nun da das Zertifikat erstellt wurde, veraendern wir die ejabberd.cfg noch ein wenig. Diese liegt in dem Ordner /etc/ejabberd. Ich gebe hier nur die Aenderungen an, die an der ejabberd.cfg gemacht wurden:
[...]
%% Admin user
{acl, admin, {user, "tux", "jabber.beispiel.de"}}.
%% Hostname
{hosts, ["jabber.beispiel.de"]}.
[...]
{watchdog_admins, ["tux@jabber.beispiel.de"]}.
[...]
{listen,
[
%%TLS wird erzwungen durch starttls_require
{5222, ejabberd_c2s, [
{access, c2s},
{shaper, c2s_shaper},
{max_stanza_size, 65536},
starttls_require, {certfile, "/etc/ejabberd/jabbercert_jabber.beispiel.de.pem"}
]},
%%
%% To enable the old SSL connection method (deprecated) in port 5223:
%%
{5223, ejabberd_c2s, [
{access, c2s},
{shaper, c2s_shaper},
{max_stanza_size, 65536},
tls, {certfile, "/etc/ejabberd/jabbercert_jabber.beispiel.de.pem"}
]},
%% No username can be registered via in-band registration:
%% To enable in-band registration, replace 'deny' with 'allow'
% (note that if you remove mod_register from modules list then users will not
% be able to change their password as well as register).
% This setting is default because it's more safe.
%{access, register, [{deny, all}]}.
%% damit sich Nutzer an unserem Jabber-Server
%% anmelden koennen
{access, register, [{allow, all}]}.
{mod_register, [
%%
%% After successful registration, the user receives
%% a message with this subject and body.
%%
{welcome_message, {"Welcome!",
"Welcome to a Jabber service powered by jabber.beispiel.de. "
"For information about Jabber visit "
"http://www.jabber.org"}},
%% Replace it with 'none' if you don't want to send such message:
%%{welcome_message, none},
%%
%% When a user registers, send a notification to
%% these Jabber accounts.
%%
{registration_watchers, ["tux@jabber.beispiel.de"]},
{access, register}
[...]
Ueberschuessige Module wurden auskommentiert. Diese Dienste sollen von unserem Jabber-Server nicht angeboten werden. Eine vollstaendige ejabberd.cfg ist hier herunterladbar. Die Kommentare in der Konfiguration selber und die in den oben gezeigten Eintraegen sollten deren Funktion hinreichend erklaeren. Wichtig fuer unseren Jabber-Server ist, dass wir TLS erzwingen. Wir moechten kein unverschluesselte Verbindung haben.
Nun starten wir unseren Jabber-Server noch einmal mit
Nachdem der Server nun eingerichtet wurde, muessen wir ihn von der Aussenwelt noch erreichbar machen. Dazu muessen wir als aller erstes in unserem Router die Ports 5222 TCP (fuer die normalen Client zu Server Verbindungen mit starttls), 5223 TCP (fuer die Client zu Server Verbindungen mit SSL) und 5269 TCP (fuer die Server zu Server Verbindungen) freigeben und auf die IP "192.168.23.23" (die private Netzwerkadresse unseres Jabber-Servers) weiterleiten lassen. Nun gut, wenn diese Einstellungen gemacht wurden, ist der Jabber-Server von aussen erreichbar ueber beispiel.dyndns.de (natuerlich muesst ihr in eurem Router diese dyndns-Adresse einrichten, so das der dyndns-Anbieter auch staendig eure aktuelle IP weiss). Dies ist natuerlich der erste Schritt zum funktionierenden Jabber-Server. Aber noch nicht so wie wir es haben wollen. Also greift ihr auf den Namensserver von eurem Anbieter zu und richtet einen CNAME der Subdomain jabber.beispiel.de ein. Dieser CNAME zeigt auf beispiel.dyndns.de. Somit habt ihr eine Weiterleitung von jabber.beispiel.de auf beispiel.dyndns.de geschaffen, was bedeutet euer privates Netzwerk ist durch diesen Namen erreichbar.
Somit ist euer Jabber-Server nun schon einmal von aussen erreichbar und benutzbar. Das Problem ist aber, wenn ihr eine Workstation in eurem Netzwerk habt und ihr euch an eurem Jabber-Server anmelden wollt. Oder vielleicht habt ihr einen Laptop der staendig den Standort wechselt. Dafuer benoetigen wir einen DNS-Server in eurem privaten Netzwerk. In unserem Beispiel gehen wir davon aus, dass bind9 in diesem Netzwerk laeuft.
Auf eurem Server auf dem bind9 laeuft, erstellt ihr eine Datei im Ordner /etc/bind mit dem Namen db.beispiel.de_intern. In diese Datei tragt ihr folgendes ein:
;
; beispiel.de intern
;
$TTL 604800
$ORIGIN beispiel.de.
;
@ IN NS nameserver1.domainanbieter.de.
jabber IN A 192.168.23.23
Nun zur Erklaerung. Die TTL gibt an, wie lange der Eintrag gueltig ist. Die Variable ORIGIN gibt einfach nur den Domainnamen fuer diese Zone an. Dies ist ganz einfach beispiel.de. (wichtig sind hier die abschliessenden Punkte). Das @ ist einfach nur ein Platzhalter fuer die Domain in der vorhin genannten Variable. Als Nameserver der fuer diese Zone verantwortlich ist, gebt ihr den Nameserver eures Domainanbieters an. Hierbei ist dies "nameserver1.domainanbieter.de.". Nun kommt der eigentliche Eintrag fuer unseren Jabber-Server. Der Eintrag "jabber" bekommt einen A Eintrag auf die IP "192.168.23.23". Die IP "192.168.23.23" ist in unserem Fall die interne IP fuer unseren Jabber-Server. Dies bedeutet in der Zone also, dass die Adresse "jabber.beispiel.de." auf "192.168.23.23" zeigt. Heisst wenn wir in unserem internen Netz sind, wird der Name auf diese interne IP aufgeloest, sollten wir ausserhalb sein, wird der Name auf die IP unseres Routers aufgeloest, der die Ports fuer Jabber dann an unseren Jabber-Server weiterleitet.
Allerdings sind wir noch nicht fertig. In der Datei /etc/bind/named.conf muessen wir nun noch die Zone Eintragen. Passt hierbei auf, dass nur eure internen Clients auf diese Zone zugreifen koennen. Dies koennen wir ganz einfach mit einem View erledigen. Dazu fuegen wir folgende Zeilen hinzu:
view "intern" {
//damit nur interne Clients den DNS nutzen koennen
match-clients { 192.168.23.0/24;127.0.0.0/8; };
zone "beispiel.de" {
type hint;
file "/etc/bind/db.beispiel.de_intern";
};
};
Wenn wir nun unseren DNS-Server neustarten, sollten wir aus unserem internen Netzwerk mittels dem Befehl nslookup solch eine Ausgabe bekommen:
Als kleiner Hinweis sei hier noch hinzugefuegt, dass der ejabberd ueber eine Weboberflaeche verfuegt. Ich finde sie nicht so toll, aber man kann die Statistik gut anschauen. Die Adresse zu dieser Weboberflaeche waere dann:
http://jabber.beispiel.de:5280/admin
Als Anmeldename muesst ihr euren Adminaccount verwenden. Und denkt daran, den vollstaendigen Namen tux@jabber.beispiel.de zu verwenden.