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 |
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 |
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 |
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