first commit
This commit is contained in:
143
README.md
Normal file
143
README.md
Normal file
@@ -0,0 +1,143 @@
|
||||
# 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/<TOKEN>`,
|
||||
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/<TOKEN>`. |
|
||||
| `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. |
|
||||
Reference in New Issue
Block a user