Wednesday, July 4, 2012

VPN Client-to-Site - Windows


  Partindo-se do princípio de que já se conheça conceitos como Tunnel-group, Group-policy, vpn-filter,etc. vou dar sequência a essa série de artigos sobre VPN. Caso esses conceitos sejam novos, ótimo. É hora então de googar e aprender algumas coisas novas.
 Para nossa conexao de VPN client-to-site com client Windows, vou usar o client da Cisco, como segue :



Esse client pode ser encontrado facilmente para download.

Para a implantação de VPN em firewall Cisco ASA é impressindível que o client seja Cisco e/ou homologado por ela. Evitando horas de tempo perdido para depois chegar a conclusão de que não funciona. Isso vai ficar muito claro quando formos para ambiente Linux.

Vamos acessar nosso ASA e criar nosso usário VPN.



Se houver alguma dificuldade de visualizar a imagem para aprender o comando, click com o botão direito e vai em "Exibir imagem". assim você verá nitidamente. Vou manter as imagens nesse tamanho para não ficar muito desorganizado.


Com essa linha de comando adicionamos um usuário ao IOS. Não necessariamente VPN, mas é assim que as coisas começam.
 O próximo passo é  fornecer os Atributos do usuário, como segue:

















Ao entrar com o comando: "hofw004(config)# username routing attributes" acrescido de ?,  podemos ver uma série de opções para configuração.
 Os parâmtros são em geral auto-explicativos e nem sempre todos são aplicáveis, mas, o mais importante de se perceber aqui é que essa não é,na verdade, a sequência correta de se começar a configurar nossa VPN.
 Vejam que nos atributos de usuário, temos alguns parâmetros que não poderíamos fornecer, simplesmente porque não configuramos ainda. Alguns  deles:


- group-lock
-vpn-filter
-vpn-group-policy
-vpn-tunnel-protocol

Dessa forma, vamos alterar a ordem de configuração.

Vamos criar a unidade principal de uma conexão VPN que é um Tunnel. VPN é um túnel feito com a pilha de protocolos IPSEC.




Aqui também temos algumas opções. Nós vamos criar um túnel "Remote Access".


o comando completo é esse:

"hofw004(config)# tunnel-group 'Nome-do-tunel'  type remote-access" 

No nosso caso ficará assim:

"hofw004(config)# tunnel-group routing-telecom type remote-access"


Agora vejamos os parâmtros para o Tunnel-Group:








Novamente temos uma série de parâmtros e novamente também alguns parâmetros que não se aplicarão as nossas configurações.
 Podemos observar,que alguns dos parâmtros solicitados aqui, também não foram criados ainda. Ou seja, para que possamos definir nosso Tunnel-Group, vamos primeiro ter que criá-los. São eles:

-address-pool
-default-group-policy

Na verdade, não é obrigatório que seja dessa forma. Eu estou fazendo assim para que possamos ir familiarizando com os termos e a estrutura de uma  VPN. Mas  se de fato quiséssemos criar nessa sequência, o IOS iria atribuir o valor default  aos parâmetros. De certa forma, o Firewall já possui valores defaults que ele pode passsar aos atributos criados. Isso pode ser muito útil, principamente em ambiente com muitos usuários. Mas como vamos configurar apenas um, vamos setar todos os valores.

 A função do Address-pool é simples. Eles será como um servidor de DHCP para os usuários VPN. Nesse caso, porém,  podemos ter um pool para cada usuário,  o que não faria muito sentido.Podemos ter um pool para um grupo de usuário ou para todos eles.
   Vamos configurar as duas opções por questões didáticas:



Como pode ser visto acima, a opção pool, nos dá condições tanto de configurar um ip como um range deles.
Vamos configurar  dois pools:


  

Primeiro, configuramos um pool com apenas um endereço. Perceba que a máscara usada foi /32. Agora vamos configurar um segundo pool com um range de endereços.




Aqui então criamos um range. A máscara usada foi /24,apesar de não aparecer na figura.

Como última opção, vamos configurar um IP estático.




O IOS não permitiu que eu entrasse com /32, tal qual fiz na configuração do pool. Porém, não há problema uma vez que especificamos um endereço e não uma rede.

Dessa forma, temos três opções de ip para nosso cliente VPN.

Seguindo o raciocínio acima, temos que configurar mais um parâmetro até podermos configurar nosso Tunnel-Group e esse parâmtro é o Group-Policy.
Vejamos:





No primeiro comando criamos um group-policy routing-telecom e definimo-o como internal.

No próximo comando vamos configurar seus atributos. O group-policy é o que mais possui atributos, não sendo possível mostrar todos. Vou listar os mais interessantes:

-address-pools
-dns-server
-ipsec-udp
-ipsec-udp-port
-ipv6-address-pools
-ipv6-vpn-filter
-group-lock
-password-storage
-split-dns
-split-tunnel-network-list
-split-tunnel-policy
-user-authentication-idle-timeout
-vpn-idle-timeout
-vpn-session-timeout
-vpn-filter

Antes de mais nada, vale lembrar que alguns atributos se repetem para usuário, tunnel-group e group-policy, como é o caso do vpn-filter,address-pool,etc. Isso parece um pouco confuso mas na verdade é importante dependendo da forma que a VPN for estruturada.

Dos atributos citados acima, destado:
- dns-server.
Possibilita definir qual DNS será usado pelo client VPN.
-group-lock
Possibilita fixar um group-policy a ser usado, evitando que o seja usado o default.
-split-tunnel-network-list
Define quais serão as redes que passarão pelo túnel VPN

O detalhe nessa configuração é que você define dentro do Group-policy qual a ACL que fará a definição do tráfego. Vamos então definir aquilo que chamaremos de "Tráfego de interesse". São as redes, no nosso caso a rede, que passará dentro no túnel VPN.

Vamos ver como fica nossa ACL:



Uma vez definido o tráfego de interesse, vamos então configurar nosso split-tunnel:





Esse atributo é bem interessante porque se uma rede não foi declarada, o client não criará uma rota para essa rede e mesmo que você crie um rota estática, o trafego nao sairá pelo Firwall.

Como disse no início, recomenda-se pesquisas sobre os termos e as teorias sobre VPN. A idéia do artigo é prática.
 Também como disse anteriormente, se nenhum atributo for especificado, valores default serão assumidos.

 Definida nossa Group-policy, vamos concluir a configuração de nossa Tunnel-Group:





 Configuramos nossa Group-Policy routing-telecom como sendo nossa default-group-policy.




Por último definimos nossa Pré-Shared-Key.

Temos,então, todas as informações para iniciar-mos nossa conexão.


Vamos agora configurar nosso client VPN:





Abra o client e click em "New". Irá aparecer a janela acima com os campos a serem preenchidos.


 "
Após preenchidos, teremos a janela acima. O campo  "Connection Entry" é para identificar uma conexão VPN, considerando que podemos ter várias.
O campo "Description" é apenas informativo. O próximo campo , "Host", é o IP do Firewall.
Os próximos dos campos podem gerar alguma confusão. "Name" e "Password" não é o nome e senha de usuário criados no início. Aqui devemos informar nosso Tunnel-Group e nossa "Pre-shared-key".

Uma vez preenchido todos os campos, clicar em save.



E agora chegou o grande momento : conectar à VPN. Vamos clicar em "Connect".



Na janela que se segue, entraremos com nosso usuário e senha VPN.

Username: routing
Password:cisco



E temos um conexão VPN estabelecida. Observem as informações acima. Mostra o nome da Conexão "Routing-Telecom", o IP do Firewall 172.16.1.1. Abaixo mostra "Connected to "Routing-Telecom" e o IP do client VPN.

Aqui, a interface criada pelo Client VPN.



Tudo parece perfeito, menos por um detalhe:























 E por último:




Como comprovado acima, após conectar em minha VPN, fiquei sem acesso à Internet.

Uma coisa interessante de verificar aqui é a tebela de rotas do Windows:



 Destacado em vermelho, está a causa do problema. O client, sorrateiramente, instalou um rota default apontando para o gateway VPN e, detalhe, com uma métrica muito melhor que a rota default instalada pelo Modem 3G.
 Dessa forma, todo nosso tráfego tentará sair pelo túnel VPN. Esse é um "problema" comun e previsível. É na verdade uma política de segurança. Do ponto de vista de boas prática de segunraça, todo o tráfego deveria mesmo sair pela VPN. Permitir tráfego de duas redes sendo uma deles a Internet, é inseguro.
 Porém, em 90 % das implantações, isso vai acontecer. A VPN é usada para acesso a redes específicas, para acesso a Internet,em geral, usa-se outro tipo de conexão.
 Como podemos resolver o problem então ?

O segredo é o comando  abaixo:





Voltamos aos atributos do nosso Group-Policy e definimos o parâmetro "split-tunnel-policy" . Esse parâmetro,com pode ser visto acima, possui três opções:

-excludespecified
-tunnelall
-tunnelspecified

A opção defualt é tunnelall. Defindo como tunnelspecified, nós definimos que apenas a rede configurada na ACL "routing-list"  será levada em consideração.

Como podemos observar abaixo, temos apenas uma rota default que é a rota criada pelo Modem 3G. As rotas referente ao "Tráfego de interesse", aparece na parte inferior  da tabela de roteamento.







 E para fechar com chave de ouro, segue mais um print:



Temos nossa VPN conectada, ping para Internet e nosso Skype UP.

 E assim concluímos nosso artigo sobre VPN em Firewall Cisco ASA e Client  Windows.  O bacana de trabalhar com Cisco é que as coisas funcionam como elas deveriam funcionar. De forma que, qualquer pessoa que montar o mesmo LAB, seja real ou emulado, e repetir as configurações, irá chegar nos mesmos resultados.
  Existem uma série de opções a serem exploradas mesmo em VPN client-to-site como essa. Parâmetros que podemos testar e ver qual o resultado. Enfim, apreender o máximo possível. Como artigo eu paro por aqui,mas, certamente continuo buscando conhecer mais e mais dessa fantástica tecnologia que é VPN.
  No nosso próximo artigo iremos usar SO Linux e pretendo ainda mostrar uma VPN Site-to-site.

Abraços a todos e até o próximo.
 

No comments:

Post a Comment