uso de listas de acceso en entornos cisco

17

Click here to load reader

Upload: ruben-bermudez

Post on 30-Jun-2015

5.704 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Uso de listas de acceso en entornos Cisco

Uso de listas de acceso en entornos Ciscopor 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 PORIP Estándar 1-99 y 1300-1999 el origen

IP Extendidas100-199 y 2000-

2699el origen, destino, protocolo, puerto...

Ethernet Código 200-299 el tipo de código Ethernet

Page 2: Uso de listas de acceso en entornos Cisco

(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 origenIPX Extendida 900-999 el origen, destino, protocolo, puerto...

IPX SAP 1000-1099tipo de aplicación (SAP, Service

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

Page 3: Uso de listas de acceso en entornos Cisco

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

Dirección 10.10.10.0 00001010.00001010.00001010.00000000

Máscara 0.0.0.25500000000.00000000.00000000.11111111

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)

Page 4: Uso de listas de acceso en entornos Cisco

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

00001010.00000001.00100000.00000000/11111111.11111111.11111111.00000000

10.1.33.0/24

00001010.00000001.00100001.00000000/11111111.11111111.11111111.00000000

10.1.34.0/24

00001010.00000001.00100010.00000000/11111111.11111111.11111111.00000000

10.1.35.0/24

00001010.00000001.00100011.00000000/11111111.11111111.11111111.00000000

10.1.36.0/24

00001010.00000001.00100100.00000000/11111111.11111111.11111111.00000000

10.1.37.0/24

00001010.00000001.00100101.00000000/11111111.11111111.11111111.00000000

10.1.38.0/24

00001010.00000001.00100110.00000000/11111111.11111111.11111111.00000000

10.1.39.0/24

00001010.00000001.00100111.00000000/11111111.11111111.11111111.00000000

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 00033 00100 00134 00100 01035 00100 01136 00100 10037 00100 10138 00100 11039 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:

Page 5: Uso de listas de acceso en entornos Cisco

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

Page 6: Uso de listas de acceso en entornos Cisco

en lugar deaccess-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 acceso2.- 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.0access-list 1 deny 10.208.60.25 0.0.0.0access-list 1 permit any

La última línea es fundamental, debido a una especial característica de las listas de acceso:

Page 7: Uso de listas de acceso en entornos Cisco

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.10access-list 1 deny host 10.208.60.25access-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 0ip access-group 1 in

Dos ideas muy importantes:1.- Necesitamos al menos una condición permit para dejar pasar paquetes2.- 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

Page 8: Uso de listas de acceso en entornos Cisco

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.25access-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

Page 9: Uso de listas de acceso en entornos Cisco

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 creadaC. 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 ethernet0ip 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.255access−list 20 deny any!line vty 0 4access-class 20 inlogin

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

hostname RouterC!interface serial0ip access−group 105 in!access−list 105 deny tcp any any eq 23access−list 105 permit ip any any

Page 10: Uso de listas de acceso en entornos Cisco

Digamos que queremos dejar navegar por internet , hacer telnet y el correo:

hostname RouterB!interface Serial0ip access−group 120 in!access−list 120 permit tcp any any eq wwwaccess−list 120 permit tcp any any eq telnetaccess−list 120 permit tcp any any eq smtpaccess−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 serial0ip access−group 130 in!access−list 130 deny icmp any anyaccess−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 logaccess−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 serial0ip access−group 140 inip access−group 150 out!access−list 140 permit ip any any logaccess−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

Page 11: Uso de listas de acceso en entornos Cisco

time-range bloquear-internetperiodic weekdays 8:30 to 17:45!access−list 150 deny any any eq www time-range bloquear-internetaccess−list 150 permit any any!interface ethernet0ip 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 10match ip address 120set ip next-hop 10.208.48.15!interface serial 0ip 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 Dialer1dialer-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 1redistribute static route-map filtro!route-map filtro permit 10

Page 12: Uso de listas de acceso en entornos Cisco

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.0ip nat inside source list 9 pool TRADUCCION!interface ethernet 0ip nat inside!interface serial 0ip 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.

RESUMENLas 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