Da qualche parte nell’edificio c’è una macchina che esegue un’applicazione che nessuno può sostituire, su un sistema operativo che non dovrebbe essere collegato a nulla. Partire dall’adattatore di rete di quell’host è il modo più rapido per capire dove deve stare il tunnel. Nella maggior parte dei progetti non appartiene affatto all’host. Spostalo di un salto su un gateway mantenuto e il vecchio problema si riduce all’applicazione con cui è iniziato.

Inizia dall’adattatore dell’host, non da un client VPN

Apri le proprietà dell’adattatore e assegna all’host un indirizzo fisso su un piccolo segmento dedicato, con il gateway come route predefinita. L’host non ha più bisogno di client del tunnel, credenziali del tunnel o voci della tabella di routing verso la rete aziendale più ampia. Se l’applicazione richiede una sola subnet remota, aggiungi esattamente quella route.

C:\> route add 10.20.30.0 mask 255.255.255.0 192.168.50.1 -p

Quel comando fissa un’unica destinazione al gateway e lascia tutto il resto non instradabile, ed è la forma che vuoi. Conferma il risultato con route print invece di fidarti del codice di uscita. Poi verifica che l’applicazione risolva ancora il nome del suo server, perché un host legacy con un resolver rotto sembra esattamente un guasto di rete, e riparare il resolver è un lavoro di cinque minuti mentre ricostruire un’applicazione dopo un cambio di rete sbagliato non lo è. Ogni destinazione che l’host non raggiunge è una cosa in meno a cui una vecchia pila di rete può essere indotta ad attaccare.

Metti il tunnel su hardware che puoi aggiornare

Il gateway vuole due interfacce: una verso il segmento dell’host e una verso il luogo in cui vive l’applicazione, con il tunnel che termina sulla seconda. Quel dispositivo può ricevere aggiornamenti firmware, sostituire la propria configurazione crittografica e registrare i flussi senza che nessuno tocchi la vecchia macchina. Il suo fornitore distribuisce anche correzioni per l’implementazione del tunnel, che l’host non riceverà mai. Due macchine e una scadenza non sono una ragione per copiare una ricetta a segreto statico da un post di un forum.

Assegna a ogni gateway la propria identità di peer invece di clonare una configurazione client su un’intera flotta. Quando un’unità viene sostituita, revoca la vecchia identità nello stesso momento in cui metti online la nuova, altrimenti ti ritrovi con due copie non controllate che si autenticano allo stesso endpoint. Conserva le chiavi dove le attende il piano di gestione del gateway, tratta un backup della configurazione come un segreto e verifica chi può inviare quella configurazione, perché ora decide a cosa può arrivare l’host legacy.

Consenti servizi, non reti

Scrivi la politica in termini di protocollo, porta e direzione tra i due collegamenti. Una sola porta consentita verso un solo indirizzo applicativo è la risposta abituale, e un percorso amministrativo tramite un jump host copre il resto.

L’amministrazione remota dell’host legacy non dovrebbe viaggiare sulla stessa regola dell’applicazione, e testare il rifiuto conta quanto scrivere la regola. Invia una richiesta dall’host verso una destinazione che ti aspetti venga rifiutata e conferma che il rifiuto arriva dalla politica e non da una route mancante. Registra i flussi che consenti finché il progetto è nuovo, così vedi cosa usa davvero l’applicazione e non cosa afferma la sua documentazione. Unire due subnet perché un tutorial con bridge sembrava più breve è il modo in cui un segmento legacy diventa silenziosamente un punto d’appoggio.

Non esporre il listener legacy direttamente a Internet come scorciatoia attorno al gateway. Tieni il percorso amministrativo separato dal percorso applicativo, così la compromissione di uno non consegna l’altro. Una regola che non viene mai esercitata è una regola che nessuno ha verificato, ed è per questo che la destinazione negata appartiene alla prova di accettazione.

Il ripristino deve funzionare senza il tunnel

Decidi chi aggiorna e ripristina il gateway prima del primo guasto e assicurati che quella persona possa raggiungerlo senza il tunnel che termina. L’accesso alla console, una porta di gestione locale o un percorso fuori banda contano tutti come risposte. Un gateway configurabile solo attraverso il tunnel che fornisce è una trappola che attende pazientemente un invio firmware sbagliato.

Scrivi il runbook per il guasto che incontrerai davvero: tunnel giù, gateway morto, disco dell’host sparito. Mantieni l’immagine di ripristino dell’host sotto qualunque accordo di supporto esista ancora, e ricorda che un ripristino ripristina anche lo stato software e le credenziali contenute in quell’immagine. Ripristina prima sul segmento isolato, conferma che l’applicazione si avvia e solo dopo ricollega qualcosa; quando il gateway cambia, aggiorna runbook e inventario nella stessa sessione.

Certificati, orologi e avvisi di firma

La scadenza del certificato di un programma di installazione non predice da sola ciò che dirà oggi un controllo di firma. Le indicazioni di Microsoft sui timestamp Authenticode spiegano che un timestamp può mantenere verificabile una firma dopo la scadenza del certificato di firma, e la convalida dipende ancora dalla firma, dalla catena di fiducia e dal verificatore che svolge il lavoro. Due macchine con archivi di fiducia diversi possono quindi non essere d’accordo sullo stesso file. Un firmatario scaduto non è prova che un binario sia malevolo, e una firma valida non è prova che il software sia mantenuto.

Non spostare indietro l’orologio di sistema e non disattivare i controlli di firma per far funzionare un vecchio programma di installazione. Ottieni un artefatto autorizzato da chi ancora supporta l’applicazione e lascia che dica cosa accetta la piattaforma. Tratta i post che affermano che una certa build sia stata l’ultima per XP come storia e non come obiettivo di installazione, perché il requisito reale dipende dall’applicazione; se il lavoro di conservazione è davvero necessario, tienilo su un segmento isolato lontano dall’accesso di produzione e documenta perché esiste.

Articoli correlati