mirror of
https://github.com/ar0x4/azproxy/
synced 2026-06-28 15:09:58 +00:00
78 lines
3.3 KiB
Markdown
78 lines
3.3 KiB
Markdown
# AzProx
|
|
|
|
**IP rotation through Azure Functions. Like proxychains, but through the cloud.**
|
|
|
|
Deploy lightweight HTTP proxy functions across Azure regions. Each Function App
|
|
gets several outbound IPs, so prefixing a command with `azprox` routes its
|
|
traffic through a rotating pool of Azure IPs.
|
|
|
|
```bash
|
|
azprox curl https://ifconfig.me # different Azure IP per request
|
|
azprox python3 spray.py # any tool, all HTTP(S) traffic rotated
|
|
azprox nuclei -u https://target.com
|
|
```
|
|
|
|
## Install
|
|
|
|
```bash
|
|
git clone <repo> azprox && cd azprox
|
|
pip install -e .
|
|
```
|
|
|
|
Requires Python 3.10+ and the Azure CLI (`az`).
|
|
|
|
## Quickstart
|
|
|
|
```bash
|
|
azprox init # use your current `az login` session
|
|
azprox deploy # 5 random EU regions (~3-5 min, remote build)
|
|
azprox status # show endpoints + live outbound IPs
|
|
azprox curl https://ifconfig.me # go
|
|
azprox nuke # tear everything down when done
|
|
```
|
|
|
|
## Commands
|
|
|
|
| Command | What it does |
|
|
|---------|--------------|
|
|
| `azprox init` | Authenticate (az CLI session, or `--client-id/--secret/--tenant/--subscription` for a service principal) |
|
|
| `azprox deploy` | Deploy proxies. `-n 10`, `--regions eu\|us\|apac\|all`, or `--regions westeurope,uksouth` |
|
|
| `azprox status` | Health-check each endpoint, print outbound IP + latency |
|
|
| `azprox serve` | Run a persistent local proxy (`-p 8080`, `--random`) |
|
|
| `azprox regions` | List available regions |
|
|
| `azprox nuke` | Delete the resource group and clear local state (`--force` to skip the prompt) |
|
|
| `azprox <anything else>` | Run that command through the proxy |
|
|
|
|
One active deployment at a time. State lives in `~/.azprox/`.
|
|
|
|
## How it works
|
|
|
|
1. `azprox deploy` creates a Function App per region — each a small HTTP relay
|
|
that strips identifying headers and forwards to your target.
|
|
2. `azprox <command>` starts a local proxy, sets `HTTP_PROXY`/`HTTPS_PROXY`, and
|
|
runs your command.
|
|
3. The local proxy picks an endpoint per request; the function forwards from its
|
|
own Azure outbound IP. The target sees a rotating Azure IP, no proxy headers.
|
|
|
|
```
|
|
your machine Azure Functions target
|
|
┌──────────┐ ┌───────────────────────────┐ ┌────────┐
|
|
│ azprox │ │ westeurope (N IPs) │ │ │
|
|
│ curl ... │──► │ northeurope (N IPs) │──► │ target │
|
|
│ │ │ uksouth (N IPs) │ │ .com │
|
|
└──────────┘ └───────────────────────────┘ └────────┘
|
|
HTTP_PROXY random / round-robin sees rotating IPs
|
|
```
|
|
|
|
**HTTPS:** an `HTTP_PROXY` can't see inside a `CONNECT` tunnel, so `azprox`
|
|
terminates TLS locally with a leaf cert from a local CA (`~/.azprox/ca/`),
|
|
rewrites the decrypted request through the rotating function, and re-encrypts the
|
|
reply. In `azprox <command>` mode the child's CA-bundle env vars are pointed at
|
|
that CA, so curl, requests, httpx, wget, node, and git trust it automatically.
|
|
The CA never leaves your machine.
|
|
|
|
## Cost
|
|
|
|
Azure Functions Consumption plan: 1M executions/month free (permanent). Typical
|
|
engagement volume is effectively free; idle costs nothing.
|