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.
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 !
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:
- On installe Docker
- On prépare le dossier du container
- On récupère une conf par défaut pour Squid (attention elle autorise toutes les IPs à passer par le proxy privé)
- 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.
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 !
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 ?
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`.