You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Nov 1, 2025. It is now read-only.
Copy file name to clipboardExpand all lines: README.md
+10-9Lines changed: 10 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,10 +1,10 @@
1
-
<b>awslambdaproxy</b> is an [AWS Lambda](https://aws.amazon.com/lambda/) powered HTTP(s) web proxy. It provides a constantly rotating IP address for your web traffic from all regions where AWS Lambda is available. The goal is to obfuscate your web traffic and make it harder to track you as a user.
1
+
<b>awslambdaproxy</b> is an [AWS Lambda](https://aws.amazon.com/lambda/) powered HTTP(s)/SOCKS web proxy. It provides a constantly rotating IP address for your web traffic from all regions where AWS Lambda is available. The goal is to obfuscate your web traffic and make it harder to track you as a user.
2
2
3
3

4
4
5
5
## Features
6
-
* HTTP & HTTPS support.
7
-
* No special software required. Just configure your system to use an HTTP proxy.
6
+
* HTTP(s) and SOCKS5 proxy support.
7
+
* No special software required. Just configure your system to use an HTTP or SOCKS 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
9
* Configurable IP rotation frequency between multiple regions. By default IP will rotate to new region every 3 minutes.
10
10
* Personal proxy server not shared with anyone else.
@@ -14,7 +14,7 @@
14
14
Current code status: <b>proof of concept</b>. This is the first Go application that I've ever written. It has no tests. Listening endpoints have no security yet. It may not work. It may blow up. Use at your own risk.
15
15
16
16
## How it works
17
-
At a high level, awslambdaproxy proxies HTTP(s) traffic through AWS Lambda regional endpoints. To do this, awslambdaproxy is setup on a publicly accessible host (e.g. EC2 instance) and it handles creating Lambda resources that run a simple HTTP proxy ([elazarl/goproxy](https://github.com/elazarl/goproxy)). Since Lambda does not allow you to bind ports in your executing functions, the HTTP proxy is bound to a unix socket and a reverse tunnel is established from the Lambda function to port 8081 on the host running awslambdaproxy. Once a tunnel connection is established, all user web traffic is forwarded from port 8080 through this HTTP proxy. Lambda functions have a max execution time of 5 minutes, so there is a goroutine that continuously executes Lambda functions to ensure there is always a live tunnel in place. If multiple regions are specified, user HTTP traffic will be routed in a round robin fashion across these regions.
17
+
At a high level, awslambdaproxy proxies HTTP(s) traffic through AWS Lambda regional endpoints. To do this, awslambdaproxy is setup on a publicly accessible host (e.g. EC2 instance) and it handles creating Lambda resources that run a simple HTTP ([elazarl/goproxy](https://github.com/elazarl/goproxy)) or SOCKS ([armon/go-socks5](https://github.com/armon/go-socks5)) proxy. Since Lambda does not allow you to bind ports in your executing functions, the proxy server is bound to a unix socket and a reverse tunnel is established from the Lambda function to port 8081 on the host running awslambdaproxy. Once a tunnel connection is established, all user web traffic is forwarded from port 8080 through this proxy. Lambda functions have a max execution time of 5 minutes, so there is a goroutine that continuously executes Lambda functions to ensure there is always a live tunnel in place. If multiple regions are specified, user traffic will be routed in a round robin fashion across these regions.
18
18
19
19

20
20
@@ -55,10 +55,10 @@ The easiest way is to download a pre-built binary from the [GitHub Releases](htt
3. Configure your web browser (or OS) to use an HTTP and HTTPS proxy at the publicly accessible host running `awslambdaproxy` on port 8080.
61
+
3. Configure your web browser (or OS) to use the HTTP/HTTPS or SOCKS5 proxy (depending on -proxy-type selection) on the publicly accessible host running `awslambdaproxy` on port 8080.
62
62
63
63
## FAQ
64
64
1. <b>Should I use awslambdaproxy?</b> That's up to you. Use at your own risk.
@@ -69,9 +69,10 @@ The easiest way is to download a pre-built binary from the [GitHub Releases](htt
69
69
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 functionis executed and all new traffic is cut over to it. Any ongoing connections to previous Lambda functionwill hard stop after a timeout period.
70
70
71
71
# Powered by
72
-
* [Goproxy](https://github.com/elazarl/goproxy) - An HTTP proxy written in Go.
Copy file name to clipboardExpand all lines: cmd/awslambdaproxy/awslambdaproxy.go
+6-1Lines changed: 6 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -16,6 +16,7 @@ const (
16
16
funcmain() {
17
17
regionsPtr:=flag.String("regions", "us-west-2", "Regions to run proxy (e.g. us-west-2) (can be comma separated list)")
18
18
frequencyPtr:=flag.Int( "frequency", 180, "Frequency in seconds to execute Lambda function. If multiple regions are specified, this will cause traffic to rotate round robin at the interval specified here")
19
+
proxyTypePtr:=flag.String("proxy-type", "http", "Proxy type to setup: 'http' or 'socks'")
19
20
proxyPortPtr:=flag.String("proxy-port", "8080", "Port to listen for proxy connections")
20
21
tunnelPortPtr:=flag.String("tunnel-port", "8081", "Port to listen for reverse connection from Lambda")
0 commit comments