{"id":4580,"date":"2015-05-19T08:20:42","date_gmt":"2015-05-19T06:20:42","guid":{"rendered":"https:\/\/www.bdjl.de\/localhost\/?p=4580"},"modified":"2015-05-19T08:20:42","modified_gmt":"2015-05-19T06:20:42","slug":"xmpp","status":"publish","type":"post","link":"https:\/\/www.bdjl.de\/localhost\/?p=4580","title":{"rendered":"XMPP"},"content":{"rendered":"<p>Ich habe meine Metadaten gerne unter Kontrolle und mir deswegen einen XMPP Server unter Prosody geg\u00f6nnt. Hier einige Notizen rund um die Installation.<\/p>\n<h2>Basis<\/h2>\n<div class=\"level2\">\n<p>Prosody Paketquellen einbinden um von der tr\u00e4gen Paketverwaltung in den Ubuntu Repos unabh\u00e4ngig zu werden:<\/p>\n<pre class=\"code\">echo deb http:\/\/packages.prosody.im\/debian $(lsb_release -sc) main | sudo tee -a \/etc\/apt\/sources.list<\/pre>\n<p>Den Key der Paketquelle holen und in APT werfen:<\/p>\n<pre class=\"code\">wget https:\/\/prosody.im\/files\/prosody-debian-packages.key -O- | sudo apt-key add -\r\nsudo apt-get update<\/pre>\n<p>Prosody installieren:<\/p>\n<pre class=\"code\">apt-get install prosody<\/pre>\n<p>Einstellungen f\u00fcr den Benutzer prosody in \/etc\/passwd kontrollieren, der nur \/bin\/false als Shell erhalten darf:<\/p>\n<pre class=\"code\">prosody:x:113:121:Prosody XMPP Server,,,:\/var\/lib\/prosody:\/bin\/false<\/pre>\n<p>Prosody Konfiguration anpassen &#8211; unter Lua ist ein doppeltes Minus ein Kommentarzeichen:<\/p>\n<pre class=\"code\">vi \/etc\/prosody\/prosody.cfg.lua<\/pre>\n<p>Die Konfigurationsdatei ist gut strukturiert und weitgehend selbsterkl\u00e4rend, so dass beim Lesen kaum Fragen offen bleiben. Im Zweifel alle Restfragen \u00fcber die sauber strukturierte Dokumentation bei <a class=\"urlextern\" title=\"https:\/\/prosody.im\" href=\"https:\/\/prosody.im\" target=\"_blank\" rel=\"nofollow\">https:\/\/prosody.im<\/a> kl\u00e4ren.<\/p>\n<p>In der Konfiguration<\/p>\n<ol>\n<li class=\"level1\">\n<div class=\"li\">den Admin f\u00fcr den XMPP Server festlegen<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">die Sektion Module durchsehen und z.B. version sowie uptime deaktivieren, damit wir nach Au\u00dfen hin nicht gleich alle Angriffspunkte verraten.<\/div>\n<\/li>\n<\/ol>\n<p>Ebenfalls kontrollieren, ob Registrierungen \u00fcber Clients abgelehnt werden. Das scheint n\u00f6tig zu sein, damit man nicht mit Konten zugespamt wird:<\/p>\n<pre class=\"code\">allow_registration = false;<\/pre>\n<p>Wir wollen die Verbindung zwischen Client und Server Zwangsverschl\u00fcsseln:<\/p>\n<pre class=\"code\">c2s_require_encryption = true<\/pre>\n<p>Das geht im Prinzip auch f\u00fcr s2s (Server to Server) Verbindungen. Hier liegt auch der Grund, warum wir dringend OTR Verschl\u00fcsselung haben wollen, wenn wir nicht auf der eigenen Domain chatten.<\/p>\n<p>Die Passw\u00f6rter der Benutzer verschl\u00fcsselt speichern, auch wenn die Nebenwirkung ist, dass manche Clients l\u00e4nger brauchen, um sich anzumelden:<\/p>\n<pre class=\"code\">authentication = \"internal_hashed\"<\/pre>\n<p>SSL Key einbinden. Hierbei f\u00fcr Zwischenzertifikate ein PEM basteln wie f\u00fcr Dovecot und Freunde ebenfalls \u00fcblich.<\/p>\n<pre class=\"code\">ssl = {\r\n        key = \"\/etc\/prosody\/certs\/domain.key\";\r\n        certificate = \"\/etc\/prosody\/certs\/domain.pem\";\r\n}<\/pre>\n<p>Siehe zu intermedi\u00e4ren Zertifikaten auch: <a class=\"urlextern\" title=\"https:\/\/prosody.im\/doc\/certificates?s[]=pem#certificate_chains\" href=\"https:\/\/prosody.im\/doc\/certificates?s[]=pem#certificate_chains\" target=\"_blank\" rel=\"nofollow\">https:\/\/prosody.im\/doc\/certificates?s[]=pem#certificate_chains<\/a><\/p>\n<p>Unser Zertifikatsspeicher f\u00fcr Prosody verwendet schlicht Symlinks, um sich die Arbeit einfacher zu machen, wenn Zertifikate erneuert werden:<\/p>\n<pre class=\"code\">ls -la \/etc\/prosody\/certs\/\r\n# Zeigt dann:\r\ndomain.key -&gt; \/etc\/path\/to\/certs\/ssl\/domain.tld\/domain.key\r\ndomain.pem -&gt; \/etc\/path\/to\/certs\/ssl\/mailserver\/domain.pem<\/pre>\n<p>Die Hosts einrichten:<\/p>\n<pre class=\"code\">VirtualHost \"xmppserver.tld\"\r\n\r\n-- enabled = false -- Remove this line to enable this host<\/pre>\n<pre class=\"code\">ssl = {\r\n              key = \"\/etc\/prosody\/certs\/domain.key\";\r\n              certificate = \"\/etc\/prosody\/certs\/domain.pem\";\r\n      }<\/pre>\n<p>Prosody neu starten:<\/p>\n<pre class=\"code\">sudo service prosody restart<\/pre>\n<p>Nach Fehlern suchen:<\/p>\n<pre class=\"code\">tail -f \/var\/log\/prosody\/prosody.err<\/pre>\n<p>Einen Fehler finden und wohl erst einmal schlicht hinnehmen:<\/p>\n<pre class=\"code\">The version of LuaExpat on your system does not support stanza size limits, which may leave servers on untrusted networks (e.g. the internet) vulnerable to denial-of-service attacks. You should upgrade to LuaExpat 1.3.0 or higher as soon as possible. See http:\/\/prosody.im\/doc\/depends#luaexpat for more information.<\/pre>\n<p>Siehe hierzu auch <a class=\"urlextern\" title=\"https:\/\/prosody.im\/doc\/depends#luaexpat\" href=\"https:\/\/prosody.im\/doc\/depends#luaexpat\" target=\"_blank\" rel=\"nofollow\">https:\/\/prosody.im\/doc\/depends#luaexpat<\/a> und den Hinweis, dass man in diesem Fall auf compression verzichten sollte (das ist der Default).<\/p>\n<p>Die Benutzer anlegen &#8211; den oben eingetragenen Admin hierbei nicht vergessen:<\/p>\n<pre class=\"code\">prosodyctl adduser admin@xmppserver.tld<\/pre>\n<p>Jetzt mit den ersten Clients eine Verbindung aufbauen und den Verbindungen zusehen, wie sie reinkommen:<\/p>\n<pre class=\"code\">tail -f \/var\/log\/prosody\/prosody.log<\/pre>\n<p>Einen Blick in den Benutzerkontenbereich werfen:<\/p>\n<pre class=\"code\">ls -la \/var\/lib\/prosody\/xmppserver.tld\/accounts<\/pre>\n<p>Dort nachsehen, ob die *.dat Dateien auch wirklich nur verschl\u00fcsselte Passw\u00f6rter enthalten.<\/p>\n<p>Am Ende den gesamten Server auf den Pr\u00fcfstand stellen: <a class=\"urlextern\" title=\"https:\/\/xmpp.net\/\" href=\"https:\/\/xmpp.net\/\" target=\"_blank\" rel=\"nofollow\">https:\/\/xmpp.net\/<\/a><\/p>\n<\/div>\n<h2 id=\"sicherheit\" class=\"sectionedit3\">Sicherheit<\/h2>\n<div class=\"level2\">\n<p>Siehe zum folgenden Abschnitt: <a class=\"urlextern\" title=\"https:\/\/code.google.com\/p\/prosody-modules\/wiki\/mod_log_auth\" href=\"https:\/\/code.google.com\/p\/prosody-modules\/wiki\/mod_log_auth\" target=\"_blank\" rel=\"nofollow\">https:\/\/code.google.com\/p\/prosody-modules\/wiki\/mod_log_auth<\/a> und auch <a class=\"urlextern\" title=\"https:\/\/jabber.lqdn.fr\/securing-our-jabber-server-with-fail2ban-securisation-du-serveur-jabber-avec-fail2ban\/\" href=\"https:\/\/jabber.lqdn.fr\/securing-our-jabber-server-with-fail2ban-securisation-du-serveur-jabber-avec-fail2ban\/\" target=\"_blank\" rel=\"nofollow\">https:\/\/jabber.lqdn.fr\/securing-our-jabber-server-with-fail2ban-securisation-du-serveur-jabber-avec-fail2ban\/<\/a><\/p>\n<p>Im Modules Verzeichnis von Prosody ein weiteres Modul hinterlegen:<\/p>\n<pre class=\"code\"># \/usr\/lib\/prosody\/modules\r\nwget http:\/\/prosody-modules.googlecode.com\/hg\/mod_log_auth\/mod_log_auth.lua<\/pre>\n<p>Das Modul umbenennen, damit es l\u00e4uft:<\/p>\n<pre class=\"code\">mv mod_log_auth.lua mod_auth_log.lua<\/pre>\n<p>Das Modul in der Konfiguration einschalten<\/p>\n<pre class=\"code\"># \/etc\/prosody\/prosody.cfg.lua\r\n\"auth_log\" -- Anbindung fuer fail2ban http:\/\/prosody-modules.googlecode.com\/hg\/mod_log_auth\/mod_log_auth.lua<\/pre>\n<p>Prosody neu starten und kontrollieren, ob nun die Connects mitgeschrieben werden:<\/p>\n<pre class=\"code\">tail -f \/var\/log\/syslog\r\ntail -f \/var\/log\/prosody\/prosody.log<\/pre>\n<p>Einen Filter f\u00fcr fail2ban anlegen:<\/p>\n<pre class=\"code\">vi \/etc\/fail2ban\/filter.d\/prosody-auth.conf<\/pre>\n<p>Inhalt:<\/p>\n<pre class=\"code\"># Fail2Ban configuration file for prosody authentication\r\n[Definition]\r\nfailregex = Failed authentication attempt \\(not-authorized\\) from IP: &lt;HOST&gt;\r\nignoreregex =<\/pre>\n<p>In der jail.local hinterlegen:<\/p>\n<pre class=\"code\"># XMPP\r\n[prosody-auth]\r\nenabled  = true\r\nport     = 5223\r\nfilter   = prosody-auth\r\nlogpath  = \/var\/log\/prosody\/*.log\r\nmaxretry = 10<\/pre>\n<p>Die Dienste neu starten:<\/p>\n<pre class=\"code\">sudo service prosody restart\r\nsudo service fail2ban restart<\/pre>\n<p>In Check_MK die Service discovery f\u00fcr den XMPP-Server-Host neu anschubsen, damit man auch dort sieht, was passiert.<\/p>\n<p>Die n\u00e4chsten Schritte: F\u00fcr meine Schule muss das auch noch eingerichtet werden &#8211; dann allerdings mit LDAPs Anbindung, damit es jeder gleich nutzen kann und die Benutzerverwaltung einfacher wird.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Ich habe meine Metadaten gerne unter Kontrolle und mir deswegen einen XMPP Server unter Prosody geg\u00f6nnt. Hier einige Notizen rund um die Installation. Basis Prosody Paketquellen einbinden um von der tr\u00e4gen Paketverwaltung in den Ubuntu Repos unabh\u00e4ngig zu werden: echo deb http:\/\/packages.prosody.im\/debian $(lsb_release -sc) main | sudo tee -a \/etc\/apt\/sources.list Den Key der Paketquelle holen [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[520,519,517,518,516],"class_list":["post-4580","post","type-post","status-publish","format-standard","hentry","category-linux","tag-check_mk","tag-fail2ban","tag-jabber","tag-prosody","tag-xmpp"],"_links":{"self":[{"href":"https:\/\/www.bdjl.de\/localhost\/index.php?rest_route=\/wp\/v2\/posts\/4580","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bdjl.de\/localhost\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bdjl.de\/localhost\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bdjl.de\/localhost\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bdjl.de\/localhost\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4580"}],"version-history":[{"count":4,"href":"https:\/\/www.bdjl.de\/localhost\/index.php?rest_route=\/wp\/v2\/posts\/4580\/revisions"}],"predecessor-version":[{"id":4584,"href":"https:\/\/www.bdjl.de\/localhost\/index.php?rest_route=\/wp\/v2\/posts\/4580\/revisions\/4584"}],"wp:attachment":[{"href":"https:\/\/www.bdjl.de\/localhost\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4580"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bdjl.de\/localhost\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4580"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bdjl.de\/localhost\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4580"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}