# rtorrent-scgi-proxy Mały broker SCGI -> SCGI dla rTorrenta. Zachowuje protokół SCGI, sprawdza token w ścieżce, ogranicza źródłowy adres IP/CIDR i przekazuje request do lokalnego backendu rTorrent. Repozytorium: https://git.linuxiarz.pl/gru/rtorrent-scgi-proxy Szybkie pobranie: ```sh git clone https://git.linuxiarz.pl/gru/rtorrent-scgi-proxy.git cd rtorrent-scgi-proxy/bin ``` Archiwum: ```sh wget https://git.linuxiarz.pl/gru/rtorrent-scgi-proxy/archive/main.tar.gz -O rtorrent-scgi-proxy.tar.gz ``` ## Jak to działa Klient łączy się po SCGI do proxy, np.: ```text scgi://10.10.110.11:5050/proxy/TWOJ_TOKEN ``` Proxy: 1. sprawdza IP klienta przez `ALLOW_NET`, 2. sprawdza token ze ścieżki `/proxy/`, 3. przepisuje `REQUEST_URI` na `/RPC2`, 4. forwarduje request do lokalnego rTorrenta po TCP albo unix sockecie. ## Konfiguracja Plik env dla systemd: ```sh /etc/rtorrent-scgi-proxy.env ``` Przykład: ```sh LISTEN_ADDR=10.10.110.11:5050 TOKEN=change-me-long-random-token TARGET_NETWORK=tcp TARGET_ADDRESS=127.0.0.1:5000 TARGET_URI=/RPC2 ALLOW_NET=10.10.0.0/16 READ_TIMEOUT=15s WRITE_TIMEOUT=30s DIAL_TIMEOUT=5s MAX_HEADER_BYTES=65536 MAX_CONTENT_BYTES=10485760 ``` Backend przez unix socket: ```sh TARGET_NETWORK=unix TARGET_ADDRESS=/run/rtorrent/rtorrent.sock ``` ## Budowa i testy ```sh cd bin go test ./... ./scripts/build.sh ``` Wynik: ```text dist/rtorrent-scgi-proxy-linux-amd64 ``` Cross-build: ```sh GOOS=linux GOARCH=arm64 ./scripts/build.sh ``` ## Instalacja przez systemd ```sh cd bin sudo ./scripts/install.sh sudo nano /etc/rtorrent-scgi-proxy.env sudo systemctl enable --now rtorrent-scgi-proxy sudo systemctl status rtorrent-scgi-proxy ``` Ręcznie: ```sh sudo useradd --system --no-create-home --shell /usr/sbin/nologin rtproxy sudo install -m 0755 dist/rtorrent-scgi-proxy-linux-amd64 /usr/local/bin/rtorrent-scgi-proxy sudo install -m 0644 systemd/rtorrent-scgi-proxy.service /etc/systemd/system/rtorrent-scgi-proxy.service sudo install -m 0600 examples/rtorrent-scgi-proxy.env /etc/rtorrent-scgi-proxy.env sudo systemctl daemon-reload sudo systemctl enable --now rtorrent-scgi-proxy ``` ## Wrzucenie do repo Z katalogu głównego repo: ```sh git add bin git commit -m "Add rTorrent SCGI proxy binary project" git push origin main ``` ## Bezpieczeństwo Nie wystawiaj tego publicznie bez dodatkowej ochrony. Zalecane minimum: - `ALLOW_NET` ustawione na prywatną podsieć/VPN, - długi losowy `TOKEN`, - firewall na porcie `LISTEN_ADDR`, - najlepiej WireGuard albo inny prywatny tunel, - rTorrent SCGI tylko lokalnie: `127.0.0.1` albo unix socket. SCGI nie ma wbudowanego TLS ani auth. Ten proxy dodaje prostą autoryzację tokenem i allowlistę IP, ale nie zastępuje VPN/TLS. ## Zmienne środowiskowe | Zmienna | Domyślnie | Opis | |---|---:|---| | `LISTEN_ADDR` | `127.0.0.1:5050` | Adres nasłuchu proxy. | | `TOKEN` | brak | Wymagany token w ścieżce `/proxy/`. | | `TARGET_NETWORK` | `tcp` | `tcp` albo `unix`. | | `TARGET_ADDRESS` | `127.0.0.1:5000` | Lokalny backend rTorrent SCGI. | | `TARGET_URI` | `/RPC2` | URI przekazywane do rTorrenta. | | `ALLOW_NET` | `127.0.0.1` | Dozwolony IP, CIDR, lista po przecinku albo `*`. | | `READ_TIMEOUT` | `15s` | Timeout czytania klienta. | | `WRITE_TIMEOUT` | `30s` | Timeout zapisu/odpowiedzi. | | `DIAL_TIMEOUT` | `5s` | Timeout połączenia z backendem. | | `MAX_HEADER_BYTES` | `65536` | Limit nagłówków SCGI. | | `MAX_CONTENT_BYTES` | `10485760` | Limit body XML-RPC. |