An experimental standalone tor-proxy service built with Go, using go-proxy, go-libtor and bine. This is a simple replacement to Tor's original tor-proxy. (Since this is experimental, I would still recommend to use the original Tor-proxy)
As you all know Tor is an anonymous network used to provide anonymous (tracking free) end-to-end network connectivity for users. In other words Tor network encrypts your IP with multiple layers such that the identity of the source cannot be determined anymore. Because of this capability of Tor, it is the de-facto network for hosting Dark-Web sites with almost 100% anonymity, clients use Tor browser to access these sites, usually those sites ending with .onion
. Apart from this, Tor network can also provide anynomity while accessing normal HTTP/s sites. Using this proxy, you can:
- Provide a single point of contact for multiple devices in your home/office to connect to External Tor Network (like an eggress).
- Access Dark-Web sites without having to install Tor browser on devices (use existing browsers, with proxy config)
- Stay anonymous over the internet - use Tor's power across multiple devices.
- Deploy this service as an ingress/eggress on K8s to anynomize your microservices.
- Access sites that are banned in your country (I don't recommend this and might not work always)
- Standalone binary - does not depend on
tor
application to be installed locally. - Dockerfiles provided to build and deploy the service in a container environment.
- k8s deployment file provided to deploy tor-proxy on a cloud native environment. (For larger workloads).
Local installation requires a properly configured Go environment to be working and must be supporting Go modules. Just clone this repository:
git clone [email protected]:Narasimha1997/tor-proxy.git
Then run:
cd tor-proxy
export GOBIN=$PWD # skip this if you don't want the binary to be installed in current location
go install
If everything goes well, you should see tor-proxy
binary, you can run this simply by:
./tor-proxy
Changing port: When starting up, the code looks for PROXY_PORT
env variable, by default it is set to 8000
, you can change the default port by running (for example):
export PROXY_PORT=8001
First, follow step-1.
You can just place the pre-built go binary inside a container and execute it normally. Dockerfile_binary
has the steps for this, just use this dockerfile to build the container image:
docker build . -f Dockerfile -t tor-proxy:latest
This is the recommended approach, the default Dockerfile
has steps for this process. It basically uses a pre-packaged Golang environment and builds the code and all it's dependencies inside the container. Just run:
docker build . -t tor-proxy:latest
You can run this container just like any other normal container. (using docker for example)
docker run --rm -p 8000:8000 tor-proxy
If everything works as expected, you should be able to use 127.0.0.1:8000
as the tor proxy on local machine and your.lan.ip.xx:8000
can be used across devices connected to a common network backbone. Or some.public.ip.xx:8000
can be used worldwide, cosider deploying it on Heroku (example).
This step is easy and varies across browsers. For firefox - check-here
- Support Socks555 connections.
- Create a simple JavaScript sandbox that would use this proxy to avoid manual proxy configuration. (Should check how)
There are no rules, just expecting contributions in the form of code, issues, PRs. (Not money, this is just a 2 hours weekend project and is completely focused on learning.)