Como definir a política de Restrições de Gerenciamento Remoto do IIS usando o PowerShell (núcleo do servidor)?

3

Estou configurando um sistema IIS 2012 R2 em um ambiente núcleo de servidor. Eu habilitei o serviço de gerenciamento do IIS e atribui um certificado, mas não consigo encontrar como configurar restrições sobre o que os IPs podem conectar ao 8172. A chave:    HKLM \ SOFTWARE \ Microsoft \ Gerenciamento da Web \ Servidor \ RemoteRestrictions faz isso, mas é codificado, então você não pode simplesmente olhar para ele e saber o que colocar lá. Kludged isso, configurando em um sistema com uma interface gráfica e copiando o valor da chave, mas há um caminho certo? Conhecer a codificação da string ajudaria se uma edição do Registro fosse a única opção de powershell.

    
por mdumdei 08.12.2013 / 14:53

3 respostas

2

Esta foi a última parte de nosso processo de implantação que foi uma etapa manual e decidi tentar decifrar a configuração RemoteRestrictions e consegui encontrar uma solução para gerar essa configuração.

Você pode encontrar o script completo do PowerShell abaixo, que permite definir a configuração global de permissão / negação e um conjunto de IPs e sub-redes para permitir / negar

link

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

Algumas dicas sobre a estrutura:

  • A configuração é codificada em Base64, então você precisa decodificar para obter uma matriz de bytes, os dados são codificados diretamente nesta matriz de bytes
  • Os primeiros 21 bytes são um cabeçalho
    • byte 12 codifica a permissão global / negar 103 = Permitir, 104 = Negar
    • os bytes 18 a 21 são um byte de 4 bytes que informa quantas configurações de endereço IP devem seguir o cabeçalho
  • Após o cabeçalho, são 42 pedaços de bytes para cada endereço IP configurado (você pode definir ipv6 ips e criar seções maiores que eu não suporto)
    • os bytes 1 a 4 são um int de 4 bytes baseado em zero para o índice do endereço IP, isso deve aumentar em 1 para cada ip adicionado
    • bytes 17,19,21 e 23 representam cada octeto do endereço IP
    • bytes 31,33,35 e 37 representam cada octeto do endereço de sub-rede
    • byte 42 codifica o ip allow / deny 103 = Permitir, 104 = Negar
por 11.04.2017 / 10:07
1

Grande pergunta ... não acho que haja um bom caminho. Eu não vejo nenhuma maneira documentada de configurá-lo por meio de programação. A codificação parece com base64, então se você realmente precisava automatizar isso desesperadamente, tente configurar o valor RemoteRestrictions através da GUI e tente replicar a mesma string base64 usando o PowerShell com algo parecido com isto:

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

Se você conseguir criar a mesma string, você descobrirá o molho secreto deles. (Atenção: isso pode ser uma tarefa tola e um desperdício de tempo. Eu não tenho ideia do que mais eles poderiam colocar lá antes de codificar a base64).

Mas oficialmente, acho que seu único recurso é gerenciar este servidor IIS remotamente de outro servidor que tenha o RSAT (ferramentas de administração de servidor remoto) instalado.

Edit: Na verdade eu acho que valores REG_SZ são little endian UTF-16 (cada caractere tem dois bytes de comprimento), então você pode precisar usar a classe UTF16 ao invés de UTF8.

    
por 08.12.2013 / 17:07
0

A boa notícia é que a codificação é a mesma em qualquer máquina, então copiar a string de outra máquina deve funcionar bem.

A string em HKLM\SOFTWARE\Microsoft\WebManagement\Server\RemoteRestrictions é codificada em base64 e

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

retorna uma matriz de bytes, mas não consegui transformar isso em uma string que faz sentido.

    
por 08.12.2013 / 22:02