Saltar la navegación

Cláusula acl

La cláusula acl sirve para crear listas de control de acceso, que en BIND van a ser grupos de direcciones IP, con el objetivo de simplificar la administración. Las listas acl se utilizarán con determinadas instrucciones para que estas solo afecten a los equipos que tengan las direcciones IP especificadas en la lista., es decir, nos van a permitir un ajuste fino sobre qué equipos pueden ejecutar qué operaciones sobre el servidor. Su sintaxis es la siguiente:

acl acl-name { 
    lista-de-direcciones-IP
};

Las listas acl (pueden crearse cuantas se quieran) tienen que estar definidas antes de que se haga referencia a ellas, por este motivo, suelen ponerse al principio del fichero named.conf, y siguiendo con la filosofía de distribuir la configuración, podríamos crear el fichero named.conf.acl, donde definir todas las listas acl e insertarlo al principio de named.conf con include.

El campo acl-name define el nombre de la lista acl que posteriormente se utilizará para hacer referencia a ella.

Existen cuatro listas acl predefinidas, sus nombres son:

  • none: Coincide con ningún equipo.
  • any: Se refiere a todos los equipos.
  • localhost: Casa con todas la direcciones IP del servidor donde se ejecuta BIND, incluida la dirección de loopback (127.0.0.1 y solo esta, la 127.0.0.2 no).
  • localnets: Coincide con todo el rango de IP de las subredes a las que esté conectado el servidor, más la dirección de loopback.

En el campo lista-de-direcciones-IP es donde pondremos las IP que constituirán la lista. Formalmente se define así:

lista-de-direcciones-IP = elemento; [ elemento; ]...

donde elemento tiene la siguiente sintaxis simplificada:

elemento = [ ! ] ( ip [ /prefijo ] | acl_name )

El signo de admiración sirve para negar la operación a aquellas IP a las que afecte. A las direcciones IP si le ponemos un prefijo, nos estaremos refiriendo al rango de direcciones IP de la subred correspondiente. A una IP sin prefijo se le supone el prefijo /32. Se puede incluir también una lista acl previa.

Cuando una dirección IP se compara con una lista acl, se recorre la lista por orden de izquierda a derecha, hasta que coincide con uno de los elementos, momento en el que se para la búsqueda y se lleva a cabo la acción que corresponda. Por ejemplo, con

listen-on  { !192.168.1.2; 192.168.1.0/24; };

si una consulta viene del host 192.168.1.35, primero se comprueba si coincide con 192.168.1.2, al no coincidir, se pasa al siguiente elemento, y esta vez sí coincide con 192.168.1.0/24, por lo tanto, se detiene la búsqueda y la consulta se escucha (listen-on). Si la consulta viene del host 192.168.1.2, al coincidir con el primer elemento, la búsqueda ya se detiene, pero como el elemento está negado, entonces no se escucha la consulta. Esto nos hace ver que el orden es importante, pues si la anterior lista acl estuviera escrita al revés:

listen-on  { 192.168.1.0/24; !192.168.1.2; };

la consulta del 192.168.1.2 sí se escucharía.

La regla general puede expresarse así:

  1. La búsqueda de una coincidencia dentro de una lista acl se hace de izquierda a derecha.
  2. La búsqueda se detiene con la primera coincidencia.
  3. Si la coincidencia no está negada se permite la operación.
  4. Si la coincidencia está negada no se permite a operación.
  5. Si no hay coincidencias no se permite la operación.

Ejemplos de escritura de direcciones IP:

Direcciones IP y subredes

Ejemplos de listas acl:

# Equipos válidos
acl host-validos {
     !192.169.100.5/28; // deniega a los primeros 16 host
     192.168.100/24;    // permite al resto de la subred
     localnets;        // permite a todas las subredes a las que esté conectado el servidor
};

// lista acl simple con 3 IP
acl tres-ip {
  10.0.0.5; 192.168.23.10; 192.168.23.30;
};

// lista acl con una IP y una subred
acl con-subred {
  10.0.0.5;
  192.168.23.128/25; // 128 IP
};

// anidamiento de listas acl
acl todas {
  tres-ip;
  con-subred;
};

// un poco más de complejidad
acl lista-compleja {
  tres-ip;
  10.0.30.0/24; # permite desde 10.0.30.0 hasta 10.0.30.255
  !10.0.40.1/24; # deniega desde 10.0.40.0 hasta 10.0.40.255
};

// lista acl que permite a todas las IP menos a tres-ip
acl todo-menos-tres-ip {
!tres-ip;
any;
};

Licencia: licencia de software libre GPL