Installer et configurer un serveur proxy sur son Synology : Squid

Introduction :

Vous avez besoin d'un serveur Proxy : Squid est un serveur très performant qui ne demande pas d'énormes ressources systèmes pour fonctionner. Son installation est simple, sa mise en route demande toutefois quelques précisions techniques.
Le but de ce document n'est pas d'expliquer le fonctionnement de Squid, mais de pouvoir mettre en place un serveur proxy Squid rapidement sur son serveur Synology.
Le fichier de configuration donnée en exemple peut être amélioré à souhait. Il est même conseillé de se pencher sur l'étude du Man Squid :
Site Officiel : http://www.squid-cache.org/
Site qui donne de nombreux exemples sur le fonctionnement de Squid : Installer Squid
Je vous livre donc un fichier squid.conf fonctionnel dont la sécurité pourra être renforcée en fonction de vos besoins.


Prérequis : 

- savoir utiliser VI
- le module IPKG doit être installé
- le module Telnet ou SSH doit être activé sur le Syno (savoir utiliser vi pour modification du fichier squid.conf)



Installation du module Squid : 


Ouvrir une session Telnet sur Syno.
Se positionner sur : /volume1/@tmp
cd /volume1/@tmp
Télécharger le module Squid pour votre Syno dans le répertoire @tmp (Cf sources IPKG : http://ipkg.nslu2-linux.org/feeds/optware/)
Pour le DS 207+ = squid_2.6.18-1_arm.ipk
wget http://ipkg.nslu2-linux.org/feeds/optware/syno-x07/cross/unstable/squid_2.6.18-1_arm.ipk
Effectuer l'installation du module:
ipkg install squid_2.6.18-1_arm.ipk
Le module va s'installer dans votre répertoire /opt

Pour les autres Syno que 107+,  207+, 407, il faut suivre la procédure suivante :
merci ikeke pour cette remarque!
ipkg update
ipkg install squid
le module va s'installer dans votre répertoire /opt

Toutefois, le package semble ne pas fonctionner sur ces autres Nas.
Nous obtenons l'erreur suivante :
""FATAL: Bungled Default Configuration line 5: cache_mem 8 MB
Squid Cache (Version 2.6.STABLE18): Terminated abnormally.""
Squid ne créer pas le cache et ne démarre pas.
Si quelqu'un trouve la solution / Avis au amateurs



Configuration du module Squid : 

Sauvegarder le fichier squid.conf avant toute manipulation :
cp /opt/etc/squid/squid.conf  /opt/etc/squid/squid.conf.sauv
Editer le fichier squid.conf :
vi /opt/etc/squid/squid.conf
Le fichier comporte un grand nombre de commentaires, il est difficile de s'y retrouver vu sa longueur.

Dans un premier temps, je vous propose de remplacer le contenu du fichier par une configuration minimum. Dans un deuxième temps, nous chercherons à améliorer le fichier en fonction de nos besoins.

Un fichier Squid.conf minimum : l'essentiel de ce qu'il faut connaître pour mettre en place le serveur proxy

cache_mgr mon_adresse@gmail.com # (l'adresse qui va permettre de contacter l'administrateur)
visible_hostname mon_domaine.org   #  (le nom de votre domaine ou nom DDNS)
cache_mem 8 MB     # (8 est le minimum requis pour que squid puisse fonctionner correctement)                      
cache_dir ufs /opt/var/squid/cache 100 16 256 # (La taille du cache sur le disque - pour indiquer le répertoire devant accueillir les objets, la taille disque, le nombre de répertoires de premier et de second niveau pour le stockage)
negative_dns_ttl 10 second          
connect_timeout 60 second           
read_timeout 80 second
request_timeout 80 second

cache_access_log /opt/var/squid/logs/access.log # (ce fichier permet de contrôler les logs de connexions)
cache_log /opt/var/squid/logs/debug
cache_store_log /opt/var/squid/logs/storage

hierarchy_stoplist on
http_port 192.168.1.10:3128 # ( L'adresse IP doit être celle de votre serveur Synology - Le port utilisé est le 3128 par défaut, il est conseillé de le changer)
icp_port 3128 # (c'est le port sur lequel le cache peut être interrogé par un cache fils ou voisin, cas d'une hiérarchie)

# Global ACL-Definitions (Access control lists)
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl all src 0.0.0.0/0.0.0.0
acl CLIENTS src 192.168.1.0/255.255.255.0 # (on définit les réseaux ou les machines autorisées)
acl intern dst 192.168.1.0/255.255.255.0
acl purge method PURGE
acl CONNECT method CONNECT
acl FTP proto FTP
always_direct allow FTP
acl Allowed_Ports port 80 99 443 21 563 488 777 210 1025-65535
acl Safe_ports port 80                # http
acl Safe_ports port 21                # ftp

# http_access deny !Safe_ports # (pour interdire les ports différents de ceux mentionnés "Safe_ports")
# http_access allow all # ( pour autoriser tout le monde à utiliser le cache)
# allow direct ftp, all other redirect to parent
always_direct allow FTP
always_direct deny all
# my own rules
http_access allow CLIENTS # (pour autoriser tout le reseau mentionné dans "acl clients" à utiliser le cache)
http_access allow localhost
# And finally deny all other access to this proxy
http_access deny all

icp_access allow CLIENTS (on autorise les accès icp aux machines définit dans l'acl CLIENTS)
icp_access deny all
miss_access allow all
always_direct allow intern


Comme vous avez pu le constater le fichier squid.conf comporte différentes autorisations. Cette configuration n'accepte en entrée que les clients du Lan qui ont été définis par la règle : acl CLIENTS src 192.168.1.0/255.255.255.0

Pour que cela puisse fonctionner : à une acl doit correspondre à un http_access :
acl CLIENTS src 192.168.1.0/255.255.255.0
..
http_access allow CLIENTS
icp_access allow CLIENTS
Voici maintenant un fichier squid.conf qui permet l'accès à tous le monde :

cache_mgr mon_adresse@gmail.com
visible_hostname mon_domaine.org
cache_mem 8 MB                 
cache_dir ufs /opt/var/squid/cache 100 16 256
negative_dns_ttl 10 second          
connect_timeout 60 second           
read_timeout 80 second
request_timeout 80 second
cache_access_log /opt/var/squid/logs/access.log
cache_log /opt/var/squid/logs/debug
cache_store_log /opt/var/squid/logs/storage
hierarchy_stoplist on
http_port 192.168.1.10:3128
icp_port 3128

# Global ACL-Definitions (Access control lists)
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl all src 0.0.0.0/0.0.0.0
acl intern dst 192.168.1.0/255.255.255.0
acl purge method PURGE
acl CONNECT method CONNECT
acl FTP proto FTP
always_direct allow FTP
acl Allowed_Ports port 80 99 443 21 563 488 777 210 1025-65535

 http_access allow all
# allow direct ftp, all other redirect to parent
always_direct allow FTP
always_direct deny all
http_access deny all

icp_access allow all
miss_access allow all
always_direct allow intern


Optimisation du cache :

cache_dir ufs /opt/var/squid/cache 100 16 256

Dans le fichier squid.conf, nous avons alloué 100Mo d'espace pour le cache. Si nous voulons allouer 500Mo, la ligne devra être :

cache_dir ufs /opt/var/squid/cache 500 16 256

Attention la modification de la taille du cache implique une reconstruction de celui-ci avec la commande mentionnée dans la partie suivante.



Démarrage du serveur proxy Squid :

a) Création de l'espace Swap pour le cache:

/opt/etc/squid/squid -z

b) Lancement du serveur:
/opt/etc/init.d/S80squid start
L'arrêt se fera de la même manière :
/opt/etc/init.d/S80squid stop


Mise en place du module de sécurité basic fourni avec le produit Squid : NCSA 

Après installation vous trouverez le module NCSA sur le chemin suivant :  /opt/libexec/ncsa_auth
Ce module permet la mise en place d'une connexion par login/mot de passe au serveur Squid.

a) Création du fichier des mots de passe:
Pour activer cette option, il faut commencer par créer un fichier de mot de passe différent de celui du Synology (bien sûr pour raison de sécurité!)
Je créer un fichier portant le nom de "users" sur le chemin /opt/etc/squid (revoir le Chmod afin de sécuriser ce fichier)
touch /opt/etc/squid/users
Je vais ainsi déposer mes utilisateurs dans ce fichier ainsi que leur mots de passe respectif.

Le fichier users doit ressembler à cela :
pascal:phU7yULVCIfbg
sophie:KTuaBMEgsuy/E
~
Pour mettre en place les mots de passe, nous pouvons utiliser Htpasswd (module du serveur Apache, bien sûr il faut l'installer sur le Syno au préalable), ou bien le créer à la main en prenant soin de convertir les  mot de passe en encryption DES. Pour cela, nous pouvons utiliser le lien suivant (convertisseur en ligne) :
Htpasswd.crypt

b) Activation de la sécurité au sein du fichier squid.conf :

Les lignes suivantes devront être ajoutées :

# basic authentication
auth_param basic program /opt/libexec/ncsa_auth /opt/etc/squid/users
auth_param basic realm My Private Domain
auth_param basic children 5  
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive on

# authentication configuration:
acl myauth proxy_auth REQUIRED

http_access allow myauth

icp_access allow myauth

miss_access allow myauth


Voici donc le fichier squid.conf dans son entier avec l'ajout de la sécurité :

cache_mgr mon_adresse@gmail.com
visible_hostname mon_domaine.org
cache_mem 8 MB                 
cache_dir ufs /opt/var/squid/cache 100 16 256
negative_dns_ttl 10 second          
connect_timeout 60 second           
read_timeout 80 second
request_timeout 80 second
cache_access_log /opt/var/squid/logs/access.log
cache_log /opt/var/squid/logs/debug
cache_store_log /opt/var/squid/logs/storage
hierarchy_stoplist on
http_port 192.168.1.10:3128
icp_port 3128

# basic authentication
auth_param basic program /opt/libexec/ncsa_auth /opt/etc/squid/users
auth_param basic realm My Private Domain
auth_param basic children 5  
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive on

# Global ACL-Definitions (Access control lists)
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl all src 0.0.0.0/0.0.0.0
acl intern dst 192.168.1.0/255.255.255.0
# authentication configuration:
acl myauth proxy_auth REQUIRED
acl purge method PURGE
acl CONNECT method CONNECT
acl FTP proto FTP
always_direct allow FTP
acl Allowed_Ports port 80 99 443 21 563 488 777 210 1025-65535

http_access allow myauth
# allow direct ftp, all other redirect to parent
always_direct allow FTP
always_direct deny all
http_access deny all

icp_access allow myauth
icp_access deny all
miss_access allow myauth
miss_access deny all
always_direct allow intern

L'accès tous le monde a bien évidemment été supprimé.



Autre : Interdire l'accès aux autres ports que le port 80 :

# acl Allowed_Ports port 80 99 443 21 563 488 777 210 1025-65535
acl Safe_ports port 80                # http


http_access deny !Safe_ports



Autre : script pour reconstruction du cache :

Il arrive que le cache de Squid ne soit plus optimisé. Une tâche de maintenance qui permet la reconstruction de ce dernier n'est pas un luxe.

#!/bin/sh
         echo "arret de Squid"
    /opt/etc/init.d/S80squid stop
sleep 35
echo "reconstruction du cache Squid"
rm -rf /opt/var/squid/cache/*
squid -z
sleep 20
    /opt/etc/init.d/S80squid start
         echo "redemarrage de Squid"

Ce scipt peut être lancé via crontab.




Pour toutes questions concernent ce tuto, vous pouvez m'envoyer un email