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 y para poder utilizar el protocolo FTP, y todo ello de una forma sencilla. Esto es lo que intentaremos hacer.
Téngase en cuenta, que este ejemplo se apoya en lo ya realizado en el apartado del proxy HTTP. En caso de desear realizar otro tipo de instalación, se deberá imaginar el sistema, teniendo en cuenta ambos informes.
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
Los únicos paquetes que necesitamos instalar son squid y sudo. El resto de paquetes ya se han instalado.
El script de instalación nos crea la jerarquía de directorios de la caché en /var/spool/squid 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 crea con squid -z.
Configurando squid
El archivo de configuración es /etc/squid/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 de sobra, no ofrecen problema alguno los
cambios realizados.
Conviene cambiar los siguientes parámetros (poner las cadenas apropiadas para vuestro caso):
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.
Tenemos que indicarle a squid 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 cacheas MP3, AVi, etc. Esto queda a gusto del administrador.
En la configuración por defecto, squid solamente permite conexiones desde localhost. Para permitir el acceso al proxy desde nuestras redes, se lo hemos de decir explícitamente. Para ello creamos una lista de control de acceso, y le indicamos que permita el acceso a dicha lista.
Ahora le decimos que tiene un proxy por encima, y que lo ha de utilizar. Este es HAVP, que utilizamos para escanear el tráfico en busca de viruses.
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 copiamos los directorios /var/www/lhpaiaki/squid-basque y /var/www/lhpaiaki/squid-spanish al lugar correspondiente. A los preexistentes de castellano les hacemos una copia de seguridad.
Ahora, elegimos Euskera como idioma para los mensajes de error. La siguiente línea debe quedar como sigue en el fichero /etc/squid/squid.conf.
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:
Se ha observado, al menos en la versión 2.6.5-6, que tras crar la caché, algunos ficheros quedan con el propietario root, y squid se niega a arrancar, dando unproblema de permisos. Vamos a subsanarlo.
Cambiaremos el propietario de estos ficheros.
Antes 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 Ikasleak Zuzendaritza Zerbitzariak |
antivirus perimetral |
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 del antivirus perimetral. Buena suerte!
ACL-ak / ACLsLos acl (Access Control Lists) se utilizan para controlar quién puede usar el squid y quién no. Utilizaremos este sistema para controlar el acceso a Internet. Squid evalúa los acl en el orden en que están definidos.
Todos conocemos los problemas que en los navegadores web (léase MS IE) ocasionan los suplementos que muchas veces se instalan sin saber. Teniendo esto en cuenta, pondremos tres tipos de acl en nuestro sistema de control de acceso. Primeramente, las subredes de profesores. Después pondremos las páginas web institucionales. Podemos dirigirnos a esos lugares con cualquier navegador en cualquier momento. Luego, denegaremos el acceso a los navegadores que no hayan sido puestos por nosotros y por ultimo permitiremos o prohibiremos las distintas aulas.
Tener en cuenta que las listas son evaluadas al recibir cada petición. Si las 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.
Direcciones destino (unas cuantas direcciones conocidas e interesantes para todo el mundo)
A continuación, pondremos las definiciones de los navegadores.
Ahora pondremos las reglas de acceso. Primero daremos permiso al cortafuegos, luego a las subredes de profesores, dirección y servidores. En segundo lugar permitiremos el acceso a espacios web que suelen ser interesantes. Luego prohibiremos los navegadores que no sean seguros. Y por ultimo haremos el control de las aulas de los alumnos. Todas estan prohibidas por defecto.
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/squid/squid.conf los siguientes parámetros. Reiniciamos squid y... Suerte!
Script CGI
No manipularemos directamente el archivo de configuración squid.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:
Vamos a crear ahora el script. Debemos crear este script en el directorio del servidor de web cgi-bin. En Debian es /usr/lib/cgi-bin/. El nombre del script será kudeatu. Este escript está disponible desde la sección de recursos de la página inicial.
Vamos a hacerlo ejecutable.
chmod +x /usr/lib/cgi-bin/kudeatuAhora vamos a probarlo. Ejecutaremos estas ordenes y comprobaremos si funcionan bien.
Atencion!: Después de probarlo, no os olvidéis de borrar el fichero de logs /var/log/iak/iak.log. Ha sido creado por root. Nadie más tiene derechos sobre el mismo. Para que el script pueda escribir en él, ha de crearlo él mismo.
Se ha creado otra variante del script, realizada en PHP. La ventaja es que vuenve a la página de IAK, sin hacernos clickar en otra página de confirmación. La desventaja es que es sensiblemente más lenta. Está situada en el propio directorio /var/www/iak del control de acceso. He aquí el código:
Buen probecho!
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 ejemplon 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 manejar el squid. Para solucionar este problema, daremos autorizaciones root al usuario que ejecuta el servidor (www-data en Debian) para que ejecute estas órdenes. Esto se consigue con el comando sudo. El comando sudo se configura en el fichero /etc/sudoers. Para editar este fichero se recomienda usar el comando visudo, porque al salir comprueba si el fichero ha quedado bien. Para editar pulsar i. Para volver otra vez al modo de comando, ESC. Guardar y para salir (desde el comando) :wq. Esta es la apariencia de este fichero:
Como se puede ver, no va a pedir contraseña. Listo!
IMPORTANTE: En el parámetro Host_Alias debemos de poner el nombre real de la máquina y no un alias. Puede valer el del fichero hostname.
Seguridad
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 vamos a utilizar dor métodos. El primero, contra un fichero. El segundo, contra el Directorio Activo de MS.
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/irakasleak.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 daremos 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 a LDAP:
Parámetro | Explicación | ||||||||||||||||||
AuthBasicProvider | Quién provee la autentificación | ||||||||||||||||||
AuthzLDAPAuthoritative | Si el módulo LDAP tiene la últimapalabra 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:
/etc/init.d/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 kudeatu con el parámetro defektuz. Este comando cerrará todas las clases al ejecutarse. Para ello crearemos el fichero /etc/cron.d/kudeatu con el siguiente contenido:
Seguidamente, reiniciamos el proceso cron.
/etc/init.d/cron restart
Vamos a probar el funcionamiento. Apunta tu navegador a la siguiente dirección y pruébalo.
Sorte on!