You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+27-51Lines changed: 27 additions & 51 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,8 +1,14 @@
1
1
# PoliVPN
2
2
3
-
Client VPN desktop leggero e nativo per il **personale e collaboratori del Policlinico di Catania** che devono accedere alle risorse interne tramite **Fortinet SSL-VPN**. Il progetto nasce come alternativa open-source al FortiClient ufficiale, con interfaccia semplice e codice modulare in **Rust**.
3
+
Client VPN desktop leggero e nativo per chi si connette a gateway **Fortinet SSL-VPN**. Il progetto nasce come alternativa open-source al FortiClient ufficiale, con interfaccia semplice e codice modulare in **Rust**. Puoi **personalizzare** testi (es. titolo sotto il logo via variabili di build) e **immagini** del client sostituendo gli asset in `vpn-app/src/` (logo) e la configurazione Tauri / tema.
4
4
5
-
> **Nota istituzionale:** questo software è pensato per semplificare l’accesso VPN da PC Windows (e in prospettiva macOS) nel contesto lavorativo del **Policlinico “G. Rodolico — San Marco” di Catania**. L’uso deve essere conforme alle policy IT dell’Azienda Ospedaliero-Universitaria e ai gateway VPN autorizzati.
5
+
### Screenshot (Windows)
6
+
7
+
Interfaccia principale in stato **disconnesso** e **connesso** (branding e titolo sotto il logo sono esempi configurabili in build).
@@ -12,13 +18,13 @@ Client VPN desktop leggero e nativo per il **personale e collaboratori del Polic
12
18
-**Tunnel PPP/LCP/IPCP** e traffico IP su TLS secondo il modello usuale degli **gateway Fortinet SSL‑VPN**.
13
19
-**Interfaccia Tauri** minimale: gateway, utente, password, opzione “Ricordali” (default attivo), sottotitolo sotto il logo (testo cablato in compilazione, default **Connessione VPN**), pulsante Connetti/Disconnetti, finestra **Log** separata per diagnostica. La modalità **full-tunnel** vs **split-tunnel** su Windows è scelta **in compilazione** (`POLIVPN_VPN_TYPE`), non dal modulo.
14
20
- Su Windows, i comandi `netsh` / PowerShell usati per route e DNS partono **senza finestre console** visibili (`CREATE_NO_WINDOW`).
15
-
- Su Windows: supporto **MSI** (installer WiX); l’installer **include materialmente**[`wintun.dll`](https://www.wintun.net/) recuperata dalla build (`vpn-app/src-tauri/build.rs`, cartella risorse dell’MSI — dettaglio in **[Wintun (Windows)](#wintun-windows)**).
21
+
- Su Windows: supporto **MSI** (installer WiX); l’installer **include**`wintun.dll` nelle risorse del progetto e nel bundle (dettaglio in **[Wintun (Windows)](#wintun-windows)**).
16
22
17
23
### Wintun (Windows)
18
24
19
25
**Wintun** è il componente dedicato (**`wintun.dll`**) che su Windows permette all’app di usare un’**interfaccia TUN virtuale**, evitando installazioni TAP aggiuntive lato utente. PoliVPN lo utilizza tramite il crate Rust `tun` per trasportare nel sistema operativo il traffico del tunnel.
20
26
21
-
Nel progetto la DLL viene **recuperata o copiata** durante il build dell’app (vedi `vpn-app/src-tauri/build.rs`); finisce nella cartella **`resources`** del bundle MSI; all’avvio l’app ne risolve il percorso e chiama **`vpn_core::tun::set_wintun_dll_path`**. Pertanto gli utenti finali **non** devono cercare né installare Wintun manualmente quando usano il pacchetto che genera questa build.
27
+
Nel **pacchetto installabile** (es. MSI delle Release), la **`wintun.dll`** è **già incorporata**: non viene richiesto alcun scaricamento separato all’utente finale. Sul disco di sviluppo risiede come risorsa sotto **`vpn-app/src-tauri/resources/`** e nell’installer finisce nella cartella **`resources`** del bundle; all’avvio l’app ne risolve il percorso e chiama **`vpn_core::tun::set_wintun_dll_path`**.
22
28
23
29
Per la **distribuzione e la conformità alla licenza** di terzi fare riferimento al **testo licenza** contenuto nel pacchetto ufficiale Wintun e alle indicazioni pubblicate sul sito [wintun.net](https://www.wintun.net/).
24
30
@@ -31,31 +37,37 @@ Il codice Rust è diviso in due contesti Cargo:
31
37
-**Workspace alla radice** (`Cargo.toml` in questa cartella): membri **`vpn-core`**, **`vpn-helper`**, **`vpn-cli`**, con dipendenze condivise nel workspace.
32
38
-**App desktop** (`vpn-app/src-tauri/`): workspace Cargo **autonomo** per Tauri; dipende da **`vpn-core`** tramite path (`../../vpn-core`) e non compare nei `members` del manifest di radice.
33
39
34
-
Il template **`[.env.example](.env.example)`** nella radice descrive le variabili di compilazione MSI; **`polivpn.build.env`** e **`.env`** (locali, in `.gitignore`) contengono i valori reali. CI in **`.github/`**e questo README stanno alla radice — vedi [.env vs configurazioni online](#polivpn-env-msi).
40
+
Il template **`[.env.example](.env.example)`** nella radice descrive le variabili di compilazione MSI; **`polivpn.build.env`** e **`.env`** (locali, in `.gitignore`) contengono i valori reali quando compili tu stesso il client. CI in **`.github/`**usa lo stesso schema — vedi [`.env`, `polivpn.build.env` e MSI](#polivpn-env-msi).
35
41
36
42
### Cartelle principali
37
43
38
44
| Percorso | Contenuto |
39
45
|----------|-----------|
40
46
|**`vpn-core/`**| Libreria Rust con tutta la logica VPN: autenticazione HTTPS sul gateway Fortinet, parsing della configurazione XML, tunnel TLS, negoziazione PPP (LCP/IPCP), interfaccia TUN (tramite crate `tun` / Wintun su Windows), loop di I/O pacchetti. È il **cuore** del client: sia l’app grafica sia gli strumenti da terminale la usano come dipendenza. |
41
47
|**`vpn-app/`**|**Client desktop** distribuito agli utenti: shell **Tauri 2**. Dentro trovi il frontend web e il backend Rust. |
|**`vpn-app/src-tauri/`**| Progetto Rust Tauri: `Cargo.toml`, `tauri.conf.json`, merge **`tauri.windows.conf.json`** / **`tauri.macos.conf.json`** (risorse e bundle per piattaforma), icone, `resources/` (solo Windows: `wintun.dll`), backend (`src/`). Artefatti in `src-tauri/target/`. |
44
50
|**`vpn-cli/`**|**Opzionale, solo per sviluppatori.** Binario da terminale che ripete lo stesso flusso di connessione di `vpn-core` con argomenti `clap` (gateway, utente, password, …). Serve per **debug**, CI o script senza avviare la GUI; **non** è il prodotto che installi sugli PC degli utenti e **non** va confuso con il client Tauri. |
45
51
|**`vpn-helper/`**| Binario di supporto per **operazioni privilegiate** su Windows (creazione/rimozione TUN, route, DNS) tramite API Win32. In `vpn-core` esistono moduli (`dns`, `routes`) pensati per **invocare** questo eseguibile quando si integrano quelle funzionalità; il legame è da considerare **di infrastruttura** rispetto alla GUI. |
46
52
47
53
### In sintesi
48
54
49
-
-**Utente finale:** usa solo il risultato della build di **`vpn-app`** (MSI / installer).
55
+
-**Utente finale:** usa solo il risultato della build di **`vpn-app`** (MSI / installer) oppure gli installer delle **[Release](https://github.com/oceanor/PoliVPN/releases)** su GitHub.
50
56
-**Manutenzione del protocollo e della connessione:** si lavora principalmente su **`vpn-core`** e sul backend in **`vpn-app/src-tauri`**.
51
57
-**`vpn-cli`** e **`vpn-helper`** sono complementi nel repo (debug / operazioni di sistema), non “altri programmi” che l’utente debba cercare e installare da sé, salvo decisioni future di packaging esplicito.
52
58
53
59
---
54
60
55
61
## Requisiti
56
62
63
+
**Solo esecuzione del client installato**
64
+
65
+
- Dagli artefatti precompilati nelle **[Release](https://github.com/oceanor/PoliVPN/releases)** non servono toolchain di sviluppo (**Rust**, **Node/npm**, ecc.): installi l’MSI (Windows) o il bundle macOS pubblicato nella release e utilizzi l’applicazione. Restano comunque richiesti i **permessi amministrativi** laddove il sistema operativo e il driver TUN lo richiedano.
-**Windows:** privilegi **Amministratore** per creazione TUN e modifiche di routing/DNS; **`wintun.dll`** per architettura corretta viene recuperata automaticamente in build (rete o copia manuale in `vpn-app/src-tauri/resources/` se serve build offline). Consultare licenza e note nello zip ufficiale Wintun.
70
+
-**Windows:** privilegi **Amministratore** per creazione TUN e modifiche di routing/DNS durante l’uso; per compilare da sorgente serve la **`wintun.dll`** per l’architettura di build nella cartella **`vpn-app/src-tauri/resources/`**, come nell’installer precompilato (vedi **`vpn-app/src-tauri/build.rs`** per la preparazione nel tuo checkout). Licenza come da materiale su [wintun.net](https://www.wintun.net/).
-**WiX Toolset v3** (o scaricato automaticamente dal bundler Tauri in molti ambienti) per generare l’**MSI**.
61
73
@@ -116,12 +128,12 @@ Spesso si confonde il file **`.env`** (tipico dei progetti Node) con quanto serv
116
128
117
129
| Domanda | Risposta |
118
130
|--------|----------|
119
-
| Serve il file **`.env`**? |**No, non è obbligatorio.** È solo **uno dei modi** per dare gateway/porta alla build in locale: è in **`.gitignore`**, quindi **non finisce su GitHub** se non forzi il commit. Alternativa equivalente: file **`polivpn.build.env`** (anche questo **ignorato**, mai da committare con IP/porta reali). |
120
-
| Cosa **committare** senza esporre configurazioni? |**`[.env.example](.env.example)`** (placeholder nella radice). In CI definire **`POLIVPN_*`** come segreti o variabili protette nel runner. |
131
+
| Serve il file **`.env`**? |**No, non è obbligatorio.** È solo **uno dei modi** per dare gateway/porta alla build in locale: è in **`.gitignore`**, quindi **non finisce su GitHub** se non forzi il commit. Alternativa equivalente: file **`polivpn.build.env`** (anche questo **ignorato**, non versionare con valori riservati se il repo è condiviso). |
132
+
| Cosa **committare**? |**`[.env.example](.env.example)`** (placeholder nella radice). In CI definire **`POLIVPN_*`** come variabili del runner se vuoi default di build lì. |
121
133
| Come legge la build i default MSI? |`vpn-app/src-tauri/build.rs` legge dalla radice, in ordine: **`polivpn.build.env`**, poi **`.env`**. Chiavi supportate: `POLIVPN_DEFAULT_GATEWAY`, `POLIVPN_DEFAULT_PORT`, `POLIVPN_VPN_TYPE` (o alias `VPN_TYPE`), `POLIVPN_TITLE` (o alias `TITLE`). Se assenti, puoi esportare le stesse variabili nella **shell** prima di `cargo tauri build`. |
122
134
|`.env.example` viene letto dalla build? |**No.** Copiarlo nella radice come **`.env`** o **`polivpn.build.env`**, che la build legge nell’ordine indicato sopra. |
123
135
124
-
#### Gateway e porta cablati nell’MSI (distribuzione istituzionale)
136
+
#### Gateway e porta cablati nell’MSI (distribuzione)
125
137
126
138
Per un MSI che propone **gateway e porta Fortinet** già compilati nel binario: all’avvio vengono **precompilati** nel client; **non** sono bloccati — l’utente può modificarli prima di connettersi (come per una build senza queste variabili).
Gateway e porta **non** sostituiscono utente e password: indicano solo **a quale server** collegarsi (non sono segreti crittografici, ma conviene non pubblicare URL interni su repo aperti). Per sedi o gateway diversi servono in genere **MSI distinti** (in alternativa futura: config distribuita da policy senza ricompilare).
169
-
170
-
---
171
-
172
-
## Utilizzo (linee guida)
173
-
174
-
1. Ottenere da **IT / responsabile sistema informativo** l’URL del gateway SSL-VPN autorizzato per il Policlinico (non pubblicare credenziali o URL interni nel README o negli issue pubblici).
175
-
2.**Windows:** eseguire il client con privilegi elevati quando richiesto per il TUN.
176
-
3. Consultare la finestra **Log** in caso di errori di connessione e allegare estratti **anonimizzati** (senza password né cookie di sessione) quando si aprono segnalazioni.
177
-
4. Se chiudi la finestra mentre la VPN è connessa, l’app chiede se disconnettere prima di uscire. Se era connessa e l’app viene chiusa senza disconnettere, al riavvio il pulsante torna **Disconnetti** (tunnel TLS/TUN non sopravvive alla chiusura; serve disconnettere o riconnettersi per ripristinare il traffico VPN).
178
-
179
-
---
180
-
181
-
## Credenziali, GitHub e conservazione dei segreti
182
-
183
-
### Comportamento attuale dell’app
184
-
185
-
-**Interfaccia grafica (Tauri):** con «Ricordali», **gateway**, **porta** e **password** non finiscono nel codice sorgente: vengono salvati nel **Keyring di sistema** ([crate `keyring`](https://docs.rs/keyring)) con i feature di piattaforma abilitati in `Cargo.toml` (Windows: Gestione credenziali; macOS: Portachiavi; Linux: storage nativo). Il sistema operativo li custodisce in modo **protetto** (non sono file di testo nel repository). Le voci salvate in precedenza senza campo `port` continuano a funzionare (si usa la porta già mostrata nel modulo dopo il default di build o 443). Il salvataggio avviene **dopo** che la VPN risulta connessa.
186
-
-**Solo username nell’ultimo accesso:** in `localStorage` del WebView viene memorizzato il nome utente (`polivpn_last_user`) per precompilare il modulo: è una scelta di comodità; la **password non** è nel `localStorage`.
187
-
-**`vpn-cli`:** oggi accetta gateway e password come **argomenti da riga di comando** (comodi per test, rischiosi per la cronologia della shell: preferire variabili d’ambiente se estenderete la CLI).
188
-
189
-
### Cosa va bene mettere su GitHub (standard industry)
|**`.env.example`**| Unico schema committato per i default di compilazione (**`POLIVPN_*`**). La build legge **`polivpn.build.env`** poi **`.env`** nella radice, non questo file direttamente. |
195
-
196
-
**Regola:** mai password, token o cookie di sessione in commit, issue o screenshot pubblici.
197
-
198
-
### Plaintext nel repo vs cifratura gestita dall’app
199
-
200
-
-**Plaintext delle credenziali nel repository:** da **evitare sempre**.
201
-
-**Plaintext in file sulla macchina dell’utente (es. `credenziali.txt`):** sconsigliato per le password; il pattern desktop corretto è proprio **Keyring / Portachiavi**.
202
-
-**Cifratura custom nell’app:** ha senso solo se non si può usare il keyring (es. export portabile crittografato): introduce gestione chiavi, aggiornamenti e audit più complessi. Per questo progetto il **keyring OS** è lo standard adeguato.
203
-
204
-
Il repository include **[`.env.example`](.env.example)** e **`.gitignore`** per distinguere configurazione locale da ciò che va su GitHub.
180
+
Gateway e porta **non** sostituiscono utente e password: indicano solo **a quale server** collegarsi. Per sedi o gateway diversi servono in genere **MSI distinti** (in alternativa futura: config distribuita da policy senza ricompilare).
205
181
206
182
---
207
183
208
184
## Sicurezza e conformità
209
185
210
186
- Il progetto può essere configurato per accettare certificati TLS non standard nel contesto di gateway interni; questo **riduce le garanzie usuali di TLS**. Usare solo su reti e gateway di cui ci si fida e come da policy aziendale.
211
187
-**Non è un prodotto Fortinet ufficiale** né è affiliato a Fortinet. Il marchio FortiClient / Fortinet è proprietà dei rispettivi titolari.
212
-
- Per pubblicazione su GitHub: valutare l’aggiunta di una **LICENSE** esplicita e di una policy di **security disclosure** se il repository diventa pubblico.
188
+
- Per pubblicazione su GitHub: valutare l’aggiunta di una **LICENSE** esplicita e di una policy di **security disclosure** se il repository è o diventa pubblico.
213
189
214
190
---
215
191
216
192
## Contribuire
217
193
218
-
Issue e pull request sono benvenute (documentazione, robustezza, supporto macOS, packaging). Mantenere gli esempi privi di dati clinici e di credenziali reali.
194
+
Issue e pull request sono benvenute (documentazione, robustezza, supporto macOS, packaging). Mantieni gli esempi senza dati personali né credenziali reali.
219
195
220
196
---
221
197
@@ -226,4 +202,4 @@ Issue e pull request sono benvenute (documentazione, robustezza, supporto macOS,
226
202
227
203
---
228
204
229
-
*README orientato al contesto del Policlinico di Catania; il nome “PoliVPN” è usato in senso descrittivo (“VPN per il Policlinico”) e non implica un marchio registrato oltre quanto dichiarato dal maintainer del repository.*
205
+
*Il nome “PoliVPN” è storico/decorative; puoi rinominarlo nel branding del tuo fork o build personalizzata.*
0 commit comments