16 de septiembre de 2006

¿Es posible bloquear el acceso a un web site utilizando ACL en Cisco IOS?

La respuesta es simple y directa: SI.

Es posible bloquear el acceso a una dirección URL desde un dispositivo Cisco IOS utilizando ACL. El tema es cómo. No es una tarea difícil en la medida en que se comprenda cómo operan las listas de acceso. Este es un procedimiento posible:

1. Configure un servidor DNS
Supondremos que se nos ha encomendado bloquear el acceso a la URL
www.google.com (sería un poco raro, pero valga simplemente como ejemplo).

No conocemos la dirección IP, y tampoco lo necesitamos; Cisco IOS tiene la posibilidad de trabajar a partir del nombre. Para esto es preciso que se haya configurado al menos un servidor DNS para ser utilizado por el IOS para la resolución de nombres; esto se realiza utilizando el comando ip name-server:

Router(config)#ip name-server ?
A.B.C.D Domain server IP address (maximum of 6)
Router(config)#ip name-server 192.115.192.29

Observe que se pueden configurar varios servidores de nombre en la misma línea de comando)

A partir de este punto, el router utilizará el servidor de nombres que configuramos, para resolver todo texto que no se corresponda a un comando, en nuestro caso, por ejemplo:

Router# ping www.google.com
Translating "
www.google.com"...domain server (192.115.192.29) [OK]

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 64.255.179.104, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/4 ms
Router#

En este caso el nombre www.google.com ha sido resuelto a la dirección IP 64.255.179.104 utilizando el servidor DNS 192.115.192.29

2. Cree una lista de acceso
Ahora lo único que necesitamos es crear una lista de acceso que defina exactamente qué es lo que se desea bloquear y permitir luego todo el demás tráfico. En nuestro ejemplo:

Router(config)# access-list 101 deny tcp any host www.google.com eq www
Translating "www.google.com"...domain server (192.115.192.29) [OK]
Router(config)# access-list 101 permit ip any any

Esta lista de acceso deniega todo el tráfico web hacia el dominio especificado, cualquiera sea la dirección de origen. Después de esta denegación permitimos todo otro tráfico IP a través de esa interfaz para evitar el problema que genera el deny implícito que está al final de toda ACL.

Adicionalmente, si se deseara tener un registro de las direcciones IP que intentan acceder al sitio web bloqueado, la sentencia de la ACL debe ser:

Router(config)# access-list 101 deny tcp any host www.google.com eq www log

El subcomando log da lugar a la creación de un registro de todos los paquetes que sean denegados por esta sentencia.

3. Esto tiene sus límites
Este uso del servidor DNS parece resolver la necesidad de conocer la dirección IP del web server destino para bloquearlo en Cisco IOS.

Esto es verdad solo parcialmente. Si se revisa el archivo de configuración luego de ingresar nuestra sentencia ACL, lo que se ve es esto:

Router# sh run inc access-list 101
access-list 101 deny tcp any host 64.255.179.104 eq www

Es decir, al ingresar el comando el servicio dns reemplazó automáticamente la URL por la primer IP que corresponde a ese nombre, e ingresó la sentencia ya con la IP destino en la configuración. Esto tiene varias complicaciones: si la URL tiene varias direcciones IP como referentes, nuestra ACL solo filtrará la primera, las demás deberán ser ingresadas manualmente:

C:\>nslookup www.google.com
Server: ns1.labcentro.com.ar
Address: 192.115.192.29

Non-authoritative answer:
Name: www.l.google.com
Addresses: 64.255.179.104, 64.255.179.99
Aliases: www.google.com

En nuestro ejemplo, debiéramos agregar una sentencia que filtre el tráfico a la IP 64.255.179.99.

Adicionalmente también hay que tener en cuenta que si la dirección IP del servidor que estamos filtrando cambio por cualquier motivo, nuestra sentencia permanecerá direccionada a la misma IP por la que deberá ser manualmente actualizada.

4. Aplique la ACL a la interfaz
Echas estas salvedades, la ACL debe ser aplicada a la interfaz correspondiente.

En nuestro ejemplo asumiremos que estamos filtrando el tráfico que desde nuestra LAN busca salir hacia Internet. Siendo así, podemos aplicar, por ejemplo, la ACL para que filtre el tráfico saliente del router a través de la interfaz serial:

Router(config)# int serial 0/0
Router(config-if)# ip access-group 101 out

¿Tenés alguna información adicional para aportar en este tema....?
Perfecto!!!! agregá un comentario con el detalle.
Muchas gracias.
Oscar Gerometta

17 comentarios:

  1. Un saludo, me parece que queda un problema adicional sin solucionar, al bloquear el servidor de la pagina web de google se bloquearian otras paginas web si dicho servidor brindaba servicio de hosting de paginas web, por ejemplo. Asi q probablemente se bloquearian mas paginas web de las que se ha solicitado.

    ResponderBorrar
  2. Me intereso el comentario y quize aplicarlo en mi red tratando de bloquear el acceso a www.youtube.com, y haciendo la consulta con el nslookup www.youtube.com me dio 3 direcciones y agregue las siguientes lineas:
    access-list 101 deny tcp any host 208.65.153.251 eq www
    access-list 101 deny tcp any host 208.65.153.253 eq www
    access-list 101 deny tcp any host 208.65.153.238 eq www
    pero veo que siguen puediendo accesar a la pagina; me estara faltando alguna config adicional?

    ResponderBorrar
  3. Este procedimiento tiene serias limitaciones, como lo señala el artículo.
    Principalmente creo que es importante para que tomemos conocimiento y aprovechemos las funcionalidades de consulta dns que tiene activas por defecto Cisco IOS.
    En este caso puntual, la ACL es correcta, pero youtube tiene múltiples subdominios asociados con múltiples IPs, lo que hace que el filtro elaborado bloquee sólo un listado parcial de las dirección utilizadas por el sitio.

    ResponderBorrar
  4. saludos tengo un problema muy grande voy iniciando con acls extendidas quisiera saber como bloquear unicamente el puerto http, gracias y ojala me ayuden es urgente!!!

    ResponderBorrar
  5. En realidad, todos los ejemplos que están en este artículo están mostrando cómo bloquear tráfico http o web o puerto 80.
    La estructura del comando es:
    access-list (#) deny tcp (origen) (destino) eq 80
    Consideraciones a tener en cuenta:
    .1. esta sentencia, por sí sola bloque completamente el puerto en el que se aplica, para que no tenga este efecto, debe incluirse alguna sentencia permit. Por ejemplo, un permit ip any any para que permita todo otro tráfico IP.
    .2. Si se quiere bloquear el tráfico http o web por completo, en origen y destino se puede usar la keyword any.
    Quedaría entonces, por ejemplo:
    access-list 101 deny tcp any any eq 80
    access-list 101 permit ip any any
    Sugiero revisar este documento: http://www.cisco.com/en/US/docs/ios/security/configuration/guide/sec_acl_ov_guideline_ps6350_TSD_Products_Configuration_Guide_Chapter.html

    ResponderBorrar
  6. En el ejemplo que mencionas la ACL va de salida en la conexión hacia internet, por tanto se aplica a todas las VLAN que tengamos en la red. Que pasa si tengo dos o mas VLAN y quiero sólo a una de ellas prohibir el acceso a ciertas páginas y a los otros no..

    Tendría q ir de entrada en la VLAN correspondiente?.


    Saludos!

    ResponderBorrar
  7. Si el objetivo es bloquear el tráfico proveniente de una VLAN de la LAN, entonces la ACL tendría que filtrar el tráfico entrante (in) en la subinterfaz que es gateway de esa VLAN.
    Espero se entienda.

    ResponderBorrar
  8. Hola, saludos. Podria ser que me pudiese guiar en una topologia que estoy tratanto de terminar?? Tiene varios puntos, pero solo me falta una ACL. Entiendo la logica de ellas. Pero esta me ha ganado.Le cuento...

    Tengo un Server DHCP en otro segmneto de red con la ip 172.16.3.3/28 y la red que recibe direcciones dinamicas es la 172.16.0.0/24, el router de esta LAN tiene en su fa0/0 172.16.0.1/24 el IP HELPER 172.16.3.3 y necesito que se permita dhcp pero sin permitir PING al servidor. He realizado muuuchas configuraciones. Pero sin resultados esperados.

    EL problema surge cuando el paquete viene como broadcast y lo transforma a la direccion HELPER, la ACL lo descarta por defecto. y no me sirve ponerlo en la serial como salida, ya que la ACL no filtra el trafico realizado del mismo router.

    ResponderBorrar
  9. Alvaro.
    No termino de comprender la descripción. Si están haciendo ping desde el router, obviamente ninguna ACL te va a servir porque no se filtra el tráfico generado en el router. Pero por otra parte, una ACL puesta en el F0/0 del router, tampoco filtraría ese ping.
    Si se refiere al ping desde el router ¿porqué querrías filtrarlo? En el mejor de los casos, generá un usuario que no tenga permiso de ping, no una ACL.
    Por otra parte, si lo que buscás es que los usuarios de la LAN no hagan ping al servidor, esto se puede resolver fácilmente desde la serial. Pero también tiene que ser posible poner en la F0/0 una ACL que filtre el tráfico de ICMP y permita el de DHCP.

    ResponderBorrar
  10. Tengo un problema , lo hice en pakect tracerte y se queda en "Translating (255.255.255.255)"
    No me deja configurarlo, tendria que hace con los dispositivos y conectado a internet? o hay alguna otra forma, pues necesito los comandos para un proyecto.


    responder a : greyzhie_x@hotmail.com PORFAVOR"!!!!

    ResponderBorrar
    Respuestas
    1. Packet Tracer es sólo un simulador.
      Si quieres probar este tipo de cosas debes hacerlo sobre IOS, y en un dispositivo que tenga configurado un servidor DNS y tenga acceso a ese servicos para poder hacer la traducción de nombres.

      Borrar
  11. Oscar buenas tardes un gusto saludarlo y mi duda es sobre los acls. Cuando uno configura los acls que es lo correcto, aplicarlo sobre la interfaz vlan como tal o sobre la interfaz física por donde transporta las vlans que este caso esta configurado como trunkal???

    ResponderBorrar
    Respuestas
    1. Andrés.
      Por su comentario supongo que estás hablando de ACLs aplicadas en switches.
      En este caso no hay una forma correcta y otra incorrecta. Todo dependerá de los objetivos que se pretenden y el diseño. Pero por otra parte, ten presente que las VACLs (ACLs aplicadas a interfaces VLANs) y las PACLs (ACLs aplicadas a puertos) no tienen las mismas posibilidades.

      Borrar
  12. Hola buenas , lo que estoy buscando es configurar la interfaz web de mi router para que solo pueda entrar yo desde mi netbook, osea sea inmune y solamente yo pueda entrar! Desde ya gracias

    ResponderBorrar
    Respuestas
    1. Exequiel.
      Si lo que te interesa es limitar el acceso a que se realice exclusivamente desde una terminal, puedes utilizar para eso una ACL asociada al servicio HTTP.
      Una opción más adecuada sería habilitar AAA con autenticación de usuario, y aplicar autenticación al acceso HTTP, lo cual también es posible.

      Borrar
  13. hola estimado oscar tengo una consulta como seria una sintaxis para bloquear la pagina facebook.com ? he seguido esta ayuda pero aun me permite el acceso a la pagina, y en ocaciones boto toda mi red, ante mano muchas gracias

    ResponderBorrar
    Respuestas
    1. En el punto 3 de este post dice: "Esto tiene varias complicaciones: si la URL tiene varias direcciones IP como referentes, nuestra ACL solo filtrará la primera".
      Y este es el caso de un página como Facebook, que utilizan múltiples direcciones IP. No pueden ser filtradas utilizando ACL.
      En este caso es preciso utilizar algún mecanismo de filtrado de URLs como puede ser un servidor proxy o un firewall con capacidad de inspección y filtrado a nivel de aplicación.

      Borrar

Gracias por tu comentario.
En este blog los comentarios están moderados, por lo que su publicación está pendiente hasta la revisión del mismo.