GEEKS

Como usar o PowerShell para configurar o IIS em vários servidores

Publicidade
Como usar o PowerShell para configurar o IIS em vários servidores

dotshock/Shutterstock.com

O PowerShell é uma excelente ferramenta para gerenciar todas as coisas do Home windows. Ainda assim, ele também pode fazer um pouco de trabalho para você ao configurar os Serviços de Informações da Web (IIS) e fica ainda melhor quando você pode usá-lo para configurar servidores IIS em massa.

À medida que você se torna cada vez mais experiente com o trabalho de engenharia/administração de sistemas, tende a se perguntar: “O PowerShell pode facilitar isso para mim?” Quase sempre inicia uma jornada de aprendizado que só ajuda você a entender ainda mais o PowerShell. Pensando na tarefa de configurar vários componentes do IIS para vários servidores, as etapas podem ser divididas em etapas lógicas, que são basicamente as etapas que você executaria na GUI em um único Home windows Server. Vamos trabalhar com uma pequena lista de etapas que podem ajudar você a começar e que podem ser adicionadas para outras configurações, se desejado:

  • Importar um certificado PFX de um compartilhamento remoto
  • Crie uma nova ligação para https no IIS
  • Anexe o certificado importado à ligação https
  • Marque a caixa ‘Exigir SSL’ no Gerenciador do IIS
  • Adicione o log personalizado para obter o valor X-Forwarded-For de um balanceador de carga

A maioria dessas etapas são cliques diretos na GUI, então por que tudo isso não pode ser feito com alguns comandos do PowerShell? Melhor ainda, executar em uma lista de vários servidores remotos para fazer a mesma tarefa? Uma grande parte das etapas que serão demonstradas nesta postagem serão trechos de código que você pode inserir em sua estrutura típica do PowerShell. Você pode ter logs personalizados e itens exclusivos de como você depura scripts do PowerShell. Caso contrário, você pode facilmente juntá-los para obter um retorno rápido do que você precisa concluir para suas configurações do IIS.

Publicidade

Algumas coisas para configurar antecipadamente

Algumas variáveis ​​são necessárias para começar. Uma lista funcional de servidores para configurar e um compartilhamento de rede acessível onde o arquivo de certificado PFX está localizado:

$Servers = Get-Content material -Trail C:WebServers.txt
$CertFolder="FileServer01SharedCerts"

Isso pegará a lista de servidores do arquivo TXT e definirá um native para onde o certificado a ser importado será encontrado.

Se você estiver executando isso em vários servidores, eventualmente desejará ter certeza de que está trabalhando em servidores que estão on-line. O seguinte uso do cmdlet Check-Connection para executar ping em cada servidor pelo menos uma vez para garantir que ele esteja ativo antes de prosseguir. Se o servidor estiver on-line, a lógica copiará a pasta do compartilhamento de rede que contém o certificado para a pasta C:WindowsTemp do servidor remoto. Dessa forma, o cmdlet Invoke-Command para importar o certificado não terá problemas de permissão ao copiar de um native de rede:

foreach ($Server in $Servers) 
     if (Check-Connection -ComputerName $Server -Quiet -Rely 1) 
          Reproduction-Merchandise -Trail $CertFolder `
          -Vacation spot $ServerC$WindowsTempCertAssets `
          -Recurse -Drive
          Write-Host "Belongings effectively copied!"
     
     else 
          Write-Host "$Server seems to be offline!"
     
...code demonstrated under...

Apply que é bom dar comments ao console com as linhas Write-Host enquanto você executa isso. Também seria bom adicionar a um log existente se você envolver seu script com um. Agora sabemos quais servidores estão on-line e eles têm os ativos copiados localmente. Agora estamos prontos para seguir em frente.

Importe o certificado e crie uma nova ligação

Essa ação é concluída com o cmdlet Invoke-Command, que executará essa ação localmente em cada servidor. Dependendo do nível de segurança que você deseja incorporar, você pode fazer algumas coisas com a senha necessária para importar o certificado PFX. Você pode armazená-lo em pace actual usando Get-Credential ou pode simplesmente inserir a senha em texto simples inline com o comando usado para importar. Ecu sugeriria proteger a senha usando Get-Credential no mínimo, embora existam muitas outras maneiras de injetar a senha com segurança aqui. Para coletar a senha, você pode usar:

$MyPwd = Get-Credential -UserName 'Input password under' -Message 'Input password under'

Solicitar senha após o cmdlet Get-Credential

Isso armazenará a senha do certificado sem ter que ter a senha em texto simples dentro do seu script. Passaremos essa variável native para o comando remoto utilizando o componente $The use of:. Como Invoke-Command e seu bloco de script que o acompanha são executados em um escopo diferente (native para a máquina remota), ele não sabe nada de nenhuma variável native definida fora do bloco de script. Isso permite que você passe quaisquer variáveis ​​locais para a sessão remota e use de acordo.

Importaremos o certificado para o armazenamento de certificados Pessoal (Meu) da conta da máquina.

O código a seguir percorre essas etapas:

  1. O início do processo no servidor remoto
  2. A ação de importação usando a senha fornecida na etapa Get-Credential
  3. Crie uma ligação https na porta 443
  4. Adicionando o certificado importado à associação https

*Isso ainda está dentro do loop foreach definido acima:


Invoke-Command -ComputerName $Server -ScriptBlock  The place-Object $_.Topic.Comprises("CertFriendlyName")
     $Binding = Get-WebBinding -Identify $SiteName -Protocol "https"
     $Binding.AddSslCertificate($SSLCert.GetCertHashString(), "My")
     Write-Host "Setup a hit on: $env:COMPUTERNAME"

Além de qualquer saída que você forçar para o console como parte de sua própria personalização, também haverá alguma saída para a ação de importação do certificado, uma vez importada com sucesso.

É bom limpar sua bagunça também, então adicione algumas linhas para remover a pasta com o arquivo .pfx que foi copiado para a máquina. Isso residirá dentro do loop foreach, de preferência no ultimate:

Take away-Merchandise -Trail "$ServerC$WindowstempCertAssets" -Recurse -Drive
Write-Host "Cleanup on $Server finished!"

Exigir SSL em seu website

Este próximo bit de comandos será usado de qualquer forma que você lançar sua implantação. Se você quiser que isso seja necessário imediatamente, basta jogá-lo com o restante do código acima e pronto. Você pode ter uma distribuição em fases que pode fazer com que você queira habilitar isso em servidores específicos. De qualquer maneira que você criar isso, a carne do trabalho serão estas poucas linhas:

Import-Module WebAdministration
Set-WebConfiguration -Location "My Internet Web site" `
     -Clear out 'machine.webserver/safety/get admission to' -Worth "Ssl"

Apply que o -Localização parâmetro é o nome do website IIS que você deseja exigir SSL. Isso agora forçará todas as conexões seguras à sua nova ligação com o certificado associado. Isso seria o equivalente da GUI de clicar no ícone Configurações de SSL no Gerenciador do IIS para seu website específico e verificar o Exigir SSL caixa:

Configuração do IIS para exigir SSL

Personalizar as opções de log do IIS

Se você gerencia uma frota de servidores IIS que ficam atrás de um balanceador de carga, pode aproveitar as informações que o balanceador de carga coleta de conexões de entrada. Supondo que seu balanceador de carga específico esteja configurado para capturar o X-Encaminhado-Para valor, você pode obter o endereço IP de entrada de todas as conexões de entrada para seus servidores IIS e visualizá-los dentro dos logs IIS conhecidos. Isso é especialmente útil quando se trata de solucionar problemas nos quais você precisa rastrear conexões de recursos específicos que podem ter encontrado erros em um servidor específico.

Em resumo, o IIS não coleta o valor X-Forwarded-For. Ele deve ser configurado como um valor personalizado para que o IIS seize e registre. Também há uma maneira de configurar isso na GUI, mas você pode adicionar este comando em nosso script de provisionamento atual para ter isso em vigor desde o início:

Upload-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' `
     -Clear out "machine.applicationHost/websites/siteDefaults/logFile/customFields" `
     -Identify "." `
     -Worth @logFieldName="X-Forwarded-For";sourceName="X-Forwarded-For";sourceType="RequestHeader"

Depois de concluído, você pode verificar se esse campo personalizado foi adicionado ao IIS no nível do servidor abrindo o Gerenciador do IIS e clicando MeuServidor > Registro > Arquivo de registro: Selecione Campos…

Configurações de registro do IIS

Depois que isso estiver em vigor, você poderá ver os endereços IP das conexões de entrada para seus servidores IIS nos logs tradicionais do IIS.

Estes são apenas alguns exemplos das configurações que você pode definir em seus servidores IIS. Quanto mais servidores você gerenciar e forem configurados de forma semelhante, mais cliques você economizará, o que é sempre bom. Sugiro testar os diferentes comandos para as configurações desejadas em um servidor. Depois de ter o processo para esse único servidor, ele pode ser repetido em quantos você precisar com a estrutura fornecida aqui neste put up. Isso deve ser mais do que suficiente para você começar a economizar pace e ter uma implantação de IIS mais padronizada em seu ambiente.



Fonte da Notícia: www.howtogeek.com

Publicidade

Osmar Queiroz

Osmar é um editor especializado em tecnologia, com anos de experiência em comunicação digital e produção de conteúdo voltado para inovação, ciência e tecnologia.

Artigos relacionados

Botão Voltar ao topo