domingo, 15 de setembro de 2013

Private VLAN na Segurança e Particionamento de VLANs

Olá Pessoal.

As VLANs são comumente utilizadas para quebrar os domínios de broadcast em grandes redes de computadores, o que é muito desejável para dois fins principais: (i) desempenho e (ii) segurança. Quando algumas portas de um (ou mais) switch(es) são colocadas em uma determinada VLAN os quadros de broadcast originados por uma máquina ficam restritos somente a essas portas, o que implica em melhor desempenho decorrente da presença de menos máquinas gerando broadcasts. Outra vantagem do ponto de vista de segurança é que deixa de existir a possibilidade de alcançabilidade entre outras portas que não sejam membros da mesma VLAN na camada de enlace.

Embora a principal funcionalidade das VLANs seja segmentar os domínios de broadcast, há algumas situações específicas em que pode ser necessário particionar uma dada VLAN para que, por exemplo, algumas portas de uma VLAN tenham acesso a apenas algumas outras portas da mesma VLAN, ao invés de ter acesso a todas as porta da sua respectiva VLAN. Esse é um requisito de segurança comum em alguns ambientes, a exemplo de server-farms onde ficam localizados os servidores da empresa. 

Nesse contexto, é muito comum que os servidores de uma empresa tenham sua própria sub-rede (layer-3) associada com uma respectiva VLAN (layer-2), de forma que os acessos dos hosts aos servidores tenham que passar pelas políticas de segurança impostas pelos roteadores com função de firewall. Acontece que, ainda assim, caso haja alguma vulnerabilidade na rede e alguém consiga acesso não autorizado a qualquer um dos servidores, então provavelmente será fácil, a partir dele, acessar qualquer outro servidor da server-farm porque existe uma relação "natural" de confiança (nem sempre desejável) entre os servidores que pertencem à mesma VLAN e sub-rede.

Para evitar esse tipo de situação é conveniente do ponto de vista de segurança que os servidores não tenham alcançabilidade entre si no mesmo domínio de broadcast, mesmo que pertençam à mesma VLAN. É impossível fazer isso através de VLANs convencionais, mas esse cenário pode ser implementado em switches Catalyst e Nexus da Cisco através da configuração de Private VLANs.

Em muitos casos não há necessidade de comunicação dos servidores entre si, o que faz desses servidores bons candidatos a serem totalmente isolados em suas VLANs. Em outros casos é necessário que haja comunicação entre os servidores, por exemplo em clusters onde os nós trocam mensagens entre si com frequência para manter a abstração do cluster como sendo uma máquina "única" composta por todos os seus nós que executam a solução de clusterização (middleware). Então vamos observar a figura abaixo para enxergar essas diferentes possibilidades e para entender de que forma a Private VLAN pode ser bastante desejável.


Na configuração de "Private VLANs" somente pode existir  uma única VLAN primária que, por sua vez, pode ser vinculada a várias VLANs secundárias. As VLANs secundárias podem ser de dois tipos: (i) community ou (ii) isolated. Uma VLAN secundária do tipo community é aquela em que suas portas podem se comunicar apenas umas com as outras e também com a VLAN primária. Já as portas de uma VLAN secundária do tipo isolated não podem se comunicar entre si e só conseguem alcançar a VLAN primária.

Na figura temos uma VLAN primária que possui dois sub-domínios vinculados à ela (círculo amarelo), sendo uma do tipo isolated onde os servidores não conseguem se comunicar entre si (círculo azul) e outra do tipo community onde precisa haver comunicação entre as portas para que os servidores possam trocar mensagens e formar um cluster (círculo rosa).

A associação das portas de um switch que irão utilizar o recurso da "Private VLAN" não é tão direta quanto as associações convencionais de portas e VLANs que era realizada através do comando "switchport access vlan X".  Essa configuração é diferente porque agora as portas podem assumir dois modos: (i) promiscuous ou (ii) host.

A porta configurada em modo promíscuo normalmente é aquela em que é conectado o roteador/firewall que é o gateway das máquinas, afinal essa porta pode se comunicar com qualquer outra porta na VLAN primária ou em suas respectivas VLANs secundárias, sejam elas community ou isolated. A porta é configurada em modo host quando conecta uma máquina regular porque somente pode se comunicar com portas em modo promíscuo na VLAN primária ou com outras portas da sua VLAN secundária, desde que essa VLAN secundária seja do tipo community.

Para exemplificar como seria o processo de configuração vamos utilizar como base o cenário da figura acima, onde estaremos assumindo que a VLAN 10 será primária, que a VLAN 20 será secundária do tipo isolated e que a VLAN 30 será secundária do tipo community. Estaremos assumindo que a interface g1/1 do switch está conectada ao roteador que é gateway dos servidores, enquanto que as interfaces f0/1, f0/2 e f0/3 conectam os servidores do cluster da VLAN 20 e as interfaces f0/4, f0/5 e f0/6 conectam os servidores isolados da VLAN 30.

01. Switch(config)# vlan 20
02. Switch(config-vlan)# name "VLAN do Cluster"
03. Switch(config-vlan)# private-vlan community
04. Switch(config-vlan)# vlan 30
05. Switch(config-vlan)# name "VLAN dos Servidores Isolados"
06. Switch(config-vlan)# private-vlan isolated
07. Switch(config-vlan)# vlan 10
08. Switch(config-vlan)# name "VLAN Primaria"
09. Switch(config-vlan)# private-vlan primary
10. Switch(config-vlan)# private-vlan association 20,30
11. Switch(config-vlan)# exit
12. Switch(config)# interface range f0/1 - 3
13. Switch(config-if-range)# switchport mode private-vlan host
14. Switch(config-if-range)# switchport private-vlan host-association 10 20
15. Switch(config-if-range)# interface range f0/4 - 6
16. Switch(config-if-range)# switchport mode private-vlan host
17. Switch(config-if-range)# switchport private-vlan host-association 10 30
18. Switch(config-if-range)# interface g1/1
19. Switch(config-if)# switchport mode private-vlan promiscuous
20. Switch(config-if)# switchport private-vlan mapping 10 20,30

Na configuração acima criamos primeiro as VLANs secundárias, sendo a VLAN 20 do tipo community (linhas de 01 a 03) e a VLAN 30 do tipo isolated (linhas de 04 a 06). Na sequência criamos a VLAN 10 do tipo primária e já informamos o vínculo com suas VLANs secundárias (linhas de 07 a 10). Nas linhas de 12 a 14 associamos as interfaces f0/1, f0/2 e f0/3 em modo host com a VLAN 20 (cluster), sendo que o primeiro número que aparece no comando é menção à VLAN primária em que ela possui vínculo. O mesmo procedimento é feito nas linhas de 15 a 17 em relação às interfaces f0/4, f0/5 e f0/6 que pertencem à VLAN 30 (servidores isolados). Por fim, nas linhas de 18 a 20 configuramos a interface g1/1 em modo promíscuo na VLAN primária (e secundárias).

Para encerrar o artigo, é importante ter em mente que "Private VLANs" só existem no contexto local de um único switch e por isso não são propagadas através dos links trunk, devendo ser configuradas individualmente em cada switch no qual se estendem. Outro detalhe importante é que não são todas as versões do IOS que têm suporte a esse recurso, por isso convém pesquisar no site da Cisco!

Abraço.

Samuel.

5 comentários:

  1. Taí um tópico legal do CCNP Switch :-)
    Tks

    ResponderExcluir
  2. Ótima explicação Samuel, poderia complementar em outro post e mostrar como seria no caso de termos mais switches nesse cenário, alguns que não falassem pvlan(trunk isolated),outros que falassem (trunk normal) ou no caso de um router on a stick (trunk Promiscuous) ...

    ResponderExcluir
  3. Bom dia,

    Professor, realizei todas as configurações elencadas em um LAB no GNS3. Reitero que está tudo configurado em conformidade com as instruções. Embora as interfaces ficam Down acusando problema na camada de protocolos (encapsulamento). Você saberia elucidar o impasse?
    Obrigado.

    ResponderExcluir