====== Squid, le proxy ======
[[http://www.squid-cache.org/|squid]] est un serveur mandataire et un cache ''http/https''.
C'est plus simplement un service relai, qui va servir les pages web (entre autres) aux utilisateurs, plus rapidement grâce à son cache, tout en masquant leur adresse IP.
Il permet aussi de filtrer les requêtes.
===== Port =====
Installez les ports [[https://www.freshports.org/www/squid/|www/squid]] et [[https://www.freshports.org/www/squid-langpack/|www/squid-langpack]] pour la traduction des messages d'erreurs.
Vous disposez d'un couple utilisateur/groupe dédié à ce service: ''squid/squid''.
Configurez votre proxy selon vos besoins. Par exemple pour pour pouvoir servir des pages à des utilisateurs extérieurs au réseau local:
acl extnet src all
http_access allow extnet
# ...
http_access deny all
# ...
error_directory /usr/local/share/squid-langpack/fr
La dernière ligne va vous permettre d'afficher les erreurs en français.
Vous pouvez affiner la provenance de vos utilisateurs avec des plages d'IP, plutôt que ''all''.
Mais j'ai choisi de le faire au niveau du //pare-feu//. N'oubliez pas d'ouvrir le port sur lequel ''squid'' est à l'écoute, par défaut ''3128''.
pass in quick on $ext_if from port 3128 to me
Activez le service:
sysrc squid_enable=YES
sockstat -P tcp -p 3128 -l
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
squid squid 97316 11 tcp46 *:3128 *:*
==== Authentification ====
Dans ce cas, il est recommandé de demander une authentification à l'entrée. Il existe plusieurs extensions disponible.
La plus simple est d'utiliser un fichier //Apache http password//.
Installez un port capable de générer ce fichier, si vous n'avez pas déjà installé Apache, comme [[https://www.freshports.org/security/py-htpasswd/|security/py-htpasswd]].
Créer une base:
cd /var/squid
htpasswd.py -c user.db -b toto username xyz0zxy
chown squid:squid user.db
chmod 0640 user.db
Réglez ''squid'':
auth_param basic program /usr/local/libexec/squid/basic_ncsa_auth /var/squid/user.db
auth_param basic children 5
auth_param basic realm tekitoi
auth_param basic credentialsttl 4 hours
#
acl auth proxy_auth REQUIRED
http_access deny !auth
http_access allow extnet
http_access allow auth
===== Navigation =====
La plupart des systèmes offrent la possibilité de régler un proxy de manière générale. Sinon, vous pouvez le faire au niveau du navigateur en général.
Sous une session shell, exportez les variables suivantes:
export https_proxy=http://toto:xyz00zxy@monserveur:3128
export http_proxy=${https_proxy}
source proxy.env
curl -vs https://service-public.fr
* Uses proxy env variable https_proxy == 'http://toto:xxyyzz@[AA::BB::]:3128'
* Trying [AA::BB]:3128...
* Connected to AA::BB (AA::BB::) port 3128
* CONNECT tunnel: HTTP/1.1 negotiated
* allocate connect buffer
* Proxy auth using Basic with user 'toto'
* Establish HTTP proxy tunnel to service-public.fr:443
> CONNECT service-public.fr:443 HTTP/1.1
> Host: service-public.fr:443
> Proxy-Authorization: Basic xxxxxxxxxxxxxxxxxx
> User-Agent: curl/8.4.0
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 200 Connection established
===== journaux =====
[https://wiki.squid-cache.org/SquidFaq/SquidLogs||Ils] se trouvent dans ''/var/log/squid'':
* cache.log: fonctionnement interne
* access.log: réponse de ''squid'' aux requêtes
Pour évitez qu'ils ne grossissent, demandez régulièrement une rotation des journaux
0 0 * * * /usr/local/sbin/squid -k rotate
Actuellement c'est équivalent à ''kill -USR1 /var/run/squid/squid.pid''.
Vous pouvez aussi le demander via //newsyslog//, mais dans ce cas désactiver cette fonctionnalité au niveau de ''squid'':
*/var/log/squid/*log squid:squid 640 10 * @T00 CJG /var/run/squid/squid.pid SIGUSR1
logfile_rotate 0