Hallo zusammen, ich habe mir den Jabber Server prosody installiert aus dem PPA, sodass ich die Version 0.10 installieren kann.
Ich versuche nun prosody so einzurichten, dass ich über die Clients (Gajim für Desktop PCs und Conversations für Android) Dateien, insbesondere Bilder versenden kann. Mit meiner Konfiguration funktioniert das auch, allerdings nur, wenn der Datenaustausch zwischen zwei Desktop PCs stattfindet. Von Conversations zu Gajim startet der Datentransfer nicht.
Ich habe nun versucht, das Modul http_upload
einzurichten und mit dem Gajim Addon HttpUpload
Dateien auf den Webserver von prosody zu speichern und den Link dem Gesprächsteilnehmer zu senden.
Allerdings warnt mich das Addon schon, dass mein prosody Server keine http uploads ermöglicht. Ich kann mir leider nicht erklären wieso.
Ich poste daher mal hier meine Konfigurationsdatei von prosody. Wichtige Informationen habe ich unkenntlich gemacht.
------------------- Prosody Dienst ---------------------------- -- demonize -- Den Server als Dienst laufen lassen -- demonize = true; daemonize = true; -- pidfile -- Bitte ändere nicht diese Einstellung, da prosody in das Verzeichnis -- /var/run/prosody den Prozess startet. Der Dienst hat in diesem Verzeichnis -- schreib Berechtigungen. -- pidfile = "/var/run/prosody/prosody.pid"; pidfile = "/var/run/prosody/prosody.pid"; ------------------- Netzwerk Einstellungen -------------------- -- interfaces -- Generelle Netzwerkschnittstellen, auf den der Server lauschen soll. -- Das spezial Interface "*" bindet alle IPv4 Adressen -- Das spezial Interface "::" bindet alle IPv6 Adressen -- Bevorzugt für Verbindungen von externen Servern oder Clients. interfaces = { "*", "::" } -- local_interfaces -- Generelle Netzwerkschnittstellen, auf den der Server lauschen soll. -- Bevorzugt für eigene Module und Componenten. local_interfaces = { "127.0.0.1", "::1" } -- c2s_interfaces -- Netzwerkschnittstelle, auf den der Server laufen soll für Verbindungen vom Client zum Server c2s_interfaces = { "*", "::" } -- c2s_ports -- Ports für die Verbindung zwischen Client und diesem Server. -- c2s_ports = { "5222" } c2s_ports = { "5222" } -- s2s_interface -- Netzwerkschnittstelle, auf den der Server laufen soll für Verbindungen vom Server zum Server -- s2s_interface = { "10.0.0.10" } s2s_interface = { "*", "::" } -- s2s_ports -- Ports für die Verbindung zwischen Server und diesem Server. -- s2s_ports = { "5222" } s2s_ports = { "5269" } -- s2s_timeout -- Timeout für unauthentifizierte Server-zu-Server Verbindungen -- s2s_timeout = 90 s2s_timeout = 90 -- http_interface -- Netzwerkschnittstelle, auf den der Server einen HTTP Zugriff erlauben soll. http_interfaces = { "*", "::" } -- http_ports -- Ports für die HTTP Verbindung http_ports = { "5280" } -- https_interface -- Netzwerkschnittstelle, auf den der Server einen HTTPS Zugriff erlauben soll. https_interfaces = { "*", "::" } -- https_ports -- Ports für die HTTP Verbindung https_ports = { "5281" } -- http_upload_file_size_limit -- Maximale Größe an Dateien die durch HTTP hochgeladen werden können. -- Die Größe kann nicht den Wert von http_max_content_size überschreiten -- Default 1024*1024 = 1MB http_upload_file_size = 5242880 -- http_upload_expire_after -- Ablaufdatum für hochgeladene Dateien setzen -- Angaben in Sekunden http_upload_expire_after = 60 * 60 * 24 * 7 * 31 -- http_upload_quota -- Eine maximale größe von hochgeladenen Dateien pro Benutzer. http_upload_quota = 52428800 -- http_upload_path -- Der Pfad, indem die hochgeladenen Dateien gespeichert werden sollen http_upload_path = "/etc/prosody/uploads" --------------------- SSL Einstellungen -------------------------- -- ssl -- Generellen SSL/TLS-Einstellungen. -- Falls kein SSL unterstützt werden soll, kann man es auskommentieren ssl = { key = "/etc/ssl/private/example.com/domain.key"; certificate = "/etc/ssl/public/example.com/domain.crt"; cafile = "/etc/ssl/public/example.com/chain.crt"; capath = "/etc/ssl/certs"; } --https_ssl -- Generellen SSL/TLS-Einstellungen. -- Falls kein SSL unterstützt werden soll, kann man es auskommentieren https_ssl = { key = "/etc/ssl/private/example.com/domain.key"; certificate = "/etc/ssl/public/example.com/domain.crt"; cafile = "/etc/ssl/public/example.com/chain.crt"; capath = "/etc/ssl/certs"; } -- c2s_require_encryption -- Zwingt Clients bei der Anmeldung am Server SSL zu verwenden. -- c2s_require_encryption = false c2s_require_encryption = true -- s2s_require_encryption -- Zwingt bei Server-zu-Server Verbindungen eine SSL-Verbindung auf zu bauen. -- s2s_require_encryption = fase s2s_require_encryption = true -- s2s_secure_auth -- Zwingt bei Server-zu-Server Verbindungen die Authentifizierung per SSL ab zu wickeln. -- Dies bietet ideale Sicherheit, die Server müssen allerdings bei Kommunikation -- Verschlüsselung anbieten und das Zertifikat muss valide und vertraut sein! -- s2s_secure_auth = false s2s_secure_auth = true -- s2s_insecure_domains -- Manche Server unterstützen keine Verschlüsselung oder haben ein selbst -- signiertes Zertifikat. In dieser Liste können domains von der SSL- -- Zertifizierung ausgeschlossen werden. Diese Server werden mittels DNS -- überprüft. -- s2s_insecure_domains = { "gmail.com" } -- s2s_secure_domains -- Wenn s2s_secure_auth deaktiviert ist, können über diese Option trozdem -- Domains auf ein valides SSL-Zertifikat überprüft werden. -- s2s_secure_domains = { "jabber.org" } ----------------------- Authentifizierung ---------------------------- -- authentication -- Wähle ein Authentifikations backend, das benutzt werden soll. -- 'internal' Sagt Prosody, dass die Authentifikationsdaten unter storage zu speichern sind. -- 'plain' Sagt Prosody, dass die Passwörter im Klartext gespeichert werden sollen. -- 'hashed' Sagt Prosody, dass die Passwörter gehasht gepeichert werden sollen. -- authentication = "internal_plain" authentication = "internal_hashed" -- storage -- Wähle einen Speicherort der genutzt werden soll. -- Als Standard nutzt Prosody flat Dateien die im konfigurierten Datenspeicherort gespeichert werden. -- Neben flat Dateien bietet Prosody weitere Module an wie 'sql'. -- SQL benötigt allerdings weitere Abhängigkeiten. -- sqlite3 lua-dbi-sqlite3 -- mysql lua-dbi-mysql -- postgresql lua-dbi-postgresql storage = "sql" -- sql -- Als sql backend kann ein Treiber einkommentiert werden --sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename. --sql = { driver = "MySQL", database = "prosody", username = "prosody", password = "KrmEnzSJzU2gx3LWoutmgLrT", host = "localhost" } sql = { driver = "PostgreSQL", database = "postgres", username = "xxx", password = "xxx", host = "localhost" } ------------------------ Module -------------------------------------- -- plugin_path -- Lädt zusätzliche Plugins (Module) aus einem Pfad -- plugin_paths = { "/usr/lib/prosody/modules" } -- modules_enabled -- Diese Liste an Modulen wird Prosody beim Systemstart laden. -- Es schaut nach mod_modulename.lua im Pluginverzeichnis. Bitte schaue nach, ob das Verzeichnis vorhanden ist. modules_enabled = { "roster"; -- RFC 6121: Allow users to have a roster. "saslauth"; -- RFC 6120: Authentication using SASL "tls"; -- RFC 6120: Add support for secure TLS on c2s/s2s connections "dialback"; -- XEP-0220: s2s dialback support "disco"; -- XEP-0030: Service discovery "private"; -- XEP-0049: Private XML storage (for room bookmarks, etc.) "vcard"; -- XEP-0054: Allow users to set vCards "version"; -- XEP-0092: Replies to server version requests "uptime"; -- XEP-0012: Report how long server has been running "time"; -- XEP-0090: Let others know the time here on this server "ping"; -- XEP-0199: Replies to XMPP pings with pongs "pep"; -- XEP-0163: Lets users broadcast various information to interested contacts "register"; -- XEP-0077: In-band registration for managing user accounts "blocklist"; -- XEP-0191: Block list "carbons"; -- XEP-0280: Allowing users to maintain a shared and synchronized view of all conversations across all their online clients and devices. "admin_adhoc"; -- XEP-0133: Allows administration via an XMPP client that supports ad-hoc commands --"bosh"; -- XEP-0124: Enable BOSH clients, aka "Jabber over HTTP" --"http_files"; -- RFC 2616: Serve static files from a directory over HTTP "http"; -- RFC 2616: Allow Prosody modules to expose various services over HTTP "http_upload"; -- XEP-0363: Let clients upload files over HTTP "posix"; -- POSIX: Support for POSIX-only system features "announce"; -- Send announcement to all online users --"legacyauth"; -- XEP-0078: Legacy authentication. Only used by some old clients and bots. "mam"; -- XEP-0313: Offline Message Archive "lastactivity"; -- XEP-0012: Support querying for user idle times --"profile"; -- XEP-0054: Allow users to set vCards. ATTENTION: disable "vcard" and "pep". }; -- modules_disabled -- Diese Module werden durch den Autostart geladen, -- sollen die Module deaktiviert werden, so müssen Sie nur noch auskommentiert werden. modules_disabled = { -- "offline"; -- Store offline messages -- "c2s"; -- RFC 6120: Handle client connections -- "s2s"; -- RFC 6120: Handle server-to-server connections }; ------------------------ Weitere Einstellungen ---------------------------------------------- -- allow_registration -- Deaktivieren der Benutzerregistration, Standard: false allow_registration = false; -- admins -- Eine Liste alle Admins des Servers -- admins = { "user1@example.com", "user2@example.net" } admins = { "markus.pesch@example.com" } -- use_libevent -- Enable use of libevent for better performance under high load -- For more information see: http://prosody.im/doc/libevent --use_libevent = true; -- http_default_host -- Standard HTTP-Server -- http_default_host = "example.com" ----------------------- Einstellungen von Modulen ------------------------------------------ -- Modul 'mam' archive_expires_after = "1y" default_archive_policy = true ------------------------ Virtual hosts ------------------------------------------------------ -- Es muss für jede Domain ein VirtualHost hinzugefügt werden den Prosody unterstützen soll. -- Einstellungen unter jedem VirtualHost gelten auch nur für diese Domain VirtualHost "example.com" -- enabled = false -- Remove this line to enable this host -- http_host -- HTTP-Server für den Virtuellen Host http_host = "xmpp.cyptic.systems" ssl = { key = "/etc/ssl/private/example.com/domain.key"; certificate = "/etc/ssl/public/example.com/domain.crt"; cafile = "/etc/ssl/public/example.com/chain.crt"; capath = "/etc/ssl/certs"; } ------ ----------------- Components --------------------------------------------------------- -- Hier können spezielle Komponenten oder Dienste des Hosts gefiniert werden. -- Beispielsweise multi-user Konferenzen oder Transporte. ---Installation eines MUC-Rooms für example.com Component "conference.example.com" "muc" Component "upload.example.com" "http_upload" -- Set up a SOCKS5 bytestream proxy for server-proxied file transfers: --Component "proxy.example.com" "proxy65" ---Set up an external component (default component port is 5347) -- -- External components allow adding various services, such as gateways/ -- transports to other networks like ICQ, MSN and Yahoo. For more info -- see: http://prosody.im/doc/components#adding_an_external_component -- --Component "gateway.example.com" -- component_secret = "password" ------------------------- Additional config files ------------------------------------------- -- For organizational purposes you may prefer to add VirtualHost and -- Component definitions in their own config files. This line includes -- all config files in /etc/prosody/conf.d/ Include "conf.d/*.cfg.lua"
Folgende DNS-Records habe ich für prosody gesetzt.
_xmpp-client._tcp.example.com SRV 0 5222 xmpp.example.com _xmpp-server._tcp.example.com SRV 0 5269 xmpp.example.com upload.example.com CNAME xmpp.example.com xmpp.example.com CNAME pontos.example.com
Auf dem Port 80 und 443 des Servers pontos.example.com lauscht ein nginx Server. Dieser leitet alle Anfragen von upload.example.com an localhost:5280 für http requests weiter und für https Anfragen an localhost:5281, sofern Anfragen nicht direkt mit dem Port angegeben werden. Beispielsweise upload.example.com:5280 für http.
Wenn ich allerdings mit meinem Browser die Seite upload.example.com aufrufe, erhalte ich die Fehlermeldung des prosody webservers Unkown host upload.example.com
. Erst dachte ich, es läge an der Weiterleitung vom nginx, doch wenn ich die Seite upload.example.com:5280 erhalte ich die gleiche Fehlermeldung.
Ich kann mir das momentan nicht erklären und hoffe, dass mir jemand bei der Konfiguration helfen kann.
Volker