viernes, 18 de diciembre de 2009

El falso proxy

A primera vista, un proxy falso (o mal configurado), lo único que puede provocar es que no naveguemos en absoluto por la red. Sin embargo, bien configurado, puede ser un sustituto casero para permitir el acceso a determinados sitios, y restringir el resto. Efectivamente, sería mejor montar una solución con Squid, pero ya he dicho que es un remedio casero, siempre y cuando, la lista de sitios permitidos no sea muy grande.

Un ejemplo válido sería un ordenador de consulta público, en modo quiosco, en el que sólo queremos que se pueda visitar la web de nuestra empresa.

El truco radica, básicamente, en configurar un proxy inexistente en el navegador web y poner como excepciones de ese proxy, la lista de sitios a los que se quiere dar acceso exclusivo. La gracia del truco está en que esta configuración no pueda ser cambiada por el usuario que tiene acceso al navegador.

A continuación, vamos a configurar adecuadamente el navegador Firefox para que sirva a nuestros propósitos. Los parámetros a configurar son:

  • network.proxy.type: Deberá tener valor 1 para hacer la configuración manual del proxy.

  • network.proxy.http: Este es el lugar donde indicaremos el nombre del falso proxy.

  • network.proxy.http_port: Indica el puerto de escucha del proxy. Como en nuestro caso no existe, pondremos un valor comprendido entre 1024 y 65535.

  • network.proxy.share_proxy_settings: Al poner a true esta clave, la configuración para el protocolo HTTP valdrá también para el resto de protocolos (SSL, FTP, ...).

  • network.proxy.no_proxies_on: Como valor, separados por comas, pondremos la lista de sitios a los que sí se quiere tener acceso.


Ahora, lo que interesa es poner en el sitio adecuado los parámetros anteriores. Deberán estar en la configuración global del navegador (para que afecte a todos los usuarios de la máquina) y estarán bloqueados para que nadie los pueda modificar en su configuración local.

¿Cómo bloquear las preferencias? Para ello utilizaremos la directiva lockPref. El código resultante sería el siguiente:

// Opciones bloquedas
lockPref("network.proxy.type", 1);
lockPref("network.proxy.http", "falso.proxy.miempresa.com");
lockPref("network.proxy.http_port", 8888);
lockPref("network.proxy.share_proxy_settings", true);
lockPref("network.proxy.no_proxies_on", "miempresa.com,otrapagina.com");
lockPref("browser.startup.homepage", "http://miempresa.com");

Además, hemos incluido la opción browser.startup.homepage, para que la página de inicio del navegador sea una de la lista permitida (la principal). Aunque siempre es posible bloquear más opciones de configuración.

Para el final, hemos dejado la parte difícil: elegir el sitio donde poner el código. Como ya hemos dicho, no interesa poner esta configuración en el perfil del usuario de consulta, sino que es mejor que esté a nivel global y con permisos restringidos.

Llamaremos al archivo de configuración con los bloqueos lock.js. Este fichero lo tendremos que colocar dentro del directorio de instalación de Firefox. Para Windows sería %ProgramFiles%\Mozilla Firefox\ y para entornos Linux, algo parecido a esta ruta: /usr/lib/firefox/.

Por último, para que Firefox tenga en cuenta estos nuevos parámetros, habrá que añadir o modificar los siguientes parámetros:
  • pref("general.config.filename", "lock.js"); Así se indica un fichero adicional de configuración. No debe indicarse la ruta, sólo el nombre.

  • pref("general.config.obscure_value", 0); El valor 0 permite que el contenido del fichero lock.js vaya en texto claro. Por defecto, suele tener el valor 13, y eso significaría que el archivo debe estar codificado.


Dichos parámetros se encuentran dentro de los ficheros de configuración globales de la aplicación, y es en este punto donde hay alguna variación de la ruta, dependiendo de la versión de Firefox. Algunos ejemplos:
  • Para la versión 3.0 de Firefox para Windows, el fichero a modificar sería %ProgramFiles%\Mozilla Firefox\greprefs\all.js.

  • Para Fedora 12 y Firefox 3.5, el fichero sería /usr/lib/firefox-3.5.5/defaults/preferences/firefox.js.


Pero es conveniente avisar que, dependiendo de la distribución de Linux utilizada, estos parámetros pueden encontrarse en algún otro fichero que haya en ese directorio.