Создание правила с помощью API брандмауэра Windows, которое применяется ко всем приложениям, запускаемым службой.

Я пытаюсь настроить правило брандмауэра для службы Windows, чтобы запретить все входящие и исходящие соединения TCP и UDP, за исключением белого списка хостов и портов, используя API защиты служб Windows, следуя примеру VBScript здесь.

Теперь эта служба может порождать новые процессы (поскольку это агент непрерывной интеграции и тестирования), поэтому недостаточно просто установить NewOutboundRule.ApplicationName = "%systemDrive%\WINDOWS\system32\svchost.exe", как в приведенном выше примере скрипта — мне нужно правило, которое будет применяться ко всем приложения, запускаемые службой.

Однако, если я попытаюсь настроить новое входящее правило, в котором якобы необязательное свойство ApplicationName не указано в INetFw вызов для добавления нового правила завершается сбоем (в строке wshRules.Add NewOutboundRule в приведенном выше скрипте). Все остальное правильно, как будто я указываю ApplicationName, вызов проходит успешно.

Есть ли способ создать правила, применимые ко всем возможным значениям ApplicationName, или какой-то альтернативный способ сделать это?


person mpeac    schedule 14.06.2016    source источник
comment
Полагаю, если вы укажете имя службы, вы также должны указать имя приложения. Применяются ли правила обслуживания к дочерним процессам в первую очередь? Возможно, вам потребуется заставить саму службу устанавливать правила брандмауэра для своих дочерних элементов в режиме реального времени.   -  person Harry Johnston    schedule 15.06.2016


Ответы (1)


После некоторых экспериментов оказалось, что правила WSH работают следующим образом: вызов INetFwServiceRestriction::RestrictServicerestrictService=TRUE) должен содержать только имя основного исполняемого файла, который вызывается для запуска службы. Если этот процесс порождает новый процесс, используя любой другой исполняемый файл, по умолчанию для этого нового процесса блокируются ВСЕ входящие и исходящие сетевые подключения. Это верно, даже если исключения были добавлены для основного исполняемого файла через INetFwServiceRestriction::Rules.

Таким образом, если вторичным исполняемым файлам, запускаемым службой, требуется доступ к сети, необходимо также добавить явные INetFwRule исключения для этих исполняемых файлов. Это имеет смысл - вызов RestrictService блокирует все, а затем можно добавить белый список исключений, в который входят имена приложений.

person mpeac    schedule 25.06.2016