You are on page 1of 12

Uso de listas de acceso en entornos Cisco

por Antonio Gallego de Torres, autor del libro "Enrutadores Cisco".

LISTAS DE ACCESO. PRESENTACION

Los routers Cisco proporcionan varios métodos de selección de tráfico. En el presente


artículo exploraremos las posibilidades de las listas de acceso. Las listas de acceso son
conjuntos de reglas que indican al router como seleccionar paquetes. Una vez seleccionados
los paquetes pueden ser tratados de diversas formas. Uno de los usos más extendidos de las
listas de acceso es el de controlar el flujo de tráfico entrante y saliente de un router.

El presente artículo se divide en dos bloques: una exposición teórica de las listas de acceso
(estructura, tipos, formación de las condiciones que las conforman) y una serie de ejemplos
prácticos que aclararán rápidamente todos los conceptos establecidos en la primera parte.

I. TEORIA DE LAS LISTAS DE ACCESO

LISTAS DE ACCESO. ESTRUCTURA BASICA

Las reglas que componen las listas de acceso tienen tres partes: un número que identifica la
lista, una instrucción deny o permit y una condición

access-list número_identificador [permit|deny] condición

El número utilizado para identificar una lista concreta debe ser seleccionado de un rango
numérico acorde con el uso concreto de la lista. En la Tabla 1 vemos los principales tipos
de listas disponibles. En este artículo nos centraremos especialmente en las listas IP, en sus
formas Estándar y Extendida.

Tabla 1. Numeración de las listas de acceso.

PROTOCOLO TIPO RANGO FILTRA POR


IP Estándar 1-99 y 1300-1999 el origen
100-199 y 2000-
IP Extendidas el origen, destino, protocolo, puerto...
2699
Ethernet Código 200-299 el tipo de código Ethernet
(Type)
DECnet Protocol Suite 300-399 el origen
Appletalk Protocol Suite 600-699 el origen
Ethernet Direcciones 799-799 la dirección MAC
IPX Estándar 800-899 el origen
IPX Extendida 900-999 el origen, destino, protocolo, puerto...
tipo de aplicación (SAP, Service
IPX SAP 1000-1099
Access Point)

SINTAXIS DE LAS LISTAS DE ACCESO

Ya hemos visto la sintaxis general de las listas de acceso (Standar ACLs):

access-list número_identificador [permit|deny] condición

Mostramos a continuación la sintaxis de las listas de acceso extendidas (extended ACLs):

Para el protocolo IP:


access-list access-list-number [dynamic dynamic-name [timeout minutes]]
{deny | permit} protocol source source-wildcard destination destination-wildcard
[precedence precedence] [tos tos] [log | log-input] [time-range time-range-name]

Para el protocolo ICMP:


access-list access-list-number [dynamic dynamic-name [timeout minutes]]
{deny | permit} icmp source source-wildcard destination destination-wildcard
[icmp-type | [[icmp-type icmp-code] | [icmp-message]] [precedenceprecedence]
[tos tos] [log | log-input] [time-range time-range-name]

Para el protocolo TCP:


access-list access-list-number [dynamic dynamic-name [timeout minutes]]
{deny | permit} tcp source source-wildcard [operator [port]]
destination destination-wildcard [operator [port]] [established]
[precedence precedence] [tos tos] [log | log-input] [time-range time-range-name]

Para el protocolo UDP:


access-list access-list-number [dynamic dynamic-name [timeout minutes]]
{deny | permit} udp source source-wildcard [operator [port]]
destination destination-wildcard [operator [port]] [precedence precedence]
[tos tos] [log | log-input] [time-range time-range-name]

Desde la versión de Cisco IOS 11.2, y para listas IP, el identificador numérico de la lista
puede ser reemplazado por un identificador alfanumérico de hasta 64 caracteres (el
primero, obligatoriamente alfabético). Versiones posteriores de IOS extienden esta
característica al protocolo IPX. A este tipo de listas se les llama "Listas de acceso con
nombre" (Named ACLs) y su forma es la siguiente:

ip access-list [standar|extended] nombre condicion

ESPECIFICACION DE CONDICIONES

Las condiciones de las listas de acceso permiten identificar las direcciones de origen y
destino de los paquetes. Junto con las direcciones se especifican máscaras que permiten
identificar la parte de la dirección que debe coincidir exactamente y la parte que puede ser
ignorada

Las máscaras de las listas de acceso son distintas a las máscaras de red y subred utilizadas
para configurar interfaces o rutas estáticas. Concretamente los ceros de las máscaras
significan que el bit correspondiente de la dirección es relevante, mientras que los unos
significan que el bit correspondiente de la dirección no ha de ser tenido en cuenta a la hora
de decidir si la condición se cumple. A las máscaras de las listas de acceso se les denomina
wildcard mask o máscaras comodín.

Si tenemos, por ejemplo, la condición 10.10.10.0 0.0.0.255, al pasar a binario la dirección y


la máscara podemos ver qué parte de la dirección será tenida en cuenta a la hora de
determinar si un paquete concreto cumple la condición (puede usar la calculadora de
Windows en modo Científico para ayudarse al convertir entre decimal y binario):

Tabla 2. Direcciones y Máscaras comodín.

  Decimal Binario
00001010.00001010.00001010.0000000
Dirección 10.10.10.0
0
00000000.00000000.00000000.1111111
Máscara 0.0.0.255
1

Esta condición selecciona las direcciones que comprenden desde la 10.10.10.0 hasta la
10.10.10.255, o dicho de otra forma las direcciones de la forma 10.10.10.x. Por ejemplo la
dirección 10.10.9.7 no cumple la condición (el tercer byte de la dirección es distinto en la
dirección y en la condición, y este tercer byte es relevante, tal como se indican los ceros de
la máscara para este tercer octeto) pero la dirección 10.10.10.254 si que cumpliría las
condiciones especificadas por la condición del ejemplo.

Las máscara inversa de las listas de acceso también puede ser determinada sustrayendo la
máscara normal de la máscara 255.255.255.255. En el ejemplo, la máscara comodín para la
red 10.10.10.255 con una máscara normal 255.255.255.0 sería 255.255.255.255 -
255.255.255.0 (normal) = 0.0.0.255 (inversa, comodín)
El uso adecuado de las máscaras comodín puede ayudarnos a seleccionar subconjuntos de
direcciones. En el siguiente ejemplo queremos crear una lista de acceso capaz de
seleccionar las redes

Tabla 3. Sumarizando subredes.

10.1.32.0/2 00001010.00000001.00100000.00000000/11111111.11111111.11111111.0000
4 0000
10.1.33.0/2 00001010.00000001.00100001.00000000/11111111.11111111.11111111.0000
4 0000
10.1.34.0/2 00001010.00000001.00100010.00000000/11111111.11111111.11111111.0000
4 0000
10.1.35.0/2 00001010.00000001.00100011.00000000/11111111.11111111.11111111.0000
4 0000
10.1.36.0/2 00001010.00000001.00100100.00000000/11111111.11111111.11111111.0000
4 0000
10.1.37.0/2 00001010.00000001.00100101.00000000/11111111.11111111.11111111.0000
4 0000
10.1.38.0/2 00001010.00000001.00100110.00000000/11111111.11111111.11111111.0000
4 0000
10.1.39.0/2 00001010.00000001.00100111.00000000/11111111.11111111.11111111.0000
4 0000

Está claro que la diferencia radica en el tercer octeto. Si examinamos la columna


correspondiente al mismo en su forma binaria, separando las partes variables de las fijas
 

32 00100 000
33 00100 001
34 00100 010
35 00100 011
36 00100 100
37 00100 101
38 00100 110
39 00100 111
  00000 111

podemos observar que la parte común a todas estas direcciones es la que comprende los
cinco bits de la derecha (los que ponemos a cero en la última fila. La dirección de red que
comprende las subredes del ejemplo será en binario
00001010.00000001.00100000.00000000 (usando para construirla los bits comunes a todas
las subredes y el resto a cero). Construiremos la máscara inversa o comodín usando ceros
para la parte que queremos seleccionar y unos para la que nos es indiferente que cambie:
00001010.00000001.00100000.00000000
00000000.00000000.00000111.11111111

El valor del tercer octeto de la máscara es en este caso 00000111, y pasado a decimal es 7.
Para el conjunto de redes de nuestro ejemplo la máscara 0.0.7.255 es capaz de seleccionar
todas las subredes.

*      *      *

Y ahora, ¿cómo se traduce esto en la práctica?

Por si no ha quedado suficientemente claro, la máscara inversa wildcard se calcula

wildcard = 255 - Máscara de Subred

En definitiva, buscaremos la máscara de red (o subred) que mejor recoja la condición que
queremos especificar y usaremos la fórmula anterior o una tabla como la 4 para convertir
de la máscara directa (la normal, la que usamos para configurar interfaces o rutas estáticas)
en una máscara inversa (el complemento de la máscara normal, que ya veremos en alguna
otra ocasión como también son utilizadas en la configuración de los protocolos de
enrutamiento OSPF y EIGRP)

Tabla 4. Transformación de las máscaras de red en máscaras inversas.

La máscara se transforma en la máscara inversa (wildcard)


255 11111111 0 00000000
254 11111110 1 00000001
252 11111100 3 00000011
248 11111000 7 00000111
240 11110000 15 00001111
224 11100000 31 00011111
192 11000000 63 00111111
128 10000000 127 01111111
0 00000000 255 11111111

Terminaremos presentando dos palabras clave bastante útiles a la hora de especificar ciertas
máscaras de uso muy corriente, host y any.

La palabra clave host se usa como atajo para especificar una dirección única (la de una
máquina específica). Por ejemplo

access-list permit host 192.168.5.10


en lugar de
access-list permit 192.168.5.10 0.0.0.0

La palabra clave any se usa como atajo para especificar cualquier dirección:
access-list 10 deny any

II. APLICACIONES PRACTICAS DE LAS LISTAS DE


ACCESO
Basta de teoría. A continuación expondremos unos ejemplos de listas de acceso que
demuestran su uso en la práctica. La configuración de listas de acceso consta de dos dos
pasos:

1.- Crear la lista de acceso


2.- Aplicarla en la interfaz correspondiente (o, en general, utilizarla en el proceso deseado)

Para muchos de los ejemplos IP usaremos la siguiente red:

Concretamente asignaremos las siguientes direcciones IPs por interfaz:

10.208.60.1/24 eth ---[router A]--- se0 172.35.1.46/30 --WAN LINK-- 172.35.1.45/30 se0
---[router B]--- se1 172.35.1.49/30 --WAN LINK-- 172.35.1.50/30 se0 ---[router C]--- eth
10.208.48.1/24

CONTROL SENCILLO DE TRAFICO MEDIANTE LISTAS DE ACCESO

Queremos filtrar en el router B aquellos paquetes que provienen de las máquinas


10.208.60.10 y 10.208.60.25, pertenecientes a la red local del router A

access-list 1 deny 10.208.60.10 0.0.0.0


access-list 1 deny 10.208.60.25 0.0.0.0
access-list 1 permit any

La última línea es fundamental, debido a una especial característica de las listas de acceso:
siempre añaden de forma automática una denegación implícita del total (un deny any), de
forma que la lista

access-list 1 deny 10.208.60.10 0.0.0.0


access-list 1 deny 10.208.60.25 0.0.0.0

denegaría todo. Siempre tiene que haber una condición permit en una lista (si queremos que
deje pasar algo).

Por cierto, podemos configurar lo anterior de una forma más compacta mediante el uso de
host:

access-list 1 deny host 10.208.60.10


access-list 1 deny host 10.208.60.25
access-list 1 permit any

Vamos a aplicar la lista de acceso 1 en la interfaz serial 0 del router B. Lo haremos "de
entrada", esto es, aplicaremos el filtro a los paquetes que cumplan la condición de la lista de
acceso 1 pero sólo chequearemos contra esta lista los paquetes que entran al router B por la
interfaz serial 0. Para aplicar la lista de acceso se usa la órden access-group en la interfaz
adecuada:

interface serial 0
ip access-group 1 in

Dos ideas muy importantes:


1.- Necesitamos al menos una condición permit para dejar pasar paquetes
2.- Las listas de acceso sólo chequean los paquetes que pasan por la interfaz donde están
aplicadas y sólo en el sentido en el que están aplicadas.

La lista anterior dejaría pasar paquetes con origen en las máquinas 10.208.60.10 y
10.208.60.25 si estos paquetes pasan por cualquier otra interfaz del router en cuelquier
sentido, e incluso si pasan por la interfaz serial0 en sentido saliente. Lo de entrante (in) o
saliente (out) es siempre desde el punto de vista del router donde se aplica la lista.

Antes de continuar con el resto de ejemplo de uso de las listas acceso vamos a ver una serie
de indicaciones acerca de su manipulación práctica

MANIPULACION DE LAS LISTAS DE ACCESO

Esto se puede leer también como "consejos desde la trinchera". Con las listas de acceso se
filtra el tráfico: los efectos de las listas de acceso en la practica son bastante potentes, y los
usuarios que se ven afectados por ellas lo manifestarán sin duda de formas muy claras.

Recuerde que si aplica una lista de acceso en una interfaz que le está dando en ese
momento a Usted acceso al router (un caso típico, dado que los routers son equipos de red y
generalmente se gestionan de forma remota) se la "está jugando": es muy fácil crear una
lista de acceso que filtre más de la cuenta, u olvidarse de dar paso a los paquetes con origen
la red local desde la que gestiona el equipo. Nada más aplicar la lista el router le echará.
Cuando le pase no se lo tome a mal, más bien siéntase parte de la corporación: quedarse sin
gestión de un equipo en red forma parte del folklore. La situación tiene varios remedios que
se me ocurran de primeras: reload, reset y  loopback:

Puede llamar a la delegación remota y pedir que reinicien el router (Manolo de seguridad
puede darle sin problemas el botonazo al "vídeo oscuro" del rack de la sala de
comunicaciones). Quedará con la configuración que tenía la última vez que se grabó con
write o con copy running startup. Por supuesto habrá perdido las últimas configuraciones
realizadas.

Una segunda alternativa es el uso de la orden de IOS reload in o reload at, por ejemplo
reload in 5 (que reinicia el router a los 5 minutos) o reload at 22:15 (que reinicia el equipo
a la hora especificada). Programe un reload, haga sus cambios y cancele el reinicio con
reload cancel. El router le avisará un minuto antes del reinicio. Puede ver como anda de
tiempo con show reload. Consulte la documentación de su versión de IOS para ver más
detalles sobre el uso de esta instrucción.

La tercera vía es algo más sofisticada. Sin entrar en muchos detalles, sabiendo la lista
configurada, puede crear una interfaz virtual (loopback interface) con una dirección de las
que permite la lista de acceso (porque... ¿puso un permit, no?) y hacer un telnet extendido
(telnet ip_router /source-interface loopback_número). En próximos artículos abordaré este
tipo de técnicas.

En general, es mejor escribir las listas en un editor de texto tipo vi o notepad y copiar/pegar
las configuraciones en el router. Esto es por varias razones, siendo una de las más
importantes que al borrar una línea (una condición) de una lista de acceso, borramos la lista
entera (y mucho ojo, porque la lista, aunque inexistente, sigue aplicada en la interfaz, línea
o dónde sea que la estemos usando). Osea, que si configuro

access-list 1 deny host 10.208.60.10


access-list 1 deny host 10.208.60.25
access-list 1 permit any

y me doy cuenta de que no quiero filtrar a Juan de contabilidad 10.208.60.10 sino a Julio de
recursos humanos 10.208.60.12, voy y configuro

no access-list 1 deny host 10.208.60.10


access-list 1 deny host 10.208.60.12

y ahí comienzan los problemas, por que la lista de acceso 1 queda

access-list 1 deny host 10.208.60.12

con un deny any implicito a continuación, lo que no es exactamente lo que teníamos


pensado (no access-list 1 deny 10.208.60.10 equivale a no access-list 1 que equivale a
borrar la lista entera).

Antes de hacer cambios:


A. Desaplique la lista de donde está en uso (evidentemente, esto sólo es de apliación si la
lista ya está en uso)
B. Cree la lista con un editor de texto y copiela en el router una vez creada
C. Aplique (o vuelva a aplicar) la lista en la interfaz, línea o proceso donde tenga pensado
usarla.

Pero créame, da igual lo que yo le diga: hasta que no lo experimente Ud. mismo no verá
porqué hay que hacerlo de esta manera.

OTRAS POSIBILIDADES DE LAS LISTAS DE ACCESO

Podemos realizar un filtrado extendido, por ejemplo para dejar pasar los paquetes con
origen en la LAN del router A

hostname RouterB
!
interface ethernet0
ip access−group 101 in
!
access−list 101 permit ip 10.208.60.0 0.0.0.255 10.208.48.0 0.0.0.255

Con la orden show line puede ver las líneas de acceso al router, tales como las líneas
virtuales (VTY), el puerto de consola (CON), el puerto Auxiliar (AUX) y las líneas
Asíncronas (ASYNC). Podemos filtrar todas estas líneas y puertos por medio de la
instrucción access-class. La siguiente lista permite el acceso por los cinco terminales
virtuales (del 0 al 4) a aquellas máquinas que tengan por origen la LAN de A

access−list 20 permit 10.208.60.0 0.0.0.255


access−list 20 deny any
!
line vty 0 4
access-class 20 in
login

Si queremos filtar el acceso Telnet (puerto 23) al routerC:

hostname RouterC
!
interface serial0
ip access−group 105 in
!
access−list 105 deny tcp any any eq 23
access−list 105 permit ip any any
Digamos que queremos dejar navegar por internet , hacer telnet y el correo:

hostname RouterB
!
interface Serial0
ip access−group 120 in
!
access−list 120 permit tcp any any eq www
access−list 120 permit tcp any any eq telnet
access−list 120 permit tcp any any eq smtp
access−list 120 permit tcp any any pop3

Una lista como la anterior no dejaría pasar el tráfico ftp, por ejemplo. A veces podemos ser
víctimas de un ataque de denegación de servicio distribuido. Podemos ser inundados con
peticiones ping (ICMP) de muy diversos origenes. Probemos con

hostname RouterC
!
interface serial0
ip access−group 130 in
!
access−list 130 deny icmp any any
access−list 130 permit ip any any

Un uso muy interesante es el de la instrucción log, si ponemos

access−list 130 deny icmp any any log


access−list 130 permit ip any any

Quedarán registrados en el log del router (show logg) todos los origenes y destinos de los
paquetes que encajan con la condición. Podemos convertir el router en un analizador de
tráfico con un par de instrucciones:

hostname RouterB
!
interface serial0
ip access−group 140 in
ip access−group 150 out
!
access−list 140 permit ip any any log
access−list 150 permit ip any any log

Este era el mecanismo usado en el artículo sobre ping para ver el origen y destino de los
paquetes. Más ejemplos: con listas de acceso horarias podemos controlar el uso de
determinados servicios en función de la hora
time-range bloquear-internet
periodic weekdays 8:30 to 17:45
!
access−list 150 deny any any eq www time-range bloquear-internet
access−list 150 permit any any
!
interface ethernet0
ip access−group 150 in

Vaya, quizás un poco excesivo... Veamos más usos:

A veces queremos que en función del origen los paquetes vayan por una ruta (es distinto a
usar rutas estáticas, porque estas miran el destino, no el origen de los paquetes) ¿Puede
hacerse? Si. ¿Cómo?

access-list 120 permit ip 10.208.60.0 0.0.0.255 any


!
route-map AL_FIREWALL permit 10
match ip address 120
set ip next-hop 10.208.48.15
!
interface serial 0
ip policy route-map AL_FIREWALL

Las listas de acceso sirven también para especificar el tráfico interesante capaz de lanzar
una llamada bajo demanda tipo RDSI, por ejemplo

interface Dialer1
dialer-group 1
!
dialer-list 1 protocol ip list 8

La instrucción dialer-group 1 conecta con la orden dialer-list 1, que en nuestro caso


permite lanzar aquellas llamadas que cumplan con la condición expresada en la lista de
acceso 8

Otra interesante aplicación es el uso de listas de acceso en la redistribución de rutas entre


protocolos de enrutamiento. Por ejemplo, la siguiente configuración propagará junto con
los anuncios de enrutamiento EIGRP las rutas estáticas configuradas en el router que
encajen con la condición expresada en la lista de acceso 10:

router eigrp 1
redistribute static route-map filtro
!
route-map filtro permit 10
match ip address 10

Sobre el protocolo de traducción de direcciones NAT (Network Address Translation) se


podría escribir un libro entero. Es mi intención abordarlo de forma específica en próximos
artículos, pero de momento veamos como mediante el uso de  listas de acceso se especifica
el origen de los paquetes a traducir, en nuestro ejemplo se procesarán mediante NAT los
paquetes que encajen con la lista de acceso 9, y serán traducidos a una dirección del pool
denominado TRADUCCION (que consta de una única dirección "pública", la IP
152.24.58.254):

ip nat pool TRADUCCION 152.24.58.254 152.24.58.254 netmask 255.255.255.0


ip nat inside source list 9 pool TRADUCCION
!
interface ethernet 0
ip nat inside
!
interface serial 0
ip nat outside

Otras aplicaciones interesantes de las listas de acceso son la priorización por protocolo, el
uso ajustado de la orden debug y el filtrado dinámico (con estado) de sesiones. Veremos en
próximos artículos algunos de estos usos.

RESUMEN
Las listas de acceso son el mecanismo por excelencia para seleccionar tráfico. Una vez que
un conjunto de paquetes ha sido seleccionado el router puede realizar diversas tareas sobre
ellos. Uno de los usos más extendidos de las listas de acceso es el de controlar el flujo de
tráfico entrante y saliente de un router, pero hemos visto otras muchas aplicaciones
prácticas. El proceso de configuración de listas de acceso consta de dos pasos generales, la
creación de la lista de acceso en sí y su aplicación en la interfaz correspondiente (o, de
forma más general, en el proceso deseado). Hay que tomar unas precauciones generales a la
hora de aplicar listas de acceso. Hemos mencionado tres mecanismos para prevenir o
corregir los problemas derivados de una mala configuración, recuerde: reload, reset y 
loopback

You might also like