Вопрос или проблема
У меня есть скрипт ps, который срабатывает по событию Exchange 1035 (неудачная попытка входа на фронтальный порт 587). Скрипт извлекает IP-адрес из данных события, выполняет “whois” проверку и в зависимости от результата МОЖЕТ выбрать добавление нового правила фаервола для блокировки адреса с использованием
команды powershell: new-netfirewallrule -action Block -policystore {моя групповая политика для таких вещей}.
Сам скрипт выполняется под локальной учетной записью SYSTEM с установленными “максимальными привилегиями” в задаче события.
Вот пример того, как выглядит одна из команд:
: New-NetFirewallRule -DisplayName "Exch xxx.xxx.0.0/15" -Direction Inbound -Profile Any -Action Block -InterfaceType Any -Remoteaddress xxx.xxx.0.0/15 -policystore {domain\policy} -verbose
Вот в чем проблема: когда команда ‘new-netfirewallrule’ выполняется внутри скрипта ps, она очень часто завершает работу с ошибкой:
"New-NetFirewallRule : The requested object could not be found."
Дело в том, что я могу скопировать/вставить ТОЧНО ТУ ЖЕ САМУЮ КОМАНДУ и запустить ее из интерактивной сессии powershell, и она работает нормально – каждый раз.
Должно быть, я ‘что-то упускаю’, но я не знаю, что это может быть.
Есть идеи? Кто-нибудь?
]
Ответ или решение
Теория (Theory)
Проблема, которую вы описали, связана с выполнением команды New-NetFirewallRule
в PowerShell скрипте, который запускается в контексте события Exchange 1035, фиксирующим неудачные попытки логина к порту 587. Основная сложность заключается в том, что команда успешно выполняется при запуске из интерактивного сеанса PowerShell, но часто терпит неудачу при выполнении через скрипт, ссылаясь на ошибку "The requested object could not be found."
Есть несколько потенциальных причин, которые могут вызывать подобное поведение:
-
Контекст учетной записи: Скрипт выполняется под локальной учетной записью SYSTEM. Даже имея максимальные привилегии, учетная запись SYSTEM может иметь ограничения доступа к определённым сетевым ресурсам или политике группы.
-
Политика группы и конфигурация хранилища: Возможны проблемы с доступностью или правами на заданный "policystore". В интерактивной сессии вы можете иметь больше прав или использовать другой контекст входа, что объясняет, почему команда проходит успешно.
-
Синхронизация и рейс-кондитион (Race Condition): Если ваш скрипт пробегает сразу после события входа, возможно, он срабатывает до того, как система полностью зарегистрировала изменения политики.
-
Ограничения среды выполнения: Среда выполнения скрипта может быть ограничена по ресурсам или сетевым условиям, особенно когда запускается в автоматическом режиме.
Пример (Example)
Вы описали, что команда, вызванная вручную, всегда завершает выполнение успешно. Вот пример команды:
New-NetFirewallRule -DisplayName "Exch xxx.xxx.0.0/15" -Direction Inbound -Profile Any -Action Block -InterfaceType Any -Remoteaddress xxx.xxx.0.0/15 -policystore {domain\policy} -verbose
Смысл команды — создать новое правило межсетевого экрана, которое блокирует входящие подключения с указанных удалённых адресов.
Применение (Application)
Чтобы устранить возникшую проблему и обеспечить успешное выполнение команды New-NetFirewallRule
, вы можете предпринять следующие шаги:
-
Проверка прав доступа: Убедитесь, что учетная запись SYSTEM действительно имеет необходимые права доступа для выполнения изменений в рамках указанного "policystore". Если нет, рассмотрите возможность запуска скрипта под другой учетной записью с необходимыми правами доступа.
-
Переконфигурация хранилища политики: Убедитесь, что "policystore" правильно настроен. Попробуйте использовать другое хранилище политики, если возможно, или подтвердите, что система видит и может взаимодействовать с текущим хранилищем.
-
Логирование и отладка: Добавьте в скрипт больше логирования для диагностики в точках ошибок. Используйте
Start-Transcript
для записи всего процесса выполнения скрипта в файл, чтобы детально понять, где именно процесс идет не так. -
Устранение гонок (race conditions): Если проблема связана с синхронизацией, добавьте задержку (например,
Start-Sleep -Seconds 5
) перед выполнением командыNew-NetFirewallRule
, чтобы гарантировать, что хост готов для изменений. -
Рассмотрение альтернатив: Если проблема связана с взаимодействием политики группы, рассмотрите возможность применения временных правил безопасности вне рамок группы политики для тестирования и последующего устранения.
-
Тестирование в безопасной среде: Поэкспериментируйте с запуском скрипта в безопасной тестовой среде и проверьте доступ к хранилищу политики под разными учетными записями.
Используя предложенные методы, вы сможете детально диагностировать и устранить проблему с выполнением PowerShell скрипта. Это не только поможет вам решить текущую ситуацию, но и предоставит ценные инсайты для будущего управления сетевыми политиками и автоматизацией административных задач.