Skip to content
This repository was archived by the owner on Nov 1, 2025. It is now read-only.

Commit 31324da

Browse files
author
Dan Vittegleo
committed
update readme
1 parent 2e0bd95 commit 31324da

File tree

2 files changed

+15
-9
lines changed

2 files changed

+15
-9
lines changed

README.md

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
* HTTP & HTTPS support.
77
* No special software required. Just configure your system to use an HTTP proxy.
88
* 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.
1111
* Mostly [AWS free tier](https://aws.amazon.com/free/) compatible (see FAQ below).
1212

1313
## How it works
@@ -44,29 +44,34 @@ The easiest way is to download a pre-built binary from the [GitHub Releases](htt
4444

4545
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:
4646

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.
4848
* 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>
4949

5050
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.
5151

5252
```sh
5353
export AWS_ACCESS_KEY_ID=XXXXXXXXXX
5454
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
5656
```
5757

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.
5959

6060
## FAQ
6161
1. <b>Should I use awslambdaproxy?</b> That's up to you. Use at your own risk.
6262
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.
6363
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.
6464
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.
6565
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.
6667

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
6874
* Add security to proxy and tunnel connections
6975
* Fix connections dropping each time a new tunnel is established
7076
* Create minimal IAM policy
71-
* Rewrite code to be testable
72-
* Write tests
77+
* Rewrite code to be testable and write tests

init.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,11 @@ func ServerInit(proxyPort string, tunnelPort string, regions []string, lambdaExe
3131
os.Exit(1)
3232
}
3333

34+
// TODO: hack to start new tunnel in case there is a failure
3435
go func(){
3536
for {
3637
<-tunnelConnectionManager.emergencyTunnel
37-
log.Println("EMERGENCY TUNNEL STARTED")
38+
log.Println("Starting new tunnel as existing tunnel failed")
3839
lambdaExecutionManager.executeFunction(0)
3940
time.Sleep(time.Second * 5)
4041
}

0 commit comments

Comments
 (0)