¿Cómo funcionan las ACLs? II: ACLs estándar

Spread the love

Esta entrada es la continuación de ¿Cómo funcionan las ACLs? I: Conceptos, en la que explico los conceptos básicos de Listas de Acceso en dispositivos Cisco. Ahora es el turno de las ACLs más básicas: las ACL estándar. En esta entrada explico qué son ACL estándar, cómo se configuran y qué consideraciones especiales hay que tener con su instalación.
NOTA: Finalmente, escribí 5 entradas completas sobre ACLs a manera de Tutorial, se las recomiendo.

¿Qué son ACLs?

Antes de empezar les recuerdo que ésta es la continuación de la entrada ¿Qué son ACLs? I: Conceptos. Sin embargo, les voy a hacer un breve resumen sobre el asunto. Éste resumen no reemplaza la lectura de la entrada anterior.

Las ACLs son un mecanismo que usan diversos dispositivos y aplicaciones para filtrar o clasificar el tráfico que interceptan. En Cisco las ACLs se usan en muchos contextos, en CCNA se usan como mecanismo de seguridad para filtrar selectivamente tráfico que cruza por el enrutador.

Una ACL es un conjunto de reglas contra las que se compara cada paquete que cruce una interfaz en la que se instaló la lista de acceso. Cada paquete se compara contra las reglas una por una empezando por la primera y continuando con las siguientes. Sólo si el paquete no corresponde a lo que indica una regla se continúa con las siguientes, una vez que el paquete se corresponde con una de las reglas de la ACL, se le aplica la acción asociada a la regla y no se compara el paquete con ninguna otra regla. Las ACLs entonces son reglas, una por línea, que se identifican con un número o una palabra y que identifican flujos de datos o conjuntos de direcciones. Cada regla hace uso de una dirección de referencia y una máscara wildcard que condicionan la acción a ejecutar sobre un paquete en cuestión. La condición consiste en que los paquetes coincidan con la dirección de referencia en los bits que la máscara wildcard tenga en cero, por lo tanto si una wildcard es 0.0.0.0 significa que todos los bits de la dirección origen o destino de un paquete que cruce la interfaz por la que está instalada la ACL se comparará bit a bit con la dirección de referencia, de esa manera yo especifico una dirección completa de host. La dificultad de diseñar e instalar ACLs radica en la dificultad de concebir los patrones de tráfico como un conjunto de paquetes heterogéneos que pasan por una interfaz en una dirección en particular.

¿Qué es una ACL estándar (Standard ACLs)?

Dentro de las ACL más comunes están las ACL estándar y las ACL extendidas, diferenciadas entre sí por su granularidad: las extendidas permiten más detalles de filtrado, ambos tipos de listas se pueden numerar o nombrar. Dentro de las menos comunes están las que CCNA Exploration llama complejas: ligadas a rangos de tiempo, reflexivas y dinámicas. Las más simples en todo sentido son las ACLs estándar, que permiten defnir tráfico con base en las direcciones IP de origen de los paquetes que correspondan con las reglas de la ACL.

Las ACL estándar entonces especifican un sólo par dirección de referencia/wildcard contra el que se comparan todos los paquetes que entren o salgan de la interfaz en la que se instale la ACL, en otras palabras, una ACL estándar filtra tráfico con base en la dirección IP origen de los paquetes. Estas ACL se crean en modo de configuración global con el comando access-list seguido de un número de 1 a 99 o de 1300 a 1999, éstos rangos identifican que el tipo de ACL es estándar, otros rangos identifican ACLs extendidas (100 a 199 y 2000 a 2699). Cada regla debe tener el mismo número para pertenecer a la misma ACL, si el número cambia, la regla en particular pertenecerá a otra ACL. Luego de Access-list <número> sigue la acción a ejecutar (permit o deny) y finalmente la condición que deben cumplir los paquetes para aplicarles la acción o continuar examinando más reglas. Las ACL estándar usan un sólo par dirección/wildcard para especificar la condición que deben cumplir los paquetes para que se les aplique la acción permit o deny. La condición examina la dirección IP origen de cada paquete y la compara con el par dirección/wildcard pero sólo en los bits en los que la wildcard tenga ceros.

¿Cómo se configuran ACL estándar?

Los pasos generales para configurar ACLs son 3:

  1. Crear la ACL en modo de configuración global
  2. Aplicar la ACL en una interfaz indicando la dirección del tráfico al que se le va a aplicar
  3. Verificar su funcionamiento

La creación de la ACL consiste en crear una secuencia de reglas con un mismo identificador, cuyo orden filtre el tráfico según los objetivos. Cada regla tiene la forma access-list <n> [ permit | deny ] <referencia1> <wildcard1>, donde n es el número que identifica la ACL (0 a 99 ó 1300 a 1999 para ACLs estándar) y referenciaN/wildcardN son los pares con los que se compararán los paquetes para aplicarles la acción . Entonces una ACL tiene la forma:

  • access-list <n> permit <referencia1> <wildcard1>
  • access-list <n> deny <referencia2> <wildcard2>

Como todas las reglas coinciden en el número (n), la ACL está compuesta por todas las reglas listadas. Para simplificar, puse permit y deny pero en las reglas se puede elegir cualquiera de las dos según los objetivos perseguidos. Todas las ACLs terminan implícitamente en una regla deny any, es decir, al final de la lista, cualquier paquete que no haya correspondido con ninguna regla se va a descartar por defecto.

Para aplicar una ACL, ésta ya debe estar creada. Las listas de acceso se aplican en una interfaz, por lo tanto hay que ingresar en modo de interfaz y el comando tiene la forma ip access-group <n> [in | out] donde n es el número común a todas las reglas de la ACL y las palabras in/out indican en qué sentido se aplicarán las reglas y ésto tiene importantes implicaciones: el tráfico en una dirección tiene ciertas direcciones IP origen pero en la otra dirección éstas mismas direcciones serán IP destino.

  • interface serial 0/0
  • ip access-group <n> [in|out]

Finalmente verificar la ACL se hace con varios comandos, uno es show access-list, que muestra todas las listas de acceso activas y cuántos paquetes han correspondido (match) con cada regla. El comando que muestra si una interfaz tiene una ACL aplicada y en qué dirección es show ip interface, este comando muestra mucha información, por  la mitad de toda esa información dice inbound ACL Outbound ACL.

  • show access-list
  • show ip interface serial 0/0

¿Qué consideraciones hay que tener para instalar ACLs?

Denegación por defecto y Log

La primera consideración importante es tener en cuenta siempre que las listas de acceso terminan en denegación por defecto, por lo tanto, si una ACL sólo tiene reglas de denegación lo único que logra es denegar TODO el tráfico. Una ACL debe tener siempre por lo menos una regla de permitir. Algunos administradores prefieren poner una regla final, sea deny any o permit any de manera explícita para poder ver con show access-list cuántos paquetes se han filtrado por la última regla o mejor, cuántos paquetes no han correspondido con ninguna otra regla. Otros administradores usan la lista de acceso para recolectar información sobre el tráfico de la red, combinando reglas que terminan con la palabra log que hace que la ACL genere entradas de registro como si fueran mensajes del sistema. Combinar reglas permit con log hace que la acl evidencie algún tráfico que se necesita saber cómo se está comportando.

Orden de verificación: Reglas específicas y generales

Como cada regla se verifica en secuencia comenzando por la primera, si una regla es general, es decir, abarca más direcciones o flujos de datos que otra, ésta regla debería ir después de las más específicas. Para ilustrar ésto, observe el siguiente ejemplo: yo quiero bloquear un host de la red 192.168.1.0/24 pero permitir el resto de esta red, necesito dos reglas: permitir la red y denegar el host, como la regla para la red es más general e incluye el host mismo, ponerla de primera va a tener como efecto que nunca se mire la regla que dice denegar el host, porque siempre aplicará la primera y no se verificarán más reglas, permitiendo al host transmitir información cuando el objetivo era denegar precisamente ese host.

La regla se debería escribir de la siguiente manera:

  • access-list 1 deny 192.168.1.1 0.0.0.0
  • access-list 1 permit 192.168.1.0 0.0.0.255

La anterior ACL tiene como resultado, cuando se aplica a una interfaz, que sólo el tráfico perteneciente a la red 192.168.1.0, excepto el host 192.168.1.1, puede salir por la interfaz en la que se aplique. Lo anterior siempre y cuando, el tráfico tenga como orígenes éstas direcciones.

Tráfico con orígen en el enrutador




Finalmente, cierto tráfico proveniente del enrutador no pasa por las listas de acceso, por ejemplo, el acceso a VTY (telnet/ssh) al enrutador no es examinado por las ACL, por lo tanto hay que poner una regla especial para este tráfico. La regla se llama access-group <n> y debe ser ACL estándar. Una regla de este tipo limita el acceso por telnet al enrutador sólo a los hosts que correspondan a la lista especificada.

¿Qué más?

Ya va, siga pendiente que la próxima entrega es sobre listas de acceso extendidas de la misma manera que he escrito ésta. Estoy considerando escribir una entrada con sólo ejemplos de filtrado de tráfico con ACLs y al final de esta serie pondré un video que demuestre todo lo visto.

11 comentarios en “¿Cómo funcionan las ACLs? II: ACLs estándar”

  1. Vale gracias tu contenido esta demasiado bueno, estaba en otros blog pero aun su explicación no me servia me dejaban mas nulo, de hecho ya hice y unas ACL y me salieron perfecto VALE GRACIAS.

    1. Hola Michel,

      esa es una muy buena pregunta. Esa es una muy mala práctica. La sentencia que asigna la ACL queda en la interfaz cuando borras la ACL, por lo tanto, en teoría, debería quedar una ACL con sólo la regla por defecto: deny ALL.

      En la práctica (con IOS 12.4) no pasa nada, hice la prueba tanto en PT como en un enrutador 2800 y no pasa nada. Sin embargo yo desconfío un poco de ese comportamiento, puede ser porque el IOS es muy nuevo. Lo cierto es que no es una buena práctica dejar comandos parciales activos (ip access-group) y definitivamente es mejor no ensayar con enrutadores en producción.

      Gracias y hasta pronto.

  2. Impresionante tu blog, llevo 18 años en informatica y ahora estoy empezando en el tema de comunicaciones a fondo, y el lio que llevaba con todo era impresionante, y me has aclarado muchisimos conceptos y cosas que necesitaba.
    mil gracias, con gente como tu puede seguir avanzado este mundo.
    :):):):)

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.