Найдите и измените правило брандмауэра в PowerShell с помощью Get-NetFirewallRule / PortFilter / AddressFilter

То, что я пытаюсь сделать, кажется простым, но мне нужна помощь, чтобы связать все части вместе.

Я хочу выполнить поиск по всем правилам брандмауэра на основе локального порта и протокола (например, 3389 TCP), а затем, если я его найду, убедитесь, что RemoteAddress установлен на x.x.x.x. Если я не найду, добавьте его.

Кажется, я не могу понять, как связать вместе Get-NetFirewallPortFilter, Get-NetFirewallAddressFilter и Get-NetFirewallRule, чтобы делать то, что я хочу.

У нас есть шлюз удаленного рабочего стола и многофакторная аутентификация, и в рамках соответствия все подключения RDP должны проходить через RDGateway, чтобы использовался двухфакторный. В брандмауэре есть правило, но я хочу найти способ принудительно применить его при массовом использовании Powershell (в элементе соответствия SCCM) также на уровне брандмауэра Windows. Конечно, я мог бы сделать объекты групповой политики, но я хочу иметь возможность сообщать о соответствии, поэтому я пытаюсь сделать это через System Center Configuration Manager.


person Chuck Herrington    schedule 04.01.2018    source источник
comment
Поделитесь кодом, если можете - он дает нам представление о том, какой уровень помощи вам нужен. Если вы действительно заблудились, начните с малого: постарайтесь понять, как найти именно те правила, которые вы хотите, не слишком беспокоясь о том, как вы собираетесь их изменить.   -  person Charlie Joynt    schedule 05.01.2018
comment
Вы также можете поискать правила, разрешающие все порты с других адресов. Наряду с проверкой того, что RDP работает на ожидаемом порту. Кроме того, правила запрета имеют приоритет, поэтому вы можете запретить блокировку IP.   -  person Ryan McVicar    schedule 05.01.2018
comment
Документ get-netfirewallportfilter содержит множество соответствующих примеров: docs.microsoft.com/en-us/powershell/module/netsecurity/   -  person js2010    schedule 20.09.2019


Ответы (2)


Фу. Я верю, что это сработает. Вы можете направить эти штуки в обе стороны. Я считаю, что это говорит само за себя, но на моем компьютере это занимает 2 минуты. По крайней мере, у меня есть индикатор выполнения. Вывод whatif на самом деле неверен. Это имя, а не отображаемое имя.

РЕДАКТИРОВАТЬ: О, я понимаю. Это намного быстрее без первой команды. Думаю, в том-то и дело. Я никогда не понимал. Это похоже на параметр -filter для других команд, таких как get-childitem, которые делают его быстрее. Get-NetfirewallPortFilter фактически возвращает имя правила брандмауэра, если вы посмотрите на все свойства.

# Get-NetFirewallRule | 
Get-NetFirewallPortFilter -Protocol TCP | 
Where LocalPort -eq 3389 | Get-NetFirewallRule | 
Set-NetFirewallRule -RemoteAddress 192.168.1.1 -WhatIf

Выход:

What if: Set-NetFirewallRule DisplayName: RemoteDesktop-UserMode-In-TCP
person js2010    schedule 20.09.2019

Перенос каждой команды по конвейеру принимает входные данные и фильтрует до конца, где ваш результат показывает список областей (RemoteAddress) путем раскрытия выбранного свойства, которое затем можно использовать для редактирования набора. Каждая команда показывает подмножество предыдущей ...

Get-NetFirewallRule -DisplayName «Разрешить порт 3389 - доступ RDP» | Get-NetFirewallAddressFilter | Выбрать -expandproperty RemoteAddress

person Patrick Burwell    schedule 20.09.2019
comment
Спасибо, что ответили. Добавьте текст, чтобы объяснить, как работает ваше решение. - person Kirby; 20.09.2019