17 de febrero de 2009

squid con squidGuard for Dummies en Ubuntu


squid3 es un servicio (daemon) que hace la tarea de proxy en
sistemas operativos basados en linux.


apache2 es un servicio (daemon) web que nos permitirá hacer que
nuestro proxy funcione como proxy intermediario transparente.


squidGuard es un programa que, en conjunto con squid, lleva a cabo
la tarea de bloquear páginas web utilizando una lista negra de
sitios web creada en base al contenido de dichos sitios.


shallalist es un equipo de personas que se dedican a mantener el
contenido de la lista negra que utilizaremos para nuestros fines.


INSTALACIÓN


Primero, haremos la instalación de los programas que
necesitaremos haciendo uso de los repositorios oficiales de ubuntu.
Para esto ejecutaremos el comando apt-get en consola con privilegio
de administrador.


1.- Entrar con una cuenta privilegiada a ubuntu (no con root).


2.- Abrir el programa Terminal: Ir al menú de Ubuntu ->
Accessorios -> Terminal


3.- Ejecutar el siguiente comando en la terminal para realizar la
instalación:


 sudo apt-get install squid3 apache2 squidGuard

El comando sudo le dice al sistema que queremos ejecutar el
comando apt-get con privilegios de administrador (root). El
significado de sudo es su(Super User) do(haz!), para lo cual se
necesita el password del usuario en sesión con privilegios.

Poner el password del usuario cuando sea requerido.

A continuación se iniciará la instalación, la cual solicitará la
confirmación de que se desea proceder a dicha instalación desde los
repositorios oficiales de ubuntu indicando la cantidad de bytes que
serán bajados desde los repositorios y la cantidad de bytes que se
requieren en disco duro para dicha instalación.


CONFIGURACIÓN


Una vez instalados los programas se procederá a hacer la
configuración del squid: Desde la terminal mandaremos abrir un
archivo de configuración usando el editor de texto llamado gedit en
modo gráfico. Para esto usaremos el comando gksudo, el cual hace lo
mismo que el comando sudo pero sirve para aplicaciones en modo
gráfico.


- Poner el siguiente comando en la terminal para abrir el archivo
de configuración con el gedit.


 gksudo gedit /etc/squid3/squid.conf

Con esto queda abierto el editor de texto donde procederemos a
modificar los parámetros de configuración de squid3. Para lograr
esto tenemos que entender cómo está formado el archivo de
configuración que viene predefinido en la instalación.


El archivo de configuración viene ya bien documentado en líneas
“comentadas”. Estas líneas siempre comienzan con el caracter #.
Esto hace que el programa squid3 las ignore.


Para poder hacer las modificaciones al archivo de configuración
realizaremos búsquedas en el interior del mismo usando la
combinación de teclas CTRL+F, o bien el menú SEARCH -> FIND. Con
esto localizaremos la sección de configuración que necesitamos
modificar.


Nota.- Hay que tomar en cuenta que todo parámetro que escribamos
o modifiquemos dentro del archivo de configuración debe estar
alineado a la izquierda. Es decir, no debe dejar espacios en blanco
antes de ninguno de los parámetros.


La configuración básica del squid3 requiere que establezcamos,
como mínimo, los siguientes parámetros, los cuales veremos más a
detalle a continuación.



  • http_port
  • cache_dir
  • Al menos una Lista de Control de Acceso
    (acl)
  • Al menos una Regla de Control de Acceso
    (http_access)





1.- El parámetro http_port nos permite establecer el(los) puerto(s)
por el(los) cual squid3 estará recibiendo peticiones HTTP. Este
dato lo utilizaremos posteriormente para configurar nuestros clientes
de HTTP(Firefox, Internet Explorer, etc.)


Para localizar la sección correspondiente dentro del archivo de
configuración haremos la búsqueda usando CTRL+F y escribiendo en la
ventana de búsqueda, sin las comillas, el texto “TAG: http_port”.
El buscador nos llevará a la línea donde comienza dicha sección.
La documentación de dicha sección aparece a continuación de la
línea TAG: http_port y cada línea de la documentación está
precedida por el caracter # que denota que se trata de un comentario.


Al terminar la documentación de dicha sección encontraremos el
parámetro http_port con el valor 3128 al cual le agregaremos la
palabra clave, transparent. Esta línea no tiene el caracter # al
principio, lo que nos indica que este parámetro será reconocido por
el squid3. Agregaremos otra línea con el mismo parámetro pero con
el valor “8080 transparent” de tal manera que el parámetro
quedará así:


http_port 3128 transparent
http_port 8080 transparent

2.- A continuación procederemos a configurar el parámetro cache_mem
siguiendo los mismos pasos que realizamos para el parámetro
anterior. CTRL+F y tecleamos “TAG: cache_mem”. Hacemos scroll
hacia abajo hasta que termina la descripción del parámetro y le
ponemos el valor de 16 MB. Quedará así:


cache_mem 16 MB

Este valor es la cantidad de espacio en memoria que será
utilizado para el caché del proxy. Recuerda quitar el # y el
espacio que se encuentran antes del parámetro de configuración
en caso de que por default esté comentado.


3.- El siguiente parámetro es el de cache_dir. De igualmanera
buscamos con CTRL+F “TAG: cache_dir” y le damos scroll. Su valor
debe quedar como sigue:


cache_dir ufs /var/spool/squid3 1000 16 256

Sólo sé que el valor 1000 establece la candidad de MegaBytes que serán usados en disco para el caché del proxy. Los números 16 y 256 indican la estructura de directorios que habrá en el caché. Recuerda quitar el # y los espacios a la izquierda.


4.- A continuación tenemos que establecer qué equipos harán uso del caché del proxy. Esto lo definimos poniendo la dirección ip de la red a la que pertenece el equipo y la máscara de subred.


Si no sabemos a qué red pertenecemos, podemos averiguarlo usando el comando ifconfig. Tecleándolo tal cual en la terminal:



ifconfig

Esto nos dará como resultado varios grupos de configuraciones de
red, por ejemplo:


eth0      Link encap:Ethernet  HWaddr 00:1a:a0:54:12:f4 
inet addr:192.168.1.65 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::21a:a0ff:fe54:12f4/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:187415 errors:0 dropped:0 overruns:0 frame:0
TX packets:161670 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:146624472 (146.6 MB) TX bytes:20340502 (20.3MB)
Interrupt:253 Base address:0x4000

Esto nos dice, en la segunda línea, que nuestra interfaz ethernet
0 usa la dirección ip 192.168.1.65 y la máscara de subred 255.255.255.0,
para estos dos valores determinamos que esta ip se encuentra en la red
192.168.1.0. Esta es la que utilizaremos en este paso. Si tenemos
más de una interfaz de red, podemos identificar el valor que buscamos
por el prefijo eth que significa que es la interfaz que se conecta
mediante cable de red. Si buscáramos la interfaz inalámbrica la
identificaríamos por el prefijo wlan, pero este no es el caso.






Para localizar la sección del acl nuevamente buscamos con CTRL+F
y ponemos “TAG: acl”. Damos scroll hacia abajo, pero esta vez no
modificaremos el valor de la línea existente. De hecho hay más de
una línea para el parámetro acl. Encontramos tres líneas con los
nombres de manager, localhost y to_localhost. Esas líneas no las
debemos modificar.


Sólo agregaremos una línea adicional con el valor de nuestra red
y la máscara de subred. De la siguiente manera:


acl miredlocal src 192.168.1.0/255.255.255.0

El nombre miredlocal es un valor que asignamos para llamar de una
manera amigable el grupo de equipos que queremos que tengan acceso al
proxy. El valor 192.168.1.0 es la ip que inicia el rango al que
pertenece la ip que tiene nuestro equipo. Es decir, como vimos, la ip
de mi equipo es la 192.168.1.65, por eso pongo el cero al final. Y la
máscara de subred es la que viene en la configuración de la
interfaz que vimos con el ifconfig.


Entonces nuestra configuración acl quedará más o menos así:


acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl miredlocal src 192.168.1.0/255.255.255.0

5.- A continuación buscaremos la sección correspondiente a
http_access. Como ya sabemos, la encontraremos usando CTRL+F y “TAG:
http_access”. En esta sección le diremos a squid3 que queremos que
nuestra red local tenga accesso al proxy.


Esta vez no vamos a
escribir inmediatamente al final de la definición del parámetro,
sino que buscaremos una línea que nos indica dónde debemos hacer
nuestra configuración:


# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

Scrolleamos hasta encontrar dicha línea y encontraremos que ahí
se define el acceso para localhost. Justo debajo agregaremos nuestra
definición de acceso, de tal manera que quedará así:


http_access allow localhost
http_access allow miredlocal

6.- No estoy seguro si esto es necesario, pero en todo caso ejecuta
los siguientes comandos uno seguido del otro. En teoría sólo se requieren
cuando vas a poner el equipo con dos interfaces de red.



sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
sudo iptables -A FORWARD -j REJECT --reject-with icmp-port-unreachable

Listo. Esta es toda la configuración que necesitamos para nuestro
proxy squid3. Grabamos el archivo con CTRL+S, o bien, menú File ->
Save y cerramos nuestro Editor de Texto (gedit).


Ahora podemos probar squid3.


1.- Para probarlo ponemos tenemos que levantar el servicio de
squid3 con el siguiente comando:


 sudo /etc/init.d/squid3 start

En caso de que el resultado de este comando sea [fail] a la derecha
de la terminal, sólo detenlo y vuélvelo arrancar utilizando el comando
siguiente para detenerlo:


 sudo /etc/init.d/squid3 stop

Y para arrancarlo nuevamente:


 sudo /etc/init.d/squid3 start

Si no da resultado OK entonces revisa los parámetros configurados
para asegurarte de que no hayas dejado un espacio en blanco en donde
no deba ir.


2.- Configuramos nuestro navegador (Firefox) para usar el proxy.
Esto se hace en el menú Edit -> Preferences -> Advanced ->
Network -> Settings. Ahí seleccionamos el modo manual y pondremos
el valor de la ip de nuestro equipo, tal como lo vimos en el
ifconfig. Ese es el valor del HTTP Proxy y el puerto será el 8080. A
continuación seleccionaremos Use this Proxy Server for all protocols
y damos click en OK.


Probamos navegar a cualquier página o grupo de páginas con el
Firefox y listo. La página más pesada que encuentres será cargada
muy rápido a partir de la segunda vez que la visites.










El siguiente paso es la configuración del squidGuard.


El squidGuard ya ha sido instalado previamente al inicio de este
tutorial por lo que continuaremos a partir de ahí configurando
nuestro squidGuard y bajando e instalando nuestra lista negra de
shallalist.


1.- Asignamos permisos adecuados a nuestra carpeta donde se
almacena la base de datos de squidGuard:


 sudo chown -R proxy:proxy /var/lib/squidguard/db

El comando chown es para cambiar el propietario de un objeto en
nuestro sistema de archivos: ch(change), own(owner). El parámetro -R
indica que el comando será ejecutado en forma recursiva, es decir,
para cada elemento en el interior de la carpeta y su contenido. proxy
es el nombre de usuario con el que se ejecuta el programa squid. Esto
lo podemos verificar en nuestro archivo de configuración de squid
(/etc/squid3/squid.conf) en el valor del parámetro
cache_effective_user, que aún cuando pudiera estar comentada esta
línea (#), es el valor predeterminado para este parámetro.


2.- A continuación procederemos a modificar el archivo de
configuración del squidGuard. Este archivo se crea por default en
la carpeta /etc/squid (ojo, no squid3!) así que ahí será donde lo buscaremos.


 gksudo gedit /etc/squid/squidGuard.conf


Los primeros dos parámetros de configuración son el dbhome y el
logdir. Estos son respectivamente el lugar donde se lee la base de
datos de squidGuard (La lista negra shallalist) y la ruta donde se
guarda la bitácora (log) del squidGuard.


3.- Estos parámetros se dejan con el valor predeterminado y se
procede a eliminar a partir, de la siguiente linea, el resto del
contenido de este archivo, para reemplazarlo con lo siguiente:


(Cuidando de reemplazar el valor <<ip-address>> con la
ip que obtuvimos anteriormente usando el ifconfig).


dest adv {
domainlist adv/domains
urllist adv/urls
}
dest porn {
domainlist porn/domains
urllist porn/urls
}
dest warez {
domainlist warez/domains
urllist warez/urls
}

acl {

default {
pass !adv !porn !warez all
redirect http://<<ip-address>>/blocked.html
}
}

4.- Guardamos el archivo con CTRL+S y cerramos el Editor de Texto
(gedit).


5.- Volvemos a la terminal y ejecutamos el siguiente comando:


 sudo squidGuard –C all


Que indica al squidGuard que debe de compilar la lista de dominios en
una base de datos.


6.- Crearemos ahora un archivo HTML al cual será redireccionada
cualquier solicitud bloqueada.


 gksudo gedit /var/www/blocked.html


Y en su contenido escribiremos solamente: [Bloqueado por squidGuard]


7.- Grabamos el archivo con CTRL+S y cerramos el Editor de Texto
(gedit).


8.- Ahora editaremos el archivo de configuración del squid3 para
decirle a este que queremos que valide cada página usando el
squidGuard.


 gksudo gedit /etc/squid/squid.conf


Buscamos en este archivo la sección de configuración del parámetro
url_rewrite_program usando como siempre el CTRL+F y “TAG:
url_rewrite_program”. Colocamos el valor:


url_rewrite_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf






9.- Ejecutamos el siguiente comando en la terminal:


 sudo squid3 -k reconfigure


Black List.- shallalist


1.- El siguiente paso es obtener la lista negra de shallalist usando
el script distribuido en su sitio web usando los siguientes comandos:


 cd ~
wget http://www.shallalist.de/Downloads/shalla_update.sh

2.- Editaremos este script usando gedit, sin gksudo, pues el
propietario de este script es el usuario en sesión:


 gedit shalla_update.sh

3.- Modificaremos los valores de inicialización de las variables
para que queden de la siguiente manera:


squidGuardpath="/usr/bin/squidGuard"
squidpath="/usr/sbin/squid3"
httpget="/usr/bin/wget"
tarpath="/bin/tar"
chownpath="/bin/chown"
dbhome="/var/lib/squidguard/db"
squidGuardowner="proxy:proxy"

Con cuidado de las mayúsculas y minúsculas. Todos los datos deben quedar
como se describe para evitar fallas.


4.- A continuación ejecutaremos el script usando privilegios de
administrador, ya que el script escribe en carpetas para las que el
usuario en sesión no tiene privilegios.


 sudo bash ./shalla_update.sh

Lo que hace este script es bajar de internet la base de datos en
formato comprimido (tar.gz) dentro de la carpeta /tmp, luego lo
descomprime. A continuación borra la base de datos anterior y luego
copia la nueva base de datos. Asigna los permisos apropiados, indica
a squidGuard que debe recompilar y a squid3 que debe reconfigurar.


En caso de que este script marque un error no se debe intentar
ejecutar nuevamente ya que shallalist comenta en su sitio que
bloqueará el acceso a quien trate de bajar repetidas veces la base
de datos en el mismo día.


Lo que se debe hacer es modificar este script para que no baje
la base de datos nuevamente. Esto sería poner un símbolo de #
para comentar la línea que realiza el download como se muestra a
continuación:


#$httpget $shallalist -O $workdir/shallalist.tar.gz || exit 1

Si a pesar de correr nuevamente el script sigue marcando el error
entonces se recomienda iniciar el squid sin importar que el script
haya fallado.



5.- Listo. Ahora podemos levantar squid3, lo que llevará
aproximadamente media hora, ya que el tamaño de la lista negra es
muy grande.


 sudo /etc/init.d/squid3 restart

6.- Realizar pruebas de sitios que encontremos en la base de
datos para asegurarnos que los bloquea con éxito.


REFERENCIAS


En caso de que haya dudas o alguna falla, que no debe haber porque
el tutorial ha sido probado.


Linux Para Todos [ http://www.linuxparatodos.net/portal/staticpages/index.php?page=19-0-como-squid-general ]


Ubuntu Documentation: squidGuard [ https://help.ubuntu.com/community/SquidGuard ]


Shallalist Website [ http://www.shallalist.de/helpers.html ]

16 de diciembre de 2008

Iniciando con Pidgin


Hace varios años tuve por primera vez contacto con Gaim, que ahora se llama Pidgin. Lo tuve por un tiempo pero lo dejé de usar, no recuerdo por qué razón. El caso es que hace un año y medio me vi usando mIRC, varias cuentas de MSN teniendo que salir de una para poder entrar a la otra, Yahoo Messenger, Google-Talk e ICQ y me pareció muy molesto tener tantos clientes de mensajería instantánea a la vez.

Pensaba también en personalizar y en la posibilidad de automatizar algunas de las tareas que involucran mensajería instantánea, por ejemplo: respuestas automáticas cuando no me encontrara disponible, guardar registros de conversaciones teniendo la fecha, hora y minuto de cada mensaje, tener sonidos distintos para los mensajes de personas especiales..., entre otras cosas.

Buscando entre las características de diferentes clientes de mensajería instantánea me volví a encontrar con Pidgin que tiene soporte para conectarse con múltiples cuentas de los servicios de mensajería instantánea antes mencionados, y otros más. Lo que más me agradó fue la ventaja que ofrece de usar plugins de terceros (complementos) y hasta programar los propios.


Así que sin pensarlo mucho instalé Pidgin, configuré mis cuentas de mensajería instantánea y todo quedó de maravilla. Una vez instalado me puse a ver las opciones de configuración y encontré varias cosas que me fueron de mucha utilidad:


  • De inmediato deshabilité la opción de “Mostrar formato de los mensajes entrantes”. Es muy molesto recibir mensajes de MSN con textos rosas o letras muy grandes.

  • Me percaté que Pidgin cuenta con la opción de resaltar faltas de ortografía. Muy útil.

  • Entre los eventos de sonido me encontré que es posible anunciar con un sonido cuando alguien escribe tu nickname en una sala de chat. Me ha servido mucho.

  • El formato del registro de mensajes puede ser con formato (HTML) o plano.

A continuación fui a revisar los complementos disponibles y me encontré con las siguientes opciones:

  • Habilité el complemento (plugin) llamado “Colores de la conversación” sin saber exactamente de lo que se trataba. Y, oh sorpresa! Increíblemente deshabilitó los colores de los mensajes de IRC, esos tan molestos que ponen los usuarios de mIRC, colores brillantes sobre fondos espantosos.

  • Habilité el complemento llamado “Histórico”. Esto me permitió ver las conversaciones más recientes al abrir una conversación. Esto ya lo hacen otros clientes de mensajería instantánea.
  • También habilité el complemento llamado “Modo psíquico” que me sirvió para saber cuando alguien me estaba escribiendo, antes de recibir su primer mensaje.

  • El complemento de “Notificación de estado de amigos” es muy útil cuando estás en medio de una conversación. Te puedes dar cuenta si se ha marchado o está inactivo cuando aún no has pensado en voltear a ver la lista de amigos.

  • “Reemplazo de Texto”. Este complemento es propuesto originalmente para corrección de palabras mal escritas, pero a mi me ha sido particularmente útil cuando quiero tener plantillas de mensajes predefinidos.

Existen otros complementos que acompañan a Pidgin. Estos que menciono son los que a mi me han sido de utilidad. En futuros posts les comentaré de complementos de terceros, instrucciones para instalar, configurar y usar Pidgin, instalar y configurar complementos y descripción de los mismos y, quizá más adelante les de tips para crear sus propios complementos con la funcionalidad que siempre han deseado tener.