|
6 | 6 | * HTTP & HTTPS support. |
7 | 7 | * No special software required. Just configure your system to use an HTTP proxy. |
8 | 8 | * Each AWS Lambda region provides 1 outgoing IP address that gets rotated roughly every 4 hours. That means if you use 10 AWS regions, you'll get 60 unique IPs per day. |
9 | | -* Configurable IP rotation frequency between multiple regions. By default IP will rotate to new region every 10 seconds. |
10 | | -* Personal "proxy server" not shared with anyone else. |
| 9 | +* Configurable IP rotation frequency between multiple regions. By default IP will rotate to new region every 3 minutes. |
| 10 | +* Personal proxy server not shared with anyone else. |
11 | 11 | * Mostly [AWS free tier](https://aws.amazon.com/free/) compatible (see FAQ below). |
12 | 12 |
|
13 | 13 | ## How it works |
@@ -44,29 +44,34 @@ The easiest way is to download a pre-built binary from the [GitHub Releases](htt |
44 | 44 |
|
45 | 45 | 1. Copy `awslambdaproxy` binary to a publicly accessible linux host (e.g. EC2 instance). You will need to open the following ports on this host: |
46 | 46 |
|
47 | | - * Port 8080 - this port listens for user proxy connections and needs to only be opened to whatever your external IP address is where you plan to browse the web. Alternatively on OSX, I use [Secure Pipes](https://www.opoet.com/pyro/) to setup a SSH tunnel with port 8080 forwarded to localhost. This allows port 8080 to remain unexposed and instead relies on SSH being exposed. |
| 47 | + * Port 8080 - this port listens for user proxy connections and needs to only be opened to whatever your external IP address is where you plan to browse the web. |
48 | 48 | * Port 8081 - this port listens for tunnel connections from executing Lambda functions and needs to be opened to the world. <b>This is a security concern and will be locked down in the future.</b> |
49 | 49 |
|
50 | 50 | 2. On publicly accessible host, run `awslambdaproxy`. You'll need to ensure AWS access key and secret key environment variables are defined. For now, this access key should have AdministratorAccess. |
51 | 51 |
|
52 | 52 | ```sh |
53 | 53 | export AWS_ACCESS_KEY_ID=XXXXXXXXXX |
54 | 54 | export AWS_SECRET_ACCESS_KEY=YYYYYYYYYYYYYYYYYYYYYY |
55 | | - ./awslambdaproxy -regions us-west-2,us-west-1,us-east-1,us-east-2 -frequency 10 |
| 55 | + ./awslambdaproxy -regions us-west-2,us-west-1,us-east-1,us-east-2 |
56 | 56 | ``` |
57 | 57 |
|
58 | | -3. Configure your web browser (or OS) to use an HTTP proxy at the publicly accessible host running `awslambdaproxy` on port 8080. |
| 58 | +3. Configure your web browser (or OS) to use an HTTP and HTTPS proxy at the publicly accessible host running `awslambdaproxy` on port 8080. |
59 | 59 |
|
60 | 60 | ## FAQ |
61 | 61 | 1. <b>Should I use awslambdaproxy?</b> That's up to you. Use at your own risk. |
62 | 62 | 2. <b>Will this make me completely anonymous?</b> No, absolutely not. The goal of this project is just to obfuscate your web traffic by rotating your IP address. All of your traffic is going through AWS which could be traced back to your account. You can also be tracked still with [browser fingerprinting](https://panopticlick.eff.org/), etc. Your [IP address may still leak](https://ipleak.net/) due to WebRTC, Flash, etc. |
63 | 63 | 3. <b>How often will my external IP address change?</b> For each region specified, the IP address will change roughly every 4 hours. This of course is subject to change at any moment as this is not something that is documented by AWS Lambda. |
64 | 64 | 4. <b>How big is the pool of IP addresses?</b> This I don't know, but I do know I did not have a duplicate IP while running the proxy for a week. |
65 | 65 | 5. <b>How much does this cost?</b> awslambdaproxy should be able to run mostly on the [AWS free tier](https://aws.amazon.com/free/) minus bandwidth costs. It can run on a t2.micro instance and the default 128MB Lambda function that is constantly running should also fall in the free tier usage. The bandwidth is what will cost you money; you will pay for bandwidth usage for both EC2 and Lambda. |
| 66 | +6. <b>Why does my connection drop periodically?</b> AWS Lambda functions can currently only execute for a maximum of 5 minutes. In order to maintain an ongoing HTTP proxy a new function is executed and all new traffic is cut over to it. Any ongoing connections to previous Lambda function will hard stop after a timeout period. |
66 | 67 |
|
67 | | -## Future work |
| 68 | +# Powered by |
| 69 | +* [Goproxy](https://github.com/elazarl/goproxy) - An HTTP proxy written in Go. |
| 70 | +* [Yamux](https://github.com/hashicorp/yamux) - Golang connection multiplexing library. |
| 71 | +* [Goad](https://github.com/goadapp/goad) - Code was borrowed from this project to handle AWS Lambda zip creation and function upload. |
| 72 | + |
| 73 | +# Future work |
68 | 74 | * Add security to proxy and tunnel connections |
69 | 75 | * Fix connections dropping each time a new tunnel is established |
70 | 76 | * Create minimal IAM policy |
71 | | -* Rewrite code to be testable |
72 | | -* Write tests |
| 77 | +* Rewrite code to be testable and write tests |
0 commit comments