Access-lists

__**ACLs (Access Lists)**__

Las listas de acceso (ACL) se usan para el filtrado de paquetes en función de ciertos parámetros como pueden ser las direcciones de red origen o destino, los puertos origen o destino, el tipo de protocolo (ip, icmp, tcp, udp, etc). Una de las aplicaciones donde se usan más las listas de acceso es en la seguridad de la red. Con las ACLs se puede bloquear el tráfico no deseado en una interfaz ya sea de salida o de entrada. Sin embargo notad que las ACLs no solo se usan en temas de seguridad, sino que también se usan para filtrar en general paquetes en aplicaciones tan variadas como pueden ser NAT (Network Address Translation), en BGP para filtrar rutas al crear políticas de encaminamiento, etc. Existen ACLs para distintas pilas de protocolos: TCP/IP, IPX/SPX, Apple, etc. En este laboratorio nos centraremos en las ACLs aplicadas a seguridad en la red para la pila de protocolos TCP/IP. La diferencia con las otras pilas de protocolos está en el rango de ACLs que se pueden generar. Por ejemplo las ACLs entre la 1 y la 199 se usan en TCP/IP, mientras que las comprendidas entre la 800 y la 999 se usan para IPX/SPX, otros rangos se usan para DECnet (300-399), XNS (400-599), AppleTalk (600-699), etc. Cuando creamos una lista de acceso y la aplicamos a una interfaz de entrada o de salida, estamos creando una secuencia de instrucciones que son chequeadas cada vez que un paquete entra o sale por esa interfaz. Es importante notar varias características de las ACLs. Primero, que una ACL se aplica a la interfaz ya sea de entrada o de salida. Se pueden crear una ACL para la interfaz de salida y otra distinta para esa interfaz de entrada. Lo segundo, las ACLs son secuencias de instrucciones que son chequeadas contra el paquete. El orden de las instrucciones es importante, ya que cuando una línea de la secuencia da cierta en el chequeo, se toma una acción y se sale de la ACL, es decir no se continua chequeando para comprobar que haya otra línea de la secuencia que también resulta cierta. Por consiguiente es muy importante diseñar la ACL en la secuencia que nos interese más. Por ejemplo no es lo mismo estas dos líneas de un ACL: o Si el paquete es icmp recházalo o Si el paquete es ip acéptalo que la secuencia: o Si el paquete es ip acéptalo o Si el paquete es icmp recházalo Suponed que llegara un paquete ICMP. En el primer caso el paquete se rechazaría ya que la primera línea se cumple, el paquete es ICMP. En el segundo caso el paquete ICMP se aceptaría ya que la primera línea también se cumple, con lo cual ya no se comprobaría la segunda. Otro aspecto importante es que no podemos insertar líneas en la secuencia. Si nos equivocamos al crearla o queremos insertar una línea a a hay que borrar TODA la ACL y volverla a crear. Finalmente, también MUY IMPORTANTE, la última línea de una lista de acceso NUNCA aparece, es decir existe de forma explicita y siempre es DENIEGO TODO. Dentro de las listas de acceso TCP/IP hay dos tipos de ACLs o Listas de acceso IP estándar (1-99) o Listas de acceso IP extendidas (100-199)


 * __- Ejemplo de Access - List extendida__**

Las ACLs extendidas permiten usar tanto las direcciones origen como destino para hacer la comprobación. Además permiten especificar el protocolo sobre el que se quiere hacer la comprobación y en el caso de quesa TCP o UDP especificar el puerto destino. Las listas de acceso extendidas tienen números (acl#) comprendidos entre el 100 y el 199. El comando tiene el siguiente formato:



El primer commando, access-list, crea la lista de acceso extendida con número acl# y con condición deniego o permito sobre la dirección IP origen y/o destino especificadas con las correspondientes wildcard masks. Protocol puede ser ip, icmp. tcp, udp, etc. Operador puede ser {lt,gt,eq,neq} (less than, greater than, equal, non equal) y port es un puerto TCP o UDP. Recordad que la última línea de una ACL nunca aparece pero siempre es “access-list acl# deny any any”.

Esquema general sobre el formato de la access-list:

Ejemplo: Queremos denegar en la interfaz s0 de salida cualquier paquete ICMP que provenga de la red 10.1.1.0/24 y el acceso a cualquier puerto telnet (puerto 23) por parte de un host de esa red.