Entendiendo las Listas de Control de Acceso (ACLs) en Redes
Las Listas de Control de Acceso (ACLs) son una herramienta fundamental en la seguridad y gestión de redes. Nos permiten filtrar el tráfico de red de manera granular, controlando qué paquetes pueden pasar y cuáles deben ser descartados por un router o firewall. En esencia, una ACL es una lista ordenada de reglas que el dispositivo aplica para tomar decisiones sobre el tráfico.
1. ¿Qué son las ACLs y cómo funcionan?
Una ACL es un conjunto secuencial de condiciones de permiso o denegación que se utilizan para controlar el acceso a la red. Piensa en ellas como una serie de sentencias “if-then”: si un paquete cumple con las condiciones de una entrada de la ACL (ACE), entonces se aplica la acción correspondiente (permitir o denegar).
1.1 Usos principales de las ACLs:
- Filtrado de tráfico: El uso más común es como un filtro de paquetes, instruyendo al router a permitir o descartar tráfico específico.
- Seguridad: Restringir el acceso a ciertas redes, servidores o servicios.
- Control de flujo: Determinar qué tráfico puede ingresar o salir de una interfaz.
- Calidad de Servicio (QoS): Identificar tráfico para aplicar políticas de QoS.
- NAT (Network Address Translation): Definir qué tráfico debe ser traducido.
- Ruteo basado en políticas (PBR): Influir en las decisiones de ruteo.
1.2 Cómo trabajan las ACLs:
- Evaluación secuencial: Cuando un paquete llega a una interfaz donde se ha aplicado una ACL, el router evalúa el paquete contra cada entrada de la ACL en orden secuencial, desde la primera hasta la última.
- Primera coincidencia: Tan pronto como el paquete coincide con una entrada (ACE), se aplica la acción definida (permitir o denegar) y se detiene la evaluación de la ACL. Las entradas restantes no se examinan.
- Denegación implícita: Si un paquete no coincide con ninguna entrada en la ACL después de que se han evaluado todas las entradas, se aplica una “denegación implícita” (implicit deny). Esto significa que el paquete se descarta. Esta es una característica de seguridad crítica: si no se permite explícitamente algo, se deniega por defecto. Es por esto que siempre se recomienda tener una entrada
permit anyal final de una ACL si se desea permitir cualquier tráfico que no haya sido explícitamente denegado antes.
1.3 Aplicación de ACLs:
Las ACLs se configuran globalmente en el router, pero no tienen efecto hasta que se aplican a una interfaz. Una vez aplicadas a una interfaz, pueden filtrar el tráfico que entra (inbound) o sale (outbound) de esa interfaz.
- Inbound: Cuando una ACL se aplica de entrada, el router procesa los paquetes que ingresan a la interfaz y luego los enruta. Esto ahorra recursos del router al descartar el tráfico no deseado antes de que ingrese al proceso de ruteo.
- Outbound: Cuando una ACL se aplica de salida, el router enruta los paquetes a la interfaz de salida y luego los procesa contra la ACL. Esto permite que los paquetes que fueron enrutados para salir por esa interfaz se filtren justo antes de abandonar el router.
1.4 Reglas de aplicación:
- Solo se puede aplicar una ACL por protocolo (por ejemplo, IP) por dirección (inbound/outbound) por interfaz. Esto significa que para una interfaz GigabitEthernet0/0, solo puedes tener una ACL IP inbound y una ACL IP outbound.
2. Tipos de ACLs
Existen dos tipos principales de ACLs, que se distinguen principalmente por los criterios que utilizan para filtrar el tráfico:
2.1 ACLs Estándar
- Criterio de coincidencia: Solo coinciden con la dirección IP de origen del paquete.
- Identificación: Se identifican por un número (por ejemplo, 1-99 y 1300-1999) o por un nombre.
- Ubicación de aplicación: Debido a que solo filtran por IP de origen, deben aplicarse lo más cerca posible del destino del tráfico. Si se aplican cerca del origen, podrían bloquear todo el tráfico proveniente de esa red, incluso el deseado.
2.1.1 Configuración de ACLs Estándar Numeradas:
El formato básico para configurar una ACL estándar numerada es:
Ejemplos de configuración:
R1(config)# access-list 1 deny 1.1.1.1 0.0.0.0 // Deniega host 1.1.1.1
R1(config)# access-list 1 deny host 1.1.1.1 // Equivalente al anterior
R1(config)# access-list 1 deny 1.1.1.0 0.0.0.255 // Deniega la red 1.1.1.0/24
R1(config)# access-list 1 permit any // Permite todo lo demás (muy importante)
Aplicación a una interfaz:
R1(config)# interface g0/2
R1(config-if)# ip access-group {numero_acl} {in | out}
Ejemplo completo:
- Supongamos que queremos denegar el tráfico de la red 192.168.1.0/24 y la red 192.168.2.0/24 para acceder a la red 10.0.1.0/24.
R1(config)# access-list 1 deny 192.168.1.0 0.0.0.255
R1(config)# access-list 1 deny 192.168.2.0 0.0.0.255
R1(config)# access-list 1 permit any
R1(config)#
R1(config)# interface g0/0 // Asumiendo que g0/0 es la interfaz que va hacia 10.0.1.0/24
R1(config-if)# ip access-group 1 out // Aplicamos la ACL de salida en la interfaz que da al destino
Configurando ACLs Numeradas con Subcomandos (Estilo Moderno):
Aunque las ACLs numeradas tradicionalmente se configuraban directamente en el modo de configuración global, los IOS modernos permiten configurarlas de una manera similar a las ACLs nombradas, utilizando subcomandos.
R1(config)# ip access-list standard 1
R1(config-std-nacl)# deny 192.168.1.1
R1(config-std-nacl)# permit any
Esto crea una ACL numerada pero te permite la flexibilidad de editarla como una ACL nombrada, asignando números de secuencia automáticamente (o puedes especificarlos manualmente).
2.1.2 ACLs Estándar Nombradas:
Son funcionalmente idénticas a las numeradas, pero utilizan un nombre en lugar de un número. Esto ofrece varias ventajas:
- Mayor legibilidad: Los nombres son más descriptivos que los números (por ejemplo, BLOCK_BOB, SALES_OUTBOUND).
- Edición más fácil: Permiten eliminar o insertar entradas individuales sin tener que borrar y recrear toda la ACL. Esto es una gran mejora respecto a las ACLs numeradas tradicionales.
- Consistencia: Fomenta una mejor documentación y organización.
Configuración de ACLs Estándar Nombradas:
Ejemplo de configuración:
R1(config)# ip access-list standard BLOCK_BOB
R1(config-std-nacl)# 10 deny 2.2.2.2
R1(config-std-nacl)# 20 permit any
R1(config-std-nacl)# remark CONFIGURADO_OCT/25 // Agrega un comentario
Edición de ACLs Nombradas:
- Eliminar una entrada:
R1(config)# ip access-list standard BLOCK_BOB
R1(config-std-nacl)# no 10 // Elimina la entrada con número de secuencia 10
- Insertar una entrada: Puedes insertar una entrada entre otras existentes especificando un número de secuencia que esté entre dos entradas existentes.
R1(config)# ip access-list standard BLOCK_BOB
R1(config-std-nacl)# 15 deny 192.168.2.0 0.0.0.255 // Inserta una nueva entrada entre 10 y 20
2.2 ACLs Extendidas
Criterios de coincidencia: Mucho más granulares. Pueden coincidir con:
- Dirección IP de origen
- Dirección IP de destino
- Tipo de protocolo (IP, TCP, UDP, ICMP, etc.)
- Puerto de origen
- Puerto de destino
- Flags TCP (ACK, SYN, FIN, RST, URG, PSH)
- Otros campos de encabezado (establecido, TOS, etc.)
Identificación: Se identifican por un número (por ejemplo, 100-199 y 2000-2699) o por un nombre.
Ubicación de aplicación: Debido a su granularidad, deben aplicarse lo más cerca posible de la fuente del tráfico. Esto evita que el tráfico no deseado atraviese una porción significativa de la red antes de ser filtrado, conservando así los recursos de red.
2.2.1 Configuración de ACLs Extendidas Numeradas:
El formato básico es:
Ejemplos de configuración de ACLs Extendidas:
- Permitir todo el tráfico IP:
R1(config)# access-list 101 permit ip any any
- Denegar tráfico UDP del host 10.0.0.16 al host 192.168.1.1/32:
R1(config)# access-list 102 deny udp host 10.0.0.16 host 192.168.1.1
- Denegar pings de 172.16.1.1/32 a la red 192.168.0.0/24:
R1(config)# access-list 103 deny icmp host 172.16.1.1 192.168.0.0 0.0.0.255
- Permitir HTTPS (puerto 443) del host 192.168.1.0/24 al servidor 10.0.0.255:
R1(config)# access-list 104 permit tcp 192.168.1.0 0.0.0.255 host 10.0.0.255 eq 443
- Denegar tráfico con puertos UDP en un rango específico:
R1(config)# access-list 105 deny udp any range 20000 30000 3.3.3.3 0.0.0.0
Deniega UDP de cualquier origen con puertos entre 20000 y 30000, hacia el host 3.3.3.3
- Permitir tráfico de salida con puertos de origen TCP mayores a 9999:
R1(config)# access-list 106 permit tcp 172.16.1.0 0.0.0.255 gt 9999 host 4.4.4.4 eq 23
Permite conexiones Telnet salientes iniciadas desde 172.16.1.0/24 (donde el puerto de origen sería > 9999) hacia el host 4.4.4.4 en el puerto 23
2.2.2 Configuración de ACLs Extendidas Nombradas:
Al igual que las estándar, se configuran con un nombre y ofrecen las mismas ventajas de edición:
Ejemplo de ACL Extendida Nombrada:
R1(config)# ip access-list extended BLOCK_ICMP
R1(config-ext-nacl)# 10 deny icmp 192.168.1.0 0.0.0.255 host 10.0.1.0 0.0.0.0
R1(config-ext-nacl)# 20 deny icmp 192.168.2.0 0.0.0.255 host 10.0.1.0 0.0.0.0
R1(config-ext-nacl)# 30 permit ip any any // Importante para permitir lo demás
Aplicación a una interfaz (igual que las estándar):
R1(config)# interface g0/1
R1(config-if)# ip access-group {nombre_acl} {in | out}
Requisitos Comunes y Cómo Abordarlos con ACLs:
Veamos un ejemplo práctico y cómo diferentes tipos de ACLs lo abordarían:
Requisito: Los hosts en 192.168.1.0/24 no pueden acceder a SRV1 (10.0.1.0/24). Los hosts en 192.168.2.0/24 no pueden acceder a SRV1 (10.0.1.0/24). Ninguno de los hosts en 192.168.1.0/24 o 192.168.2.0/24 puede hacer ping a 10.0.1.0/24 o 10.0.2.0/24.
Enfoque con ACL Estándar (numerada o nombrada): Dado que las ACLs estándar solo filtran por IP de origen y se aplican cerca del destino, podríamos aplicarlas en la interfaz del router que se conecta a SRV1 o a las redes de destino.
R1(config)# access-list 1 deny 192.168.1.0 0.0.0.255
R1(config)# access-list 1 deny 192.168.2.0 0.0.0.255
R1(config)# access-list 1 permit any
Luego, si SRV1 está en la red 10.0.1.0/24 y la interfaz de salida de R1 hacia esa red es G0/0, aplicaríamos:
R1(config)# interface g0/0
R1(config-if)# ip access-group 1 out
Desventaja: Esta ACL estándar bloquearía todo el tráfico (HTTP, FTP, ICMP, etc.) de las redes 192.168.1.0/24 y 192.168.2.0/24 hacia 10.0.1.0/24. Si necesitáramos permitir algún servicio específico, una ACL estándar no sería suficiente. Además, para los pings, necesitaríamos una ACL separada si las redes 10.0.1.0/24 y 10.0.2.0/24 no están en la misma interfaz de salida.
Enfoque con ACL Extendida (nombrada): Una ACL extendida es más adecuada para este tipo de requisito, ya que permite la granularidad necesaria. La aplicaríamos cerca de la fuente. Si las redes 192.168.1.0/24 y 192.168.2.0/24 están conectadas a la interfaz G0/1 de R1:
R1(config)# ip access-list extended BLOCK_TRAFFIC
R1(config-ext-nacl)# 10 deny ip 192.168.1.0 0.0.0.255 host 10.0.1.0 // Bloquea todo de 192.168.1.0/24 a 10.0.1.0
R1(config-ext-nacl)# 20 deny ip 192.168.2.0 0.0.0.255 host 10.0.1.0 // Bloquea todo de 192.168.2.0/24 a 10.0.1.0
R1(config-ext-nacl)# 30 deny icmp 192.168.1.0 0.0.0.255 10.0.1.0 0.0.0.255 // Bloquea pings de 192.168.1.0/24 a 10.0.1.0/24
R1(config-ext-nacl)# 40 deny icmp 192.168.1.0 0.0.0.255 10.0.2.0 0.0.0.255 // Bloquea pings de 192.168.1.0/24 a 10.0.2.0/24
R1(config-ext-nacl)# 50 deny icmp 192.168.2.0 0.0.0.255 10.0.1.0 0.0.0.255 // Bloquea pings de 192.168.2.0/24 a 10.0.1.0/24
R1(config-ext-nacl)# 60 deny icmp 192.168.2.0 0.0.0.255 10.0.2.0 0.0.0.255 // Bloquea pings de 192.168.2.0/24 a 10.0.2.0/24
R1(config-ext-nacl)# 70 permit ip any any
Aplicamos en la interfaz G0/1 (que conecta a las redes de origen) de entrada:
R1(config)# interface g0/1
R1(config-if)# ip access-group BLOCK_TRAFFIC in
3. 🎯 Verificación de ACLs:
Para verificar la configuración y el funcionamiento de las ACLs, se utilizan los siguientes comandos:
show access-lists: Muestra todas las ACLs configuradas en el router.show ip interface {interface_type} {interface_number}: Muestra la información de la interfaz, incluyendo las ACLs aplicadas (inbound/outbound access list is set).show running-config | include access-list: Muestra las líneas de configuración de la ACL en la configuración actual.
4. 👌 Consejos importantes para trabajar con ACLs:
- Planifica antes de implementar: Define claramente qué tráfico quieres permitir y qué quieres denegar.
- La denegación implícita es clave: Recuerda que al final de cada ACL hay un
deny any anyimplícito para las ACLs extendidas o deny any para las estándar. Si olvidas el permit any explícito, podrías bloquear todo el tráfico. - Ubicación de la ACL: Estas reglas minimizan el impacto del filtrado y conserva los recursos de red.
- Estándar: Cerca del destino.
- Extendida: Cerca de la fuente.
- Orden de las entradas: El orden importa. Las entradas más específicas deben ir primero, seguidas de las más generales. Si una regla más general se coloca antes que una específica, la regla específica nunca se alcanzará.
- Prueba cuidadosamente: Después de implementar una ACL, verifica su funcionamiento y asegúrate de que no estás bloqueando tráfico esencial.
- Comenta tus ACLs nombradas: Utiliza el comando remark para describir el propósito de cada entrada o sección de tu ACL, lo que facilita el mantenimiento.
- No edites una ACL en uso si no es nombrada: Si necesitas modificar una ACL numerada que ya está aplicada, la práctica común es copiarla, hacer los cambios en un editor de texto, luego borrar la ACL en el router (no access-list {numero_acl}) y volver a pegarla. Las ACLs nombradas evitan esto.
🧐 Las ACLs son una herramienta poderosa y esencial en la administración de redes. Dominarlas te permitirá implementar políticas de seguridad robustas y controlar el flujo de tráfico de manera efectiva.
- ACLs
- Listas De Control De Acceso
- Redes
- Ciberseguridad
- Filtrado De Tráfico
- Routers
- ACL Estándar
- ACL Extendida
- Cisco
- Configuración De Redes