использую следующий документ на получение для IP блока от текстового файла в брандмауэр окон.
Я использую окна 2 008 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
Проблема, этот сценарий создает 1 отдельное правило для каждого заблокированного IP.
Там какой-либо путь состоит в том, чтобы создать меньше правил с несколькими, дюйм/с запретил на том же правиле? Насколько я помню, что каждое правило имеет максимум 200 позволенных запрещенных дюйм/с. Таким образом, когда IP-адрес 201 найден, он должен создать новое правило. Таким образом, если у нас есть 1 000 дюйм/с для блокирования его, создаст всего 5 правил x 200 IP на правило вместо 1 000 правил.
Надо надеяться, кто-то может помочь мне.Спасибо
Для простого случая < 200 IP-адресов сначала нужно выполнить итерацию через файл и получить все IP-адреса в одну строку. Затем вы можете вызвать команду netsh дважды за пределами цикла (один раз для входящего трафика и один раз для исходящего).
Для того, чтобы она могла справиться с более чем 200 IP-адресами, я добавил в цикл счетчик for. Как только вы превысите 200 IP адресов, он вызовет команду netsh и сбросит счетчик IP перед тем, как продолжить зацикливание файла. В результате вы получите серию правил в формате "Blockitn", где n - это число.
Единственная секция, в которой я не уверен, это список и удаление директив вверху. Чтобы они заработали корректно, скрипту необходимо знать, сколько существует соответствующих правил 'Blockit'. Лучшее, что я смог придумать, это перечислить их и передать результаты через findstr в цикле for. Однако я не уверен, что это работает правильно. Я буду продолжать работать над этим, но подумал, что поместил бы это сейчас, так как там почти - и, надеюсь, вы сможете вычислить последний бит :)
Обратите внимание на добавление директивы enabledelayedexpansion рядом с верхней - это позволяет нам использовать переменные стиля !VAR!, которые не будут расширяться во время инициализации, а только во время выполнения. Иначе последняя переменная IPADDR будет содержать только последний IP в текстовом файле.
@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
В стороне, на моем месте я бы, наверное, изучил Powershell для такого рода вещей (или вообще любой скриптинг на полу-современной платформе Microsoft). Как только вы освоите его, вы поймете, что он намного намного более интуитивен, чем пакетные файлы.
(P.S. - Для любого эксперта по пакетным файлам, читающего это, не стесняйтесь предложить лучшую альтернативу - я сам не эксперт!)
См. Раздел «Предостережения и отказ от ответственности» на http://cyber-defense.sans.org/blog/2011/10/25/windows-firewall-script- блок-адреса-сетевые-диапазоны , а затем посмотрите, как работает их сценарий Import-Firewall-Blocklist.ps1.