{"id":269,"date":"2017-06-11T15:47:43","date_gmt":"2017-06-11T13:47:43","guid":{"rendered":"https:\/\/www.pingu-mobil.de\/iot\/?p=269"},"modified":"2021-05-14T10:07:51","modified_gmt":"2021-05-14T08:07:51","slug":"xmpp-server-und-tor","status":"publish","type":"post","link":"https:\/\/www.iot-embedded.de\/iot-2017\/sdim\/xmpp-server-und-tor\/","title":{"rendered":"XMPP-Server und Tor"},"content":{"rendered":"<p><strong>XMPP-Server<\/strong><\/p>\n<p>Entscheidend f\u00fcr das Projekt ist die Installation und Konfiguration eines XMPP-Servers. Unsere Wahl fiel dabei auf Prosody IM (https:\/\/prosody.im). Prosody kann mithilfe der Konfigrationsdatei &#8222;prosody.cfg.lua&#8220; recht simpel konfiguriert werden. In der Konfigurationsdatei gibt es einen server-weiten Teil und einen Teil, welcher die virtuellen Hosts konfiguriert. Au\u00dferdem gibt es einen Teil, indem die Verwendung der Module (Erweiterungen (oft in Form f\u00fcr Prosody umgesetzter XEPs)) geregelt wird. Auch einen Teil f\u00fcr die server-weite und spezifisch f\u00fcr virtuelle Hosts genutzte TLS-Konfiguration findet sich in der Konfigurationsdatei.<\/p>\n<p>Mit dem Befehl &#8222;prosodyctl&#8220; kann Prosody mithilfe der Kommandozeile verschiedene Aktionen durchf\u00fchren. Wie z. B. die Erstellung neuer Benutzer, bzw. auch das Entfernen angelegter Benutzer oder die \u00c4nderung deren Kennw\u00f6rter. Der Befehl &#8222;prosodyctl&#8220; dient im weitesten Sinne der Administration des Servers im laufenden Betrieb.<\/p>\n<p><strong>Tor-Integration und Test mit Conversations (XMPP-Client f\u00fcr Android)<\/strong><\/p>\n<p>Zur Installation von Tor gibt es bez\u00fcglich der Verwendung von Raspbian auf dem Raspberry Pi einige Herausforderungen. (https:\/\/tor.stackexchange.com\/questions\/242\/how-to-run-tor-on-raspbian-on-the-raspberry-pi) Ein Kompilieren auf dem Raspberry Pi w\u00fcrde zwar zu einer funktionierenden Installation f\u00fchren, allerdings zu viel Zeit in Anspruch nehmen und auf lange Sicht wieder zu veralteten Paketen f\u00fchren, was nicht im Sinne des Projekts (Sicherheit) ist. Ab Raspberry Pi 2 ist ein Hinzuf\u00fcgen der Quellen f\u00fcr die Architektur (armhf) m\u00f6glich.<\/p>\n<p>Ist Tor installiert, k\u00f6nnen Eintr\u00e4ge in der Datei \/etc\/tor\/torrc vorgenommen werden. Dazu werden in der Sektion der &#8222;location-hidden services&#8220; folgende Informationen hinterlegt:<\/p>\n<p><code><br \/>\n#XMPP_SDIM<br \/>\nHiddenServiceDir \/var\/lib\/tor\/xmpp_SDIM\/<br \/>\n#xmpp_c2s<br \/>\nHiddenServicePort 5222 127.0.0.1:5222<br \/>\n#F\u00fcr die Client-to-Server-Kommunikation<br \/>\n#xmpp_s2s<br \/>\nHiddenServicePort 5269 127.0.0.1:5269<br \/>\n#F\u00fcr die Server-to-Server-Kommunikation, insbesondere der Austausch<br \/>\n#zwischen SDIM-Instanzen<br \/>\n<\/code><\/p>\n<p>Der erzeugte Hostname des Hidden-Service findet sich in der Datei: \/var\/lib\/tor\/xmpp_SDIM\/hostname<\/p>\n<p>Der Hostname hat folgendes Schema: q3opwghbl9xswmz2.onion<\/p>\n<p>Der Hostname kann verwendet werden, um den VirtualHost-Eintrag von Prosody anzupassen, eine JID (Jabber-ID) f\u00fcr die Domain zu erstellen und\/oder ein neues selbstsigniertes Zertifikat zu erstellen.<\/p>\n<p>Die Zeile mit dem Inhalt &#8222;VirtualHost &#8222;example.com&#8220;&#8220; in \/etc\/prosody\/prosody.cfg.lua wird dazu folgenderma\u00dfen ersetzt:<\/p>\n<p><code>VirtualHost \"q3opwghbl9xswmz2.onion\"<\/code><\/p>\n<p>Ein neuer Benutzer kann folgenderma\u00dfen hinzugef\u00fcgt werden:<br \/>\n<code>prosodyctl adduser me@q3opwghbl9xswmz2.onion<\/code><\/p>\n<p>F\u00fcr die Verwendung mit Conversations (https:\/\/conversations.im), einem XMPP-Client f\u00fcr Android, ist die Einstellung &#8222;\u00dcber Orbot verbinden&#8220; in den Experteneinstellungen von Conversations erforderlich, um den Server zu erreichen. Nat\u00fcrlich muss dazu auch Orbot (Tor f\u00fcr Android) installiert und aktiviert sein.<\/p>\n<p>Conversations ben\u00f6tigt dazu einige aktivierte XMPP-Erweiterungsprotokolle (XEP). Um die Prosody-Module, welche f\u00fcr Conversations ben\u00f6tigt werden, zu installieren, ist die Installation von Mercurial n\u00f6tig. Standardm\u00e4\u00dfig werden die Built-in-Module von Prosody auf Debian in \/usr\/lib\/prosody\/modules abgelegt. Im Ordner k\u00f6nnen mit Mercurial die aktuellen Module heruntergeladen und auch aktualisiert werden (https:\/\/prosody.im\/doc\/installing_modules). Damit die heruntergeladenen Module verwendet werden k\u00f6nnen, muss der Pfad zum Ordner mit den Modulen in die Konfigurationsdatei von Prosody aufgenommen werden.<\/p>\n<p>Die f\u00fcr Conversations teilweise n\u00f6tigen XEPs finden sich auf der GitHub-Seite (https:\/\/github.com\/siacs\/Conversations) und umfassen:<\/p>\n<p>XEP-0065: SOCKS5 Bytestreams (or mod_proxy65). Will be used to transfer files if both parties are behind a firewall (NAT).<\/p>\n<p>XEP-0163: Personal Eventing Protocol for avatars and OMEMO.<\/p>\n<p>XEP-0191: Blocking command lets you blacklist spammers or block contacts without removing them from your roster.<\/p>\n<p>XEP-0198: Stream Management allows XMPP to survive small network outages and changes of the underlying TCP connection.<\/p>\n<p>XEP-0280: Message Carbons which automatically syncs the messages you send to your desktop client and thus allows you to switch seamlessly from your mobile client to your desktop client and back within one conversation.<\/p>\n<p>XEP-0237: Roster Versioning mainly to save bandwidth on poor mobile connections<\/p>\n<p>XEP-0313: Message Archive Management synchronize message history with the server. Catch up with messages that were sent while Conversations was offline.<\/p>\n<p>XEP-0352: Client State Indication lets the server know whether or not Conversations is in the background. Allows the server to save bandwidth by withholding unimportant packages.<\/p>\n<p>XEP-0363: HTTP File Upload allows you to share files in conferences and with offline contacts.<\/p>\n<p>Ein Mapping der XEPs auf die jeweiligen Prosody-Module kann hier eingesehen werden: https:\/\/prosody.im\/doc\/xeplist<\/p>\n<p>Liste der (m\u00f6glichen\/aktivierten) XEPs (f\u00fcr die Prosody-Konfiguration) &#8211; die Liste kann ggf. noch unvollst\u00e4ndig sein oder auch zu viele aktivierte Module beinhalten, was im Einzelfall noch gepr\u00fcft werden muss (In der Projektdoku ist dazu beispielsweise ein Hinweis auf vermeidbare &#8222;Leaks&#8220; zu finden):<br \/>\n<code><br \/>\n\"blocklist\";<br \/>\n\"smacks\";<br \/>\n\"smacks_offline\";<br \/>\n\"carbons\";<br \/>\n\"mam\";<br \/>\n\"mam_archive\";<br \/>\n--\"mam_muc\";<br \/>\n--\"http_muc_log\";<br \/>\n\"csi\";<br \/>\n--\"http_upload_external\";<br \/>\n--\"http_upload\";<br \/>\n--http_upload_path = \"\/var\/www\/files\";<br \/>\n\"cloud_notify\";<br \/>\n\"blocking\";<br \/>\n\"admin_blocklist\";<br \/>\n\"privacy_lists\";<br \/>\n--\"profile\";<br \/>\n\"pep_vcard_avatar\";<br \/>\n\"http\";<br \/>\n\"throttle_presence\";<br \/>\n\"pinger\";<br \/>\n<\/code><\/p>\n<p>Au\u00dferdem kann &#8222;c2s_require_encryption&#8220; auf &#8222;true&#8220; gesetzt, Component &#8222;conference.oniondomain.onion&#8220; &#8222;muc&#8220; und Component &#8222;proxy.oniondomain.onion&#8220; &#8222;proxy65&#8220; aktiviert werden. Es gen\u00fcgt dazu, die beiden Bindestriche f\u00fcr Kommentare zu entfernen. Nach \u00c4nderung der Zertifikate und privaten Schl\u00fcssel an beiden Stellen der TLS-Konfiguration und der \u00c4nderung der falschen Endung .crt in .cert (.crt ist hier zwar gebr\u00e4uchlicher, das von Prosody erstellte Zertifikat hat allerdings die Endung .cert) fragt Conversations beim Test nach einem Aufbau trotz nicht validem Zertifikat. Die Zertifikatspr\u00fcfung kann hier ignoriert werden. Die Verbindung kommt beim Test zustande.<\/p>\n<p>Eventuell muss\/kann &#8222;mod_onions&#8220; noch aktiviert werden. Die Verbindung zum Server ist durch die Verwendung von Tor durch mehrere NAT und sogar einem CG-NAT m\u00f6glich. (Im Fall der Verwendung von SDIM hinter einem DS-Lite-Anschluss)<\/p>\n<p>Die Konfiguration von Prosody und Tor wurde abschlie\u00dfend in die Konfiguration des Images \u00fcbernommen und dadurch bereits automatisiert.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>XMPP-Server Entscheidend f\u00fcr das Projekt ist die Installation und Konfiguration eines XMPP-Servers. Unsere Wahl fiel dabei auf Prosody IM (https:\/\/prosody.im). Prosody kann mithilfe der Konfigrationsdatei &#8222;prosody.cfg.lua&#8220; recht simpel konfiguriert werden. In der Konfigurationsdatei gibt es einen server-weiten Teil und einen<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[],"_links":{"self":[{"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/posts\/269"}],"collection":[{"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/comments?post=269"}],"version-history":[{"count":1,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/posts\/269\/revisions"}],"predecessor-version":[{"id":579,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/posts\/269\/revisions\/579"}],"wp:attachment":[{"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/media?parent=269"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/categories?post=269"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2017\/wp-json\/wp\/v2\/tags?post=269"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}