E o IPSEC no Vista e Windows Server 2008 ?

28. May 2009

Em outros posts tenho falado um pouco sobre IPSEC e em todos os exemplos que citei sempre usei os formatos compatíveis com o xp e 2003, mas o que mudou no Windows Vista ?

 

Como a pilha TCP/IP no Windows Vista foi totalmente reescrita muita coisa mudou, para o IPSEC vou citar algumas mudanças que acho importante :

 

- Novos algoritmos de Criptografia;

- Autenticação de Computadores e Usuários (antes do Vista o IPSEC autenticava somente computadores);

- Melhor Integração com o NAP;

- Integrado ao novo Windows Firewall with Advanced Security;

 

Este último item acredito que é um dos mais importantes para ajudar na aceleração da adoção dessa tecnologia.

 

Antes do Windows Vista configurar uma política de IPSEC não era uma tarefa fácil, em um cenário real suas políticas de ipsec podem ter centenas de itens,  exceções e etc, tornando tanto a implementação como a administração bastante trabalhosa, com as mudanças implementadas no Windows Vista esta tarefa está muito mais simples e fácil.

 

Para melhor ilustrar o quanto ficou mais fácil a implementação do IPSEC segue um pequeno comparativo entre um script no formato antigo e no novo. Ambos os scripts terão o mesmo resultado final.

 

Script IPSEC – Compatível com Windows 2000 ou superior

pushd ipsec static
set store location=local

# FILTROS DE ACOES
add filteraction name="Bloqueio" description="Bloqueia o acesso" action=block
add filteraction name="Permite" description="Permite o trafego em claro" action=permit
add filteraction name="Requisicao Segura" description="Aceita conexoes inbound somente com IPsec, e permite conexoes outbound em claro" soft=yes action=negotiate qmsecmethods="ESP[None,SHA1] ESP[3DES,SHA1]"

# Lista Exceção
add filterlist name="Excecao" description="Maquinas fora da Política de IPSEC"
add filter filterlist="Excecao" srcaddr=any dstaddr=x.x.x.x description="Máquina I" protocol=any srcport=0 dstport=0

# Domain Controllers
add filterlist name="Domain Controllers" description="Domain Controllers"
add filter filterlist="Domain Controllers" srcaddr=any dstaddr=x.x.x.x description="DC-01" protocol=any srcport=0 dstport=0

# Rede Segura
add filterlist name="Rede Segura" description="Rede Segura"
add filter filterlist="Rede Segura" srcaddr=any dstaddr=10.x.x.x dstmask=255.0.0.0 description="Rede Segura" protocol=any srcport=0 dstport=0

# Habilita PING
add filterlist name="Habilita PING" description="Habilita PING"
add filter filterlist="Habilita PING" srcaddr=any dstaddr=me description="Habilita PING" protocol=ICMP

# Cria a Politica
add policy name="Politica IPSEC Maquinas Fora do Dominio" description="Politica IPSEC Maquinas Fora do Dominio" activatedefaultrule=no mmlifetime=180 assign=no pollinginterval=60 mmsecmethods="3DES-SHA1-2 3DES-MD5-2 DES-SHA1-1 DES-MD5-1"

# Adiciona as Regras

# Colocar o nome da autoridade certificadora no campo rootca

add rule name="Rede Segura" policy="Politica IPSEC Maquinas Fora do Dominio" filterlist="Rede Segura" filteraction="Requisicao Segura" rootca="C=BR, O=XXX, CN=XXXXX"
add rule name="Habilita PING" policy="Politica IPSEC Maquinas Fora do Dominio" filterlist="Habilita PING" filteraction="Permite" rootca="C=BR, O=XXX, CN=XXXXX"
add rule name="Domain Controllers" policy="Politica IPSEC Maquinas Fora do Dominio" filterlist="Domain Controllers" filteraction="Permite" rootca="C=BR, O=XXX, CN=XXXXX"
add rule name="Excecao" policy="Politica IPSEC Maquinas Fora do Dominio" filterlist="Excecao" filteraction="Permite" rootca="C=BR, O=XXX, CN=XXXXX"

# Liga a Politica
set policy name=”Politica IPSEC Maquinas Fora do Dominio" assign=YES

popd

exit

 

Script IPSEC – Compatível com Windows Vista ou superior

netsh advfirewall consec add rule name="Rede Segura" endpoint1=any endpoint2=10.x.x.x/y action=requireinrequestout auth1=computercert auth1ca="C=BR, O=XXX, CN=XXXXX "
netsh advfirewall consec add rule name="Domain Controllers" endpoint1=any endpoint2=x.x.x.x,y.y.y.y action=noauthentication
netsh advfirewall consec add rule name="Excecao" endpoint1=any endpoint2=x.x.x.x action=noauthentication

 

Muita mais fácil não ?

Agora é só planejar e implementar logo o IPSEC porque o IPV6 está chegando !!! :) **assunto para um próximo post….

 

Abraços,

, , , , , ,

Você conhece o Robocopy ?

28. January 2009

Uma ferramenta que eu gosto muito, e tenho utilizado em algumas situações, é o ROBOCOPY.EXE (Robust File Copy) e apesar de ser nativa no Windows Vista e no Windows Server 2008 já está disponível a algum tempo junto do pacote do Windows Resource Kit.

 

Conversando com alguns amigos tenho visto vários problemas e/ou necessidades sendo endereçadas com esta ferramenta, em alguns casos o Backup, Replicação de Servidores e até mesmo Sites possuem soluções utilizando esse comando.

 

Segue um exemplo prático do que podemos fazer com o robocopy;

 

ROBOCOPY \\ServidorOrigem\share \\ServidorDestino\share /E /COPYALL /SEC /R:0 /W:0 /XO /LOG:Log_Repl_SrvOrigem_SrvDestino.txt /NDL /tee

O comando acima compara o conteúdo de uma pasta compatilhada entre dois servidores, qualquer conteúdo da pasta no Servidor de Origem que não exista ou que tenha um versão mais antiga do que existente no Servidor de Destino é copiado. Os demais parâmetros são :

/E  - Copiar Sub-diretórios

/COPYALL – Copia todas as ínformações do arquivo

/SEC – Copia Arquivos com Segurança

/R:0 – Número de tentativas em arquivos com falhas

/W:0 – Tempo de espera entre tentativas

/XO – Não atualiza arquivos mais antigos no Destino

/LOG – Criar arquivo de Log

/NDL – Não loga o nome dos diretórios

/tee – Output para o console

Claro que existem diversos outros parâmetros e você pode encontra-los usando o comando básico – robocopy.exe /? – .

Agora é verificar se você pode utilizar essa ferramenta em uma de suas rotinas internas e criar os scripts !

 

Abraços,

 

, , ,

Backup – Banco de Dados (SQL Server)

28. January 2009

Algumas pessoas me perguntam qual a melhor solução ou estratégia de Backup para suas Bases de Dados no SQL. Assim como em várias outras questões não há uma única resposta para essa pergunta ;)

 

Para cada cenário e tipo de negócio há requisitos mínimos que devem ser considerados na implementação da rotina de Backup de suas Bases de Dados. Em alguns casos a rotina de Backup deve considerar :

 

- Armazenar os Backups em uma unidade externa ( DAT, DLT ou etc);

- Janela de Backup de XX Horas;

- Garantir que não haverá mais de 10 minutos de perda de dados;

- Etc…

 

Mesmo não havendo uma resposta definitiva para essa questão segue abaixo alguns scripts que podem ajuda-lo em determinados ambientes menos críticos e/ou complexos;

 

O Script abaixo gera o Backup, FULL, de todas as bases de dados, com exceção das Bases Pubs e Tempdb, em um caminho físico definido;

/************************************************/
/**            SCRIPT BACKUP_FULL         **/
/**    Rodrigo Immaginario                  **/
/**   
http://rodrigoi.org.br               **/
/**    Versão 1.0 - 20090127 -             **/
/************************************************/
use master
go
declare
@tmpDate varchar(50),
@tmpName varchar(250),
@base varchar(30),
@path varchar(255)
set @tmpDate = convert(varchar(50),getdate(), 20)
set @tmpName = substring(@tmpdate,1,4) + substring(@tmpdate,6,2) +
           substring(@tmpdate,9,2) + '_' +
           substring(@tmpdate,12,2) + substring(@tmpdate,15,2) +
           substring(@tmpdate,18,2)
declare bases insensitive cursor for
  select name from sysdatabases where name not in ('pubs', 'tempdb') order by name
open bases
fetch next from bases into @base
while @@fetch_status = 0 begin
    set @path = 'f:\Backup\Full\' + @base + ' _FULL_' + @tmpName + '.bak' /* Backup Full */
    Backup Database @base
    to DISK = @path
    with INIT /* Backup Full */
    dump transaction @base with no_log  /* Limpeza do log de transacoes */
    fetch next from bases into @base
end
close bases
deallocate bases
go

Eventualmente você precisa armazenar diversas versões dos arquivos de Backup fisicamente em um disco, este procedimento pode gerar um aumento no custo de administração do seu ambiente uma vez que você terá de se preocupar com as versões e tamanho dos arquivos armazenados. Abaixo segue outro script que pode ajudar nesse tipo de situação;

 

/************************************************/
/**     SCRIPT LIMPEZA ARQUIVOS          **/
/**    Rodrigo Immaginario                   **/
/**   
http://rodrigoi.org.br                 **/
/**    Versão 1.0 - 20090127 -              **/
/************************************************/

DECLARE @currentdate datetime
DECLARE @olddate datetime
set @currentdate = CURRENT_TIMESTAMP
set @olddate = @currentdate – 5
EXECUTE master.dbo.xp_delete_file 0,N'F:\Backup\Full',N'bak',@olddate,1

Normalmente esse tipo de procedimento é criado como um JOB no SQL, com um agendamento de acordo com sua necessidade.

image

 

Em um cenário um pouco mais complexo podemos precisar da seguinte política de Backup :

 

- Backup FULL – Diário (1x)

- Backup Diferencial – A cada 4 horas;

- Armazenar até 5 dias de Backup em disco;

 

Dessa vez vou disponibilizar para download dois script ( Backup Full e Backup Differential ). Salvo os devidos ajustes (path físico e login de owner) é só executar os scripts para criar o JOB já com o agendamento.Enjoy !!

 

Abraços,

, , ,

Melhorando a Segurança de um Servidor WEB (IIS) com IPSEC

11. December 2008

Algumas pessoas me perguntam como melhorar a segurança de um servidor WEB (IIS) publicado na Internet. Infelizmente não existe uma única resposta para essa pergunta, temos sempre de analisar o cenário onde este servidor está inserido ( arquitetura, ambiente, requisitos de negócio e etc).

Gosto sempre melhorar as configurações de segurança de um servidor WEB, publicado na Internet, com políticas de IPSEC.

Vamos considerar o seguinte estudo de caso :  Um servidor WEB - IIS -  publicado diretamente na Internet (em um Data-center ou outro modelo de hospedagem);

 

image

Podemos melhorar a segurança nesse servidor de várias formas, algumas delas são :

É importante considerar que a escolha de uma das opções acima não invalida as demais, ou seja, podemos utiliza-las em conjunto. Por exemplo : IPSEC + Security Configuration Wizard

 

Para esse Estudo de Caso minha proposta é melhorar a segurança com a implementação do IPSEC. Abaixo segue um modelo de script para criação e aplicação de uma Política de IPSEC, este script possui as seguintes configurações :

  • - Retrição de todo o acesso Inbound ao Servidor WEB;
  • - Tráfego HTTP e HTTPS habilitado para Inbound e Outbound;
  • - Tráfego DNS, Outbound, habilitado;
  • - Tráfego FTP e RDP habilitado somente para um IP específico;
  • - Tráfego ICMP (Ping) habilitado para facilitar resoluções de problemas;

############################################################
# Modelo de Script para Restringir o Acesso a um Servidor IIS - Baseado no IPSEC
#
# Execute o script da seguinte forma :
# Passo 1 - Salvar o arquivo com o nome ScriptIPSEC.txt
# Passo 2 - Substituir os campos XXX.XXX.XXX.XXX pelos IPs correspondentes a cada politica

# Passo 3 - no prompt de comando execute  < netsh -f ScriptIPSEC.txt >
#
# Criado por : Rodrigo Immaginario
# 12 de Dexembro de 2008

#
#############################################################

############# Seleciona modo Estatico ############

pushd ipsec static

# Apaga todas as politicas IPSEC existente
delete all

# Registra o armazenamento local
set store location=local

# FILTROS DE ACOES
add filteraction name="Acesso Bloqueado" description="Bloqueia o acesso" action=block
add filteraction name="Acesso Permitido" description="Acesso Permitido o trafego em claro" action=permit

# All - Inbound
add filterlist name="All - Inbound" description="All - Inbound"
add filter filterlist="All - Inbound" srcaddr=any dstaddr=me description="All - Inbound" protocol=any srcport=0 dstport=0 mirrored=YES

# RDP - Inbound
add filterlist name="RDP - Inbound" description="RDP - Inbound"
add filter filterlist="RDP - Inbound" srcaddr=XXX.XXX.XXX.XXX  dstaddr=me description="RDP - Inbound" protocol=TCP srcport=0 dstport=3389 mirrored=YES

# DNS - Oubound
add filterlist name="DNS - Oubound" description="DNS - Oubound"
add filter filterlist="DNS - Oubound" protocol=TCP srcaddr=ME srcport=0 dstaddr=DNS description="DNS - Oubound" dstport=53 mirrored=YES
add filter filterlist="DNS - Oubound" protocol=UDP srcaddr=ME srcport=0 dstaddr=DNS description="DNS - Oubound" dstport=53 mirrored=YES

# WEB - Inbound
add filterlist name="WEB - Inbound" description="WEB - Inbound"
add filter filterlist="WEB - Inbound" srcaddr=any dstaddr=me description="HTTP - Inbound" protocol=TCP srcport=0 dstport=80 mirrored=YES
add filter filterlist="WEB - Inbound" srcaddr=any dstaddr=me description="HTTPS - Inbound" protocol=TCP srcport=0 dstport=443 mirrored=YES

# WEB - Outbound
add filterlist name="WEB - Outbound" description="WEB - Outbound"
add filter filterlist="WEB - Outbound" srcaddr=me dstaddr=any description="HTTP - Outbound" protocol=TCP srcport=0 dstport=80 mirrored=YES
add filter filterlist="WEB - Outbound" srcaddr=me dstaddr=any description="HTTPS - Outbound" protocol=TCP srcport=0 dstport=443 mirrored=YES

# FTP - Inbound
add filterlist name="FTP - Inbound" description="FTP - Inbound"
add filter filterlist="FTP - Inbound" srcaddr=XXX.XXX.XXX.XXX dstaddr=me description="FTP - Inbound" protocol=TCP srcport=0 dstport=20 mirrored=YES
add filter filterlist="FTP - Inbound" srcaddr=XXX.XXX.XXX.XXX dstaddr=me description="FTP - Inbound" protocol=TCP srcport=0 dstport=21 mirrored=YES

# Versão da Politica - Para Documentação da Política
add filterlist name="Versao Politica IPsec 1.00.20081211.1000" description="Define a versao da politica IPsec"
add filter filterlist="Versao Politica IPsec 1.00.20081211.1000" srcaddr=1.1.1.1 dstaddr=1.1.1.2 description="Politica 1.00.20081211.1000" protocol=ICMP
mirrored=YES

# Habilita PING - Para facilitar o Trobleshouting
add filterlist name="Habilita PING 1.00.20081211.1000" description="Habilita PING"
add filter filterlist="Habilita PING 1.00.20081211.1000" srcaddr=any dstaddr=me description="Habilita PING 1.00.20081211.1000" protocol=ICMP
mirrored=YES

# Cria a Politica
add policy name="Hardening Servidor WEB (1.00.20081211.1000)" description="Hardening Servidor WEB" activatedefaultrule=no mmlifetime=60 assign=no pollinginterval=60 mmsecmethods="3DES-SHA1-2 3DES-MD5-2 DES-SHA1-1 DES-MD5-1"

# Adiciona as Regras
add rule name="Regra - Versao Politica" policy="Hardening Servidor WEB (1.00.20081211.1000)" filterlist="Versao Politica IPsec 1.00.20081211.1000" filteraction="Acesso Permitido"
add rule name="Regra - Habilita PING" policy="Hardening Servidor WEB (1.00.20081211.1000)" filterlist="Habilita PING 1.00.20081211.1000" filteraction="Acesso Permitido"
add rule name="Regra - SMTP - Oubound" policy="Hardening Servidor WEB (1.00.20081211.1000)" filterlist="SMTP - Outbound" filteraction="Acesso Permitido"
add rule name="Regra - FTP - Inbound" policy="Hardening Servidor WEB (1.00.20081211.1000)" filterlist="FTP - Inbound" filteraction="Acesso Permitido"
add rule name="Regra - WEB - Outbound" policy="Hardening Servidor WEB (1.00.20081211.1000)" filterlist="WEB - Outbound" filteraction="Acesso Permitido"
add rule name="Regra - WEB - Inbound" policy="Hardening Servidor WEB (1.00.20081211.1000)" filterlist="WEB - Inbound" filteraction="Acesso Permitido"
add rule name="Regra - DNS - Oubound" policy="Hardening Servidor WEB (1.00.20081211.1000)" filterlist="DNS - Oubound" filteraction="Acesso Permitido"
add rule name="Regra - RDP - Inbound" policy="Hardening Servidor WEB (1.00.20081211.1000)" filterlist="RDP - Inbound" filteraction="Acesso Permitido"
add rule name="Regra - All - Inbound" policy="Hardening Servidor WEB (1.00.20081211.1000)" filterlist="All - Inbound" filteraction="Acesso Bloqueado"

# Liga a Politica
# O comando abaixo está comentado.
# T
enha certeza de que as configurações acima estão corretas, considerando seu cenário, para não perder o acesso ao Servidor ( ex. IP da politica de RDP)

## set policy name="Hardening Servidor WEB (1.00.20081211.1000)" assign=YES

popd

exit

 

Completando o nosso cenário podemos devemos considerar também :

  • - Instalação e configuração do URLScan3.1 ;
  • - Garantir que o Servidor esteja atualizado;

 

Está é a opção para melhorarmos um Servidor WEB publicado diretamente na Internet com base em Políticas IPSEC.

 

Abraços,

, , , , , , ,