Hay muchas formas de hacer un control de acceso. La más normal suele ser cortar la conexión exterior en el cortafuegos. Esta solución supone un problema. El cortafuegos no puede ser manipulado por cualquiera. Necesitamos otro método diferente que sea mas flexible y por medio del cual cualquier profesor pueda conectar una clase a Internet para ver paginas web, de una forma sencilla. Esto es lo que intentaremos hacer.
Veamos un ejemplo de escuela.
Subredes escolares |
|
Subredes |
Grupos IP |
Profesores |
172.16.0.0/24 |
Alumnos |
172.16.1.0/24 |
Direccion |
172.16.2.0/24 |
Servidores |
172.16.3.0/24 |
Direcciones de las aulas |
|
Aulas |
Grupos IP |
Aula-01 |
172.16.1.17 -> 172.16.1.32 |
Aula-02 |
172.16.1.33 -> 172.16.1.48 |
Aula-03 |
172.16.1.49 -> 172.16.1.64 |
Aula-04 |
172.16.1.65 -> 172.16.1.80 |
Aula-05 |
172.16.1.81 -> 172.16.1.96 |
Aula-06 |
172.16.1.97 -> 172.16.1.112 |
Aula-07 |
172.16.1.113 -> 172.16.1.128 |
Aula-08 |
172.16.1.129 -> 172.16.1.144 |
Software necesario
El control de acceso lo implementaremos sobre squid3. Si no los hemos instalado antes, los paquetes que necesitamos instalar son squid3, apache2, php5 y sudo.
El script de instalación nos crea la jerarquía de directorios de la caché en /var/spool/squid3 y lo ejecuta. Ya tenemos pues, squid en marcha. Si por la razón que sea, no se han creado los directorios, le indicamos que los cree con squid3 -z.
Configurando squid3
El archivo de configuración es /etc/squid3/squid.conf. Si queremos experimentar, aquí tenemos algunos parametros que se pueden cambiar:
No se han realizado pruebas para evaluar el efecto de los anteriores cambios, pero si tenemos memoria RAM suficiente, no hay problema alguno. Seguimos configurando.
Conviene cambiar los siguientes parámetros (poner las cadenas apropiadas para vuestro caso):
Vamos a poner los mensajes de error en Euskera. Para ello, vamos a copiar los mensajes personalizados para nuestra aplicación, y configurar squid para que los utilize. Primero hacemos una copia de seguridad a los preexistentes de castellano. Luego, copiamos los directorios /var/www/lhiak/squid-basque y /var/www/lhiak/squid-spanish al lugar correspondiente.
mv -p R /usr/share/squid-langpack/es /usr/share/squid-langpack/es.origAhora, elegimos Euskera como idioma para los mensajes de error. La siguiente línea debe quedar como sigue en el fichero /etc/squid3/squid.conf.
Indicamos el sistema de registro. Lo que se registra, y en qué medida.
Le diremos en qué puerto ha de escuchar. Le indicaremos también la dirección del interface, por si tenemos más de uno y no deseamos que acepte conexiones en otro.
ACLs
Los acl (Access Control Lists) se utilizan para controlar quién puede hacer qué cosa, y quién no. Utilizaremos este sistema para controlar el acceso a Internet. Squid3 evalúa los acl en el orden en que están definidos.
Vamos a indicarle los puertos que son seguros y otras cosas.
Ahora damos los permisos pertinentes a las listas de acceso (ACL) definidas.
Ahora damos permiso de acceso al propio proxy, para acceder a las imágenes de las páginas de error y del antivirus.
Tenemos que indicarle a squid3 las páginas que no debe cachear. Típicamente serán los cgi-s, las páginas de noticias y la del tiempo. También podemos no cachear MP3, AVi, etc. Esto queda a gusto del administrador. Pondremos lo siguiente en el fichero de configuración de squid:
La lista de direcciones a no cachear la ponemos en el fichero /etc/squid3/iak.noca.conf. Este puede ser su contenido:
# ---------- No Caching Addresses ----------Control de acceso
Todos conocemos los
problemas que en los navegadores web (léase MS IE) ocasionan
los suplementos que muchas veces se instalan
sin saber. Además, a veces nos interesa que los alumnos trabajen con
ordenadores, pero que no accedan a Internet. Teniendo esto en cuenta,
pondremos seis acl-s en nuestro sistema de control de acceso.
1- Las subredes de profesores y dirección.
Estas redes no serán filtradas de ninguna manera.
2- Las páginas web institucionales,
actualizaciones y activaciones de windows, java, etc. Podremos dirigirnos
a esos lugares con cualquier navegador en cualquier momento.
3- Denegaremos el acceso a sitios web que
consideremos que son inapropiados o que consuman mucho ancho de banda
innecesario a la escuela.
4- Denegaremos el acceso a los navegadores
que consideremos peligrosos o con vulnerabilidades en un momento dado.
5- Permitiremos el acceso permanente a
ciertos rangos de direcciones IP. Por ejemplo, aulas de cursos de Hobetuz,
salas de reuniones de empresas, etc.
6- Permitiremos el acceso permanente a ciertos
direcciones MAC. Por ejemplo, ordenadores de visitas habituales que pueden
estar en distintas redes, en casos de redes Windows, etc.
7- Permitiremos o denegaremos el acceso a las
distintas aulas, de forma controlada. Tanto por direcciones IP como por
direcciones MAC.
He aquí un diagrama:
Tener en cuenta que las listas son evaluadas al recibir cada petición. Si las listas IP las ponemos con dst se deben evaluar por medio de DNS y por lo tanto si las ponemos de esa forma tardara mucho más tiempo para la resolución de acceso. En cambio, si las ponemos con su IP, serán evaluadas más rápidamente. En cualquier caso lo pondremos como ejemplo de esta manera. En cambio la próxima vez lo haremos de forma distinta. Veamos ahora los acl que utilizaremos. Tener en cuenta que en la misma lista hay comentarios y por lo tanto no explicamos aquí todo en profundidad.
En la configuración por defecto, squid3 solamente permite conexiones desde localhost. Para permitir el acceso a Internet desde otras redes, hemos de decírselo explícitamente. En el fichero de configuración de squid le diremos que coja la lista de direcciones siempre permitidas de un fichero. Estas redes pueden ser las de profesores, dirección, etc.
#
---------- Not Filtered Source Networks ----------
include /etc/squid3/iak.nfnets.conf
El contenido del fichero /etc/squid3/iak.nfnets.conf será algo así como:
Ahora vamos con las direcciones siempre permitidas con cualquier navegador. Pueden ser páginas institucionales que nos interesa permitir siempre, o las del Gobierno Vasco, que requieren Internet Explorer, o ... Se lo indicamos de esta manera:
El contenido del fichero /etc/squid3/iak.okdoms.conf puede ser el siguiente:
Le diremos también que ahora no permita jamás el acceso a una serie de dominios que tengamos vetados. Sitios de descargas, pornos, etc. Le diremos que cargue el fichero /etc/squid3/iak.nodoms.conf.
El contenido del fichero /etc/squid3/iak.nodoms.conf puede ser el siguiente:
Ahora toca el turno de los navegadores. Indicaremos a squid que los filtre:
# ---------- Browser Definitions and Access Control ----------El contenido del fichero /etc/squid/iak.brow.conf puede ser algo parecido a:
acl OKBrowser browser FirefoxSi no queremos filtrar ningún navegador, dejamos el fichero vacío, pero ha de existir.
Ahora definimos las aulas o rangos de direcciones IP a los que siempre permitimos acceder a Internet. Ponemos lo siquiente en el fichero de configuración de squid3:
# ---------- All-Time Allowed Source IP Ranges
----------
include /etc/squid3/iak.wipr.conf
El contenido del fichero /etc/squid3/iak.wipr.conf puede ser algo como:
# ---------- All-Time Allowed Source IP Ranges ----------Ahora definimos las máquinas a las que concedemos el acceso a Internet estén donde estén, a través de su dirección MAC. Sirve también en el caso de redes Windows con DHCP dinámica.
IMPORTANTE: Para que las acl por MAC funcionen, las máquinas cliente han de estar en una red conectada directamente al proxy. En el caso de que el proxy se encuentre en la DMZ, esto no es posible.
Ponemos lo siguiente en el fichero de configuración de squid3:
# All Time Allowed MAC Addresses
include /etc/squid3/iak.wmacs.conf
El contenido del fichero /etc/squid3/iak.wmacs.conf será algo como:
# ---------- All Time Allowed MAC Addresses ----------
# --- ZUGU-PC01 ---
acl whitemacs arp AA:AA:AA:AA:AA:AA
# --- ZUGU-PC02 ---
acl whitemacs arp BB:BB:BB:BB:BB:BB
# --- ZUGU-PC03 ---
acl whitemacs arp CC:CC:CC:CC:CC:CC
http_access allow whitemacs
Ahora ponemos el control de aulas.
# ---------- Controlled Classrooms ----------El fichero /etc/squid3/iak.rooms.conf tendrá por ejemplo el siquiente contenido:
# ---------- List of Classrooms ----------Otros parámetros que necesitamos:
Probaremos ahora si hemos
cometido algún error. Para ello disponemos de una orden para examinar la
configuración del archivo.:
Si todo ha ido bien y no nos da errores, le indicamos al proxy que cargue la nueva configuración:
service squid3 reloadAntes de probar el proxy vamos a permitir el acceso al mismo desde la red del centro. Esto lo configuramos en el cortafuegos de la siguiente manera:
Source |
Destination |
Service |
Action |
---|---|---|---|
Irakasleak Zuzendaritza Zerbitzariak |
Internet Atzipen Kontrola |
htp (80) |
Accept |
Irakasleak Ikasleak Zuzendaritza Zerbitzariak |
Internet Atzipen Kontrola |
squid (3128) |
Accept |
Para probar el proxy, cambia las preferencias del navegador web y dile al ordenador que tiene el proxy en el puerto 3128 de la IP de Internet Atzipen Kontrola. Lo puedes ver en la siguiente sección: "Configurando los navegadores". Buena suerte!
Probemos ahora su funcionamiento. Pongámosle por ejemplo a un ordenador la dirección IP 172.16.1.18/24 (gela-01 segunda dirección del aula). Ejecutemos la siguiente orden y comprobemos si entra en Internet. Haced la prueba con un navegador que no sea MSIE.
Todo va bien? Adelante!
Cuando aparecen problemas
Cuando trabajamos con ACLs, muchas veces aparecen problemas de los cuales el registro no nos da mucas pistas. Para tener información más detallada, ponemos en /etc/squid3/squid.conf los siguientes parámetros. Reiniciamos squid y... Suerte!
Script de Control de Acceso
Para abrir y cerral el acceso a Internet de las aulas, no manipularemos directamente el archivo de configuración /etc/squid3/iak.rooms.conf, sino que lo haremos con un script ejecutado por el servidor web. Este script crea un archivo de registro con todas las operaciones realizadas. Quién lo hizo, desde qué ordenador, día y hora, navegador... Crearemos este archivo en el directorio /var/log/iak y por lo tanto el proceso que ejecuta apache deberá tener permiso de escritura en ese directorio. Para hacer esto:
El script será /var/www/iak/iakmanager.php. Este es el código del script de control de acceso.
if ($LHIAK_ISADEMO == "N")
$CONF_FILE = "/etc/squid3/iak.rooms.conf";
else
$CONF_FILE = "/var/www/lhiak/iakdemo/sq.conf";
Buen provecho!
Página Web
Ahora hay que hacer una página web. Pondremos esta página en el directorio iak del servidor web. En Debian, /var/www/iak/. Vamos a crear el directorio.
El nombre de la página será iak.php Aquí hay un esqueleto o ejemplo con 8 aulas:
Servidor Web como root
Normalmente, será el servidor web y no el root, quien ejecutará el siguiente script desde la línea de comandos. Pero por otro lado, se necesitan permisos de root para ejecutar los comandos de squid y otros programas. Para solucionar este problema, daremos autorizaciones root al usuario que ejecuta el servidor (www-data en Debian y derivados) para que ejecute estas órdenes. Esto se consigue con el comando sudo. El comando sudo se configura en el fichero /etc/sudoers y ficheros adicionales que se encuentren en el directorio /etc/sudoers.d/. Nosotros pondremos el fichero iak-sudoers en dicho directorio. De este modo nos evitamos tocar el siempre sensible /etc/sudoers. Este es el contenido de este fichero:
Como se puede ver, no va a pedir contraseña. Listo!
Autentificación
Esta página sólo debe ser accesible desde las subredes de profesores, administración y red del centro. Además, sólo deben tener acceso a ella los profesores. Para autentificar a los profesores podemos utilizar tres métodos. El primero, contra un fichero. El segundo, contra el Directorio Activo de MS y el tercero contra un servidor OpenLDAP.
Contra un fichero
Para autentificar los profesores contra un fichero, debemos configurar Apache. En el directorio /etc/apache2/conf.d/ creamos el fichero iak.conf con el siguiente contenido:
Ahora tenemos que crear los usuarios y contraseñas en el fichero /var/lib/apache2/iak.pass. Elegiremos 8 profesores y les autorizaremos. Nos pedirá la contraseña, y con la primera tenemos que establecer el parámetro –c para crear el fichero. Ejecutar las siguientes órdenes:
Si queremos eliminar el usuario, le pasaremos el parámetro –D al comando.
Ahora, para que lo pueda leer el proceso que ejecuta apache, tenemos que cambiar de dueño:
Finalmente, hay que rearrancar apache.
Contra el Directorio Activo de MS
Lo msimo podemos realizar utilizando Active Directory como base para la autentificación de los profesores. Tenemos que tener en cuenta que en dicho directorio podemos tener no solamente profesores.
Primero hemos de habilitar dos módulos de Apache. He aquí cómo:
He aquí el contenido del fichero /etc/apache2/conf.d/iak:
He aquí una pequeña explicación de los parámetros correspondientes al LDAP de AD:
Parámetro | Explicación | ||||||||||||||||||
AuthBasicProvider | Quién provee la autentificación | ||||||||||||||||||
AuthzLDAPAuthoritative | Si el módulo LDAP tiene la última palabra respecto de la autorización | ||||||||||||||||||
AuthLDAPUrl | Lugar desde el que se obtiene la información de los profesores | ||||||||||||||||||
|
|
||||||||||||||||||
AuthLDAPBindDN | Usuario que realiza la búsqueda en el directorio LDAP (Necesario en AD) | ||||||||||||||||||
|
|
||||||||||||||||||
AuthLDAPBindPassword | Password del usuario que realiza la búsqueda |
Un detalle. Hay algún problema con el LDAP de Linux y AD. Para solventarlo, pondremos la siguiente línea en /etc/ldap/ldap.conf:
REFERRALS offAhora sólamente nos queda recargar la configuración de Apache:
service apache2 reloadNOTA: No os olvidéis de abrir el puerto 389 en el cortafuegos, para las conexiones desde IAK, al servidor que contiene las cuentas de usuario de los profesores.
Contra OpenLDAP
Al igual que el directorio LDAP de Active Directory, podemos usar el de OpenLDAP para la autentificación.
Primero hemos de habilitar los dos módulos de Apache que se requieren también para la autentificación contra AD.
He aquí el contenido del fichero /etc/apache2/conf.d/iak:
En el caso de Debian Squeeze, la siguiente línea ha de quedar comno sigue:
Require ldap-valid-user
He aquí una pequeña explicación de los parámetros correspondientes al LDAP de OpenLDAP:
Parámetro | Explicación | ||||||||||||
AuthBasicProvider | Quién provee la autentificación | ||||||||||||
AuthzLDAPAuthoritative | Si el módulo LDAP tiene la última palabra respecto de la autorización | ||||||||||||
AuthLDAPUrl | Lugar desde el que se obtiene la información de los profesores | ||||||||||||
|
|
||||||||||||
AuthLDAPBindDN | Usuario que realiza la búsqueda en el directorio LDAP (Necesario en AD) | ||||||||||||
|
|
||||||||||||
AuthLDAPBindPassword | Password del usuario que realiza la búsqueda |
Ahora sólamente nos queda recargar la configuración de Apache:
service apache2 reloadNOTA: No os olvidéis de abrir el puerto 389 en el cortafuegos, para las conexiones desde el antivirus, al servidor que contiene las cuentas de usuario de los profesores.
Fichero de registro
El fichero de registro, como se ha mencionado anteriormente, es /var/log/iak/iak.log. Para que no crezca indefinidamente, vamios a rotarlo como todos los registros. Para ello, creamos un fichero /etc/logrotate.d/iak con el siguiente contenido:
Configuración automática
Al finalizar las clases de la mañana y de la tarde, pondremos la configuración por defecto en el control de acceso. Esto se pude hacer automáticamente con el cron. Le daremos una tarea al proceso cron. Tendrá que hacer esta tarea todos los días a las 15:30 y a las 23:30. Para realizar esta tarea ejecutará el fichero iakmanager.php con el parámetro default. Este comando cerrará todas las clases al ejecutarse. Para ello crearemos el fichero /etc/cron.d/iak con el siguiente contenido:
Seguidamente, reiniciamos el proceso cron.
service cron reload
Vamos a probar el funcionamiento. Apunta tu navegador a la siguiente dirección y pruébalo.
Sorte on!