Siguiendo el hilo de la entrada anterior, “Cuando las VLANs y Firewall no son suficientes” vamos hablar de las ACL, Access Control List o Listas de Control de Acceso.
¿Qué son?
Una Lista de Control de Acceso es un conjunto de sentencias que permiten o deniegan un tráfico determinado. Algo similar a lo que viene hacer un cortafuegos.
¿Para qué se utilizan?
Aunque pueden tener diversos usos, es una manera “sencilla” de filtrar el tráfico que pasa por un dispositivo de red de capa 3, o también para el acceso al mismo vía SSH. Es útil para aplicar ciertas políticas de seguridad.
¿Qué tipos hay?
Hay varios tipos, pero poniendo como ejemplo los dispositivos Cisco, las más utilizadas son las “Standard” y “Extended”. En las “Standard” emplearemos como parámetro de filtrado las direcciones IP de origen; mientras que las “Extended” utilizaremos la IPs de origen, destino y puertos. También tendremos las “Named”, que es lo mismo que las dos anteriores pero nos permiten asignarlas un nombre en lugar de un número. Más adelante lo explicaremos.
¿Cómo funcionan?
Una Lista de Control de Acceso se compone de una serie de sentencias que permiten o deniegan un tráfico determinado. El equipo irá comparando cada paquete con cada una de las sentencias de la ACL, de la primera a la última. En el momento que un paquete coincida con la sentencia, ésta se ejecuta y no se sigue comparando. Cada ACL tiene un “deny any” implícito al final de las sentencias, esto es, si un paquete no coincide con ninguna de las sentencias se descarta.
¿Cómo se utilizan?
Una vez que la ACL está creada, se debe aplicar a una intefaz, y también en un sentido determinado. Es decir, en sentido entrante (Inbound) o saliente (Outbound) a esa interfaz.
A este respecto debemos tener en cuenta dos aspectos importantes. Cuando una ACL se aplica en sentido entrante, los paquetes que serán evaluados primero por dicha ACL, y en caso de ser permitidos será entonces cuando el equipo los enrute por alguna interfaz de salida. Obviamente, todos los paquetes que se denieguen no serán sometidos a la tabla de enrutamiento.
Sin embargo, cuando una ACL se aplica a en sentido “Saliente”, ésta se aplicará una vez los paquetes hayan sido enrutados. O lo que es lo mismo, primero se enrutan y luego se ve si se permiten o deniegan.
¿Por qué este matiz? Tanto el enrutamiento, como comparar cada paquete con cada sentencia de las ACL son procesos que consumen recursos hardware. Por tanto, deberemos tener en cuenta el sentido ya que si tenemos que descartar paquetes, será mejor hacerlo en ACL entrantes de tal manera que el equipo no tenga que malgastar recursos en enrutarlo para luego descartarlo en caso denegar ese mismo tráfico en una ACL saliente.
Por otro lado, es conveniente crear el contenido de las ACL en un editor de texto y luego aplicarla en el equipo haciendo un “copy/paste”. ¿Por qué? Cada vez que añadamos una sentencia ésta será anexada al final de la ACL y tampoco tendremos la posibilidad de borrar una entrada concreta.
ACLs Standard
Las Listas de Control de Acceso Estándar son aquellas que efectúan el filtrado, permitiendo o denegando inspeccionando la IP de origen. Cada ACL de este tipo lo podremos numerar de un rango que podrá ir de 1-99 o 1300-1999.
Switch01(config)#access-list ?
<1-99> IP standard access list <100-199> IP extended access list <1000-1099> IPX SAP access list <1100-1199> Extended 48-bit MAC address access list <1200-1299> IPX summary address access list <1300-1999> IP standard access list (expanded range) <200-299> Protocol type-code access list <2000-2699> IP extended access list (expanded range) <300-399> DECnet access list <600-699> Appletalk access list <700-799> 48-bit MAC address access list <800-899> IPX standard access list <900-999> IPX extended access list dynamic-extended Extend the dynamic ACL absolute timer rate-limit Simple rate-limit specific access list
Definido el número, a continuación deberemos especificar si permitimos o denegamos el tráfico en cuestión.
Switch01(config)#access-list 5 ?
deny Specify packets to reject permit Specify packets to forward remark Access list entry comment
El siguiente paso será proporcionar los valores:
Switch01(config)#access-list 5 deny ?
Hostname or A.B.C.D Address to match any Any source host host A single host address
La primera de las opciones hace referencia a la IP o rango de éstas. La segunda y la tercera permiten, en lugar de especificar en formato numeral “cualquier IP” o “una IP concreta”, introducir los términos “any” y “host” respectivamente.
Máscaras Wildcard
Las Máscaras Wildcard son utilizadas por las ACLs para indicar un equipo, un conjunto de éstos o una red completa. Se asemeja a lo que vendría ser una máscara de subred aunque con bien significado es distinto.
Cuando en una Máscara Wildcard figura un “0” se entiende que el valor que consta en la IP debe coincidir. Sin embargo cuando aparece un “255” puede tomar cualquier valor. Por ejemplo:
192.168.1.0 0.0.0.255
Quiere decir que los tres primeros octetos “192.168.1” que coincidan con el paquete se les aplicará esa sentencia en la ACL. El cuarto octeto podrá tener cualquier valor, de 1 a 254.
Por ejemplo:
Switch01(config)#access-list 10 deny 192.168.1.0 0.0.0.255
Esto añadirá una sentencia en la que se denegarán todos los paquetes con IP de origen “192.168.1” ya que la máscara tiene un “0”. El cuarto octeto puede tener cualquier valor “255”, entre 1 y 254.
Para indicar rango de subredes deberemos de realizar cálculos. Una manera sencilla para indicar redes es restar “255” a la máscara de subred de una dirección IP contenida en ese rango.
No os asustéis, aquí os dejo unos enlaces donde una calculadora hará el trabajo por vosotros:
Os dejo unos enlaces que hablan de las Máscaras Wildcard
Como dije antes, no sólo tenemos que crear las ACL sino además aplicarlas a una interfaz en alguno de los sentidos, bien entrante, bien saliente. Esto es:
Switch01#config t Switch01(config)#access-list 10 deny 192.168.1.0 0.0.0.255 Switch01(config)#access-list 5 permit any Switch01(config)#interface Ethernet 0 Switch01(config-if)#ip access-group 10 out
En la configuración anterior configuramos la access list “Standard”, número 5, en la que denegaríamos la red 192.168.1.0/24, y luego permitiríamos el resto de tráfico. Luego, aplicaríamos dicha ACL a la interfaz Ethernet 0 en sentido saliente.
ACLs Extended
A diferencia de las ACL Standard, las “Extended”, pueden llevar a cabo el filtrado considerando la IP de origen, la de destino, y los puertos.
Los rangos para identificar estas ACLs van de 100 a 199 y de 2000 a 2699.
Switch01(config)#access-list 115 ?
deny Specify packets to reject dynamic Specify a DYNAMIC list of PERMITs or DENYs permit Specify packets to forward remark Access list entry comment
Acto seguido definiremos si denegamos o permitimos:
Switch01(config)#access-list 115 deny ?
<0-255> An IP protocol number ahp Authentication Header Protocol eigrp Cisco's EIGRP routing protocol esp Encapsulation Security Payload gre Cisco's GRE tunneling icmp Internet Control Message Protocol igmp Internet Gateway Message Protocol ip Any Internet Protocol ipinip IP in IP tunneling nos KA9Q NOS compatible IP over IP tunneling ospf OSPF routing protocol pcp Payload Compression Protocol pim Protocol Independent Multicast tcp Transmission Control Protocol udp User Datagram Protocol
Ahora definiremos el protocolo:
Switch01(config)#access-list 110 deny tcp ?
A.B.C.D Source address any Any source host host A single source host
El siguiente parámetro de definir es la IP, red o subred, o cualquier IP de origen. Cabe mencionar que podremos indicar el puerto de origen con los parámetros eq, gt, lt, neq o range. Para nuestro ejemplo no consideraremos puertos de origen:
Switch01(config)#access-list 110 deny tcp any ?
A.B.C.D Destination address any Any destination host eq Match only packets on a given port number gt Match only packets with a greater port number host A single destination host lt Match only packets with a lower port number neq Match only packets not on a given port number range Match only packets in the range of port numbers
Como es lógico habrá que especificar la IP, red o subred, o cualquier IP de destino.
Switch01(config)#access-list 110 deny tcp any host 172.16.30.2 ?
ack Match on the ACK bit dscp Match packets with given dscp value eq Match only packets on a given port number established Match established connections fin Match on the FIN bit fragments Check non-initial fragments gt Match only packets with a greater port number log Log matches against this entry log-input Log matches against this entry, including input interface lt Match only packets with a lower port number neq Match only packets not on a given port number precedence Match packets with given precedence value psh Match on the PSH bit range Match only packets in the range of port numbers rst Match on the RST bit syn Match on the SYN bit time-range Specify a time-range tos Match packets with given TOS value urg Match on the URG bit <cr>
Aquí sí que tendremos que definir un puerto de destino o parámetros a tal efecto. Los equipos tienen predefinidos el nombre de los servicios en lugar de los números de puertos para que sea más intuitivo.
Switch01(config)#access-list 110 deny tcp any host 172.16.30.2 eq ?
<0-65535> Port number bgp Border Gateway Protocol (179) chargen Character generator (19) cmd Remote commands (rcmd, 514) daytime Daytime (13) discard Discard (9) domain Domain Name Service (53) drip Dynamic Routing Information Protocol (3949) echo Echo (7) exec Exec (rsh, 512) finger Finger (79) ftp File Transfer Protocol (21) ftp-data FTP data connections (20) gopher Gopher (70) hostname NIC hostname server (101) ident Ident Protocol (113) irc Internet Relay Chat (194) klogin Kerberos login (543) kshell Kerberos shell (544) login Login (rlogin, 513) lpd Printer service (515) nntp Network News Transport Protocol (119) pim-auto-rp PIM Auto-RP (496) pop2 Post Office Protocol v2 (109) pop3 Post Office Protocol v3 (110) smtp Simple Mail Transport Protocol (25) sunrpc Sun Remote Procedure Call (111) syslog Syslog (514) tacacs TAC Access Control System (49) talk Talk (517) telnet Telnet (23) time Time (37) uucp Unix-to-Unix Copy Program (540) whois Nicname (43) www World Wide Web (HTTP, 80)
Pues si lo que queremos es bloquear el Puerto 80, quedaría:
Switch01(config)#access-list 110 deny tcp any host 172.16.30.2 eq 80 log
Como veréis podremos loguear cada vez que un paquete “machee” con esa sentencia. Eso está bien como control, pero ojo que nos puede inundar de mensajes la consola.
ACL Named
Las ACl Named (Nombradas) son aquellas que en lugar de configurarlas con un número, lo podremos hacer con un nombre para que nos sea más intuitivo. La única diferencia será anteponer el término IP a lo que hemos visto.
Switch01(config)#ip access-list standard BlockSales Switch01(config-std-nacl)# Switch01(config-std-nacl)#deny 172.16.40.0 0.0.0.255 Switch01(config-std-nacl)#permit any Switch01(config-std-nacl)#exit
Y en lo referente a las ACLs esto es todo. EL tema da para mucho más así que aquí os dejo algún otro enlace para que profundicéis sobre el tema.
El objetivo de este artículo ha sido mostrar una funcionalidad que no debemos dejar de pasar de alto para proteger nuestras comunicaciones entre sistemas, equipos y dispositivos. Las ACLs son son uns sustituto de un cortafuegos pero pueden ser un aliado muy, muy bueno.
Espero que os haya gustado.
Un saludo!!!
Pingback: Separar y Segmentar, primeros pasos para reducir riesgos… | Enredando con redes ...
Pingback: LogicLocker, un Ransomware para ICS | Enredando con redes …
Gracias, me ayudó para la investigación de Electiva.
Hola Anthony,
Muchas gracias por el comentario. Me alegro mucho que te haya sido de utilidad!1
Un saludo!
Edporta