Catégories
Open-source Planet-libre Reseau Video

Installation d’un serveur proxy HTTP Squid sous Debian

Marre de ne pas pouvoir regarder une vidéo  basse résolution sur YouTube alors que votre FAI adoré (Free pour ne pas le citer) annonce un débit sur votre ligne de plusieurs megabits par seconde ?

Il suffit de disposer d’un simple serveur dédié ou virtuel chez un hébergeur (autre que Free bien sûr), d’y installer un proxy HTTP et à vous les vidéos en HD même en pleine soirée.

Pour illustrer ce billet, j’ai donc installé Squid (le plus connu des proxy Web) sur mon serveur OVH qui dispose d’une liaison directe, illimitée et non bridée vers Internet à 100 Mbps.

squid

Installation du serveur Squid

On commence par mettre à jour son système avec la combo:

sudo apt-get update && sudo apt-get upgrade

Ensuite on installe le logiciel Squid qui à le bon goût d’être dans les dépôts officiels de Debian:

sudo apt-get install squid

Puis on arrête le service Squid (qui doit maintenant tourner en tache de fond) en attendant sa configuration:

sudo service squid stop

On édite la configuration qui se trouve centralisée dans le fichier /etc/squid/squid.conf en éditant notamment:

  1. La gestion de l’accès au service uniquement réservé aux adresses IP clairement identifiées (par exemple remplacer AAA.BBB.CCC.DDD par l’adresse IP publique de votre domicile). Vous pouvez ajouter autant de ligne que d’adresse IP.
    acl nicolargo src AAA.BBB.CCC.DDD/32 # Home sweet home
    http_access allow nicolargo
  2. On masque notre adresse IP dans le header HTTP (X-Forwarded-For: unknown)
    forwarded_for off

Note: la liste des options disponibles est décrite sur le site officiel (la version de Squid disponible sous Wheezy est, au moment de l’écriture de ce billet, la branche 2.7) ou par la commande ‘man squid.conf’.

Une fois la configuration finalisé en fonction de vos besoins, il suffit de relancer le service:

sudo service squid start

Configuration des machines clientes

Il ne rest plus qu’à configurer son/ses clients (PC, Smarthphone ou tablette) pour utiliser le serveur proxy Squid fraîchement installé.

Avec une configuration par défaut, Squid est en écoute sur le port TCP numéro 3128. Il faut donc, pour utiliser le serveur proxy Squid configurer l’adresse IP de votre machine hébergeant Squid et le port 3128.

Si vous utilisez Chromium comme navigateur Web, je vous conseille l’installation du plugin TunnelSwitch (lien vers le store) qui va vous permettre de passer rapidement (en un seul click de souris) entre un lien direct (sans proxy) et indirect (avec proxy).

capture_133

 

capture_134

Catégories
Open-source Planet-libre Reseau

Ziproxy re-compresse les images lors de vos surfs

Ziproxy est un proxy HTTP spécialisé dans la compression des données. Il permet par exemple de convertir les images des sites Web visités dans une qualité inférieure. Il permet également de compresser au format GZip les données de type pages HTML, CSS, JS ou autres.

Ce genre de proxy (qui ne fait pas de « caching ») a un sens dans les architectures réseau ou l’utilisateur final (l’utilisateur du navigateur Web) est relié à un site central (disposant d’une liaison haut-débit vers Internet) par une liaison de faible débit (par exemple accès VPN ou 3G pour les itinérants).

Nous allons donc dans ce billet installer, configurer (sans et avec Squid) puis tester un serveur Ziproxy.

Installation depuis les sources

La version disponible dans les dépôts Ubuntu/Debian est assez ancienne (2.7.2 au moment de l’écriture de ce billet). Nous allons donc compiler Ziproxy depuis les sources.

Avant de commencer, un certain nombre de pré-requis (notamment le support de JPEG 2000 et la création d’un utilisateur dédié pour lancer le daemon Ziproxy) doivent être installés:

sudo aptitude install libjasper-dev libgif-dev libungif4-dev libjpeg-dev libpng-dev libsasl2-dev zlib1g-dev

sudo adduser –shell /bin/noshell –no-create-home –disabled-login ziproxy

Compilation de la version 3.2.0 depuis les sources à récupérer sur le site Sourceforge.

tar jxvf ziproxy-3.2.0.tar.bz2

cd ziproxy-3.2.0

Compilation:

./configure –with-jasper

make

Installation:

sudo make install

Mise en place des fichiers de configuration et de lancement automatique:

sudo ln -s /usr/local/bin/ziproxy /usr/bin/ziproxy

sudo mkdir /etc/ziproxy

sudo mkdir /var/log/ziproxy

sudo chown ziproxy:ziproxy /var/log/ziproxy

sudo cp etc/ziproxy/ziproxy.conf /etc/ziproxy/

sudo cp etc/init.d/ziproxy /etc/init.d/

Le script de démarrage ayant été créé pour Fedora, voici le script que j’utilise sur un serveur Ubuntu Server 10.04:

#!/bin/bash

#

# Startup script for Ziproxy

#

# chkconfig: – 86 14

# description: Ziproxy

# Copyright (c)2005-2010 Daniel Mealha Cabrita

PROGNAME= »Ziproxy »

# source function library

# . /etc/init.d/functions

rc_done= » done »

rc_failed= » failed »

return=$rc_done

PID_FILE=/var/run/ziproxy.pid

ZIPROXY=/usr/bin/ziproxy

ZIPROXY_CONF=/etc/ziproxy/ziproxy.conf

RUN_AS_USER=ziproxy

case « $1 » in

start)

printf « Starting %s:  » « ${PROGNAME} »

${ZIPROXY} -d -u ${RUN_AS_USER} -c ${ZIPROXY_CONF} -p ${PID_FILE}

if [ $? != 0 ]; then

printf « %s » « ${rc_failed} »

else

printf « %s » « ${rc_done} »

fi

echo

;;

stop)

printf « Stopping %s:  » « ${PROGNAME} »

${ZIPROXY} -k -u ${RUN_AS_USER} -c ${ZIPROXY_CONF} -p ${PID_FILE}

if [ $? != 0 ]; then

printf « %s » « ${rc_failed} »

else

printf « %s » « ${rc_done} »

fi

echo

;;

restart|reload)

$0 stop

$0 start

;;

*)

printf « Usage: %s {start|stop|restart}\n » « ${PROGNAME} »

exit 1

esac

On teste que le daemon démarre et s’arrête correctement:

sudo /etc/init.d/ziproxy start

Starting Ziproxy: done

ps auxw | grep ziproxy

ziproxy 5429 0.0 0.0 3260 660 ? Ss 14:42 0:00 /usr/bin/ziproxy -d -u ziproxy -c /etc/ziproxy/ziproxy.conf -p /var/run/ziproxy.pid

sudo /etc/init.d/ziproxy stop

Stopping Ziproxy: done

Configuration en mode proxy simple

Peu de chose à modifier dans le fichier de configuration /etc/ziproxy/ziproxy.conf:

Port = 8080

Address = 192.168.0.253

# DebugLog = « /var/log/ziproxy/debug.log »

ErrorLog = « /var/log/ziproxy/error.log »

AccessLog = « /var/log/ziproxy/access.log »

## ****** THESE OPTIONS ARE EXPERIMENTAL ******

# ProcessHTML = false

# ProcessCSS = false

# ProcessJS = false

On relance ensuite le serveur pour prendre en compte la configuration:

sudo /etc/init.d/ziproxy restart

Il faut ensuite configurer son navigateur Web pour utiliser ce serveur comme proxy. Par exemple si votre serveur à l’adresse IP 192.168.0.253 et que Ziproxy est configuré sur son port découte par défaut (TCP/8080), il faut configurer le proxy de la manière suivante (exemple sous navigateur Web Chromium):

Test de Ziproxy

Une fois votre navigateur configuré, vous pouvez surfer sur le Web. Les pages s’affichent « normalement ». Nous allons comparer la qualité des images affichées avec et sans Ziproxy et regarder d’un peu plus près le gain en terme de volume de données transmises sur le réseau.

Taille de la page sans Ziproxy: 1.2 Mo (dont 592 Ko d’images)

Taille de la page avec Ziproxy: 0.9 Mo (dont 247 Ko d’images)

On a donc un gain d’environ de 25% en terme de taille. Selon les sites, ce gain varie entre 15 et 35%.

Pour mieux juger la qualité des images recompressés en JPEG voici un zoom à 500%:

Sans Ziproxy

Avec Ziproxy

JPEG 2000…

… ou l’histoire d’un format qui a du mal à prendre…

Pour activer le support de la compression au format JPEG-2000, il faut ajouter l’option suivante dans le fichier de configuration:

ProcessJP2 = false

ProcessToJP2 = true

ForceOutputNoJP2 = false

AnnounceJP2Capability = true

Malheureusement ce format d’image n’est pas pris en compte par les navigateur Web que j’ai testé (dernière version de Chromium et de Firefox…). Un plugin expérimental est disponible sous Firefox pour le support des images JP2 mais pas dans ma configuration (Ubuntu 10.04 + Firefox 3.6.10):

C’est bien dommage car le facteur de compression aurait été plus important…

Configuration en mode proxy secondaire de Squid

Ziproxy ne met pas en cache les données. C’est pour celà qu’il peut être intéressant de le coupler avec un serveur Squid. Voici la configuration cible (avec Squid et Ziproxy hébergés sur la même machine):

Configuration de Ziproxy en éditant le  fichier /etc/ziproxy/ziproxy.conf (attention configuration non complète):

Port = 8080

Address = « 127.0.0.1 »

TransparentProxy = false

ConventionalProxy = true

Puis on ajoute les lignes suivante dans la configuration du serveur Squid pour prendre en charge Ziproxy

cache_peer localhost parent 8080 0 no-query no-digest

never_direct allow all

Il faudra re-configuer vos clients pour  utiliser Squid comme proxy (et non plus Ziproxy). Le port TCP par défaut en écoute du serveur Squid est le 3128.

On peut trouver d’autres exemples de configurations sur cette page.

Catégories
Open-source Reseau

Installation de Squid sous FreeBSD

squid
Squid est un proxy supportant les protocoles HTTP, HTTPs et FTP. Nous allons dans ce billet voir comment installer et configurer Squid 3.0.20 sur un serveur FreeBSD 8.0 (qui est je le répète le meilleur OS pour les services réseaux – fin de troll).

Catégories
Open-source Systeme

apt-get à travers un proxy HTTP

Un petit mémo à usage interne…

Si, comme moi, vous avez besoin d’installer (ou de mettre à jours) une machine GNU/Linux en utilisant apt-get et que celle-ci se trouve sur un réseau qui force l’utilisation d’un proxy HTTP, il faut saisir la commande suivante (à adapter à votre réseau):

export http_proxy=http://login:password@adresseduproxy:portduproxy

Exemple pour un serveur proxy Squid sans authentification:

export http_proxy=http://proxy.free.fr:3128

Voili…

Catégories
Open-source Reseau Web

Mise en place d’une blacklist sur Squid

Squid est le plus connu des proxy Web open-source. Une fois installé, un proxy Web permet de filtrer/optimiser/loguer les accès Internet (HTTP ou FTP) issues de votre réseau. Une des fonctions les plus souvent demandée à un administrateur est d’interdire l’accès à certaines catégories de sites (porno, violent, messagerie personnelle…). Squid répond à ce besoin grâce à SquidGuard.

Voici deux schémas fonctionnels expliquant le fonctionnement de SquidGuard:

Squidguard OKSquidGuard NOK

Installation de SquidGuard

Afin de disposer de la dernière version (1.3 au moment de l’écriture de ce billet), il est préférable de compiler SquidGuard depuis les sources. Une fois récupérées, on lance la célèbre séquence:

# tar zxvf squidGuard-1.3.tar.gz
# ./configure
# make
# sudo make install

SquidGuard utilise une base de donnée contenant la liste des sites classées par thèmes. Afin de maintenir cette base à jour, le plus simple est d’écrire un shell script qui sera lancé automatiquement toutes les nuits (par exemple par crontab). Voici un exemple de script (à adapter selon votre configuration):

#!/bin/sh

blacklisturl=ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/blacklists.tar.gz
blacklistfile=blacklists.tar.gz
blacklistdir=/var/db

echo « Download from $blacklisturl »
fetch -q -o /tmp/$blacklistfile $blacklisturl

if [ -r $gzdir/$rules ]; then
echo « Update the database »
cd $blacklistdir
tar zxvf /tmp/$blacklistfile 2>&1 > /dev/null
chown -R www:www blacklists
cd –
echo « Restart Squid »
squid -k reconfigure
echo « Done… »
exit
fi

J’utilise personnellement une base de donnée mise à disposition sur le serveur FTP de l’université de Toulouse.

Remarque: Il faut lancer ce script avant la première utilisation de SquidGuard.

Configuration de SquidGuard

La configuration se fait via un seul fichier: SquidGuard.conf

Voici un exemple de configuration qui interdit l’accès aux sites pornos:

logdir /usr/local/squid/logs
dbhome /var/db/squidGuard

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

acl {
default {
pass !porn all
redirect http:/localhost/filtered.html
}
}

Des configurations simples ou plus complexes sont disponibles sur le site officiel.

Configuration de Squid pour utiliser SquidGuard

La dernière étape consiste à configurer Squid pour qu’il utilise le système de filtrage de SquidGuard. C’est là aussi très simple:

# vi squid.conf

redirect_program /usr/local/bin/squidGuard -c /usr/local/squid/squidGuard.conf

# squid -k reconfigure

Il ne vous reste plus qu’à tester votre tout nouveau système de filtrage en essayant d’accèder à un site interdit (vous pouvez voir la liste dans le fichier /var/db/squidGuard/porn/domains) depuis un navigateur Web configuré pour utiliser votre proxy Squid. Si cela marche vous serez automatiquement redirigé vers la page http://localhost/filtered.html.

Catégories
Reseau Systeme

Installation de Squid sur Fedora


Voici un tutoriel pour installer Squid sur une distribution Fedora (Core 6). Squid est un serveur proxy gérant les protocoles HTTP, HTTPS et FTP. Il offre des performances de haut niveau, même si le service tourne sur une machine peu puissante.

L’installation peut se faire soit depuis les sources, soit depuis le repo Fedora.

Installation depuis les sources

Il faut d’abord récupérer les sources de la dernière version stable (2.6 au moment de l’écriture de ce post):

# wget http://www.squid-cache.org/Versions/v2/2.6/squid-2.6.STABLE13.tar.gz

On lance la séquence de compilation:

# tar zxvf squid-2.6.STABLE13.tar.gz
# cd squid-2.6.STABLE13
# ./configure –enable-snmp
# make
# make install

Le répertoire d’installation par défaut est /usr/local/squid/.

Pour des raisons de sécurité, le processus sera lancé par l’utilisateur ‘squid’ (à créer si il n’existe pas…). Il faut donc créer les répertoires suivants:

# mkdir /var/spool/squid
# chown -R squid:squid /var/spool/squid
# mkdir /var/log/squid
# chown -R squid:squid /var/log/squid

La configuration est centralisé dans le fichier /usr/local/squid/etc/squid.conf.

Installation depuis le repos Fedora (méthode plus simple…)

On utilise yum pour installer Squid sur son système:

# yum install squid

Sous Fedora, l’automatisation du lancement de Squid au démarrage de la machine doit se faire de la manière suivante:

# chkconfig squid on

La configuration est centralisé dans le fichier /etc/squid/squid.conf.

Configuration

Voici, en exemple, mon fichier de configuration squid.conf:

http_port 3128
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
cache_mem 16 MB
cache_dir ufs /var/spool/squid 3000 16 256
access_log /var/log/squid/access.log squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl all src 0.0.0.0/0.0.0.0
acl user src 192.168.0.0/255.255.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow user all
http_access deny all
http_reply_access allow all
icp_access allow all
snmp_access allow all
coredump_dir /usr/local/squid/var/cache

Avant de pouvoir utiliser le proxy, il faut générer la structure de base du répertoire de cache, pour cela on fait:

# squid -z
2007/06/07 17:14:38| Creating Swap Directories

Remarque: Si vous rencontrez l’erreur suivante:
FATAL: Could not determine fully qualified hostname. Please set ‘visible_hostname’
Il faut renseigner l’option visible_hostname dans le fichier de configuration squid.conf.

Il ne reste plus qu’à lancer le serveur:

# squid
ou
# service squid start

Si le serveur ne démarre pas, c’est qu’il doit y avoir une erreur dans la configuration. Le plus simple pour identifier cette erreur est de lancer squid en mode console:

# squid -N -d 255

Si le PC système sur lequel est installé Squid intégre un Firewall de type Iptables, il faut penser à ajouter la règles suivantes:

# iptables -A RH-Firewall-1-INPUT -p tcp -m tcp –dport 3128 -j ACCEPT
# /sbin/iptables-save

Configuration des clients

Sur Firefox, il faut aller dans le menu Preférences/Avancé/Réseau/Paramètres… puis saisir les informations:

Et voila… bon surf !