# RDP-FIDO-GATE — installazione e configurazione (passo dopo passo)

Desktop remoto (RDP) sicuro con una **barriera obbligatoria a chiave hardware FIDO2/WebAuthn**. La porta RDP
resta sempre bloccata dal firewall e si apre **solo per il tuo IP, per circa 90 secondi**, dopo che hai toccato
la chiave. Richiede Windows 10 1903+ (WebAuthn + Windows Firewall). Non esiste un servizio ospitato — lo
scarichi e lo installi da solo.

Due componenti e le loro porte:

| Componente | Dove viene eseguito | Porte |
|-----------|---------------|-------|
| **Gate** | macchina di destinazione (il PC a cui ti connetti) | **7440/TCP** — controllo + conferma FIDO; **3389/TCP** — RDP (aperta su richiesta) |
| **Client** | la tua macchina | connessioni in uscita verso le porte 7440 e 3389 dell'host |

---

## Step 1. Host — installare il gate

1. Scarica e decomprimi `RdpFidoGate-Host.zip` sulla macchina di destinazione.
2. Esegui **come amministratore**:
   ```powershell
   powershell -ExecutionPolicy Bypass -File Install-Gate.ps1
   ```
   (porta del gate predefinita 7440 e finestra di accesso di ~90s; puoi impostare `-Port` e `-GrantSeconds`).
3. Lo script abilita Remote Desktop (con NLA), **chiude la 3389 nel firewall**, avvia il servizio del gate
   sulla **7440** e stampa un **codice monouso** per registrare la prima chiave.
4. **Annota:** l'indirizzo dell'host (nome / IP pubblico), la porta **7440** e il **codice** monouso.

---

## Step 2. Inoltro delle porte del router (se l'host è dietro NAT/un router) — RICHIESTO per l'accesso da internet

Se ti connetti **da internet** e la macchina di destinazione si trova dietro un router domestico/d'ufficio, devi
**inoltrare due porte** sul router verso l'indirizzo LAN dell'host. Senza questo il client non raggiunge
né il gate né RDP.

Inoltra (Port Forwarding / Virtual Servers / NAT nell'amministrazione del router):

| Porta esterna | Protocollo | → IP interno (LAN dell'host) | Porta interna |
|---------------|----------|--------------------------|---------------|
| **7440** | TCP | `192.168.x.x` (IP LAN dell'host) | **7440** |
| **3389** | TCP | stesso IP LAN dell'host | **3389** |

Procedura:
1. Trova l'IP LAN dell'host: `ipconfig` → "Indirizzo IPv4" (ad es. `192.168.1.50`).
2. **Riserva quell'indirizzo** per l'host (prenotazione DHCP per MAC nel router) — altrimenti potrebbe cambiare.
3. Nel router: **Port Forwarding / Virtual Servers** → aggiungi le due regole della tabella
   (porta esterna = porta interna, protocollo TCP, IP interno = LAN dell'host).
4. Trova il tuo **IP pubblico** (sull'host apri `https://api.ipify.org`, oppure il "WAN IP" del router). Se il tuo
   IP è **dinamico**, configura il **DDNS** (nel router o tramite no-ip/DuckDNS) e usa il nome DDNS invece dell'IP.

> Sicurezza: solo il gate (7440) è in ascolto verso l'esterno. RDP (3389) è **chiuso** dall'esterno finché non
> confermi con la chiave — poi si apre in modo ristretto, solo per il tuo IP, per ~90s. Inoltrare la 3389 non
> concede l'accesso di per sé; lascia soltanto passare attraverso il router la "finestra" temporanea.

---

## Step 3. Client — installare e registrare

1. Installa il client: `RdpFidoClient.exe` (il corrispondente `RdpFidoGate.exe` è incluso).
2. **Attivazione** tramite AccountServer: inserisci la tua e-mail → ti viene inviato un codice per posta → inseriscilo.
   Periodo di tolleranza per l'attivazione di 14 giorni; livello gratuito = fino a 10 sessioni salvate, a pagamento = nessun limite.
3. **Aggiungere una sessione:**
   - Indirizzo: l'IP pubblico o il nome DDNS dell'host (dallo Step 2), oppure l'indirizzo LAN se sei sulla stessa rete.
   - Porta del gate: **7440**.
   - Inserisci il **codice monouso** dallo Step 1 e **registra la tua chiave FIDO2** (tocca).

---

## Step 4. Connettersi

Scegli la sessione → **tocca la chiave** → il gate la verifica e **apre la 3389 per il tuo IP corrente per
~90s** → il client avvia `mstsc` e ti connette automaticamente. Ogni 30s il gate riafferma il
blocco, così la finestra rimane ristretta e limitata all'IP.

---

## Verifica e risoluzione dei problemi

- Dal client: `Test-NetConnection <public-ip-or-DDNS> -Port 7440` → dovrebbe dare
  `TcpTestSucceeded : True`. Se `False` — la porta 7440 non è inoltrata, oppure il firewall dell'host la blocca.
- La porta **3389 è chiusa dall'esterno finché non confermi con la chiave** — è previsto (non testarla prima del tocco).
- "La sessione non si apre": verifica che 1) il servizio del gate sia in esecuzione sull'host, 2) **entrambe** le porte
  siano inoltrate sul router verso l'IP LAN attuale dell'host, 3) l'IP pubblico non sia cambiato (usa il DDNS se è dinamico).
- Più host dietro un unico router: usa porte esterne distinte (ad es. host-2 → esterna 7441→7440,
  3390→3389) e inserisci quelle porte esterne nella sessione del client.

---

## Disinstallazione

Sull'host, come amministratore: `powershell -ExecutionPolicy Bypass -File Uninstall-Gate.ps1`
(rimuove il servizio, ripristina le regole del firewall). Poi, facoltativamente, rimuovi le regole di inoltro delle porte sul router.
