Назад | Перейти на главную страницу

Как установить политику ограничений удаленного управления IIS с помощью PowerShell (ядро сервера)?

Я настраиваю систему IIS 2012 R2 в среде ядра сервера. Я включил службу управления IIS и назначил сертификат, но не могу найти, как настроить ограничения на то, какие IP-адреса могут подключаться к 8172. Ключ: HKLM \ SOFTWARE \ Microsoft \ WebManagement \ Server \ RemoteRestrictions делает это, но закодирован так вы не можете просто посмотреть на него и знать, что туда поставить. Забил его, настроив систему с графическим интерфейсом и скопировав значение ключа, но есть ли правильный путь? Знание кодировки строки поможет, если редактирование реестра является единственным вариантом PowerShell.

Это была последняя часть нашего процесса развертывания, выполнявшаяся вручную, и я решил попытаться расшифровать параметр RemoteRestrictions, и мне удалось найти решение для создания этого параметра.

Вы можете найти полный сценарий PowerShell в приведенной ниже сути, который позволяет вам определить глобальную настройку разрешения / запрета и набор IP-адресов и подсетей для разрешения / запрета

https://gist.github.com/guavadevelopment/7217d87943eb69ac60f0f96f3be00874

$remoteRestrictions = (Generate-RemoteRestrictions -globalDeny $True -addresses "1.1.1.1/255.255.255.255")

Несколько советов по структуре:

  • Настройка закодирована в Base64, поэтому вам нужно декодировать, чтобы получить массив байтов, данные кодируются непосредственно в этот массив байтов.
  • Первый 21 байт - это заголовок
    • байт 12 кодирует глобальное разрешение / запрет 103 = Разрешить, 104 = Запретить
    • байты с 18 по 21 представляют собой 4-байтовое int, которое говорит, сколько настроек IP-адреса должно следовать за заголовком
  • После заголовка следуют 42-байтовые блоки для каждого настроенного IP-адреса (вы можете определить ipv6 ips, и они создают большие разделы, которые я не поддерживаю)
    • байты с 1 по 4 представляют собой 4 байта типа int для индекса IP-адреса, который должен увеличиваться на 1 для каждого добавленного IP.
    • байты 17,19,21 и 23 представляют каждый октет IP-адреса
    • байты 31,33,35 и 37 представляют каждый октет адреса подсети
    • байт 42 кодирует IP allow / deny 103 = Allow, 104 = Deny

Отличный вопрос ... Не думаю, что есть хороший способ. Я не вижу документированного способа его программной установки. Кодировка выглядит как base64, поэтому, если вам действительно отчаянно нужно автоматизировать это, попробуйте установить значение RemoteRestrictions через графический интерфейс, а затем попробуйте самостоятельно реплицировать ту же строку base64 с помощью Powershell примерно так:

$RemoteRestrictions = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("192.168.1.50"))

Если вы можете придумать ту же строку, значит, вы выяснили их секретный соус. (Предупреждение: это может быть дурацкая затея и пустая трата вашего времени. Я понятия не имею, что еще они могли добавить туда до того, как это кодирует base64.)

Но официально я думаю, что ваш единственный выход - удаленно управлять этим сервером IIS с другого сервера, на котором установлены RSAT (инструменты удаленного администрирования сервера).

Изменить: на самом деле я думаю, что значения REG_SZ - это UTF-16 little endian (каждый символ имеет длину два байта), поэтому вам может потребоваться использовать класс UTF16 вместо UTF8.

Хорошая новость заключается в том, что кодировка одинакова на любом компьютере, поэтому копирование строки с другого компьютера должно работать нормально.

Строка в HKLM\SOFTWARE\Microsoft\WebManagement\Server\RemoteRestrictions закодирован base64 и

[System.Convert]::FromBase64String($input) 

возвращает массив байтов, но мне не удалось превратить его в строку, которая имеет смысл.