Monday, August 1, 2011

ACL-Access Control List

Access-lists ou, Listas de Acesso, é um dos tópicos mais importantes que eu exponho aqui e vou dizer o porque. Se seu contato com routers cisco acontece no limite entre sua rede local e a rede de seu provedor, então, assuntos como protocolos de roteamentos, protocolos WAN, podem não ser tão relevantes mas, tenha certesa, Access List é.
   Intrincicamente, ACLs estão relacionadas ao fator de segurança da rede,mas de um modo mais generalizado, ACL é uma forma de modelagem de tráfego que cruza uma interface. Se você for configurar NAT (Network Addess Translation) em um router, você vai precisar de ACL, se você for configurar controle de banda em um router, você irá precisar de ACL e assim por diante.
  A configuração de ACL pode ser relativamente simples se você dominar alguns conceitos e meu papel aqui será tentar explicar e apresentar esses conceitos. Ao final, mostrarei um LAB que fiz em Packet Tracer para tornar as coisas mais palpáveis.
   Existem basicamente dois tipos de ACLs: Standard (Padrão), Extended(Estendida)  sendo que ambas podem ser  Named (Nomeadas).  Verifcando cada tipo nos faz pensar que uma foi evolução da outra.
  ACLs standard são mais simples de implementar,porém, possuem algumas limitações, como por exemplo, bloqueiam apenas baseado no  endereço IP de origem e devem ser colocadas o mais perto do destino do tráfego possível por uma razão simples, elas não olham o IP de destino do pacote, apenas o IP de origem, como já foi dito. Isso ficará mais claro a medida que avançarmos, por hora, apenas guardem essas informações.
   ACLs Extended já são mais elaboradas, ou seja, ao invés de apenas analizarem tráfego até a camada 3, conseguem subir a camada 4 e analizar portas TCP e UDP. Isso lhes conferem uma flexibilidade bem maior. Elas devem ser colocadas o mais próximo possível da origem do tráfego e isso gera economia de banda na rede, uma vez que o pacote não precisa atravessar um segmento de rede, ou atravessar um roteador.
  Ambas as listas Standard e Extended podem ser Named. Na verdade, toda ACL recebe um número ao ser criada e podem conter um parâmetro chamodo Remark que lhe possibilita acrescentar uma descrição do que aquela ACL faz no tráfego, isso sem dúvidas ajuda na organização e troubleshooting da rede,porém, nada se compara as ACLs Named.
  ACLs Nameds possibilita você criar uma ACL do tipo "BLOQUEIA_TRAFEGO_HTTP" ou "PERMITE_TRAFEGO_FTP". Na hora de fazer alterações ou manutenção ficará muito fácil saber o que cada uma representa. Outro grande benefício propiciado pelas ACLs Named é o fato de você poder deletar  linhas na ACL sem precisar refazê-la inteira. Quando você cria uma ACL padrão ou estendida e descobre depois que precisa editá-la, você terá que salvá-la em um editor de texto, editá-la e depois colá-la novamente na runnning-config  do router,ao passo que ACL Named não precisa.
  ACLs Standard podem ser numeradas de 1 a 99 e de 1300 a 1999, enquando que as ACLs Extended recebem a numeração de 100 a 199 e de 2000  a 2699.

Vamos aprofundar um pouco mais nas ACLs Standard e depois faremos o mesmo com as ACLs Extended.
Como já foi dito, ACLs Standard ou Padrão,bloqueiam o tráfego baseado no IP de Origem do pacote não se importando com o IP de destino ou portas TCP e UDP.

Fig 1
  Considerando nosso pacote IP, ele irá olhar o campo 'Endereçamento do Remetente'.
Pois bem, uma vez definido isso, vamos ver a estrutura básica de uma ACL:

 Router(config)# access-list  [Número da ACL {1-99 ou 1300 a 1999}]  [permit | deny | Remark]  [IP de Origem ] [Máscara curinga] [Log]

 Conhecer essa sequência e os parâmetros é fundamental!

1-Router(config)# - ACLs são confiuradas no modo global do roteador

2-Router(config)# access-list  - O comando para estartar uma ACL é access-list

3-Router(config)# access-list  [Número da ACL {1-99 ou 1300 a 1999}] - ACLs Padrão podem ter essa numeração

4-Router(config)# access-list  [Número da ACL {1-99 ou 1300 a 1999}]  [permit | deny | Remark]
Logo após o numero de identificação, virá o que se prentende fazer com ela: permitir, negar. Remak é um artifícil útil para identificar o que a ACL faz, ou seja, mesmo que você decida por Permit ou Deny, você pode acrescentar uma linha Remark para documentar o objetivo da ACL.

5-Router(config)# access-list  [Número da ACL {1-99 ou 1300 a 1999}]  [permit | deny | Remark]  [IP de Origem ]- IP de origem é o IP ao qual se quer permitir ou negar a passagem de pacote. As opções aqui podem ser o IP de um host apenas, uma faixa de hosts ou toda uma rede.

6- Router(config)# access-list  [Número da ACL {1-99 ou 1300 a 1999}]  [permit | deny | Remark]  [IP de Origem ] [Máscara curinga] - A máscara curinga é o artifício que permite controlar uma faixa de IP ou uma rede, podendo usar até para um host apenas,porém, nesse caso, é mais correto usar a palavra host ,como se segue:

Exemplo:

Router(config)# access-list  1  permit  host 192.168.0.1

Essa ACL permite pacotes vindos de 192.168.0.1
Usando o recurso de Máscara Curinga, poderia fazer dessa forma:

Router(config)# access-list  1  permit   192.168.0.1  0.0.0.0.

Como pode ser observado, sai a palavra host e entra Máscara Curinga 0.0.0.0. O zero significa que todos os octetos do endereço IP devem coincidir.

A liberação por faixa de IP seria da seguinte forma:


Router(config)# access-list  1  permit   192.168.0.1  0.0.0.255

 Ou seja, 255 nesse caso,ou ALL-ONES (11111111) em um octeto da Mascara Curinga, significa que não interessa qual número. Ou seja, qualquer valor apos 192.168.0 será permitido ou negado.

Você pode ainda refinar mais sua regra, usando o recurso de blocos da Mascara Curinga. Esse recurso diz que uma Máscara Curinga pode bloquear por blocos de IP que vão de : 1,2,4,8,16,32,64,128,etc. Ou seja, em potência de 2.
   Conclui-se dessa forma, que não é possível bloquear ,por exemplo, 5 hosts apenas. Você pode bloquear 4 hosts ou 8 hosts. Vamos ver como se bloqueia 4 hosts:


Router(config)# access-list  1 denyt  host 192.168.0.1  0.0.0.3

Porque três ?

A regra diz que usa-se o valor do bloco menos 1. Dessa forma, o bloco de 8 ficaria 7 e assim por diante.


 Por último, vamos ver o recurso de LOG


Router(config)# access-list  [Número da ACL {1-99 ou 1300 a 1999}]  [permit | deny | Remark]  [IP de Origem ] [Máscara curinga] [Log]
O recurso de Log ao final da ACL facilita no troubleshooting da rede. Cada vez que um pacote é bloqueado,casa seja uma ACL de bloqueio, ou permitido, caso seja uma ACL para permitir, um LOG será criado. Entretanto, em redes grandes , não é um recurso prático.


Posicionamento da ACL na rede



Fig 2
 Muito bem, falamos de bloquear IPs de origem, falamos em posicionar ACLs perto do destino, mas isso gera uma certa confusão,pelo menos eu tive uma certa dificuldade no início dos meus estudos.
  Para facilitar o entendimento, eu sigo um conselho de Geremy Ciora, ele diz em seus ótimos videos de treinamento : "..be the router", ou seja, seja o roteado. Quer dizer, quando você tiver que aplicar uma ACL em um router, se ponha no lugar do router, imagina que seus braços,e talvez pernas, dependendo de quantas interfaces estamos falando, seja as interfaces. Ou seja, tráfego Inbound, tráfego Outbound, detino, origem, podem ser mais fáceis de serem  compreendidos.
    Quando se diz perto do destino, o destino é você, é seu router, quando se diz origem, origem é o router que lhe enviará o pacote. A idéia do controle de tráfego, colocando-se no lugar do equipamento, é controlar o tráfego que vem de algum lugar em sua direção. Firewalls, por exemplo, inclusive, para quem já conhece IPTABLES pode perceber que existem uma semelhança grande entre suas regras e ACLs, firewalls são configurados para bloquear o tráfego que vem de fora, e não para o tráfego gerado em sua LAN. Não que não seja possível, mas á mais racional  é que se queira bloquear o tráfego que vem em direção a você.
  Olhando dessa forma, a ORIGEM aqui é um router remoto e o DESTINO  seria seu roteador, ou voce, seguindo nossa analogia.
   No caso da Figura 2, podemos ver no diagrama o administrador está em R1, ele quer bloquear o tráfego vindo de R3. Se a idéia é por a ACL o mais próximo possível do destino e o destino é R1, então a ACL foi instalada na serial de R1. Essa ACL , sendo padrão, irá ser do tipo:

Router(config)# access-list 1 deny 192.168.10.0  0.0.0.255 
Router (config)# access-list permit  any

Isso bloqueará toda a rede 192.168.10.X, não importando qual seja seu final,ou seja, se o IP da rede for 192.168.10 será bloqueado. E aqui fica claro do porque uma ACL Padrão não pode ser colocada próximo à Origem do tráfedo. Se você configurar essa ACL na Origem, ou seja, em R3, simplesmente você mata o roteador, ou pelo menos, a interface Fa 0/1 do mesmo.
  A segunda linha :

Router (config)# access-list permit  any


É nova para nós, mas é fácil de compreender, ela está dizendo para permitir todo o restante do tráfego. Isso é necessário devido a uma particularidade que ainda não mencionamos. "Toda ACL possui uma regra no final da mesma que bloqueia todo o tráfego". Ou seja, é implícito, não precisa ser configurada. Imagina que quando você configurou uma ACL, haverá uma linha do tipo no final:

Router(config)# access-list [Número da ACL]  deny any.

Ou seja, caso o pacote chegue a interface do router, seja submetido a todas as regras da ACL presente, e não coincida com nenhuma delas, ele cairá nessa última regra e será descartado ou permitido. O que implica em dizer que, se você configurar sua ACL com deny, você, obrigatoriamente, terá que por uma instrução permit no final, ou todo o tráfego será bloqueado.

 Outra regra importante:
"As regras da ACL são lidas pelo router de cima para baixo, ou seja, se o pacote coincidir com a primeira regra, ele será roteado e não será olhado as demais regras"

 
   Espero que tenha ficado bem claro esses conceitos porque eles são muito importantes para se compreender as ACLs como um todo.
  Vamos aprender como apliar a ACL na interface do roteador e iniciarmos com ACLs Extended.

Para aplicarmos essa ACL, devemos proceder assim:

Router(config)# interface serial 0/0/1
Router(config-if)# ip access-group 1 in

 Pronto, já temos uma ACL funcionando na interface serial 0/0/1 no sentido entrada.


Extended ACLs



Praticamente os mesmo conceitos relacionados as ACLs Standard se aplicam as ACLs Extended, porem , veremos que essa última possui uma capadidade maior de filtragem.
  ACLs Extended   possuem a seguinte sintax:

Router(config)# access-list [Numero da ACL { 100 a 1999 ou de 2000 a 2699}] [permit | deny | Remark] [Protocol {TCP,UDP,ICMP,etc}] [IP de origem ] [Mascara Curinga do IP de origem ] [IP de Destino ] [Madcara curinga do IP de Destino ]

Como podemos ver, agora temos mais opções. Temos o campo protocolo e o campo IP de Destino. O campo protoloco pode ser a porta TCP ou UDP ou pode ser o nome do protocolo como, por exemplo, www,icmp,et,) ou pode ser usar a palavra chave IP que corresponde a todos os protocolos, por razões óbvias, tendo em vista que o IP 'carrega' todos os demais.
  Vamos ver um exmplo para facilitar:

Router(config)# access-list 101 permit tcp any host 192.168.0.1 eq www.
 Router(config)# access-list 101 permit ip any any

Nesse exemplo, estamos permitindo o trafégo de qualquer Origem, any, para o Destino 192.168.0.1 na porta www ou 80.
 Novamente aqui estamos considerando a regra do 'deny any ' no final da ACL, que aqui inclusive seria 'deny any any' , já que em ACL Extended deve ser definido origem e o destino do tráfego.
Sem a linha permit ip any any, apenas o trafégo www iria passar pelo router, bloqueando todo o resto do tráfego.

Essa regra mostra a flexibilidade das ACLs Extended.

O processo de aplicar as ACL Extended é o mesmo nas Standard:
Router(config)# interface Serial 0/0/1
Router(config-if)# ip access-group 101 out

No caso em questão, aplicamos no sentido de saída do tráfego.

 Um aplicação muito útil para ACLs,podendo ser Standard ou Extended, apesar de que se vê mais com Standard, seria para permitir acesso Telnet em um router por apenas um IP ou rede específicos.

Router(config)# access-list 10 permit  host 192.168.0.1
Router(config)#access-list 10 deny any
Router(config)#line vty 0 4
Router(config-line)#password cisco
Router(config-line)# login
Router(config-line)# access-class 10 in

Pronto. Com essa configuração, apenas o host 192.168.0.1 terá acesso pelas linhas vty,ou seja, Telnet do
 router.

 Vamos apresentar um LAB com algumas situações sobre ACLs:



Figura 3
 Meu ojetivo nessa rede é bloquear o acesso ao  Servidor HTTP( 192.168.0.2  )da minha rede para o PC2 (172.16.0.3)e deixar o PC1(172.16.0.2) acessando.

  Vamos usar ACL Extended. Baseado no que vimos vamos colocá-la o mais próximo da Origem do tráfego possível. No nosso caso será a interface Fa 0/0 do Router Branch.
  Agindo dessa forma, evitamos que as tentativas de acesso ao servidor HTTP atravesse toda a rede para acabar sendo bloqueado em HQ.
  Vamos lá:

branch(config)#access-list 100 deny tcp host 172.16.0.3 host 192.168.0.2 eq www

branch(config)#access-list 100 permit ip any any




branch(config)#int fa 0/0
branch(config-if)#ip access-g
branch(config-if)#ip access-group 100 in
branch(config-if)#exit


Testando:

Em PC2:

Figura 4










 



 E aqui nosso PC 1:

Figura 5























No comments:

Post a Comment