Monter un proxy privé Squid en 30 secondes sous Docker

Photo of author
par KrustyHack
publié le
mis à jour le

Qui n’a jamais eu besoin d’un ou plusieurs proxies ? Perso je suis un gros consommateur de proxies et souvent les providers externes ne sont pas terribles. J’ai bien des listes de proxies semi-dédiés mais celles-ci ne sont pas top et des fois j’ai besoin d’un proxy dédié “on the fly” pour utiliser avec mes tools de SEO ou pour du Pentest.

Je vais donc vous montrer comme lancer un petit proxy avec Docker et Squid sur un VPS en quelques secondes.

Warning
Ce contenu date un peu, il est possible que les éléments présentés aient changés depuis.

Docker Squid, déployer un proxy privé en 30 secondes

Squid est un proxy de cache web qui supporte les protocoles HTTP, HTTPS, FTP, … Il réduit la bande passante et améliore les temps de réponse en mettant en cache puis en réutilisant les pages web requêtées. Squid propose un système ACL complet et est un bon accelerateur serveur. Il est disponible sur la plupart des systèmes d’exploitations et est sous licence GNU GPL.

Ici, nous allons l’utiliser dans un container Docker que l’on va démarrer sur une machine VPS Cloud OVH, ce qui va nous permettre de déployer un petit proxy privé en 30 secondes.

Préparation du script de démarrage

Ce qui est bien avec les serveur Cloud OVH c’est que l’on peut rajouter un script de démarrage qui est lancé lors du montage de la machine. On va y mettre l’installation de Docker ainsi que le lancement de notre container Docker Squid pour avoir tout le bordel prêt une fois le serveur up. Allez, c’est parti !

À LIRE  Supprimer des fichiers selon leur ancienneté sous Linux

Pour le script de démarrage, on va créer un petit bash des familles:

#!/bin/bash
# Install Docker
wget -O - https://get.docker.io |sh
# Prepare Squid conf
mkdir -p /home/docker/squid
wget -O /home/docker/squid/squid.conf https://gist.githubusercontent.com/KrustyHack/ae522e499ebede96effc39ab50ae40ee/raw/1262ff96528df31dd6a60808796a189e3f1249fe/squid-3.3.default.conf
# Run Squid Docker
docker run --name squid -d --restart=always \
  --publish 3128:3128 \
  --volume /home/docker/squid/squid.conf:/etc/squid3/squid.conf \
  --volume /home/docker/squid/cache:/var/spool/squid3 \
  sameersbn/squid:latest

Donc, pour résumer ce petit bash:

  1. On installe Docker
  2. On prépare le dossier du container
  3. On récupère une conf par défaut pour Squid (attention elle autorise toutes les IPs à passer par le proxy privé)
  4. On lance le container en montant nos volumes

On lance 2 serveurs sur notre Cloud OVH

Pour le test, je vais monter 2 instances cloud. On ajoute donc 2 serveurs Cloud en paramétrant les options avancées pour demander 2 instances et ajouter notre script d’installation bash (dispo juste au-dessus).

Et hop on lance le bordel. Quelques secondes plus tard, nos serveurs sont up:

On teste nos 2 proxies avec ProxyChains

Je ne vais pas vous expliquer toute l’installation de ProxyChains sur Linux mais un apt-get install proxychains devrait faire l’affaire. Une fois le bordel installé, modifiez le fichier /etc/proxychains.conf comme ceci (ultra minimaliste):

# proxychains.conf  VER 3.1
#
#        HTTP, SOCKS4, SOCKS5 tunneling proxifier with DNS.
# 
random_chain
chain_len = 2
tcp_read_time_out 15000
tcp_connect_time_out 8000
[ProxyList]
http x.x.x.x 3128
http y.y.y.y 3128

On peut maintenant balancer la purée et faire notre curl avec proxychains:

╭─root@krustyhack ~ 
╰─➤ proxychains curl https://nicolashug.com -I
ProxyChains-3.1 (http://proxychains.sf.net)
|R-chain|-<>-y.y.y.y:3128-<>-x.x.x.x:3128-<><>-167.114.231.64:443-<><>-OK
HTTP/1.1 200 OK
Server: nginx/1.9.12
Date: Fri, 15 Apr 2016 13:31:41 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: W3 Total Cache/0.9.4.1
Set-Cookie: PHPSESSID=fu2nhkr357p31sr3n0dr8h8lo1; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: wfvt_3578700187=5710ed3da3e6c; expires=Fri, 15-Apr-2016 14:01:41 GMT; Max-Age=1800; path=/; httponly
Link: <https://www.nicolashug.com/wp-json/>; rel="https://api.w.org/"
Link: <https://wp.me/4Y4C6>; rel=shortlink
Strict-Transport-Security: max-age=31536000

╭─root@krustyhack ~ 
╰─➤ proxychains curl https://nicolashug.com -I
ProxyChains-3.1 (http://proxychains.sf.net)
|R-chain|-<>-x.x.x.x:3128-<>-y.y.y.y:3128-<><>-167.114.231.64:443-<><>-OK
HTTP/1.1 200 OK
Server: nginx/1.9.12
Date: Fri, 15 Apr 2016 13:31:45 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: W3 Total Cache/0.9.4.1
Set-Cookie: PHPSESSID=r28tu9kqa38sqlhpd0k0hgbmd6; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: wfvt_3578700187=5710ed41a1808; expires=Fri, 15-Apr-2016 14:01:45 GMT; Max-Age=1800; path=/; httponly
Link: <https://www.nicolashug.com/wp-json/>; rel="https://api.w.org/"
Link: <https://wp.me/4Y4C6>; rel=shortlink
Strict-Transport-Security: max-age=31536000

Excellent, nos 2 proxies sont up et fonctionnent parfaitement ! Je les ai même testé sur ScrapeBox et ça tourne niquel.

À LIRE  Tester la vitesse d'un disque dur sur Linux

Après il est bien évidemment possible de mieux paramétrer Squid Proxy. Dans ce tutoriel, nos 2 proxies privés sont en fait visibles publiquement, il faut donc mettre en place une authentification. Allez voir les options de configuration de Squid pour affiner tout ça. Il y a également des histoires d’anonymat d’IP à bien paramétrer, ce que je n’ai pas fait ici.

A vos proxies et à la proxychains, heu pardon, à la prochaine !

2 réflexions au sujet de “Monter un proxy privé Squid en 30 secondes sous Docker”

  1. Hey c’est possible d’avoir un tuto sur la config de squid et du dns ? et comment utiliser les adresse depuis un autre computer ?

    Répondre
    • Ay,

      Pour la config de squid, j’ai rien fait de spécial, j’ai repris une config trouvée sur la doc officielle si je me rappelle bien. Par contre pour le DNS je ne vois pas à quoi tu fais référence ?

      Et pour utiliser les adresses depuis une autre machine j’ai mis un exemple à la fin du « tuto » avec proxychains. A savoir que tu peux également tester tes proxies avec curl : `curl -x MONIPPROXY ifconfig.co`.

      Répondre

Laisser un commentaire