Languages

User login


Configuración de un servidor proxy y de gráficas


 

Documento original en: asociacionjuvenilelcueto.info/node/156

 

Introducción

En este apartado se detalla la configuración de un ordenador para que sirva como servidor de distintos servicios útiles para la red libre.

Parte de la información para redactar este manual ha sido obtenida de los siguientes lugares:

Configuración del ordenador

A falta de un ordenador nuevo, se usará provisionalmente un equipo viejo reciclado para tal propósito. Sus características corresponden a un Pentium 3 a 667 MHz con 64 MB de memoria RAM y disco duro de 40 GB. Hará falta añadir una nueva tarjeta de red ethernet, salvo que se cree una interfaz virtualizada.

Partimos de una instalación mínima del sistema operativo Debian, con el disco duro particionado mediante LVM (esto nos permitirá más adelante redimensionar o ampliar particiones sin problemas). Los servicios que necesitamos instalar son el servidor proxy y el servidor de gráficas, con todos sus requerimientos (servidor web, etc.). A partir de ahí se pueden instalar los servicios que consideremos oportunos.

Se supone que, como se ha explicado en un apartado anterior, tenemos creados en guifi.net tanto el dispositivo correspondiente al servidor como los servicios necesarios.

Paquetes útiles

Instalamos algunos paquetes que nos pueden ser de utilidad en el servidor:

apt-get install lynx links2 openssh-server wakeonlan ethtool

Configuración de red

Para que todo funcione correctamente, nuestro servidor debe tener bien configuradas las interfaces de red. En Debian, nada más sencillo que editar el fichero /etc/network/interfaces. Si tenemos una tarjeta de red conectada al router ADSL y la otra al routerboard del nodo guifi.net, la cosa quedaría así:

auto lo eth0 eth1

iface lo inet loopback

iface eth0 inet static
  address  192.168.1.20     #Por poner una válida
  netmask  255.255.255.0
  gateway  192.168.1.1
  network  192.168.1.0
  broadcast  192.168.1.255

iface eth1 inet static
  address  10.34.192.34     # Dirección asignada al servidor en la web
  netmask  255.255.255.224  # Máscara asignada para el servidor en la web
  gateway  10.34.192.33     # Dirección asignada al routerboard en la web
  network  10.34.192.32     # De acuerdo a la dirección del routerboard y la máscara
  broadcast  10.34.192.63  
# De acuerdo a la dirección del routerboard y la máscara
  up ip route add 10.0.0.0/8 via 10.34.192.33   # Importante añadir esta ruta

Servidor proxy

Es el servicio esencial para que los usuarios de la red puedan acceder a Internet desde la misma. Una vez instalado, los usuarios solo necesitarán una URL o dirección IP y un puerto para poder configurar sus navegadores para que puedan acceder a internet.

La configuración del proxy es aproximadamente la que se muestra en la siguiente imagen:

Proxy

Esquema de conexión de un servidor proxy (fuente)

Una de las interfaces de red irá conectada al router ADSL y la otra a un concentrador de la red interna libre, en principio al routerboard del nodo en cuestión.

Instalación del software

Todos los paquetes requeridos están disponibles en Debian, salvo webmin. Lo instalaremos desde su repositorio:

echo "deb http://download.webmin.com/download/repository sarge contrib" >> /etc/apt/sources.list

Instalamos la clave GPG del repositorio:

cd /root
wget http://www.webmin.com/jcameron-key.asc
apt-key add jcameron-key.asc

Y actualizamos:

apt-get update

Ahora ya podemos instalar todos los paquetes requeridos:

apt-get install squid sarg webmin apache2 webalizer

Configuración del software

Apache

Generamos un certificado:

openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/apache.pem -keyout /etc/apache2/apache.pem

Cargamos el módulo SSL del Apache:

a2enmod ssl

Y lo reiniciamos para que cargue el módulo:

/etc/init.d/apache2 force-reload

Webmin

Una vez tenemos instalado el paquete, podemos acceder a su configuración desde un navegador:

lynx https://127.0.0.1:10000/

Accederemos como nuestro usuario de Linux. En el menú de la izquierda vamos a "Webmin - Change Language and Theme" para ponerlo en español.

Squid

Primero creamos un directorio que nos hará falta más adelante:

mkdir /usr/etc/
touch /usr/etc/passwd

Accederemos desde otro ordenador que tenga entorno de escritorio a la URL de webmin (https://ip_de_la_maquina:1000). Lo primero es refrescar el estado de los módulos:

Refresh modules

Programas de autentificación

A continuación accedemos a "Servidores - Squid - Servidor Proxy - Programas de autentificación". Ahí añadimos en "Programa de autenticación básica", /usr/lib/squid/ncsa_auth /usr/etc/passwd y los siguientes valores marcados en la imagen:

Autenticación squid

Clicamos en "Aplicar los cambios", arriba a la derecha, para guardar.

Control de acceso

En "Servidores - Squid - Servidor Proxy - Control de acceso", clicamos en el botón de "Crear nueva ACL", con el menú desplegable marcado con "Autentificación Externa" y le damos el nombre usuarios_autentificados.

Ahora en "Servidores - Squid - Servidor Proxy - Control de acceso", vamos a la pestaña "Restricciones del proxy" y añadimos una nueva que permita los usuarios_autentificados.

Restricciones del proxy

Es importante el orden en que aparecen listadas las restricciones, por lo que debemos subir la nueva por encima de la que deniega todo.

Lista restricciones

Por último, debemos clicar en "Aplicar los cambios", arriba a la derecha.

Sarg

Desde el webmin, podemos acceder a "Servidores - Generador de Informes de Análisis de Squid" y generar un informe para visualizar las estadísticas.

Federación del proxy

Para que otros usuarios de proxys federados puedan conectarse al nuestro necesitamos tener una lista actualizada de los mismos con sus contraseñas. Para ello crearemos un script que la descargue periódicamente de guifi.net mediante cron. El código del script es el siguiente:

#!/bin/sh
wget http://www.guifi.net/es/node/00000/view/federated -qO /tmp/passwd
touch /usr/etc/passwd
NEW=`diff /usr/etc/passwd /tmp/passwd|wc -l`
#OK=`grep Federated /tmp/passwd|wc -l`
#if [ $OK != "0" ]; then
  if [ $NEW != "0" ]; then
    cp /tmp/passwd /usr/etc/
    /etc/init.d/squid reload
    echo "Nuevo /usr/etc/passwd copiado"
  fi;
#fi

Donde debemos sustituir el "00000" por el número de nodo correspondiente a nuestro proxy. Lo guardamos como proxypasswd.sh, le damos permisos de ejecución y lo copiamos a una ruta dentro del PATH.

chmod 755 proxypasswd.sh
mv proxypasswd.sh /usr/bin/proxypasswd.sh

Nos queda automatizar el proceso de recuperación de usuarios. Para ello usaremos cron.

crontab -e

Nos abre un archivo de texto donde están las entradas de los procesos periódicos del sistema. Añadimos la siguiente línea:

54 * * * * /usr/bin/proxypasswd.sh

Y reiniciamos cron para que tenga en cuenta los cambios (aunque no es estrictamente necesario):

/etc/init.d/cron restart

Webalizer

Creamos los directorios necesarios:

mkdir /var/www/webalizer/apache
mkdir /var/www/webalizer/squid

Y lo configuramos mediante webmin:

https://127.0.0.1:10000/

En "Servidores - Webalizer - Análisis de Históricos (Logs)" tenemos que editar dos logs pinchando en ellos:

  • /var/log/apache2/access.log

Escribir informe en directorio:     /var/www/webalizer/apache

Generación de informe planificada:     Habilitado, a las horas escogidas abajo ..

  • /var/log/squid/access.log

Escribir informe en directorio:     /var/www/webalizer/squid

Generación de informe planificada:     Habilitado, a las horas escogidas abajo ..

Servidor de gráficas

Es necesario para la plataforma de gestión de guifi.net, de manera que se puedan mostrar gráficas y estadísticas de tráfico de la red en su interfaz. Es una herramienta esencial para llevar a cabo un seguimiento de la evolución de la red y detectar en qué momento y lugar es necesario ampliarla.

Ejemplo de gráfica

Ejemplo de gráfica

Software necesario

El software que genera las gráficas es el paquete llamado snpservices. Lo descargamos desde (versión más reciente a 23/09/2009):

wget http://trac.guifi.net/trac/export/759/guifi/tools/packaging/debian/snpservices/snpservices_0.2.0-2_all.deb
o de aqui:
wget http://repo.vic.guifi.net/debian/snpservices_0.2.0-2_all.deb
Tras descargar el paquete, lo instalamos:

dpkg -i snpservices_0.2.0-2_all.deb

Nos dará error de dependencias. Las instalamos:

apt-get -f install

La instalación nos pedirá que introduzcamos el ID del servidor de gráficas. Ese número lo obtendremos del nodo que hemos creado en la web, en este caso de guifi.net/es/node/24562, es decir, 24562 (para otros lugares será un número distinto).

También nos preguntará si queremos recuperar en este momento el archivo mrtg.cfg. Aceptamos. Una vez instalado no tendremos que configurar nada más en el servidor, comenzará a servir gráficas inmediatamente.

 Debemos modificar el nodo del servicio de gráficas para añadirle la URL del mismo, que será del tipo maquina/snpservices. También hay que establecer la versión 2.0.

Servidor NTP

El Network Time Protocol es un protocolo de protocolo de sincronización de relojes entre máquinas conectadas a una red. En la red libre es usado para mantener todos los equipos con la misma hora que las estadísticas y logs sean congruentes.

Su instalación es sencilla:

apt-get install ntp

Permitimos a las IP de la red acceder al servidor:

echo "#guifi.net users" >> /etc/ntp.conf
echo "restrict 10.0.0.0 mask 255.0.0.0 nomodify notrap" >> /etc/ntp.conf

Iniciamos el servidor y comprobamos que se ha sincronizado:

/etc/init.d/ntp start
ntpq -p

Y ya lo tenemos listo. Si en algún momento queremos usar el servicio desde otro equipo, hacemos:

ntpdate -u ip_del_servidor

Extras

Encendido remoto

Nos podría interesar en algún momento poder encender el ordenador de manera remota, por ejemplo tras un corte de luz. Aquí un buen artículo que explica como hacerlo:

miblockdenotix.wordpress.com/2008/09/17/wake-on-lan-wol-en-ubuntu/

IP virtual

Si solo tenemos una tarjeta de red en el dispositivo podemos conectarlo tanto al ADSL como a la red libre asignando dos IP a la misma interfaz. Para ello podemos utilizar el programa IPRoute2.

Instalación

Instalamos dependencias:

apt-get install flex bison libdb-dev

Descargamos la versión de IPRoute2 correspondiente a nuestro kernel (usar uname -r para determinar la versión):

wget http://devresources.linux-foundation.org/dev/iproute2/download/iproute2-2.6.28.tar.bz2

Descomprimimos y compilamos:

tar jvxf iproute2-2.6.28.tar.bz2
cd iproute2-2.6.28
make

make install

Configuración

Una vez instalado, ya podemos usar las utilidades del programa.

ip addr show

Vemos las interfaces configuradas. Tomando la de nuestra tarjeta de red (que suponemos configurada en la LAN del router ADSL como 192.168.1.2 o similar), añadimos la nueva IP correspondiente al servidor de la red libre:

ip addr add 10.34.193.3/27 broadcast + dev eth0

 La IP y máscara de subred las tomamos del dispositivo correspondiente del nodo, en este caso de guifi.net/es/guifi/device/16811. Podemos comprobar que las rutas se han actualizado también con:

ip route show

IP virtual con webmin

Una manera más sencilla y rápida de crear la IP virtual es usando webmin. En  "Red - Configuración de Red - Interfaces" seleccionamos la que queremos modificary clicamos en "Agregar interfaz virtual". Basta con rellenar los campos como en la imagen y guardar.

Agregar interfaz virtual

Ejecutar winbox en remoto por ssh

Tal vez puede ser útil acceder remotamente a nuestro routerboard con winbox. Para ello hay que habilitar la ejecución de las X de manera remota. Editamos /etc/ssh/ssh_config y descomentamos la siguiente línea:

  ForwardX11Trusted yes

Reiniciamos el servicio:

/etc/init.d/ssh restart

La próxima vez que accedamos lo haremos añadiendo la opción -X al comando ssh.

ssh ip_maquina -l usuario -X

A continuación instalamos wine:

apt-get install wine

Y descargamos el ejecutable de winbox:

wget http://demo.mt.lv/winbox/winbox.exe

Ya podemos ejecutarlo como si estuviera en nuestro ordenador:

wine ./winbox.exe

Hay que tener en cuenta que para no tener problemas debemos conectar al routerboard mediante IP y no mediante MAC. Además el servidor debería tener un ADSL con velocidad de subida razonablemente alta para no desesperar con cada clic.