Home > storage-browsing-proxy

storage-browsing-proxy

Storage-browsing-proxy is a project mainly written in Python, it's free.

Browse simple web pages by proxying through a third-party storage service like AWS.

Browse simple web pages with Amazon Simple Queue Service as your proxy if you are located in a place where certain websites are blocked and the Tor network is unusable (perhaps because bridges are blocked).

Both the client and polling proxy are based on python-proxy (http://code.google.com/p/python-proxy/), with modifications to divert requests/responses to a third-party storage service.

TO USE: 0.) The client has to add http://*.verisign.com to the list of domains for which proxy settings should be bypassed. This step is to avoid the OCSP check for the AWS certificate going over the storage proxy, creating an infinite loop! TODO: figure out how to fix this 1.) The client is a user, presumably in some region where certain websites are censored. On the client's computer, configure a browser to proxy HTTP and HTTPS requests though localhost:8080, and run: python client_proxy.py 2.) The polling service is a reasonably trusted machine (like a Tor guard node) located outside of the censorship region. On the polling service, run: python polling_proxy.py

DEPENDENCIES: storage.py uses the boto library for AWS. Installation instructions at http://boto.cloudhackers.com/.

HOW IT WORKS: Upon receiving a connection, the client proxy chooses a random number as its connection ID, and it writes the connection ID, host, and port to the "connections" queue. It creates two queues, _request and _response. The client_proxy writes all requests from the client browser to the request queue. It polls the response queue for responses, and when it has one, it sends it back to the client browser. The polling proxy polls the "connections" queue, and when it gets a connection, it opens a connection to the target host and port. The polling proxy starts reading requests from the connection's request queue and writes responses to the connection's response queue.

STORAGE SERVICE API: Each storage service class should export the following functions:

  • Create new connection (the client calls this)
  • Get new connection (the polling proxy calls this)
  • Get the locations where requests and responses should be put()/get()'ed
  • put() a value to a location
  • get() a value from a location

TO DO: 1.) SQS permissions - the client proxy should not be able to delete messages, only write them. The client should also not be able to list all queues, ideally. 2.) Implement Storage classes for other services. 3.) Error handling 4.) Route requests through Tor on the polling proxy. (?)

Previous:rburlfetch