Firewall di Windows, netsh, blocca tutti ips da un file di text

sto usando la seguente scrip per bloccare i file ip da un file di text nel firewall di Windows.

Sto usando windows 2008 R2

@echo off if "%1"=="list" ( netsh advfirewall firewall show rule Blockit | findstr RemoteIP exit/b ) :: Deleting existing block on ips netsh advfirewall firewall delete rule name="Blockit" :: Block new ips (while reading them from blockit.txt) for /f %%i in (blockit.txt) do ( netsh advfirewall firewall add rule name="Blockit" protocol=any dir=in action=block remoteip=%%i netsh advfirewall firewall add rule name="Blockit" protocol=any dir=out action=block remoteip=%%i ) :: call this batch again with list to show the blocked IPs call %0 list 

Il problema è che questo script sta creando una regola separata per each IP bloccato.

C'è un modo per creare minori regole con più ips vietati alla stessa regola? Per quanto mi ricordo che each regola ha un massimo di 200 licenziatari autorizzati. Quindi, quando viene trovato il numero IP 201, dovrebbe creare una nuova regola. In questo modo, se abbiamo 1000 ips per bloccarlo, creeremo solo 5 regole x 200 ip per regola anziché 1000 regole.

Speriamo che qualcuno possa aiutarmi. Grazie

  • Ottieni il codice di errore dell'ultimo command shell
  • Temporizzazione dei programmi in Windows
  • L'entrata del file host dipende dal proprio IP?
  • Come posso impostare (inizializzare, partizionare e formattare) un disco utilizzando Powershell?
  • C'è un server SSH certificato da Microsoft?
  • windows 2008 Sito DNS senza www?
  • Cambiare il fuso orario senza tzutil - Windows Web Server 2008
  • catrame su windows e collegamenti simbolici
  • 2 Solutions collect form web for “Firewall di Windows, netsh, blocca tutti ips da un file di text”

    Per il caso semplice di <200 IP è necessario prima eseguire l'iterazione attraverso il file e get tutti gli indirizzi IP in una singola string. Quindi è ansible call il command netsh due volte al di fuori del ciclo (una volta per il traffico in entrata e una volta per l'output).

    Per permettergli di far fronte a più di 200 IP ho aggiunto un contatore nel for loop. Una volta superato 200 IP, chiamerà il command netsh e ripristinerà il contatore IP prima di continuare a passare attraverso il file. Il risultato finale dovrebbe essere che si finisce con una serie di regole nel formato "Blockit n ", where n è un numero.

    La sezione in cui sono incerto è l'elenco e le direttive sono eliminate in cima. Per poterli funzionare correttamente, lo script deve sapere quante regole "Blockit" rilevanti esistono. Il meglio che posso fare è elencarle e passare i risultati attraverso un findstr in un for loop. Non sono sicuro che sta funzionando bene. Continuerò a lavorare su di esso, ma ho pensato che avrei postato questo ora come è quasi lì – e speriamo che si possa capire l'ultimo bit 🙂

    Nota l'aggiunta della direttiva enabledelayedexpansion vicino alla parte superiore – questo ci permette di utilizzare! VAR! variables di stile che non saranno espanse durante l'initialization; solo in esecuzione. Altrimenti la variabile finale IPADDR contengono solo l'ultimo IP nel file di text.

     @echo off setlocal enabledelayedexpansion if "%1"=="list" ( SET /A RULECOUNT=0 for /f %%i in ('netsh advfirewall firewall show rule name^=all ^| findstr Blockit') do ( SET /A RULECOUNT+=1 netsh advfirewall firewall show rule Blockit!RULECOUNT! | findstr RemoteIP ) SET "RULECOUNT=" exit/b ) REM Deleting existing block on ips SET /A RULECOUNT=0 for /f %%i in ('netsh advfirewall firewall show rule name^=all ^| findstr Blockit') do ( SET /A RULECOUNT+=1 netsh advfirewall firewall delete rule name="Blockit!RULECOUNT!" ) SET "RULECOUNT=" REM Block new ips (while reading them from blockit.txt) SET /A IPCOUNT=0 SET /A BLOCKCOUNT=1 for /f %%i in (blockit.txt) do ( SET /A IPCOUNT+=1 if !IPCOUNT! == 201 ( netsh advfirewall firewall add rule name="Blockit!BLOCKCOUNT!" protocol=any dir=in action=block remoteip=!IPADDR! netsh advfirewall firewall add rule name="Blockit!BLOCKCOUNT!" protocol=any dir=out action=block remoteip=!IPADDR! SET /A BLOCKCOUNT+=1 SET /A IPCOUNT=1 set IPADDR=%%i ) else ( if not "!IPADDR!" == "" ( set IPADDR=!IPADDR!,%%i ) else ( set IPADDR=%%i ) ) ) REM add the final block of IPs of length less than 200 netsh advfirewall firewall add rule name="Blockit!BLOCKCOUNT!" protocol=any dir=in action=block remoteip=!IPADDR! netsh advfirewall firewall add rule name="Blockit!BLOCKCOUNT!" protocol=any dir=out action=block remoteip=!IPADDR! SET "IPCOUNT=" SET "BLOCKCOUNT=" SET "IPADDR=" REM call this batch again with list to show the blocked IPs call %0 list 

    Come da parte, se fossi io, probabilmente cercherò di imparare Powershell per questo tipo di cose (o di qualsiasi script su una piattaforma semi-moderna di Microsoft). Una volta ottenuto l'appendice, trovenetworking molto più intuitivo dei file batch.

    (PS – Per tutti gli esperti di file batch che leggono questo, sentitevi liberi di suggerire una migliore alternativa – non sono un esperto!)

    Guarda la sezione "Avvisi e diritti legali" in http://cyber-defense.sans.org/blog/2011/10/25/windows-firewall-script-block-addresses-network-ranges e poi guarda come i loro Scrive Import-Firewall-Blocklist.ps1.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.