Servidor proxy federado de guifi.net

Los servidores proxy de guifi.net son el caramelito para la expansión de esta red, estos servidores se usan en la red para compartir la conexión a internet con el resto de usuarios de la red guifi.

Este servidor proxy es un squid de toda la vida pero con unas modificaciones para que pueda leer la lista de usuarios en la web de guifi y permita cargarlos.

Esta instalación se ha hecho en una debian etch (old stable), pero para versiones mas nuevas es posible que la configuración sea similar. Por suerte tenemos unos super empaquetadores de paquetes que nos han facilitado esta tarea creando un paquete .deb que dejará el proxy up and running.


Para añadir los sources del repositorio apt de guifi editamos el fichero /etc/apt/sources.list y añadimos estas líneas al final.

#repo guifi
deb http://repo.vic.guifi.net/debian/  ./

Y actualizamos el listado de los repositorios e instalamos el paquete guifi-proxy:

# apt-get update
# apt-get install guifi-proxy

Nos pregunta algunas cosas, como la “web base” dejamos la que hay (www.guifi.net).

Guifi Proxy node number: esto tendremos que ir a la web de guifi y crear un nuevo contenido llamado guifi.net service, donde indicamos que queremos crear un servidor proxy y a qué máquina la vinculamos (recuerdo que la máquina tiene que estar creada previamente en el nodo/supernodo correspondiente). El numero que nos pide esta pantalla es el mismo que sale en la url o los numeros iniciales en el campo servicio. Importante tras crear el proxy acabar de configurarlo, indicandole el nombre (yo he puesto la ip porque es lo que se ve primero al acceder a la página del proxy y si no sabes ni siquiera un numero de DNS no puedes resolver el nombre de dominio interno) y el puerto, además del ancho de banda disponible. Con esto federamos este proxy.

A continuación nos pide “Force to fetch passwd file now.“, le indicamos “Yes”. Esto se va a descargar la versión actual de usuarios de proxy creados en la web de guifi, de esta forma cualquier usuario de guifi sea cual sea su ubicación o donde tenga montado su nodo podrá acceder a este proxy.

Dejo a continuación el log que ha dejado la instalación:

fermat:/etc/squid# apt-get install guifi-proxy
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  sarg
Suggested packages:
  squidguard
The following NEW packages will be installed:
  guifi-proxy sarg
0 upgraded, 2 newly installed, 0 to remove and 24 not upgraded.
Need to get 573kB of archives.
After this operation, 1470kB of additional disk space will be used.
Do you want to continue [Y/n]? 
WARNING: The following packages cannot be authenticated!
  guifi-proxy
Install these packages without verification [y/N]? y
Get:1 http://ftp.de.debian.org lenny/main sarg 2.2.5-2 [568kB]                 
Get:2 http://repo.vic.guifi.net ./ guifi-proxy 0.0.2 [4852B]                   
Fetched 573kB in 3s (177kB/s)     
Preconfiguring packages ...
Selecting previously deselected package sarg.
(Reading database ... 49098 files and directories currently installed.)
Unpacking sarg (from .../archives/sarg_2.2.5-2_i386.deb) ...
Selecting previously deselected package guifi-proxy.
Unpacking guifi-proxy (from .../guifi-proxy_0.0.2_all.deb) ...
Processing triggers for man-db ...
Setting up sarg (2.2.5-2) ...
Setting up guifi-proxy (0.0.2) ...

Creating config file /etc/guifi-proxy/config.sh with new version
Fetching passwd file.
...
--2011-02-19 21:03:32--  http://www.guifi.net/guifi/export/36508/federated_md5
Resolving www.guifi.net... 77.246.179.62
Connecting to www.guifi.net|77.246.179.62|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://guifi.net/guifi/export/36508/federated_md5 [following]
--2011-02-19 21:03:32--  http://guifi.net/guifi/export/36508/federated_md5
Resolving guifi.net... 77.246.179.61
Connecting to guifi.net|77.246.179.61|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 32 [text/plain]
Saving to: `/tmp/passwd_web_md5.txt'

100%[======================================>] 32          --.-K/s   in 0s      

2011-02-19 21:03:33 (1.89 MB/s) - `/tmp/passwd_web_md5.txt' saved [32/32]

[Sat, 19 Feb 2011 21:03:33 +0100] - Different Hash, New Passwd File
--2011-02-19 21:03:33--  http://www.guifi.net/guifi/export/36508/federated
Resolving www.guifi.net... 77.246.179.62
Connecting to www.guifi.net|77.246.179.62|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://guifi.net/guifi/export/36508/federated [following]
--2011-02-19 21:03:33--  http://guifi.net/guifi/export/36508/federated
Resolving guifi.net... 77.246.179.61
Connecting to guifi.net|77.246.179.61|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 108 [text/plain]
Saving to: `/tmp/passwd'

100%[======================================>] 108         --.-K/s   in 0s      

2011-02-19 21:03:34 (8.17 MB/s) - `/tmp/passwd' saved [108/108]

[Sat, 19 Feb 2011 21:03:34 +0100] - Download OK, copying Passwd file to /etc/guifi-proxy/passwd
Reloading Squid configuration files.
done.

Si investigamos un poco veremos que ha creado un montón de ficheros de configuración en /etc/squid/, el motivo es que ha instalado el sarg, un programa que permite ver vía web unas estadísticas globales del uso del servidor.

Por otra parte nos preguntamos como lo hace el servidor proxy para descargar los usuarios federados. La cosa es que se crean algunos directorios adicionales en /etc/guifi-proxy/ y /usr/share/guifi-proxy/.

El script que hace todo el trabajo pues vive en /usr/share/guifi-proxy/guifi-proxy.sh (siendo el fichero guifi-proxy de /etc/guifi-proxy el que manda con la configuración). Este script se descarga los usuarios, los guarda a los ficheros de password del directorio guifi-proxy y reinicia el squid.

Este script se ejecuta cada hora:

fermat:/etc/guifi-proxy# cat /etc/cron.d/guifi-proxy 
#
# Regular cron jobs for the guifi-proxy package
#
55 *	* * *	root	/usr/share/guifi-proxy/guifi-proxy.sh >> /var/log/guifi-proxy/guifi-proxy.log 2>&1;

Si el servidor proxy funciona pero no pide el nombre de usuario y contraseña verificad que no falte alguna de estas cosas:

auth_param basic program /usr/lib/squid/ncsa_auth /etc/guifi-proxy/passwd
auth_param basic children 5
auth_param basic realm proxy BCNrosello208
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32

acl localnet src 192.168.0.0/16 # RFC1918 possible internal network

acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
#
acl SSL_ports port 443          # https
acl Safe_ports port 80          # http
acl Safe_ports port 443         # https
acl purge method PURGE
acl CONNECT method CONNECT

http_access allow manager localhost localnet
http_access deny manager
# Only allow purge requests from localhost
http_access allow purge localhost localnet
http_access deny purge
# Deny requests to unknown ports
http_access deny !Safe_ports
# Deny CONNECT to other than SSL ports
http_access deny CONNECT !SSL_ports
#
# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet
http_access allow localhost

acl usuarios_autenticados proxy_auth REQUIRED
http_access allow usuarios_autenticados

# And finally deny all other access to this proxy
http_access deny all

#Allow ICP queries from local networks only
icp_access allow localnet
icp_access deny all

# Squid normally listens to port 3128
http_port 3128

hierarchy_stoplist cgi-bin ?
access_log /var/log/squid/access.log squid

refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|?) 0     0%      0
refresh_pattern (Release|Package(.gz)*)$        0       20%     2880
refresh_pattern .               0       20%     4320

acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
upgrade_http0.9 deny shoutcast

acl apache rep_header Server ^Apache
broken_vary_encoding allow apache

extension_methods REPORT MERGE MKACTIVITY CHECKOUT

hosts_file /etc/hosts
coredump_dir /var/spool/squid

Gracias tonic para el cacho fichero de configuración de squid!

En este punto ya tenemos el servidor proxy federado de guifi.net funcionando. Pero ahora mismo ofrecemos barra libre de ancho de banda y esto puede hacer que la conexión a internet quede muy colapsada o incluso deje de funcionar, así que se recomienda activar los delay pools (link en catalán). En pocos rasgos, los delay pool permiten gestionar las conexiones en celdas y lo que tenemos que hacer es limitar el numero de celdas a usar.

Pues venga, compartir es bueno :)

3 Comments

  1. creo que las líneas “http_access” con localhost y localnet no funcionan, porque lo que hace squid es aplicar un AND entre los dos parámetros, y no puede suceder que la petición sea de localhost y de localnet a la vez, aquí lo explican mejor que yo:
    http://wiki.squid-cache.org/SquidFaq/SquidAcl#line-223
    aunque no lo he probado aun!

    Respon

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.