{"id":262,"date":"2014-07-23T07:18:31","date_gmt":"2014-07-23T05:18:31","guid":{"rendered":"http:\/\/grenzdebiel.no-ip.biz\/wordpress\/?p=262"},"modified":"2016-03-17T05:41:49","modified_gmt":"2016-03-17T03:41:49","slug":"xmpp-server-prosody","status":"publish","type":"post","link":"https:\/\/blog.grenzdebiel.dynv6.net\/?p=262","title":{"rendered":"XMPP Server &#8211; Prosody"},"content":{"rendered":"<p>Hier wird beschrieben wie der XMPP-Server aka Jabber installiert bzw konfiguriert wurde.<br \/>\nDer Server wurde auf einem RaspberryPi mit Raspbian installiert. Der Vorgang sollte f\u00fcr jede Debian-basierende Distribution gleich sein.<br \/>\n<!--more--><br \/>\nAls erstes die Installations-Quellen vom Offiziellen Prosody-Server holen und den Schl\u00fcssel eintragen.<br \/>\nDebian selbst hat leider nur die veraltete 0.8 Version im Repository. Mit dieser ist kein Forward-Secrecy m\u00f6glich(nur ab lua-sec 0.9).<\/p>\n<p>Repository-Quellen &amp; Schl\u00fcssel hinzuf\u00fcgen:<\/p>\n<pre class=\"lang:sh decode:true brush: bash; gutter: false\">echo \"deb http:\/\/packages.prosody.im\/debian wheezy main\" &gt;&gt; \/etc\/apt\/sources.list\r\nwget https:\/\/prosody.im\/files\/prosody-debian-packages.key -O- | apt-key add -\r\naptitude update &amp;&amp; aptitude install prosody lua-sec-prosody lua-event lua-zlib<\/pre>\n<p>Ob OpenSSL in der richtigen Version installiert ist um die sicheren Ciphers nutzen zu k\u00f6nnen kann wie folgt abgefragt werden:<\/p>\n<pre class=\"lang:sh decode:true brush: bash; gutter: false\">openssl ciphers -v 'HIGH:!DSS:!aNULL@STRENGTH!:!DES-CBC3-SHA:!ECDHE-RSA-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA'<\/pre>\n<p>Als erstes erzeugen wir das Zertifikat und ein DH-File:<\/p>\n<pre class=\"lang:sh decode:true brush: bash; gutter: false\">openssl genrsa -out &lt;dateiname&gt;.key 4096\r\nopenssl req -new -x509 -key &lt;dateiname&gt;.key -out .crt -days 3650\r\nopenssl dhparam -out &lt;dateiname&gt;.dh-2048.pem 2048<\/pre>\n<p>Hier wird ein Zertifikat mit 4096bit verschl\u00fcsselung erzeugt das 10Jahre(3650 days) g\u00fcltigkeit besitzt. 4096bit werden den einen oder anderen \u00fcbertrieben vorkommen &#8211; ich allerdings habe gerne etwas &#8222;Luft nach oben&#8220;.<\/p>\n<p>Das kann auf einem RaspberryPi oder vergleichbaren Rechner l\u00e4nger dauern.<\/p>\n<p>Machen wir uns nun an die Konfiguration.<\/p>\n<p>Ich splitte gerne die Konfigurationsdateien in eine &#8222;General&#8220; und eine &#8222;User&#8220;-Konfig. Dies erlaubt ein paar globale Einstellungen die f\u00fcr alle gelten soll und &#8222;extra&#8220;-Einstellungen pro Service bzw. Jabber-Server.<\/p>\n<p><strong>\/etc\/prosody\/prosody.cfg.lua:<\/strong><\/p>\n<pre class=\"lang:ini decode:true brush: text; gutter: true\">-- who is admin? - make some \"extra-option\" in e.g. Pidgin available\r\nadmins = { \"&lt;user&gt;@&lt;servername.FQDN&gt;\" }\r\n\r\n-- make Prosody connections for incoming data efficiently\r\nuse_libevent = true;\r\n\r\nmodules_enabled = {\r\n\r\n        -- Generally required\r\n                \"roster\"; -- Allow users to have a roster. Recommended ;)\r\n                \"saslauth\"; -- Authentication for clients and servers. Recommended if you want to log in.\r\n                \"tls\"; -- Add support for secure TLS on c2s\/s2s connections\r\n                \"dialback\"; -- s2s dialback support\r\n                \"disco\"; -- Service discovery\r\n\r\n        -- Not essential, but recommended\r\n                \"private\"; -- Private XML storage (for room bookmarks, etc.)\r\n                \"vcard\"; -- Allow users to set vCards\r\n                \"privacy\"; -- Support privacy lists\r\n                \"compression\"; -- Stream compression (Debian: requires lua-zlib module to work)\r\n        -- Nice to have\r\n                \"legacyauth\"; -- Legacy authentication. Only used by some old clients and bots.\r\n                \"version\"; -- Replies to server version requests\r\n                \"uptime\"; -- Report how long server has been running\r\n                \"time\"; -- Let others know the time here on this server\r\n                \"ping\"; -- Replies to XMPP pings with pongs\r\n                \"pep\"; -- Enables users to publish their mood, activity, playing music and more\r\n                \"register\"; -- Allow users to register on this server using a client and change passwords\r\n                \"adhoc\"; -- Support for \"ad-hoc commands\" that can be executed with an XMPP client\r\n                \"offline\";\r\n\r\n        -- Admin interfaces\r\n                \"admin_adhoc\"; -- Allows administration via an XMPP client that supports ad-hoc commands\r\n                \"admin_telnet\"; -- Opens telnet console interface on localhost port 5582\r\n\r\n        -- Other specific functionality\r\n                \"bosh\"; -- Enable BOSH clients, aka \"Jabber over HTTP\"\r\n                --\"httpserver\"; -- Serve static files from a directory over HTTP\r\n                \"groups\"; -- Shared roster support\r\n                \"announce\"; -- Send announcement to all online users\r\n                --\"welcome\"; -- Welcome users who register accounts\r\n                --\"watchregistrations\"; -- Alert admins of registrations\r\n                --\"motd\"; -- Send a message to users when they log in\r\n        -- Debian: do not remove this module, or you lose syslog support\r\n                \"posix\"; -- POSIX functionality, sends server to background, enables syslog, etc.\r\n                \"presence\";\r\n                \"message\";\r\n};\r\n\r\nmodules_disabled = {\r\n        -- \"presence\"; -- Route user\/contact status information\r\n        -- \"message\"; -- Route messages\r\n        -- \"iq\"; -- Route info queries\r\n        -- \"offline\"; -- Store offline messages\r\n        -- \"s2s\"; -- no server2server connection\r\n};\r\n\r\nallow_registration = false;\r\ndaemonize = true;\r\npidfile = \"\/var\/run\/prosody\/prosody.pid\";\r\n\r\nc2s_require_encryption = true  -- only Clients with encryption allowed \r\ns2s_require_encryption = false -- Some XMPP-Servers doesnt use encryption e.g. google\r\n\r\nauthentication = \"internal_hashed\"\r\n\r\nlog = {\r\n        info = \"\/var\/log\/prosody\/prosody.log\";\r\n        error = \"\/var\/log\/prosody\/prosody.err\";\r\n        -- Syslog:\r\n        { levels = { \"error\" }; to = \"syslog\";  };\r\n}\r\n\r\nInclude \"conf.d\/*.cfg.lua\"<\/pre>\n<p><strong><br \/>\n\/etc\/prosody\/conf.d\/.cfg.lua :<\/strong><\/p>\n<pre class=\"lang:ini decode:true brush: text; gutter: true\">VirtualHost \"&lt;xmpp-server-name&gt;\"\r\n        enabled = true\r\n        ssl = {\r\n                key = \"\/etc\/prosody\/certs\/&gt;dateiname&lt;.key\";\r\n                certificate = \"\/etc\/prosody\/certs\/&gt;dateiname&lt;.crt\";\r\n\r\n                options = { \"no_sslv2\", \"no_ticket\", \"no_compression\", \"no_sslv3\" };\r\n                -- Disable some not paranoid-capable ciphers.\r\n                ciphers = \"HIGH:!DSS:!aNULL@STRENGTH!:!DES-CBC3-SHA:!ECDHE-RSA-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA\";\r\n                -- Allow perfect forward secrecy.\r\n                dhparam = \"\/etc\/prosody\/certs\/&gt;dateiname&lt;.dh-2048.pem\";\r\n                }\r\nComponent \"chat.<xmpp-server-name>\" \"muc\"<\/pre>\n<p>Jetzt starten wir prosody:<\/p>\n<pre class=\"lang:sh decode:true brush: bash; gutter: false\">service prosody start<\/pre>\n<p>Pr\u00fcfen ob alles gut gegangen ist:<\/p>\n<pre class=\"lang:sh decode:true brush: bash; gutter: true\">cat \/var\/log\/prosody\/prosody.err<\/pre>\n<p>Einer der letzten Entr\u00e4ge sollte: <code>mod_posix info Successfully daemonized to PID <\/code> sein.<\/p>\n<p>Wenn der Server gestartet ist sollten wir auch ein paar Benutzer anlegen:<\/p>\n<pre class=\"brush: text; gutter: true\">prosodyctl adduser <username>@<xmpp-server-name><\/pre>\n<p>Zum Abschlu\u00df das eventuelle Port-Forwarding im Router nicht vergessen bzw. die Firewall des RaspberryPi anpassen. Port <strong>5222<\/strong> und <strong>5269<\/strong> auf den RaspberryPi weiterleiten bzw. in der Firewall freischalten.<\/p>\n<p>5222 &#8211; port f\u00fcr die Clients<br \/>\n5269 &#8211; f\u00fcr Server-zu-Server verbindung.<\/p>\n<p>Auf der Seite <a title=\"XMPP - Test\" href=\"https:\/\/xmpp.net\" target=\"_blank\">http:\/\/xmpp.net\/<\/a> kann man seinen Server testen.<br \/>\nWenn man wie hier beschrieben einen &#8222;Self-Signed-Certificate&#8220; nutzt wird man in der gesamtnote nie besser als &#8222;F&#8220; kommen. Interessanter sind die Einzelauswertungen z.B. &#8222;Protocols&#8220; und &#8222;Ciphers&#8220;.<\/p>\n<p>Es kann \u00fcbrigens nie zu viele XMPP-Server geben.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hier wird beschrieben wie der XMPP-Server aka Jabber installiert bzw konfiguriert wurde. Der Server wurde auf einem RaspberryPi mit Raspbian installiert. Der Vorgang sollte f\u00fcr jede Debian-basierende Distribution gleich sein.<\/p>\n","protected":false},"author":3,"featured_media":306,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[43,27,12],"tags":[119,73,71,72,69,120,70],"class_list":["post-262","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cubietruck","category-linux","category-software-pi","tag-chat","tag-cipher","tag-forward-secrecy","tag-jabber","tag-prosody","tag-xabber","tag-xmpp"],"_links":{"self":[{"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/posts\/262","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=262"}],"version-history":[{"count":1,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/posts\/262\/revisions"}],"predecessor-version":[{"id":267,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/posts\/262\/revisions\/267"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/media\/306"}],"wp:attachment":[{"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=262"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=262"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=262"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}