Configuring Pidgin to connect to a Tor hidden service.

May 16, 2013

It is, in theory, possible to configure any network service to be reachable over the Tor darknet. This includes instant messaging servers, like the XMPP server EjabberD. Conversely, it must be possible to configure your instant messaging client to connect over the Tor network. I used Pidgin as my client, and here's how I did it:

I set up a copy of the web proxy Polipo and configured it to work with Tor.

I then created a new XMPP account in my Pidgin client which connects to the XMPP domain the server was configured for (let's say it's 'xmpp-domain', though it could also probably be set to the .onion hostname, I haven't tried yet). On the Advanced tab I set the value of the "Connect server" field to the .onion hostname of the XMPP server (let's say it's '0123456789abcdef.onion'). The kicker is on the Proxy tab - set Proxy Type to 'HTTP', Host to 'localhost', and Port to '8118' (in other words, point Pidgin at the copy of Polipo running on your workstation). If you configure Pidgin to use "Tor/Privacy" and port 9050 as the proxy, it won't work because Pidgin (libpurple, more likely) tries to do DNS lookups on the .onion hostname when connecting, but Pidgin (which uses libpurple) cuts it off because the "Tor/Privacy" proxy setting explicitly disallows DNS lookups. I then enabled my new account, and about thirty seconds later I'd successfully logged into the hidden XMPP server.

Why would I do this? Aside from seeing if I could do it I'm doing a little experimenting with using Tor to solve the addressing problem.