diff --git a/servers/anon.html b/servers/anon.html index 0a12fd83..d1afb6dc 100644 --- a/servers/anon.html +++ b/servers/anon.html @@ -215,7 +215,7 @@
  • ✅ Hidden Service with custom .onion Vanity V3 address
  • ❌ Basic Webserver setup (NGINX / PHP / MYSQL)
  • ❌ Minimalistic MoneroSSO .onion setup
  • -
  • ❌ XMPP prosody .onion setup (chat service)
  • +
  • 🟠 XMPP prosody .onion setup (chat service)
  • ❌ Gitea .onion setup (Code repositories)
  • ❌ Nextcloud .onion setup (cloud storage)
  • ❌ Mastodon .onion setup (Microblogging)
  • diff --git a/servers/xmpp2024/1.png b/servers/xmpp2024/1.png new file mode 100644 index 00000000..a37f6570 Binary files /dev/null and b/servers/xmpp2024/1.png differ diff --git a/servers/xmpp2024/10.png b/servers/xmpp2024/10.png new file mode 100644 index 00000000..6a7efa0b Binary files /dev/null and b/servers/xmpp2024/10.png differ diff --git a/servers/xmpp2024/11.png b/servers/xmpp2024/11.png new file mode 100644 index 00000000..e9d8f344 Binary files /dev/null and b/servers/xmpp2024/11.png differ diff --git a/servers/xmpp2024/2.png b/servers/xmpp2024/2.png new file mode 100644 index 00000000..0a89e3fb Binary files /dev/null and b/servers/xmpp2024/2.png differ diff --git a/servers/xmpp2024/3.png b/servers/xmpp2024/3.png new file mode 100644 index 00000000..482d5c4c Binary files /dev/null and b/servers/xmpp2024/3.png differ diff --git a/servers/xmpp2024/4.png b/servers/xmpp2024/4.png new file mode 100644 index 00000000..a836395a Binary files /dev/null and b/servers/xmpp2024/4.png differ diff --git a/servers/xmpp2024/5.png b/servers/xmpp2024/5.png new file mode 100644 index 00000000..8bdf3cb3 Binary files /dev/null and b/servers/xmpp2024/5.png differ diff --git a/servers/xmpp2024/6.png b/servers/xmpp2024/6.png new file mode 100644 index 00000000..78519a4c Binary files /dev/null and b/servers/xmpp2024/6.png differ diff --git a/servers/xmpp2024/7.png b/servers/xmpp2024/7.png new file mode 100644 index 00000000..5298be9a Binary files /dev/null and b/servers/xmpp2024/7.png differ diff --git a/servers/xmpp2024/8.png b/servers/xmpp2024/8.png new file mode 100644 index 00000000..48b6800f Binary files /dev/null and b/servers/xmpp2024/8.png differ diff --git a/servers/xmpp2024/9.png b/servers/xmpp2024/9.png new file mode 100644 index 00000000..77b6b179 Binary files /dev/null and b/servers/xmpp2024/9.png differ diff --git a/servers/xmpp2024/index.html b/servers/xmpp2024/index.html new file mode 100644 index 00000000..ae6bd10e --- /dev/null +++ b/servers/xmpp2024/index.html @@ -0,0 +1,374 @@ + + + + + + + + + + + XMPP Server Setup Setup + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + Previous Page

    nihilist@mainpc - 2024-08-05

    +

    XMPP Server Setup Setup

    + +

    In this tutorial, we're going to check out how to setup a XMPP chat server, that is accessible over Tor, as a hidden service, using Prosody and Pidgin.

    +
    +
    +
    +
    + + +
    +
    +
    +
    +

    XMPP Server Setup

    +

    Before starting, check out this tutorial on how to create your first hidden service.

    +
    
    +root@ANON-home:~# apt install prosody prosody-modules -y
    +	
    +root@ANON-home:~# prosodyctl about 
    +  /var/lib/prosody/custom_plugins - not a directory!
    +  /usr/local/lib/prosody/modules - not a directory!
    +  /var/lib/prosody/custom_plugins/share/lua/5.4/?.lua
    +  /var/lib/prosody/custom_plugins/share/lua/5.4/?/init.lua
    +
    +
    +root@ANON-home:~# mkdir /var/lib/prosody/custom_plugins
    +root@ANON-home:~# mkdir /usr/local/lib/prosody/modules -p
    +
    +
    + +

    Then, we make sure that the tor hidden service includes the XMPP ports:

    +
    
    +root@ANON-home:# vim /etc/tor/torrc
    +root@ANON-home:# cat /etc/tor/torrc
    +HiddenServiceDir /var/lib/tor/onions/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion/
    +
    +[...]
    +
    +HiddenServicePort 5222 127.0.0.1:5222
    +HiddenServicePort 5269 127.0.0.1:5269
    +HiddenServicePort 5280 127.0.0.1:5280
    +HiddenServicePort 5281 127.0.0.1:5281
    +	
    +root@ANON-home:# systemctl restart tor@default
    +
    +
    + +

    Here, my hidden service is aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion, let's check that the mod_onions module is installed and configure the prosody.cfg.lua file:

    +
    
    +root@ANON-home:~# ls /usr/lib/prosody/modules/mod_onions
    +mod_onions.lua
    +	
    +root@ANON-home:~# vim /etc/prosody/prosody.cfg.lua
    +root@ANON-home:~# cat /etc/prosody/prosody.cfg.lua
    +
    +[...]
    +
    +VirtualHost "localhost"
    +-- Prosody requires at least one enabled VirtualHost to function. You can
    +-- safely remove or disable 'localhost' once you have added another.
    +
    +VirtualHost "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion"
    +        modules_enabled = {"onions"};
    +        onions_only = true;
    +        disco_items = {
    +                {"conference.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion","Public Chatroom"},
    +                {"upload.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion","Public Chatroom"}
    +        }
    +
    +Component "conference.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion" "muc"
    +        modules_enabled = { "onions" };
    +        onions_only = true;
    +
    +Component "upload.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion" "http_file_share"
    +        modules_enabled = { "onions" };
    +        onions_only = true;
    +
    +[...]
    +
    +
    +

    +
    
    +root@ANON-home:~# prosodyctl cert generate aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion
    +Choose key size (2048):
    +Key written to /var/lib/prosody/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion.key
    +Please provide details to include in the certificate config file.
    +Leave the field empty to use the default value or '.' to exclude the field.
    +countryName (GB):
    +localityName (The Internet):
    +organizationName (Your Organisation):
    +organizationalUnitName (XMPP Department):
    +commonName (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion):
    +emailAddress (xmpp@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion):
    +
    +Config written to /var/lib/prosody/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion.cnf
    +Certificate written to /var/lib/prosody/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion.crt
    +
    +root@ANON-home:~# prosodyctl check
    +
    +[...]
    +
    +Checking certificates...
    +Checking certificate for conference.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion
    +certmanager         info        No certificate present in SSL/TLS configuration for conference.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion. SNI will be required.
    +  No 'certificate' found for conference.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion
    +Checking certificate for localhost
    +certmanager         info        No certificate present in SSL/TLS configuration for localhost. SNI will be required.
    +  No 'certificate' found for localhost
    +Checking certificate for upload.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion
    +certmanager         info        No certificate present in SSL/TLS configuration for upload.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion. SNI will be required.
    +  No 'certificate' found for upload.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion
    +Checking certificate for aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion
    +certmanager         info        No certificate present in SSL/TLS configuration for aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion. SNI will be required.
    +  No 'certificate' found for aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion
    +
    +For more information about certificates please see https://prosody.im/doc/certificates
    +
    +Problems found, see above.
    +
    +	
    +root@ANON-home:# mv /var/lib/prosody/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion.* /etc/prosody/certs/
    +
    +
    +

    +
    
    +root@ANON-home:/etc/prosody/certs# prosodyctl adduser nihilist@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion
    +Enter new password:
    +Retype new password:
    +
    +root@ANON-home:/etc/prosody/certs# systemctl restart prosody
    +root@ANON-home:/etc/prosody/certs# systemctl status prosody
    +● prosody.service - Prosody XMPP Server
    +     Loaded: loaded (/lib/systemd/system/prosody.service; enabled; preset: enabled)
    +     Active: active (running) since Mon 2024-08-05 22:02:47 CEST; 4s ago
    +       Docs: https://prosody.im/doc
    +   Main PID: 3419 (lua5.4)
    +      Tasks: 1 (limit: 4653)
    +     Memory: 7.8M
    +        CPU: 139ms
    +     CGroup: /system.slice/prosody.service
    +             └─3419 lua5.4 /usr/bin/prosody -F
    +
    +Aug 05 22:02:47 ANON-home systemd[1]: Started prosody.service - Prosody XMPP Server.
    +
    +	
    +
    +

    all good now, now let's connect to it using pidgin:

    +
    
    +[ mainpc ] [ /dev/pts/9 ] [~/Nextcloud/blog]
    +→ apt install pidgin -y
    +
    +[ mainpc ] [ /dev/pts/9 ] [~/Nextcloud/blog]
    +→ pidgin
    +	
    +
    +

    Then, create your account on the XMPP server:

    + + + + + + +

    Next, we can start chatting with Alice, who is another user on that XMPP server like so:

    + +

    Then from Alice's XMPP client, we accept nihilist's buddy request:

    + + + + +

    +
    +
    +
    +
    + +
    +
    +
    +
    +

    Optional XMPP server options:



    +

    if you want to enable message archiving, enable the "mam" module by uncommenting it:

    +
    
    +root@ANON-home:~# vim /etc/prosody/prosody.cfg.lua
    +root@ANON-home:~# cat /etc/prosody/prosody.cfg.lua
    +
    +[...]
    +
    +modules_enabled = {
    +                "mam"; -- Store recent messages to allow multi-device synchronization
    +}
    +
    +[...]
    +
    +
    + +

    and then you can mention the expiration time of messages like so:

    +
    
    +root@ANON-home:~# vim /etc/prosody/prosody.cfg.lua
    +root@ANON-home:~# cat /etc/prosody/prosody.cfg.lua
    +
    +archive_expires_after = "1w" -- remove archived messages after 1 week
    +
    +
    +

    you can choose to limit the bandwidth usage of your server too, using the mod_limits module:

    +
    
    +root@ANON-home:~# vim /etc/prosody/prosody.cfg.lua
    +root@ANON-home:~# cat /etc/prosody/prosody.cfg.lua
    +
    +limits = {
    +	c2s = {
    +		rate = "10kb/s";
    +	}
    +	s2sin = {
    +		rate = "30kb/s";
    +	}
    +
    +}
    +
    +

    You can also enable archiving on the multi-user chats like so :

    +
    
    +root@ANON-home:~# vim /etc/prosody/prosody.cfg.lua
    +root@ANON-home:~# cat /etc/prosody/prosody.cfg.lua
    +
    +Component "conference.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion" "muc"
    +        modules_enabled = { "onions", "muc_mam" };
    +        onions_only = true;
    +
    +
    +

    And just like in mod_mam, you can set the expiration time of the messages in MUCs:

    +
    
    +root@ANON-home:~# vim /etc/prosody/prosody.cfg.lua
    +root@ANON-home:~# cat /etc/prosody/prosody.cfg.lua
    +
    +Component "conference.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion" "muc"
    +        modules_enabled = { "onions", "muc_mam" };
    +        onions_only = true;
    +		muc_log_expires_after = "1w"
    +	
    +
    + +

    Then, you can also enable file archiving using mod_http_file_share:

    +
    
    +root@ANON-home:~# vim /etc/prosody/prosody.cfg.lua
    +root@ANON-home:~# cat /etc/prosody/prosody.cfg.lua
    +
    +Component "upload.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion" "http_file_share"
    +        modules_enabled = { "onions" };
    +        onions_only = true;
    +		http_file_share_daily_quota = 100*1024*1024;	-- 100 MiB
    +		http_file_share_after = 7*86400;				-- One week in seconds
    +		http_file_share_size_limit = 10*1024*1024		-- 10 Mib
    +	
    +
    +

    Then, as you're going to have a multi user chat, you'll most likely need the mod_muc_moderation module:

    +
    
    +root@ANON-home:~# vim /etc/prosody/prosody.cfg.lua
    +root@ANON-home:~# cat /etc/prosody/prosody.cfg.lua
    +
    +Component "conference.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.onion" "muc"
    +        modules_enabled = { "onions", "muc_mam", "muc_moderation" };
    +        onions_only = true;
    +        muc_log_expires_after = "1w"
    +	
    +
    + +

    TODO: showcase a multi-user chat with 3 users

    +

    TODO: showcase XMPP onion federation between server A <-> and B

    +
    +
    +
    +
    + + + +
    +
    +
    +
    +

    Nihilism

    +

    + Until there is Nothing left. + +

    +
    + +
    +

    My Links

    +

    + + RSS Feed
    Matrix Chat
    + +

    +
    + +
    +

    About nihilist

    +

    Donate XMR: 8AUYjhQeG3D5aodJDtqG499N5jXXM71gYKD8LgSsFB9BUV1o7muLv3DXHoydRTK4SZaaUBq4EAUqpZHLrX2VZLH71Jrd9k8


    Contact: nihilist@nihilism.network (PGP)

    +
    + +
    + +
    +
    + + + + + + +