Table des matières

Squid, le proxy

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 www/squid et 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:

/usr/local/etc/squid/squid.conf
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.

/etc/pf.conf
pass in quick on $ext_if from <copains> 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 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:

/usr/local/etc/squid/squid.conf
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

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:

proxy.env
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:

Pour évitez qu'ils ne grossissent, demandez régulièrement une rotation des journaux

crontab
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:

newsyslog.d/squid.conf
*/var/log/squid/*log squid:squid 640 10 * @T00 CJG /var/run/squid/squid.pid SIGUSR1
squid.conf
logfile_rotate 0