sergey vasin

The IT blog

Использование PowerShell для создания правил Windows Firewall – Hey, Scripting Guy! Blog

leave a comment »

Резюме: Microsoft Scripting Guy, Ed Wilson показывает как, используя Windows PowerShell, создать новое правило Windows Firewall как на локальной, так и на удаленных системах.

Включение правил брандмауэра с помощью Windows PowerShell

Я до сих пор пользуюсь утилитой ping для проверки включен ли компьютер или нет. Я знаю, что могу использовать Windows PowerShell и команды, вроде Test-WSMan для проверки работоспособности WinRM, однако старые привычки умирают медленно. По умолчанию в некоторых профилях на некоторых версиях Windows команда ping отключена. Это несколько усложняет жизнь по утрам, когда я могу просто забыть о таких вещах. Поэтому, я предпочитаю, чтоб ping был явным образом разрешен в настройках брандмауэра. После этого, если машина не отвечает на ping, я знаю, что мне нужно что-то предпринять.

К сожалению, хотя я могу воспользоваться командлетом Get-NetFireWallRule для получения информации об области действия и статусе правила, однако он не предоставляет никакой информации о настройках этого правила или о том, что оно делает. Это означает, что я не могу использовать командлет Get-NetFireWallRule для получения правила с целью использования его в качестве шаблона для создания нового правила. Кроме того, это означает, что я не могу создать новое правило, используя графический интерфейс и получить его настройки командлетом Get-NetFireWallRule, чтобы опять же использовать их при создании нового правила. Командет Get-NetFireWallRule больше полезен для аудита, нежели для конфигурации системы.

Создание нового правила

Для создания нового правила, разрешающего ping, я сначала импортирую модуль NetSecurity. Затем, я воспользуюсь командлетом New-NetFireWallRule для создания самого правила. Проблема в том, что я точно должен знать, что именно я хочу сделать. Если, к примеру, я не знаю, что ping – это протокол ICMPv4, а точнее ICMPType 8, тогда у меня нет шансов создать правило. В этом случае графический интерфейс более удобен – различные виды пакетов протокола ICMP представлены на соответствующей странице.

01

Но опять же, даже в графическом интерфейсе не указываются действительные типы ICMP. Поэтому, чтобы получить информацию, я должен либо уже знать это (в конце концов я написал книгу «Network Monitoring and Analysis»), либо я должен определить это, используя ping.

Я бы рекомендовал создать правило при помощи Windows PowerShell а затем проверить его в оснастке Windows Firewall with Advanced Security. Ниже приведено правило, разрешающее использование ping на сетевых интерфейсах с любым профилем (хотя я мог бы указать профили DOMAIN или PRIVATE)

Import-Module NetSecurity

New-NetFirewallRule -Name Allow_Ping -DisplayName «Allow Ping»`

  -Description «Packet Internet Groper ICMPv4» `

  -Protocol ICMPv4 -IcmpType 8 -Enabled True -Profile Any -Action Allow

Применяем правило для всем компьютеров с Windows Server 2012 и Windows 8

Первое, что мне необходимо сделать – это получить список всех моих компьютеров с операционной системой Windows Server 2012 и Windows 8. Я создал специальный фильтр для командлета Get-ADComputer, который позволяет получить только эти компьютеры. Также я указал учетные данные администратора.

Import-Module NetSecurity, ActiveDirectory

$cred = Get-Credential -Credential iammred\administrator

$cn = Get-ADComputer -Properties operatingsystem -Filter `

«Operatingsystem -like ‘windows 8 *’ -OR OperatingSystem -like ‘* 2012 *'»

Теперь я создам CIM-сессию к каждому из этих компьютеров. Для этого я укажу имя компьютера и учетные данные, необходимые для подключения. И хотя некоторые из компьютеров могут быть выключены, я не сильно обеспокоен этим фактом, поскольку команда создает подключения только с работающими машинами. Кроме этого, это упрощает код.

$CIM = New-CimSession -ComputerName $cn.name -Credential $cred

Затем я использую тот же самый командлет New-NetFireWallRule, который я использовал чуть раньше, но теперь я укажу, что хочу использовать CIM-сессии, содержащиеся в переменной $cim.

New-NetFirewallRule -Name Allow_Ping -DisplayName «Allow Ping»`

  -Description «Packet Internet Groper ICMPv4» `

  -Protocol ICMPv4 -IcmpType 8 -Enabled True -Profile Any -Action Allow `

  -CimSession $cim

Проверка внесения изменений

Поскольку переменная $cim уже содержит CIM-сессии, я могу использовать ее с командлетом Get-Net-FirewallRule для проверки того, что удаленные серверы и рабочие станции были правильно сконфигурированы предыдущей командой.

Get-NetFirewallRule -DisplayName «Allow Ping» -CimSession $cim |

  Select PSComputerName, name, enabled, profile, action |

  Format-Table –AutoSize

02

Кроме того, я хочу убедиться, что и сам ping работает как это требуется. Как вы помните, командлет Get-ADComputer вернул информацию обо всех компьютерах – как включенных, так и выключенных. Но переменная $cim содержит только CIM-сессии к рабочим компьютерам. К сожалению, командлет Test-Connection не принимает объекты CIM-сессий, но это не важно, так как он принимает массив имен компьютеров. С помощью функции автоматического раскрытия массивов я с легкостью могу получить имена компьютеров из переменной $cim.

Test-Connection -ComputerName $cim.computername -BufferSize 15 -Count 1

Команда и ее результаты приведены ниже.

PS C:\> Test-Connection -ComputerName $cim.computername -BufferSize 15 -Count 1

Source        Destination     IPV4Address      IPV6Address

——        ————     ————      ————

EDLT          DC2             192.168.0.102

EDLT          DC3             192.168.0.103

EDLT          DC4             192.168.0.104

EDLT          EDLT            192.168.3.228    fe80::bd2d:5283:5572:5e77%19

EDLT          HYPERV2         192.168.0.46

EDLT          HYPERV3         192.168.0.43

EDLT          SQL1            192.168.0.150

EDLT          WDS1            192.168.0.152

EDLT          WEB1            192.168.0.54

Автор:

Ed Wilson, Microsoft Scripting Guy

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2012/11/13/use-powershell-to-create-new-windows-firewall-rules.aspx


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Written by Сергей Васин

Ноябрь 16, 2012 в 12:57

Опубликовано в HeyScriptingGuyBlog, PowerShell

Tagged with

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s