• Home  / 
  • Docker
  •  /  Monter un proxy en 30 secondes avec #Docker #Squid

Monter un proxy en 30 secondes avec #Docker #Squid

By KrustyHack / last year
Squid Proxy Now

Ay !

Qui n’a jamais eu besoin d’un ou plusieurs proxies ? Perso je suis un gros consommateur de proxies et souvent mon abonnement MyPrivateProxy ne me suffit pas. J’ai bien des listes de proxies semi-dédiés mais celles-ci ne sont pas top top et des fois j’ai besoin d’un proxy dédié « on the fly » pour utiliser avec mes tools de SEO ou de Pentest.

Je vais donc vous montrer comme lancer un petit proxy avec Docker Squid tout con sur un VPS Cloud OVH en quelques secondes.

Docker Squid, déployer un proxy 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 maison 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 !

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
Télécharger le gist

 

 

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)
  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).

OVH - Cloud - Options avancées

Nos 2 serveurs sont prêts à être lancés

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

OVH - Cloud - Serveurs démarrés

Nos 2 serveurs sont up en quelques secondes, et donc nos proxies aussi !

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://www.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://www.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.

Après il est bien évidemment possible de mieux paramétrer Squid. Moi j’ai carrément fait ça à la barbare ce qui ouvre nos deux proxies au public. 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 comments

Leave a comment: