Modus proxychains pro Dienst hinzufügen
Neben den Proxy-Variablen (env) kann pro Dienst jetzt der Modus proxychains gewählt werden: proxychains-ng wird per LD_PRELOAD geladen und leitet alle ausgehenden TCP-Verbindungen über den Proxy, auch bei Programmen ohne Proxy-Unterstützung (z.B. Kerio Connect SMTP/POP3). - eigene proxychains-Konfiguration je Dienst unter /etc/svc-proxy/proxychains/ - localhost, private Netze, DNS und IP-Einträge aus No-Proxy gehen direkt - Proxy-Hostname wird zu IPv4 aufgelöst, Kennwort-Datei an User= des Dienstes - Modus-Auswahl im ncurses-Formular, --mode für set, Anzeige in list/show - README und --help ergänzt - __pycache__ aus dem Repo entfernt, .gitignore angelegt Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
2d786a0270
commit
3968c1a7b8
@@ -6,12 +6,20 @@ aufbaut. Bedienen lässt es sich auf zwei Wegen:
|
||||
- **ncurses-Menü**: listet alle Dienste auf. Man wählt einen aus und trägt die Daten bequem ein.
|
||||
- **Kommandozeile**: für Skripte, Ansible, Provisionierung usw.
|
||||
|
||||
Pro Dienst wählt man den **Modus**:
|
||||
|
||||
| Modus | Wirkung | Geeignet für |
|
||||
|---|---|---|
|
||||
| `env` – Proxy-Variablen (Standard) | setzt `http_proxy`, `https_proxy`, … | Programme, die diese Variablen beachten (curl, apt, Docker, Python, Go, …) |
|
||||
| `proxychains` | leitet **alle** ausgehenden TCP-Verbindungen des Dienstes über den Proxy | Programme ohne Proxy-Unterstützung, z.B. **Kerio Connect** (SMTP, POP3, IMAP) |
|
||||
|
||||
Es gibt einen **globalen Proxy**. Alle Felder, die man bei einem Dienst leer lässt,
|
||||
übernehmen den globalen Wert. Explizit gesetzte Werte beim Dienst gelten vorrangig.
|
||||
Benutzername und Kennwort sind optional; ohne sie wird der Proxy ohne Anmeldung genutzt.
|
||||
|
||||
Abhängigkeiten: nur `python3` (≥ 3.6) mit den Standardmodulen. `curses` ist bei
|
||||
Debian/Ubuntu/RHEL im Python-Paket enthalten.
|
||||
Debian/Ubuntu/RHEL im Python-Paket enthalten. Für den Modus `proxychains` zusätzlich
|
||||
`proxychains4` (Debian/Ubuntu) bzw. `proxychains-ng` (RHEL/Fedora).
|
||||
|
||||
---
|
||||
|
||||
@@ -19,6 +27,7 @@ Debian/Ubuntu/RHEL im Python-Paket enthalten.
|
||||
|
||||
```bash
|
||||
sudo install -m 0755 svc-proxy /usr/local/sbin/svc-proxy
|
||||
sudo apt install proxychains4 # nur für den Modus proxychains nötig
|
||||
```
|
||||
|
||||
Danach `sudo svc-proxy` (Menü) oder `svc-proxy --help` (Hilfe).
|
||||
@@ -34,10 +43,18 @@ Für jeden konfigurierten Dienst werden zwei Dateien erzeugt:
|
||||
| `/etc/systemd/system/<dienst>.d/50-svc-proxy.conf` | Drop-in mit `EnvironmentFile=` | 0644 |
|
||||
| `/etc/svc-proxy/env/<dienst>.env` | die eigentlichen Proxy-Variablen | 0600 |
|
||||
|
||||
Im Modus `proxychains` kommt eine dritte Datei dazu:
|
||||
|
||||
| Datei | Inhalt | Rechte |
|
||||
|-------|--------|--------|
|
||||
| `/etc/svc-proxy/proxychains/<dienst>.conf` | proxychains-Konfiguration | 0644, mit Kennwort 0600 |
|
||||
|
||||
Die Konfiguration selbst (global + alle Dienste) liegt in
|
||||
`/etc/svc-proxy/config.json` (0600). Die Drop-ins und Env-Dateien werden daraus
|
||||
generiert und sollten nicht von Hand bearbeitet werden.
|
||||
|
||||
### Modus `env` (Proxy-Variablen)
|
||||
|
||||
Gesetzt werden die Variablen
|
||||
|
||||
```
|
||||
@@ -63,7 +80,66 @@ Programm *kann* den Proxy umgehen.
|
||||
|
||||
SOCKS-Proxys (`socks5://`, `socks5h://`) werden ebenfalls in alle Variablen
|
||||
geschrieben. Das funktioniert z.B. mit curl und Go. Manche Programme verstehen in
|
||||
`http_proxy` aber nur `http://`.
|
||||
`http_proxy` aber nur `http://`. Für solche Fälle gibt es den Modus `proxychains`.
|
||||
|
||||
### Modus `proxychains` (alle TCP-Verbindungen)
|
||||
|
||||
[proxychains-ng](https://github.com/rofl0r/proxychains-ng) wird per `LD_PRELOAD`
|
||||
in den Dienst geladen. Die Bibliothek fängt jeden `connect()`-Aufruf ab und baut
|
||||
die Verbindung stattdessen über den Proxy auf. Das Programm selbst muss nichts von
|
||||
einem Proxy wissen. Das ist dasselbe wie `proxychains4 programm`, nur fest im
|
||||
Dienst eingetragen. Die Env-Datei enthält dann:
|
||||
|
||||
```
|
||||
LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libproxychains.so.4"
|
||||
PROXYCHAINS_CONF_FILE="/etc/svc-proxy/proxychains/<dienst>.conf"
|
||||
PROXYCHAINS_QUIET_MODE="1"
|
||||
```
|
||||
|
||||
**Direkt (ohne Proxy) verbunden werden immer:**
|
||||
|
||||
- localhost (`127.0.0.0/8`, `::1`)
|
||||
- private Netze: `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`, `169.254.0.0/16`, `fc00::/7`, `fe80::/10`
|
||||
- DNS (Port 53, jedes Ziel), damit z.B. MX-Abfragen normal funktionieren
|
||||
- alle **IP-Adressen und Netze** aus der No-Proxy-Liste (z.B. `192.0.2.0/24`).
|
||||
Hostnamen/Domains aus No-Proxy kann proxychains nicht berücksichtigen.
|
||||
|
||||
Hinweise:
|
||||
|
||||
- Proxy-Typen: `http` (CONNECT), `socks4`, `socks5`. `socks5h` wird wie `socks5`
|
||||
behandelt. Einen `https`-Proxy kann proxychains nicht.
|
||||
- proxychains braucht für den Proxy eine **IPv4-Adresse**. Ein Hostname wird beim
|
||||
Speichern aufgelöst und die IP fest eingetragen. Ändert sich die IP des Proxys,
|
||||
einmal `svc-proxy apply` ausführen.
|
||||
- Benutzer/Kennwort dürfen hier keine Leerzeichen enthalten.
|
||||
- Läuft der Dienst unter einem eigenen Benutzer (`User=`), bekommt dieser die
|
||||
Datei mit dem Kennwort zugewiesen. Bei `DynamicUser=yes` geht das nicht, dann
|
||||
einen Proxy ohne Anmeldung verwenden.
|
||||
- Nur TCP wird umgeleitet, UDP nicht. Eingehende Verbindungen (z.B. MX-Empfang)
|
||||
sind nicht betroffen.
|
||||
- Statisch gelinkte Programme (z.B. viele Go-Binaries) ignorieren `LD_PRELOAD`.
|
||||
Für die gibt es meist den Modus `env`. Prüfen mit `ldd /pfad/zum/programm`.
|
||||
- Der Modus wird **nicht** vom globalen Proxy geerbt, er gilt immer nur für den
|
||||
jeweiligen Dienst (Standard: `env`).
|
||||
|
||||
### Beispiel: Kerio Connect
|
||||
|
||||
Kerio beachtet keine Proxy-Variablen, und der Proxy in den Kerio-Einstellungen
|
||||
gilt nur für Updates und Antivirus. Mit proxychains laufen auch SMTP-Versand und
|
||||
POP3/IMAP-Abruf über den Proxy:
|
||||
|
||||
```bash
|
||||
sudo apt install proxychains4
|
||||
ldd /opt/kerio/mailserver/mailserver | grep libc # muss dynamisch gelinkt sein
|
||||
sudo svc-proxy global --proxy socks5://192.168.1.50:1080
|
||||
sudo svc-proxy set kerio-connect --mode proxychains --restart
|
||||
```
|
||||
|
||||
Beim Mailversand über einen Proxy gilt: Empfänger sehen die IP des Proxys. Diese
|
||||
muss im SPF-Eintrag stehen und einen passenden Reverse-DNS haben, und der Proxy
|
||||
muss ausgehend Port 25 erlauben. Alternativ in Kerio einen SMTP-Relay (Smarthost,
|
||||
Port 587 mit Anmeldung) eintragen. Die Verbindung dorthin läuft dann ebenfalls
|
||||
über den Proxy.
|
||||
|
||||
---
|
||||
|
||||
@@ -108,7 +184,7 @@ sudo svc-proxy
|
||||
```
|
||||
|
||||
Markierungen: **G** = nutzt globalen Proxy, **E** = eigene Werte,
|
||||
**\*** = in dieser Sitzung geändert (Neustart noch offen).
|
||||
**\*** = in dieser Sitzung geändert (Neustart noch offen), **[proxychains]** = Modus proxychains.
|
||||
|
||||
### Tasten in der Liste
|
||||
|
||||
@@ -130,7 +206,7 @@ Markierungen: **G** = nutzt globalen Proxy, **E** = eigene Werte,
|
||||
| Taste | Funktion |
|
||||
|---|---|
|
||||
| Tab / ↑ ↓ | Feld wechseln |
|
||||
| ← → / Leertaste | Proxy-Typ wählen (beim Dienst gibt es zusätzlich „global“) |
|
||||
| ← → / Leertaste | Modus bzw. Proxy-Typ wählen (beim Typ gibt es zusätzlich „global“) |
|
||||
| Enter | nächstes Feld bzw. Schaltfläche auslösen |
|
||||
| F2 | Speichern |
|
||||
| Strg+U | Feld leeren |
|
||||
@@ -174,6 +250,7 @@ svc-proxy [BEFEHL] [OPTIONEN]
|
||||
| `--password PW` | Kennwort (in `ps` sichtbar!) |
|
||||
| `--password-stdin` | Kennwort aus der Standardeingabe lesen (empfohlen) |
|
||||
| `--no-proxy LISTE` | Ausnahmen, kommagetrennt |
|
||||
| `--mode MODUS` | nur bei `set`: `env` (Standard) oder `proxychains` |
|
||||
|
||||
- Bei `set` und `global` werden **nur die angegebenen Felder** geändert, der Rest bleibt.
|
||||
- Leerer Wert leert ein Feld: `--user ""`.
|
||||
@@ -202,6 +279,9 @@ Gestoppte Dienste werden nicht gestartet.
|
||||
| `--systemd-dir DIR` | anderes Ziel für Drop-ins (Standard `/etc/systemd/system`) |
|
||||
| `-V`, `--version` | Version |
|
||||
|
||||
Umgebungsvariable `SVC_PROXY_PROXYCHAINS_LIB`: Pfad zur proxychains-Bibliothek,
|
||||
falls sie nicht automatisch gefunden wird.
|
||||
|
||||
Mit `--config-dir`/`--systemd-dir` läuft das Skript auch ohne root. Das ist
|
||||
praktisch zum Testen, z.B. zusammen mit `--no-reload`.
|
||||
|
||||
@@ -234,6 +314,16 @@ sudo svc-proxy set myapp --proxy socks5h://10.1.1.1:1080
|
||||
# keine Anmeldung (eigener Host ohne Benutzer)
|
||||
sudo svc-proxy set backup --host proxy2.firma.local
|
||||
|
||||
# Kerio Connect: alle Mail-Verbindungen über den (globalen) SOCKS5-Proxy
|
||||
sudo svc-proxy set kerio-connect --mode proxychains --restart
|
||||
|
||||
# Eigener Proxy mit Anmeldung im proxychains-Modus, Netz 192.0.2.0/24 direkt
|
||||
echo 'geheim' | sudo svc-proxy set kerio-connect --mode proxychains \
|
||||
--proxy socks5://192.0.2.10:1080 --user max --password-stdin --no-proxy 192.0.2.0/24
|
||||
|
||||
# Zurück zu den Proxy-Variablen
|
||||
sudo svc-proxy set kerio-connect --mode env
|
||||
|
||||
# Nur den Port ändern
|
||||
sudo svc-proxy set myapp --port 1081 --no-restart
|
||||
|
||||
@@ -256,7 +346,8 @@ Beispielausgabe von `show`:
|
||||
```
|
||||
Dienst: ssh.service
|
||||
Status: active
|
||||
Modus: eigene Werte (leere Felder = global)
|
||||
Herkunft: eigene Werte (leere Felder = global)
|
||||
Modus: Proxy-Variablen
|
||||
Proxy-Typ http (global)
|
||||
Host other.proxy (dienst)
|
||||
Port 3128 (global)
|
||||
@@ -285,6 +376,11 @@ fehlgeschlagener Neustart).
|
||||
```bash
|
||||
systemctl cat docker.service # zeigt das Drop-in
|
||||
sudo cat /proc/$(systemctl show -p MainPID --value docker)/environ | tr '\0' '\n' | grep -i proxy
|
||||
|
||||
# proxychains-Modus: ist die Bibliothek im Prozess geladen?
|
||||
sudo grep proxychains /proc/$(systemctl show -p MainPID --value kerio-connect)/maps | head -1
|
||||
# laufende Verbindungen des Dienstes: Ziel sollte der Proxy sein
|
||||
sudo ss -tnp | grep mailserver
|
||||
```
|
||||
|
||||
## Deinstallation
|
||||
|
||||
Reference in New Issue
Block a user