По мотивам спонтанно возникшего обсуждения файрволлов и их правил.
Лезем разбираться со встроенным файром в Windows 8+. В Powershell наконец-то сделали целый набор команд, который позволяет управлять правилами местного межсетевого экрана. Как и все остальное, эти правила базируются на простых словах: New-/Get-/Set-/Remove-/Enable-/Disable-NetFirewallRule с соотвествующим набором ключей. Но как же "интересно" это все работает.
Итак, для примера создадим через Powershell сетевое правило для Блокнота (да, знаю, что бред, но убивали и за меньшее некоторые люди и на Калькуляторе файры тестировали ):

new-netfirewallrule -name "Test Rule" -displayname "Test Rule" -program "c:\windows\system32\notepad.exe" -direction outbound -protocol tcp -localport 11223 -remoteport 25 -group "Test Group"

Правило будет создано, автоматом будет включено, и, согласно последнему ключу, будет помещено в группу Test Group.

Казалось бы, все хорошо. Да не тут-то было:

В частности, будет начисто заблокирована возможность менять путь к контролируемой программе и порты, по которым она сможет общаться с сетью. В то же время если создать такое же правило в GUI руками - все работает. DAFUQ?

Проверяем одну маленькую догадку. Удаляем все созданные правила и создаем его заново:

new-netfirewallrule -name "Test Rule" -displayname "Test Rule" -program "c:\windows\system32\notepad.exe" -direction outbound -protocol tcp -localport 11223 -remoteport 25

То есть не записываем новое правило в какую-либо группу. На выходе получаем полностью редактируемое любыми средствами правило.

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

set-netfirewallrule -name "Test Rule" -remoteport 30

После чего обновляем GUI консоль с правилами и лезем в настройки. Удаленный порт, который изначально стоял равным 25, принял значение 30. То есть получается, что Windows (в данном случае 2012) все правила, добавленные в какие-либо группы, считает созданными ей же по-умолчанию, и ничего не дает менять через графику, но спокойно позволяет менять что-либо через черный ход Powershell. Чудны дела твои, MS, хотя подобный подход уже был реализован, например, в Exchange, где через графику даже видно далеко не все.

Ради интереса попробовал поиграться с группой, в которую это правило было утрамбовано. Нифига. Единственным методом исправить группу или удалить правило из группы - удалить правило и создать его в другой группе или вообще без нее, если нужно именно это. Более того, среди всех команд Powershell нет вообще ничего, что работало бы именно с группами, а не правилами. Печально это. Выходит, что старый netsh еще не совсем вышел из моды, а вот с ним мне подружиться так и не удалось