Video da minha palestra sobre Segurança em Plataforma Microsoft pelo ARQENGTI

19 de dezembro de 2016 Deixe um comentário

Saudações,

No último dia 19/12/2016, em evento da ARQENGTI (Arquitetos e Engenheiros de TI), falei sobre o tema “Segurança em Plataforma Microsoft”.

Fiquei muito feliz pela quantidade de pessoas não só do Brasil, mas, de vários países como Portugal, Angola e Estados Unidos!

Falamos sobre a montagem de um ambiente desde a parte física, arquitetura de ambientes, ferramentas para scan de vulnerabilidades, WPAD no DNS, Proxy Reverso, Next Generation Firewall e ferramenta de anti-malware. Tudo isso, mostrando exemplos e dicas para ambientes on-premisses e cloud – usando Azure como exemplo (Azure AD, Azure RMS, Azure AD App Proxy).

Em um formato totalmente diferente de tudo que já participei em termos de WebCast, trocamos idéias, tivemos excelentes intervenções dos mestres Fábio Oliveira e Marcelo Stripolli, além termos a alegrias de presentear um livro “Cloud Essentials” ao expectador Anderson Jacobsen que irá receber o mesmo num oferecimentoda Nova Terra Editora.

Abaixo o video na integra do evento para quem não pôde ver, ou para quem viu e quer rever:

image

Espero que os conceitos e dicas aqui tratados possam ser úteis a todos!

Que todos os que acompanham este blog e a fan page do facebook tenham um excelente natal e um 2017 repleto de sucesso e realizações!

Abraços

Uilson

Categorias:Não categorizado

Participe da minha palestra–Segurança em Plataforma Microsoft–e concorra a um livro!

12 de dezembro de 2016 Deixe um comentário

Saudações,

Depois de quase 1 ano sem palestrar devido a várias razões, vou falar no evento da ARQENGTI (Arquitetos e Engenheiros de TI) mais uma vez sobre o tema “Segurança em Plataforma Microsoft”.

No passado apresentei esse tema em outros eventos com o nome “Segurança para Redes Microsoft” onde focava mais no que tinhamos de urgente no momento – on premisses.

Na palestra que vou apresentar, vamos falar não só de on premisses, mas, tb de Cloud e também apresentar as principais ferramentas Microsoft que podem te proporcionar segurança em seu ambiente a custo baixo ou zero.

Falaremos sobre os seguintes temas:

image

Vou abordar como montar uma rede já pensando no aspecto de segurança tanto on premisses como Cloud, usar (ou não usar) o registro WPAD no DNS para apontamento de proxy, o que a Microsoft dispõe para scan de vulnerabilidades, patche managemnet, segurança de rede (802.1x), para quem saiu do ISA Server/TMG, como pensar em proxy reverso, além de uma vasta e detalhada documentação para estudo.

Também será sorteado um livro “Cloud Essentials” escrito pelo Yuri Diógenes para os participantes do evento. Livro este cedido pelo Nova Terra Editora.

Também vou mostrar uma ferramenta de anti-malware muito boa que poderá te ajudar de forma eficaz no combate a ameaças em seu ambiente, principalemnte ransomware.

Não perca, o evento ocorre nessa semana, dia 16/12/2016 as 21:30. É totalmente gratuíto e você pode se cadastrar clicando na figura abaixo:

image

Espero você lá!

Abraços

Uilson

Categorias:Não categorizado

DNS Server–Configurando a Global Query Block List via PowerShell

28 de novembro de 2016 Deixe um comentário

Saudações,

Aos que estão acompanhando a nossa série de artigos sobre otimização de tarefas com PowerShell, hoje vou fazer um “adendo” ao 5o. post – Otimização de tarefas com PowerShell – DNS Server.

Um dos pontos de atenção nas empresas nos últimos anos é a configuração do acesso ao proxy usando o registro wpad do DNS Server. O mesmo pode ser configurado via DHCP também, mas, deixarei isso para um próximo post.

Por questões de segurança, desde o Windows Server 2008, o registro WPAD e ISATAP (registro que auxilia na comunicação de dipsositivos IPv4 e IPv6), estão bloqueados para uso. Entretanto, o administrador do ambiente pode escolher entre:

1. Ativar um desses registros – via PowerShell com via linha de comando DNSCMD

2. Desativar a Global Query Global List

Um exemplo de como configurar essa funcionalidade via linha de comando foi dada no meu artigo de 16/07/2013 onde citei a configuração do WPAD via DNS usando o DNSCMD.

No nosso caso em que estamos destrinchando o PowerShell para nosso dia a dia, estou deixando aqui um exemplo prático de como usar o comando Get-DnsServerGlobalQueryBlockList e Set-DnsServerGlobalQueryBlockList

No primeiro exemplo vamos listar os hosts que estão bloqueados pelo Global Query Block List:

Get-DnsServerGlobalQueryBlockList

Em seguinda vamos liberar o uso do registro WPAD:

Set-DnsServerGlobalQueryBlockList –List “isatap” –Passthru

O comando acima vai reconstruir a Global Query Block List deixando bloqueado somente o registro “ISATAP”.

Agora vamos reconstruir a Global Query Block List inclindo, além do ISATAP, o WPAD também;

Set-DnsServerGlobalQueryBlockList –List “wpad, isatap” –Passthru

Se você quiser, também pode desabilitar a Global Query Block List (o que não recomendo):

Set-DnsServerGlobalQueryBlockList –Enable $False

E para habilitar de novo:

Set-DnsServerGlobalQueryBlockList –Enable $True

Abaixo um exemplo prático de como você visualiza todos os comandos citados:

image

No próximo post quero voltar ao Web Application Proxy, mostrando como configurar seu ambiente para aplicações com autenticação Kerberos.

Fique ligado aqui no blog e na fan page – facebook.com/usouzajr.

Abraços

Uilson

Otimizando tarefas com PowerShell–Administração DNS Server

16 de novembro de 2016 Deixe um comentário

Saudações,

Chegamos hoje ao quinto artigo da série “Otimizando tarefas com PowerShell”. Dessa vez vamos falar sobre administração do DNS.

Para quem ainda não viu, abaixo os 4 primeiros posts publicados:

1. Otimizando tarefas com PowerShell – Administrando Active Directory Users and Computers

2. Otimizando tarefas com PowerShell – Implementação e administração Web Application Proxy

3. Otimizando tarefas com PowerShell – Implementando e administrando AD Federation Services

4. Otimizando tarefas com PowerShell – Implementando e administrando Internet Information Services – IIS

Publiquei tb um artigo no TechNet Wiki sobre Administração do AD Directory Services via PowerShell com coneitos mais avançados que o primeiro desta série.

Podemos levar em consideração o ambiente fictício dos últimos 4 posts:

Domínio – uilson.net

Vamos considerar um ambiente básico onde o DNS está junto com o AD e também considerar a instalação de um novo servidor de resolução de nomes com as configurações básicas, criação de zones, hosts, etc.

1. Instalando e configurando a Role via Powershell:

A principio, todo domain controller já vem com o DNS Server instalado. Neste caso vamos simular um segundo DNS Server sendo instalado e que será integrado ao nosso Active Directory.

Como já mostrado em outros artigos desta série vamos usar o cmdlet “Add-WindowsFeature” ou “Install-WindowsFeature”:

Install-WindowsFeature DNS –IncludeManagementTools

No comando acima eu pedi a inclusão da console de gerenciamento, mas, vamos mostrar aqui como administrar seu DNS sem usa-la.

2. Configurando forward, reverse e stub zones (primárias)

Sabemos que podemos ter dois tipos de forward zone no DNS – Com integração no AD (que é o tipo mais comum para redes internas, tanto que um servidor promovido a Domain Controller já instala a role do DNS junto) e sem integração, ou seja, aquele DNS Server que poderá ser usado para resolução de nomes externos

Para criar uma Forward Lookup Zone integrada ao AD – Add-DnsServerPrimaryZone -Name "uilson.net" -ReplicationScope "Forest" –PassThru 

O comando acima vai criar um forward zone primária integrada ao AD, ou seja, todas as informações que forem criadas nesta zona serão armazenadas no base do AD.

Para criar uma Forward Lookup Zone sem integração com o AD – Add-DnsServerPrimaryZone -Name "uilson.net" -ZoneFile "uilson.net"

O Zone File armazena todas as configurações e registros criados neste forward lookup zone, uma vez que não há integração com o AD. Esse arquivo fica na pasta c:\windows\system32\dns do seu servidor DNS. De forma que, para zonas sem integração com o AD é interessante manter um backup destes arquivos para imediato restore em caso de necessidade.

Agora vamos ver como criar as zonas reversas, ou seja, aquelas que fazem a resolução IP-Nome. Abaixo os comandos que você deve usar para esta finalidade:

Para criar uma Reverse Lookup Zone integrada a seu AD – Add-DnsServerPrimaryZone -NetworkID "10.1.1.0/24" -ReplicationScope "Forest"

Para criar uma zona reversa sem integração com o AD – Add-DnsServerPrimaryZone -NetworkID 10.1.1.0/24 -ZoneFile "0.1.10.in-addr.arpa.dns"

Outra tipo de zone que você pode criar no DNS Server é a Stub Zone. Ela facilita a resolução de nomes em ambientes complexos. Os endereços da filial A serão mais rapidamente resolvidos pela filial C que se conectam via WAN em distâncias grandes.

Como os exemplos acima, você poderá criar uma stub zone de forma integrada, não integrada e também uma reverse stub zone.

Para criar uma stub zone não integrada com o AD – Add-DnsServerStubZone -Name "filialrj.uilson.net "192.168.1.1" -PassThru -ZoneFile "filialrj_uilsonnet.dns"

No exemplo acima criei uma stub zone não integrada ao AD para uma filial no Rio de Janeiro dentro da arvore uilson.net.

Com base no cenário do exemplo acima, segue o comando para criar uma stub zone integrada ao AD:

Add-DnsServerStubZone -Name "filialrj.uilson.net" -MasterServers 192.168.1.1 -PassThru -ReplicationScope "Forest"

Você também pode criar uma reverse stub zone – Add-DnsServerStubZone -NetworkId 10.10.1.0/24 -MasterServers 192.168.1.1 -PassThru -ReplicationScope Forest – neste exemplo, integrada ao AD.

3. Criando Zonas Secundárias

Para criação de uma Reserve Lookup Zone integrada ao AD em um DNS Secundário, ou seja, uma zona secundária que irá receber informações de uma zona primária criada conforme mostramos no item 2 deste post, você deve usar o comando abaixo:

Integrada ao AD – Add-DnsServerSecondaryZone –Name “uilson.net” –ReplicationScope “Forest” –MasterServers 10.10.1.1

Associada a um Zone File – Add-DnsServerSecondaryZone -Name "uilson.net" -ZoneFile "uilson.net" -MasterServers 10.10.1.1

4. Configurando propriedades dos zones

DNS Forwarder e DNS Conditional Forwarder

Um dos pontos a serem configurados em uma zona de encaminhamento no DNS Server é o serviço de Forwarder.

O servidor DNS que você configura como Forwarder irá receber as requisições de resolução de nomes externas encaminhadas do seu DNS Interno.

Neste caso, temos duas maneiras de configurar a lista de Forwarders:

1. Set-DnsServerForwarder – Este comando irá começar a lista de IP´s externos do zero, ou seja, usado em situações em que você acabou de instalar e configurar seu DNS Server.

2. Add-DnsServerForwarder – Este comando irá adicionar IP´s a uma lista de forwarders já existente.

OBS: Se você usar o comando Set-DnsServerForwarder em uma lista de forwarders já existente, você vai “zerar” a lista e usar aquele IP que o comando definir no momento em que for executado, portanto, cuidado!

Para criar um nova lista de forwarders – Set-DnsServerForwarder -IPAddress "192.168.0.1" –PassThru

Para adicionar um IP a uma lista de forwarders – Add-DnsServerForwarder -IPAddress 192.168.0.1 –PassThru

Outra configuração interessante a ser feita é a do Conditional Forwarder, funcionalidade que foi introduzida a partir do Windows Server 2003. Um Conditional Forwarder permite a resolver nomes de um rede privada ou externa, ajudando a acelerar a resolução. Quando o DNS recebe a requisição de um cliente para resolver o nome de um host que não está em sua zona autoritativa, o processo começa a partir do root name do servidor e continua até a resolução do nome. Quando você configura um Conditional Forwarder, o DNS local encaminhará a requisição para a zona autoritativa do domínio de destino.

De igual forma aos exemplos mostrados neste post, você pode criar uma zona Conditional Forwarder de forma integrada a seu AD Loal ou não.

O link abaixo fala de Zonas Conditional Forwarder para Windows Server 2003, mas, o conceito explicado pode ser usado em qualquer situação a frente, ou seja, Windows Server 2008, 2012, 2016, etc:

https://support.microsoft.com/en-us/kb/304491 – Conditional Forwarding in Windows Server 2003

Agora vamos a prática:

Para criar uma Conditional Forwarder Zone integrada a seu AD: Add-DnsServerConditionalForwarderZone -Name "contoso.com" -ReplicationScope "Forest" -MasterServers 172.16.10.1

Para criar uma Conditional Forwarder Zone sem integração com seu AD: Add-DnsServerConditionalForwarderZone -Name "contoso.com" -MasterServers 172.16.10.1 –PassThru

Root Hints

Para adicionar um endereço a minha lista de root hints – Add-DnsServerRootHint -NameServer "root.contoso.com" -IPAddress 172.23.90.128

Zone Transfers

Quando você configura uma zona secundária, precisa habilitar a transferência dos dados da primária.

Para habilitar o zone transfer – Start-DnsServerZoneTransfer -Name "uilson.net"

DNS Policy

Ao invés de deixar um ou outro exemplo sobre DNS Policy, vou colocar o link pra um artigo que escrevi em 24/06/2015 – Nele mostrei um cenário completo onde você pode configurar o DNS Policy. Essa feature vem a partir do Windows Server 2016. Clique aqui para ler o post.

Tem muito mais

Os exemplos citados acima são apenas alguns daqueles que podem ser usados para configurar e administrar seu DNS Server via PowerShell. Muitos outros existem e vou deixar um link aqui com todos os cmdlets do DNS Server com exemplos práticos.

5. Criação de Registros

A criação de registros em uma zona é feita de forma automática. Entretanto, imagine a situação em que você precise registrar um host que aponte a um web server, um application server ou back-end server.

Vamos ver abaixo como criar um registro A que venha de encontro a esse propósito.

Cenário: Temos um web server no domínio uilson.net. O mesmo tem uma aplicação que deverá ser publicada e usada internamente ou externamente. No IIS eu configurei esta aplicação com o host header sistemas.uilson.net. O IP deste servidor é 10.10.1.50. Veja abaixo como este registro é criado:

Add-DnsServerResourceRecord -ZoneName "uilson.net" -A -Name "sistemas" -IPv4Address "10.10.1.50"

Nesse link você encontra exemplos práticos de como criar os demais tipos de registro (AAAA, CNAME, etc) – https://technet.microsoft.com/en-us/library/jj649925.aspx

6. Consultas

Neste ponto em que nosso laboratório já está totalmente configurado. Vamos ver os comandos que você pode usar para verificar as configurações de seu DNS Server:

Get-DnsServer

Este comando traz todas as configurações de seu DNS Server. Voce pode usar também o parâmetro –computername para pegar informações remotamente.

image

Get-DnsServerZone

Este comando traz todas as Zones criadas no seu DNS Server. Voce pode usar também o parâmetro –computername para pegar informações remotamente.

image

Get-DnsServerResourceRecord -ZoneName uilson.net

O comando acima lista todos os registros na zone uilson.net:

image

Estas são apenas algumas das muitas consultas que podem ser feitas. No item abaixo você encontra o link que poderá ver exemplos práticos de todas elas.

7. Referências para estudo

Neste link você encontra todos, exatamente todos os comandos DNS para PowerShell com exemplos práticos – https://technet.microsoft.com/en-us/library/jj649850.aspx

8. Conclusão

Neste post mostrei para você exemplos práticos de instalação, configuração e administração do DNS Server via PowerShell.

Espero que o conteúdo possa ser útil e lhe ajudar em suas tarefas diárias.

Abraços

Uilson

Otimizando tarefas com PowerShell–Implementando e administrando Internet Information Services–IIS

28 de julho de 2016 Deixe um comentário

Saudações,

Hoje vamos entrar no quarto post da série “Otimizando Tarefas com PowerShell”. Pra quem está chegando agora e não conhecia o blog Microsoft Space, estou trabalhando em uma série de artigos relacionados a PowerShell, conforme abaixo:

1. Otimizando tarefas com PowerShell – Administrando Active Directory Users and Computers

2. Otimizando tarefas com PowerShell – Implementação e administração Web Application Proxy

3. Otimizando tarefas com PowerShell – Implementando e administrando AD Federation Services

Vamos continuar usando o ambiente fictício criado nos posts anteriores.

Imagine que você precisa instalar o IIS em uma farm de servidores que vão estar balanceando a carga. Vc teria habilitar a feature em um por um, mesmo usando o Server Manager de um único servidor para isso. Vamos mostrar a seguir como fazer de forma otimizada e mais rápidamente. Ou então você vai analisar um ambiente em que o IIS esteja em um Server Core ou até mesmo Nano Server.

Algo importante que esqueci de mencionar no segundo e terceiro artigos da série é que os comandos de instalação de roles e features estão armazenados no módulo ServerManager do PowerShell, portanto, se ao tentarem fazer o teste com os comandos citados nos artigos anteriores vocês receberem alguma mensagem de erro, façam o carregamento do módulo conforme abaixo:

Import-Module ServerManager

1. Instalando o IIS:

Como vocês já devem saber, o IIS pode ser instalado em sua totalidade, ou seja, com todas as features ou somente aquelas que você precisar para o proposito da sua infra.

Com o comando abaixo você instala o IIS com todas as features do role:

add-windowsfeature web-server –includeallsubfeature

Recomendo fortemente aquilo que sempre falo em post´s neste blog e em outros espaços, além das palestras e webcasts que entreguei; faça um planejamento prévio, converse com sua área de desenvolvimento para entender o que você vai precisar do seu IIS, qual o tipo de aplicação que irá hospedar e as features exatas que você vai precisar.

Para sabermos quais as features do IIS disponíveis, podemos usar o comando get-windowsfeature parametrizando pelas funções do IIS:

get-windowsfeature | Where-Object {$_.Name –like “Web*”}

image

Na coluna “Name” da figura acima, você tem a listagem de todas as features do IIS. Tomando como exemplo a sessão “Application Development”, eu posso instalar todos os itens da mesma, declarando todos os parâmetros, ou posso escolher uma ou mais funcionalidades tais como ASP, ASP.NET 3.5, etc, usando os parâmetros separadamente. Lembrando que as funcionalidades vitais de cada feature são instaladas automaticamente, mesmo que eu não as declare na minha linha de comando (exemplo – se eu declarar somente a feature Web-Security, a funcionalidade Web-Filtering será habilitada automaticamente).

Em nosso laboratório vamos instalar o IIS pensando em autenticação básica, autenticação integrada, protocolos http e https. Além desses, vamos usar o serviço de armazenamento de certificados digitais, o CCS (Centralized Certificate Store – sobre o qual escrevi um post detalhado com um passo a passo bem completo). Veja abaixo como fica o comando para instalação:

add-windowsfeature web-server, web-webserver, web-default-doc, web-http-errors, web-static-content, web-http-redirect, web-health, web-security, web-basic-auth, web-certprovider, web-cert-auth, web-ip-security, web-windows-auth, web-app-dev

A imagem abaixo mostra o progresso da instalação:

image

Veja agora através do comando get-feature, as funcionalidades do IIS que foram instaladas com o comando usado acima:

image

OBS: Não instalei aqui a console de gerenciamento do IIS que você encontra em Start/Administrative Tools. Vamos focar na implementação e administração do IIS somente via powershell. Se você prefere gerenciar a partir da console, basta adicionar o parâmetro –IncludeManagementTools no fim do comando, ou na figura acima, você tem a sessão Management Tools com o parâmetro Web-Mgmt-Tools.

Agora que temos o IIS instalado, vamos aos métodos para administra-lo através do Powershell.

2. Criando um web-site

Vamos criar um site com os dados abaixo:

Nome – PortalUilson.net

Biding – https://www.uilson.net

Path – c:\webapp

Autenticação – Windows Integrated

Documento Default – iisstart.htm

Vai pegar o certificado através do Centralized Certificate Store.

1. Criando WebSite:

É importante que você já carregue o módulo do IIS com o comando: import-module WebAdministration

No prompt de comando, você já poderá ver como está configurado o Default Web Site conforme figura abaixo:

image

Com o comando “dir iis:” você visualiza três “pastas” do IIS disponíveis: 1. AppPools (Os application pools criados), 2. Sites (Seus WebSites, applications e virtual directories), 3. SSLBindings (Todos os bindings criados com certificado digital – porta 443).

Para listar os sites criados use o comando dir iis:\Sites para ter o resultado abaixo:

image

Acima você que o Default Web Site tem o ID 1 (importante na hora de determinar e configurar a parte de log do IIS), está em status “Started”, mostra o Physical Path e a parte do Binding rodando em http na porta padrão (80).

Para simplificar, você pode entrar no IIS pelo PowerShell digitando “IIS:” e teclando ENTER:

image

Viram como facilita?

Agora vamos criar nosso novo Web Site conforme descrevi:

Vamos criar a pasta onde vai ficar a aplicação web:

new-item c:\webapp –type directory

Com esse comando criamos a pasta webapp. Copiei os arquivos do site inicial do IIS para podermos efetuar o teste de acesso a página.

Comando para criar o site:

iis:

New-Item Sites\PortalUilson.net –bindings @{protocol=”http”;BindingInformation=”:80:www.uilson.net”} –physicalPath c:\webapp

image

O ID ficou meio estranho pra visualisar mas, é 1949349561. É com esse ID que ele vai criar a pasta de log da aplicação.

Na imagem acima você pode ver que eu já criei o site com o acesso a porta 80 no host header http://www.uilson.net . Eu poderia ter usado o comando acima sem o host header e poderia deixar um binding para porta 80 do localhost e poderia criar outro binding na mesma porta definindo a URL com o comando abaixo:

New-WebBinding -Name PortalUilson.net -IPAddress "*" -Port 80 -HostHeader www.uilson.net

Veja também que nosso site está em estado “Started”, ou seja, está escutando requisições na porta 80 a partir da URL que definimos. Caso houvesse algum conflito de porta, ele estaria em status “Stoped”, ou caso fosse necessário poderiamos para-lo com o comando abaixo:

Stop-WebSite PortalUilson.net

Para colocar o site no ar novamente, basta executar o comando abaixo:

Start-WebSite PortalUilson.net 

image

Agora que já temos nosso ambiente pronto, vamos começar a ver outros detalhes tais como log e documento default.

Em nosso laboratório criei um site simples sem nenhum application ou virtual directory. Nesse caso temos que definir o documento default que irá iniciar a pagina default do site. Caso contrário teremos erro no acesso.

Vamos verificar quais são os documentos que constam da lista de Default Document e qual documento está no topo da mesma. Para isso você vai usar o comando abaixo:

Get-WebConfigurationProperty -Filter //defaultDocument/files/add -PSPath ‘IIS:\Sites\PortalUilson.net’ -Name value | select value

image

Veja que no nosso site (PortalUilson.net) já temos Default.htm, Default.asp, index.htm, index.html e issstart.htm. Precisamos configurar o iisstart.htm no topo da lista, pois ele é o arquivo a ser chamado pela URL definida anteriormente.

Durante o período de estudos para confecção deste post, não encontrei uma linha de comando que fizesse a alteação da ordem dos arquivos, colocando ele no topo. Caso tentasse adiciona-lo como parâmetro para coloca-lo no topo, recebia uma msg de erro. Resolvi esse problema removendo o iisstart.htm da lista com o comando abaixo:

Remove-WebConfigurationProperty //defaultdocument/files "IIS:\sites\PortalUilson.net" -name collection -AtElement @{value="iisstart.htm"}

Depois verifiquei com o Get-WebConfigurationProperty para me certificar de que ele não constava mais na lista:

image

Agora vamos configurar o iisstart.htm como defult document do nosso site. Abaixo vou executar um comando que irá coloca-lo no topo da lista de arquivos do default document:

Add-WebConfiguration //defaultDocument/files "IIS:\sites\PortalUilson.net" -atIndex 0 -Value @{value="iisstart.htm"}

image

Você pode ver na imagem acima que o arquivo iisstart.htm aparece no fim do documento, entretanto, o parâmetro “atIndex 0” do comando aplicado acima o coloca no topo da ordem do default document.

3. Application Pool e métodos de autenticação

Já temos nosso site criado e configurado. Agora vamos verificar a parte do application pool dele:

Abaixo mostro como visualisar os application pools criados no IIS

image

Na imagem acima vemos que o Default Web Site já tem seu Application Pool definido, porém, o site do nosso laboratório ainda não.

Abaixo o comando para criação de um application pool:

image

OBS: O comando New-Item criou uma nova application pool no IIS. Como você pode ver na figura acima, estamos posicionados na pasta de Application Pools do IIS. Poderiamos executar esse comando mesmo em outra pasta ou na raiz do IIS da seguinte forma:  New-Item IIS:\AppPools\PortalUilson.AppPool

Agora vamos associar nosso Applicaton Pool com o site PortalUilson.net com o comando: Set-ItemProperty ‘IIS:\Sites\PortalUilson.net’ -Name applicationPool -Value PortalUilson.AppPool

Com a execução do comando acima, você verá agora que o site criado em nosso laboratório agora tem um application pool para ele:

image

Vamos definir uma conta para gerenciar essa application pool:

Set-ItemProperty iis:\AppPools\PortalUilson.AppPool -name processModel -value @{userName="appuser";password="WebAppPool@2016";identitytype=3}

No comando acima defini uma conta local (username = appuser e senha = AppPool@2016) classificando com IdentityType 3 – o Identity type se refere ao tipo de conta que você vai usar em sua Application Pool. O número do identity mudaria caso você fosse usar outro tipo de autenticação, exemplo: Network Service.

No link abaixo, você tem uma explanação detalhada da parte de Itentity Type:

http://www.iis.net/configreference/system.applicationhost/applicationpools/add/processmodel

Agora vamos ver as propriedades de nosso application pool com o comando get-item PortalUilson.AppPool | Select-Object *

image

Para ver os dados de usuário usamos o comando Get-ItemProperty PortalUilson.AppPool -name "processmodel.username"

image

Veja na figura acima que a penultima linha (Value) traz o nome da conta que configuramos nos passos acima.

Podemos ver também que nosso Application Pool está configurado para usar a versão 4.0 do .NET Framework:

image

Caso sua aplicação peça outra versão, você deverá tê-la instalada no servidor. A instalação de outras versões do .NET pode ser feita nas features do IIS conforme descrito no começo deste post.

Se você tiver um Application Pool rodando o .NET Framework na versão 2.0 e quiser mudar para a 4.0, use o comando abaixo:

Set-ItemProperty PortalUilson.AppPool managedRuntimeVersion v4.0

Com o conceito de Web Application Pool definido, vamos agora vamos falar sobre autenticação.

Lembre-se do começo deste post em que instalamos o IIS com diversos métodos de autenticação (basic, integrada, etc). Quero que o site site tenha autenticação integrada, entretanto, o IIS vem com autenticação anônima (por default) habilitada.

Nos comandos abaixo vamos desabilitar a autenticação anônima e habilitar autenticação integrada (lembrando que, para este fim a aplicação já deve estar preparada para tal):

Desabilitando Anonymous: Set-WebConfiguration system.webserver/security/authentication/anonymousAuthentication -PSPath IIS:\sites\PortalUilson.net -Value @{enabled="False"}

Habilitando Windows Integrated: Set-WebConfiguration system.webserver/security/authentication/WindowsAuthentication -PSPath IIS:\sites\PortalUilson.net -Value @{enabled="True"}

4. Logging e Backup

Depois de instalar e configurar o IIS, criar e configurar o novo site, iremos agora definir onde gravar os log´s do mesmo. Por default o IIS coloca os log´s de acesso na pasta padrão da role: c:\inetpub\logs\LogFiles\WebisteID#:

image

No nosso caso vamos configurar o log para que seja gravado numa pasta diferente. Vou configurar para gravar em C:\weblogs\PortalUilson.net. Para tanto vamos usar os comandos abaixo:

Alteração do log para a pasta citada acima:

Set-ItemProperty IIS:\sites\PortalUilson.net -name logFile -value @{format=’W3C’;directory=’C:\weblogs\PortalUilson.net’}

Listando as propriedades de logging do nosso siteget-ItemProperty IIS:\sites\PortalUilson.net -name logFile:

image

No link a seguir, você encontra diversas formas de interagir com logging do IIS via PowerShell, inclusive alterando os campos do arquivo:

https://gallery.technet.microsoft.com/office/Set-IIS-Log-Fields-via-ee9c19b3

Com tudo pronto no nosso laboratório, vamos demonstrar agora como fazer o backup das configurações do IIS. A melhor forme de garantir seu ambiente é um backup do servidor usando a ferramenta da sua empresa, mas, para situações em que você precisa de um restore rápido é interessante ter um backup das configurações do IIS feito no próprio web server.

Para efetuar um backup rápido de suas configurações do IIS use o comando abaixo:

Backup-WebConfiguration –Name IISLab

image

Nesse comando eu fiz um backup das configurações do meu servidor IIS com o nome de “IISLab”.

Para verificar um ou mais backup´s feitos em seu ambiente use o comando Get-WebConfigurationBackup:

image

Como você pode ver na figura acima, posicionei na pasta c:\windows\system32\inetsrv\backup, onde o IIS grava os arquivos de backup gerados pelo comando que usamos a pouco:

image

5. SSL Settings – Agora é a sua vez de por a mão na massa!

Agora é com você!

Se leu todo post com atenção, testou em seu ambiente pessoal e ficou entusiasmado com a possibilidade de administrar seu IIS sem a Console de Gerenciamento, leia o conteúdo dos links abaixo e configure a parte SSL do IIS 8.5. Não foge dos conceitos que coloquei aqui e tudo pode ser encontrado no site iis.net da Microsoft.

Criando SSL Bindings no IIS – http://www.iis.net/learn/manage/powershell/powershell-snap-in-configuring-ssl-with-the-iis-powershell-snap-in

Na instalação do IIS você viu que coloquei também o recurso do CCS – Centralized Certificate Store. No começo deste post eu deixei um link com um artigo que escrevi sobre esse tema mostrando todo conceito e todos os passos (um lab completo) para habilitar o CCS. Para fazer o mesmo procedimento via PowerShell, clique no link abaixo:

https://technet.microsoft.com/en-us/magazine/jj937171.aspx

Além de ensinar a configurar o CCS, o link acima traz um exemplo de como instalar o IIS com as mesmas configurações em vários servidores, caso sua aplicação esteja definida para rodar numa farm.

E assim concluímos mais um post da série “Otimizando tarefas com PowerShell”. Cobrimos todos os passos para a instalação e administração do IIS 8.5 do Windows Server 2012 R2 via cmdlet.

Espero que o conteúdo tenha sido útil e caso tenha dúvidas ou críticas, por favor, deixe seu comentário ou me deixe uma msg em minha pag pessoal em http://facebook.com/usouzajr

Abraços

Uilson

Otimizando tarefas com PowerShell–Implementando e Administrando AD Federation Services

9 de junho de 2016 Deixe um comentário

Saudações,

Peço desculpas pela demora na continuidade desta série de posts. Estive envolvido em alguns projetos que me tomaram muito tempo.

Hoje vamos ao terceiro post da série “Otimizando tarefas com PowerShell”. Irei mostrar os passos para implementação, configuração e administração do Active Directory Federation Services.

Apenas relembrando, e para quem ainda não leu, os dois posts anteriores falaram sobre otimização de tarefas no  AD DS e Web Application Proxy.

Importante ressaltar que numa infra estrutura de proxy reverso com Web Application Proxy é premissa que o AD FS já esteja pronto, nesse caso, o certo seria ter escrito este post antes do anterior, entretanto, como já tinha o material e o expertise no assunto, resolvi inverter um pouco a ordem, mas, reitero que, o AD FS precisa estar pronto, OK?

Vamos lá! Como no post anterior, estamos em um ambiente fictício:

Domínio – uilson.net

AD FS Server – IP 10.10.1.3

Você precisa instalar a role do AD FS.

Lembrando que é necessário um certificado digital para o mesmo. Em se tratando de um servidor que fica em sua rede interna, você pode optar por um certificado gerado em sua própria entidade certificadora (AD CS – Certificate Services – sobre o qual iremos mostrar os princiais comandos PS futuramente). O certificado para o servidor AD FS, deverá estar instalado antes de efetuar a configuração do mesmo. Você pode importar o PFX do certificado via snap-in Certificates ou, como estamos querendo otimizar tarefas, vamos usar o cmdlet para isso:

Import-PfxCertificate –FilePath C:\ADFSCert.pfx cert:\localMachine\my -Password adfscert*

No comando acima, o arquivo PFX do certificado está na raiz do drive C:\. Seria interessante para casos em que você tem 2 ou mais servidores AD FS em uma farm, que os coloque em uma OU específica e crie uma política que envie para eles o certificado. Assim você poupa um passo no processo de deploy.

Ainda sobre o certificado, gere o mesmo de acordo com o AD FS Service Name que você vai definir na instalação. Por exemplo, no nosso laboratório aqui: “adfs.uilson.net”

Agora que o certificado do ADFS já está instalado, crie um host em seu DNS para qual você deverá apontar o IP do seu servidor AD FS – exemplo: “adfs.uilson.net – IP 10.10.1.3”.

Você precisa ter em mente se vai usar o Windows Internal Database (WID) ou se vai usar um servidor SQL. Isso vai depender do tamanho da sua infra, tipo e quantidade de acessos na sua aplicação, entre outros.

1. Instalando a role do AD Federation Services:

Install-windowsfeature adfs-federation -IncludeManagementTools

2. Configurando o servidor AD FS:

Estamos configurando um ambiente AD FS do zero. Portanto,  vou dar alguns exemplos de cenários em que você poderá configurar um AD Federation Services. Recomendo que use o ISE do PowerShell (ao executar o PowerShell, digite ISE):

2.1 – Configurando a farm AD FS:

Teremos que ter um usuário que irá executar o serviço do AD FS no servidor. Este usuário precisa de direitos de domain admin. Para tanto, vamos usar uma variável que iremos chamar de “$fscredential”. Essa variável irá chamar a função “Get-Credential” do PowerShell que deverá solicitar o usuário e a senha.

Como recomendei o uso do ISE para aplicar o comando todo, podemos fazer com que a variável solicite a conta do usuário de serviço e password e já prossiga com a instalação da farm:

$fscredential = Get-Credential

Install-AdfsFarm -CertificateThumbprint 8d8aa70358c538c7de50f5723571b9979696b5b2 -FederationServiceName adfs.uilson.net -ServiceAccountCredential $fscredential

No script acima, você irá primeiramente receber uma telinha pedindo user e a senha que será usado como conta de serviço e posteriormente, com os dados digitados, será feito a instalação da farm AD FS:

image

O parâmetro “-CertificateThumbprint” irá definir o certificado de common name “adfs.uilson.net” para o AD FS. Para descobrir o ThumbPrint de seu certificado, utilize o comando abaixo:

image

O parâmetro “-FederationServicesName”, define o nome do seu serviço de AD FS. É por ele, pelo certificado e pelo host criado no seu DNS (conforme falamos anteriormente) que a requisição chegará até o seu portal.

E por fim o parâmetro “-ServiceAccountCredential” irá usar a variável que falamos acima. Caso você não defina esta variável e nem declare esse parâmetro no comando, o AD FS usará o usuário logado como service account. Se você não usar os parâmetros citados, tenha certeza de que o usuário logado tem direitos de domain admin. Caso contrário a instalação não prosseguirá.

Conforme também falado neste post, o AD FS usa uma base de dados, seja ela o Windows Internal Database (WID) ou um SQL Server. No exemplo que acabei de mostrar, não declaramos nenhum SQL Server. Dessa forma o AD FS irá usar o WID.

Para instalar o AD FS apontando a base de dados para um SQL Server, use o comando abaixo:

$fscredential = Get-Credential

Install-AdfsFarm -CertificateThumbprint 8d8aa70358c538c7de50f5723571b9979696b5b2 -FederationServiceName adfs.uilson.net -ServiceAccountCredential $fscredential -SQLConnectionString "Data Source=SQLServerName\Instancia01;Integrated Security=True"

No comando acima vemos após a declaração das credenciais, o string de conexão com seu SQL Server.

2.2 – Criando uma farm AD FS com conta GMSA

Se você planeja criar uma farm AD FS com 2 ou mais servidores, é interessante usar um conta de domínio GMSA (Group Managed Service Account).

Para quem não está familiarizado com o GMSA no Windows Server 2012 pra frente, imagine que você tem uma infra de servidores AD FS ou até mesmo IIS em Load Balance com uma ou mais aplicações que usem autenticação Kerberos. Todas as instâncias dos serviços teriam que usar a mesma identidade.

Hoje configuramos, na maioria dos casos,  uma conta de serviços criada no AD a qual colocamos em cada servidor da farm. Entretanto, se você precisa alterar a senha desta conta. Precisará ir em todos os servidores da infra balanceada para alterar a senha. Caso contrário, o servidor no qual a senha não foi alterada, não conseguirá subir o serviço.

O serviço GMSA coordena essas contas de serviço com gerenciamento em um único ponto, agilizando o trabalho do administrador. No link abaixo você encontra um tutorial completo com os pré-requisitos para uso do GMSA e como criar as contas, usando inclusive, o powershell:

https://technet.microsoft.com/en-us/library/jj128431(v=ws.11).aspx

No nosso caso, podemos instalar o AD FS criando uma farm de servidores usando uma conta de serviços GMSA. Veja como no comando abaixo:

Install-AdfsFarm -CertificateThumbprint <certificate_thumbprint> -FederationServiceName <federation_service_name> -GroupServiceAccountIdentifier <domain>\<GMSA_Name>$

Trazendo para um exemplo em nosso laboratório:

Install-AdfsFarm -CertificateThumbprint 8d8aa70358c538c7de50f5723571b9979696b5b2 -FederationServiceName adfs.uilson.net -GroupServiceAccountIdentifier uilson\adfs_farm_user$

Lembrando que o parâmetro “$” ao fim do username é obrigatório.

O exemplo acima cria uma farm de servidores ADFS com uma conta de serviços GMSA, usando o WID (Windows Internal Database) como base de dados. Para criar uma farm conectada a um SQL Server, basta inserir no mesmo comando a string de conexão SQL usada no exemplo do item 2.1 deste post. Segue exemplo abaixo:

Install-AdfsFarm -CertificateThumbprint 8d8aa70358c538c7de50f5723571b9979696b5b2 -FederationServiceName adfs.uilson.net -GroupServiceAccountIdentifier uilson\adfs_farm_user$ -SQLConnectionString "Data Source=SQLServerName\Instancia01;Integrated Security=True"

Vale também ressaltar que a conta de serviços da farm não precisa obrigatoriamente ser uma conta GMSA.

2.3 – Adicionandos servidores a uma farm AD FS

Com a farm criada, conforme item 2.2 deste post, você poderá incluir mais servidores nela. Isso obviamente depois de uma análise de performance da aplicação para que você tenha o exato Sizing do seu ambiente AD FS.

Antes de adicionar o servidor na farm, tenha certeza de qual tipo de base de dados vc está trabalhando – WID (Windows Internal Database) ou um SQL Server. Copie tb o arquivo PFX do certificado anteriormente instalado no servidor primário da farm.

Abaixo o comando para inserir um servidor a farm AD FS com base WID, usando como conta de serviço um usuário de domínio:

Add-AdfsFarmNode -ServiceAccountCredential $fscred -PrimaryComputerName <first_federation_server_hostname> -CertificateThumbprint <certificate_thumbprint>

Trazendo para um exemplo em nosso laboratório:

$fscredential = Get-Credential
Add-AdfsFarmNode -ServiceAccountCredential $fscredential -PrimaryComputerName adfs_primary.uilson.net -CertificateThumbprint 8d8aa70358c538c7de50f5723571b9979696b5b2

Aqui declaramos a variável usada anteriormente para definição da conta de serviço (domain user) e o nome do servidor que foi instalado como primário, além do ThumbPrint do certificado.

Para quem usa o SQL Server como base para a farm AD FS, veja abaixo o comando para inserir nodes:

$fscredential = Get-Credential
Add-AdfsFarmNode -ServiceAccountCredential $fscredential -PrimaryComputerName adfs_primary.uilson.net -CertificateThumbprint 8d8aa70358c538c7de50f5723571b9979696b5b2 -SQLConnectionString "Data Source=SQLServerName\Instancia01;Integrated Security=True"

Abaixo o comando para inserir um servidor em uma farm AD FS existente usando uma conta GMSA em base WID:

Add-AdfsFarmNode -GroupServiceAccountIdentifier uilson\adfs_farm_user$ -PrimaryComputerName adfs_primary.uilson.net -CertificateThumbprint 8d8aa70358c538c7de50f5723571b9979696b5b2

E para finalizar a lista de scripts de configuração do AD FS, mostro abaixo o comando para inserir um novo servidor a uma farm existente com uma conta de serviço GMSA em base SQL Server:

Add-AdfsFarmNode -GroupServiceAccountIdentifier uilson\adfs_farm_user$ -PrimaryComputerName adfs_primary.uilson.net -CertificateThumbprint 8d8aa70358c538c7de50f5723571b9979696b5b2 -SQLConnectionString "Data Source=SQLServerName\Instancia01;Integrated Security=True"

Com o seu ambiente do AD Federation Services instalado, basta você verificar se o portal inicial está acessível. Seguindo as configurações citadas ao longo deste post, não tem o que dar errado. Basta acessar o endereço criado (no nosso exemplo: https://adfs.uilson.net):

PortalADFS_Uilson

Após se autenticar, você irá visualizar os acessos as aplicações que estão sendo autenticadas pelo AD FS via Relying Part Trust.

3. Administrando o AD FS

Um exemplo básico no AD FS é a criação de Relying Part Trusts – onde você define o caminho das aplicações a serem federadas. Abaixo um comando para criação de um relying part trust com base no script mostrado no último artigo do Web Application Proxy:

Add-AdfsNonClaimsAwareRelyingPartyTrust -Name ‘My App Extranet Publishing’ -Identifier ‘https://appserver.uilson.net/’ -IssuanceAuthorizationRules ‘=>issue(Type = "http://schemas.microsoft.com/authorization/claims/permit", Value = "true");’

Podemos usar uma série de comandos para configurar o AD FS. Existem uma quantidade enorme deles que podemos usar no PowerShell para criação e configuração de relying part trusts e demais regras de autenticação no AD Federation Services, além dos comandos para alteração do certificado. Falar de um ou outro ficaria pouco, entretanto, falar em todos, deixaria o post muito extenso.

Estou colocando abaixo um link com uma lista vasta de comandos powershell para AD Federation Services. Para todos os comandos há um link com exemplos. Além do que, você pode gerar uma lista de exemplos no seu próprio powershell usando o comando get-help, conforme exemplo abaixo:

Get-Help Add-AdfsNonClaimsAwareRelyingPartyTrust –Examples

O link para o artigo com os comandos – https://technet.microsoft.com/en-us/%5Clibrary/Dn479343(v=WPS.630).aspx

Espero que o conteúdo seja útil e lhe ajude no dia a dia.

Abraços

Uilson

Otimizando tarefas com PowerShell–Implementação e administração Web Application Proxy

12 de abril de 2016 1 comentário

Saudações,

Peço imensas desculpas pela demora, mas, alguns fatores como excesso de trabalho e uma cirurgia de extação do dente do siso levaram a isso. Mas, vamos lá!

Dando seguimento a nossa série de artigos sobre otimização de tarefas com PowerShell, vamos falar sobre a implementação do Web Application Proxy com ADFS via linha de comando. Lembrando que o primeiro artigo da série está disponível e ali falamos sobre os comandos PS para tarefas do Active Directory.

Antes de prosseguir, vamos apenas idealizar um ambiente onde vc tem seus back-end servers, um AD FS na sua rede interna, acabou de instalar um Windows Server 2012 R2 em sua DMZ e precisa instalar o Web Application Proxy nele. Algo mais ou menos como no desenho abaixo:

 

image

Para você que vem do TMG, não se esqueça que o Web Application Proxy exige um Firewall de borda (Edge Firewall), pois o mesmo não tem essa função, OK?

Vamos imaginar aqui nossos endereços fictícios:

Servidor de aplicação (Back-End Server) – https://appserver.uilson.net

Servidor do AD FS – https://adfs.uilson.net – criar um Relying Part chamado “My-App_Relying_Part”

Servidor do Web Application Proxy – Vai receber as requisições para as URL´s acima. Deve ter instalado o certificado das aplicações instaladas no Back-End Server e o do AD Federation Services

Agora que já temos nosso ambiente idealizado, vamos meter a mão na massa:

1. Instalando a Feature do Remote Access e habilitando o Web Application Proxy:

Install-WindowsFeature -IncludeManagementTools -name Web-Application-Proxy

Após executar a linha acima, a feature estará instalada. Vamos habilitar o Web Application Proxy:

Install-WebApplicationProxy -FederationServiceTrustCredential $Credential -CertificateThumbprint ‘22121D02DCBF80F440B5E26D52B92BC255D59F95’ -FederationServiceName ‘adfs.uilson.net’

OBS: Para quem ainda não sabe, o Thumbprint do certificado pode ser obtido através do comando abaixo:

Ou através da GUI usando o MMC Certificates…mas via PowerShell é tudo mais rápido e fácil né? Então vamos usa-lo e deixar o mouse um pouquinho de lado!

Depois de instalar, acesse a console ou veja via Power Shell se os serviços estão OK. Use o comando abaixo:

Get-Service ‘appproxysvc’,’appproxyctrl’,’adfssrv’ | fl -property *

Você deverá receber o retorno abaixo:

image

OK! Agora que o ambiente está instalado e os serviços estão em status “Running”, vamos publicar uma aplicação:

2. Publicando aplicações:

Opção 1 – Publicando uma aplicação web via PassThrough:

Add-WebApplicationProxyApplication -BackendServerUrl ‘https://appserver.uilson.net/myapp’ -ExternalCertificateThumbprint ‘8d8aa70358c538c7de50f5723571b9979696b5b2’ -ExternalUrl ‘https://extranet.uilson.net/’ -Name ‘Extranet Application’ -ExternalPreAuthentication PassThrough

Neste exemplo você vai publicar uma aplicação que está em seu Back-End Server, não terá pré-autenticação de um AD Federation Services, ou seja, esse trabalho fica a cargo da sua aplicação. Esse é um caso em que você tem certeza do que vai compartilhar e que não haverá brechas de segurança, nem tampouco acessos indevidos. É por isso que se faz necessário um tempo de planejamento da sua infra de Web Application Proxy.

Também é necessário que você tenha instalado em seu servidor Web Application Proxy o certificado da aplicação web do seu Back-End Server.

Opção 2 – Publicando uma aplicação com pré-autenticação do AD Federation Services:

Neste caso sugiro que você use o PowerShell ISE – basta digitar ISE na linha de comando do PowerShell:

Add-WebApplicationProxyApplication
-BackendServerURL ‘https://appserver.uilson.net/myapp’
-ExternalCertificateThumbprint ‘1a2b3c4d5e6f1a2b3c4d5e6f1a2b3c4d5e6f1a2b’
-ExternalURL ‘
https://extranet.uilson.net’
-Name ‘MyApp Extranet Publishing’
-ExternalPreAuthentication ADFS
-ADFSRelyingPartyName ‘My-App_Relying_Part’

Neste caso você publicou uma aplicação que vai ser pré-autenticada em seu AD Federation Services e a requisição será encaminhada para seu Back-End Server.

Agora, se você tem uma quantidade expressiva de aplicações a serem publicadas e que irão ser pré-autenticadas pelo seu AD Federation Services, é mais interessante vc publicar seu portal AD FS onde terá todas as aplicações listadas e assim o usuário poderá escolher para qual quer mandar  a requisição:

Add-WebApplicationProxyApplication -BackendServerUrl ‘https://adfs.uilson.net’ -ExternalCertificateThumbprint ‘8d8aa70358c538c7de50f5723571b9979696b5b2’ -ExternalUrl ‘https://adfs.uilson.net/’ -Name ‘ADFS Extranet App Portal’ -ExternalPreAuthentication PassThrough

Aqui o usuário verá seu portal do AD FS e escolherá qual aplicação quer entrar.

Para listar as aplicações publicadas em seu WAP digite o cmdlet  Get-WebApplicationProxyApplication

Abaixo um links com listas de comandos que serão muito úteis para otimizar seu tempo administrando sua farm de servidores WAP. Também usei esses links como base para montar este artigo:

https://blogs.technet.microsoft.com/applicationproxyblog/2014/08/20/web-application-proxy-powershell-cheat-sheet/

https://technet.microsoft.com/en-us/library/dn383640.aspx

https://technet.microsoft.com/en-us/library/dn383659.aspx

Então é isso pessoal! Dessa forma você implementa, publica e administra seu ambiente Web Application Proxy. No nosso próximo post irei falar sobre a implementação e administração do AD Federation Services via PowerShell.

Vale ressaltar que, em determinado momento você veja que é necessário aumentar sua infra de servidores Web Application Proxy. Nos links acima você encontra orientações e linhas de comando PowerShell para fazer isso da melhor forma possível e bem mais rápido.

Mais uma vez obrigado pela audiência no blog e espero que o conteúdo possa ser útil.

Abraços

Uilson

%d blogueiros gostam disto: