Files
webproxyserver-proxyserver/README.md
T
2026-10-05 13:33:59 +02:00

102 lines
5.1 KiB
Markdown

# Proxy Manager
Ein Proxy-Server im Docker-Container, ähnlich wie Squid, aber mit WebUI und REST-API.
- **HTTP/HTTPS-Proxy** (Port 3128) für Browser, Systemproxy, Outlook/Exchange (EWS, MAPI over HTTP, OWA, ActiveSync)
- **SOCKS5-Proxy** (Port 1080) mit TCP **und UDP**. Darüber läuft jedes TCP-Protokoll, z. B. SMTP (25/465/587), IMAP (143/993), POP3 (110/995), SSH, RDP oder FTP-Steuerverbindungen.
- **Portweiterleitungen TCP/UDP** für Programme ohne Proxy-Unterstützung, z. B. WireGuard, Outlook-Mailkonten oder Geräte
- Beide Proxy-Ports verstehen **HTTP und SOCKS5**, das Protokoll wird automatisch erkannt.
- **Benutzerverwaltung** mit Login am Proxy (Basic-Auth bzw. SOCKS5-Login)
- **Black-/Whitelist** für Domains, Wildcards, Regex, IPs/Netze und Ports, global oder pro Benutzer
- **Verlauf:** Wer hat wann was aufgerufen, mit Datenmenge, Dauer und Status, als CSV exportierbar
- **Live-Verbindungen** ansehen und trennen
- **Dashboard** mit Statistik
- **REST-API** mit API-Tokens und Swagger-Doku unter `/api/docs`
- **PAC-Datei** für automatische Browser-Konfiguration unter `/proxy.pac`
- Daten liegen in einer SQLite-Datei im **Bind Mount** `./data`, es gibt keine Docker-Volumes.
## Start
```bash
cp .env.example .env # ADMIN_PASSWORD setzen (sonst wird eins generiert, siehe Log)
docker-compose up -d --build
docker-compose logs proxy # zeigt ggf. das generierte Admin-Passwort
```
WebUI: `http://<host>:8080` (Host-Ports in `.env` änderbar: `HTTP_PORT_HOST`, `SOCKS_PORT_HOST`, `WEB_PORT_HOST`)
## Ports
| Port | Zweck |
|---|---|
| 3128/tcp | HTTP/HTTPS-Proxy (+ SOCKS5) |
| 1080/tcp | SOCKS5 (+ HTTP) |
| 8080/tcp | WebUI + API |
| 10800-10819/udp | SOCKS5 UDP ASSOCIATE (ein Port pro aktiver UDP-Sitzung) |
| 40000-40019/tcp+udp | Frei für Portweiterleitungen |
Die Bereiche sind in `docker-compose.yml` einstellbar (`SOCKS_UDP_PORTS`, `FORWARD_PORTS` plus das Port-Mapping).
Mit `network_mode: host` entfällt das Mapping. Dann ist jeder Port für Weiterleitungen nutzbar.
Für SOCKS5-UDP muss `SOCKS_UDP_ADVERTISE` in `.env` die IP des Docker-Hosts enthalten, wie sie die Clients erreichen.
Im Host-Netzwerk-Modus ist das nicht nötig.
## Clients einrichten
| Client | Einstellung |
|---|---|
| Browser | HTTP-Proxy `host:3128` oder PAC-URL `http://host:8080/proxy.pac` |
| Windows-Systemproxy / Outlook (Exchange) | HTTP-Proxy `host:3128` |
| Thunderbird (SMTP/IMAP/POP3) | SOCKS5 `host:1080`, „DNS über SOCKS“ aktivieren |
| Kommandozeile | `export https_proxy=http://user:pass@host:3128` |
| WireGuard | Weiterleitung UDP `40000 → vpn.example.com:51820`, im Client `Endpoint = host:40000` |
| Outlook IMAP/SMTP-Konto | Weiterleitungen, z. B. TCP `40001 → imap.example.com:993` und `40002 → smtp.example.com:587`. Achtung: Das TLS-Zertifikat lautet auf den echten Servernamen, ggf. per hosts-Eintrag auf den Proxy zeigen lassen. |
| Programme ohne Proxy-Support | Proxifier/proxychains mit SOCKS5 oder eine Weiterleitung |
## Regeln
Auswertung in dieser Reihenfolge:
1. Loopback-Schutz (127.0.0.0/8, ::1), abschaltbar
2. Sperr-Regeln des Benutzers
3. Erlaubt-Regeln des Benutzers
4. Globale Sperr-Regeln
5. Globale Erlaubt-Regeln
6. Standardrichtlinie des Benutzers bzw. die globale Standardrichtlinie
| Host-Muster | Bedeutung |
|---|---|
| leer / `*` | alle Ziele |
| `example.com` | Domain inkl. aller Subdomains |
| `*.example.com` | Platzhalter |
| `10.0.0.0/8`, `1.2.3.4` | IP/Netz, wird gegen die aufgelöste Ziel-IP geprüft |
| `re:^ads?\.` | regulärer Ausdruck |
Ports: leer = alle, sonst z. B. `25`, `8000-9000` oder `25,465,587`.
**Whitelist für einen Benutzer:** Standardrichtlinie des Benutzers auf „Alles sperren“ stellen und Erlaubt-Regeln anlegen.
**Blocklisten importieren:** „Liste importieren“ versteht eine Domain pro Zeile und das Hosts-Datei-Format (`0.0.0.0 ads.example.com`).
## Hinweise
- Bei HTTPS sieht der Proxy nur Host und Port, nicht die komplette URL, weil es kein SSL-Aufbrechen gibt. Bei unverschlüsseltem HTTP wird die volle URL protokolliert.
- Bei SOCKS5 mit lokaler DNS-Auflösung (`socks5://` statt `socks5h://`) kennt der Proxy nur die IP. Dann greifen nur IP-Regeln, Domain-Regeln nicht. In den Clients deshalb „DNS über Proxy“ aktivieren.
- Der Verlauf wird nach `log_retention_days` (Standard 90 Tage) automatisch bereinigt. Rechtliche Vorgaben (DSGVO, Betriebsrat) beachten.
- Backup: Ordner `./data` sichern.
## API
Interaktive Doku: `http://host:8080/api/docs`. Token in der WebUI unter „API“ erzeugen.
```bash
TOKEN=...
curl -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-X POST http://host:8080/api/users -d '{"username":"max","password":"geheim123"}'
curl -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-X POST http://host:8080/api/rules -d '{"action":"deny","host":"tiktok.com"}'
curl -H "Authorization: Bearer $TOKEN" "http://host:8080/api/history?username=max&limit=50"
```
Wichtige Endpunkte: `/api/users`, `/api/rules` (+ `/bulk`, `/test`), `/api/forwards`, `/api/history` (+ `/export.csv`),
`/api/stats`, `/api/connections`, `/api/settings`, `/api/tokens`.