Bloccare accesso Internet per un programma Windows

Abbiamo realizzato due script PowerShell che permettono di bloccare le comunicazioni in ingresso e in uscita da parte di qualunque programma installato sul sistema Windows. Le regole firewall vengono create automaticamente e sono gestibili con una semplice istruzione.

Non serve reinventare la ruota: il firewall di Windows integra tutto il necessario per bloccare il traffico dati generato da un qualunque programma installato, così come dai componenti di sistema. Nonostante sia stato spesso “bistrattato”, Windows Firewall permette di bloccare sia il traffico in ingresso che quello in uscita facendo in modo che qualunque applicazione non possa né inviare né ricevere un solo byte di dati: Cos’è il firewall e come funziona quello di Windows.

Nell’articolo Firewall di Windows, come configurarlo e migliorarne il comportamento abbiamo presentato Windows Firewall Control, un’applicazione gratuita di proprietà di Malwarebytes che si occupa proprio di ottimizzare la configurazione del firewall integrato nel sistema operativo, segnalando ad esempio ogniqualvolta un’applicazione tenta di collegarsi a server remoti e su quali porte.

Ma se si installasse un nuovo programma e si volesse verificarne il funzionamento senza che questo inizi a trasferire dati da e verso server remoti? Come fare per bloccare a scopo cautelativo ogni comunicazione senza appoggiarsi a Windows Firewall Control?
Una soluzione potrebbe essere quella di creare una macchina virtuale isolata con Virtualbox, VMware, Hyper-V o con altre soluzioni per la virtualizzazione. Non specificando l’utilizzo di alcuna scheda di rete virtuale, il programma installato non potrà mai accedere a Internet. In alternativa, proponiamo di seguito una semplice soluzione basata sull’utilizzo di PowerShell.

Bloccare l’accesso Internet per tutti gli eseguibili contenuti in una cartella e nelle relative sottocartelle

Abbiamo creato per voi due semplici script PowerShell che consentono di bloccare tutte le comunicazioni in ingresso e in uscita (inbound e outbound) per tutti i file eseguibili contenuti nella cartella specificata.

Si supponga di aver temporaneamente disattivato l’accesso la scheda di rete (Ethernet o WiFi) premendo la combinazione di tasti Windows+R, digitando ncpa.cpl, cliccando con il tasto destro e scegliendo Disabilita.

Dopo aver installato l’applicazione di proprio interesse, si dovrà annotare il percorso in cui essa risulta installata quindi premere Windows+X e scegliere Windows PowerShell (amministratore).

A questo punto, sostituendo a C:\CARTELLA il percorso completo della cartella contenente i file da bloccare (gli eseguibili che non devono poter inviare e ricevere dati via Internet), verranno automaticamente create le corrispondenti regole in Windows Firewall.

Per bloccare tutto il traffico in uscita per gli eseguibili contenuti nella cartella indicata:

$d='C:\CARTELLA'; Get-ChildItem -Path "$d\*.exe" -Recurse | Select-Object -ExpandProperty Name | ForEach-Object { New-NetFirewallRule -DisplayName "Bloccato da PowerShell $_ (out)" -Direction Outbound -Action Block -Profile Any -Enabled True -Program $d"\"$_ }

Per bloccare tutto il traffico in ingresso per gli eseguibili contenuti nella cartella indicata:

$d='C:\CARTELLA'; Get-ChildItem -Path "$d\*.exe" -Recurse | Select-Object -ExpandProperty Name | ForEach-Object { New-NetFirewallRule -DisplayName "Bloccato da PowerShell $_ (in)" -Direction Inbound -Action Block -Profile Any -Enabled True -Program $d"\"$_ }

Premendo Windows+R quindi digitando wf.msc e premendo Invio, le regole appena aggiunte appariranno nelle sezioni Regole in uscita e Regole in entrata del firewall di Windows.

Nel caso in cui si volessero in seguito eliminare le varie regole create senza passare per la finestra di Windows Defender Firewall con sicurezza avanzata, basterà impartire – sempre dalla finestra di PowerShell aperta con i diritti amministrativi – quanto segue:

Get-NetFirewallRule | ? DisplayName -like 'Bloccato da PowerShell*' | Select-Object DisplayName | ForEach-Object { Remove-NetFirewallRule -DisplayName $_.DisplayName }

Va tenuto presente che quest’ultimo script, avviato così com’è, eliminerà in un colpo solo tutte le regole firewall che hanno come prefisso “Bloccato da PowerShell” (notare l’uso della wildcard *).

In entrambi i casi, per raggiungere l’obiettivo prefisso, abbiamo utilizzato la pipeline di PowerShell dapprima estraendo i nomi degli eseguibili contenuti nella cartella indicata dall’utente e poi usando il comando New-NetFirewallRule per creare una nuova regola firewall (passando in input il nome dell’eseguibile per la stringa descrittiva della regola e il percorso completo per le regole connessioni in entrata e uscita).

Per bloccare un programma limitandosi agli eseguibili contenuti nella cartella indicata nella variabile $d e non nelle sue sottocartelle, basterà rimuovere il parametro -Recurse. Bello, vero?

Ti consigliamo anche

Link copiato negli appunti