Connexion Inscription

Votre serveur proxy sur un VPS : installer 3proxy et tester

Guide pour débutants : installez 3proxy sur un VPS avec un script bash prêt, testez l'accès de l'extérieur, connectez le navigateur. Et quand s'en passer.

Petit serveur domestique à la lumière chaude avec un câble partant vers une ville de nuit

Vous pouvez monter un serveur proxy personnel même sans avoir jamais ouvert une console Linux : l'installateur lui-même tient en une minute. Voici le guide pas à pas : louer un VPS, lancer un script prêt, tester l'accès de l'extérieur et connecter le navigateur. Le résultat est une IP permanente avec HTTP et SOCKS5 sous identifiant et mot de passe.

À la fin de l'article, nous verrons pour quelles tâches un serveur personnel perd face à un service. Nous vendons nous-mêmes des proxies, alors nous le disons franchement.

Ce qu'il vous faut

QuoiLequel
ServeurVPS avec 1 cœur et 512 Mo de mémoire : l'offre la plus petite suffit à un proxy personnel
SystèmeUbuntu 22.04 ou 24.04, Debian 12 ou 13 propres
Accèsutilisateur root et mot de passe du courriel de l'hébergeur
TerminalPowerShell sous Windows 10 et 11, Terminal sous macOS et Linux

Choisissez d'emblée le pays du VPS selon la tâche : l'adresse du proxy sera de ce pays, et on ne la change qu'en passant sur un autre serveur.

Nous avons lancé toutes les commandes de cet article sur des images propres des quatre systèmes du tableau, avec 512 Mo de mémoire et un cœur chacun. L'installation a pris de 10 à 31 secondes, et 3proxy sans charge occupait moins de 8 Mo.

Nous allons installer 3proxy. Un seul programme sert HTTP et SOCKS5, consomme peu de mémoire et se règle par un fichier. Squid fonctionne seulement en proxy HTTP et Dante seulement en SOCKS, il faudrait donc régler deux services. Les dépôts d'Ubuntu n'ont pas de paquet 3proxy, le script prend donc le paquet officiel du développeur et vérifie sa somme de contrôle.

Étape 1. Connectez-vous au serveur

Ouvrez un terminal et saisissez la commande avec l'adresse du courriel de l'hébergeur :

Votre ordinateur
ssh root@SERVER_IP

À la première connexion, le système demande s'il faut faire confiance au serveur : tapez yes. Le mot de passe ne s'affiche pas à la saisie, c'est voulu. Tapez-le à l'aveugle ou collez-le et appuyez sur Entrée. Si l'hébergeur a donné un utilisateur ordinaire au lieu de root, lancez sudo -i après la connexion.

Étape 2. Lancez l'installateur

Cliquez sur Copier, collez tout le bloc dans la fenêtre du terminal et appuyez sur Entrée. Il crée le fichier et le lance tout seul.

Serveur : installation
cat > install-proxy.sh <<'SCRIPT'
#!/usr/bin/env bash
# Installs 3proxy with HTTP and SOCKS5, login and password required.
# Ubuntu 22.04+ or Debian 12+. Run as root on a clean server.
set -euo pipefail

VERSION="1.0.2"
CONF_DIR="/usr/local/3proxy/conf"

if [ "$(id -u)" -ne 0 ]; then
  echo "Run as root: sudo bash install-proxy.sh"
  exit 1
fi

case "$(dpkg --print-architecture)" in
  amd64) ARCH="x86_64"; SHA="d42c0a15ab7bc2e129de2e72fedfb6c908bfc1f7b7f4be15368c56eeb21e9a08" ;;
  arm64) ARCH="arm64";  SHA="e7b8f21bc527b30e9b7fd2ebd5889a11eb14889bb45f71074c94c865fc1b2556" ;;
  *) echo "Only amd64 and arm64 servers are supported"; exit 1 ;;
esac

echo "==> Installing packages"
export DEBIAN_FRONTEND=noninteractive NEEDRESTART_SUSPEND=1
APT="apt-get -o DPkg::Lock::Timeout=300"
$APT update -qq
$APT install -y -qq curl openssl ca-certificates >/dev/null

DEB="/tmp/3proxy-$VERSION.$ARCH.deb"
curl -fsSL -o "$DEB" "https://github.com/3proxy/3proxy/releases/download/$VERSION/3proxy-$VERSION.$ARCH.deb"
echo "$SHA  $DEB" | sha256sum -c --quiet -
$APT install -y -qq "$DEB" >/dev/null
rm -f "$DEB"

echo "==> Creating login, password and ports"
LOGIN="user$(openssl rand -hex 3)"
PASS="$(openssl rand -hex 12)"
HTTP_PORT="$(shuf -i 20000-59999 -n 1)"
SOCKS_PORT="$((HTTP_PORT + 1))"

echo "$LOGIN:CL:$PASS" > "$CONF_DIR/passwd"

cat > "$CONF_DIR/3proxy.cfg" <<EOF
nscache 65536
nserver 1.1.1.1
nserver 8.8.8.8
log /logs/3proxy.log D
rotate 7
maxconn 200
users \$/conf/passwd
auth strong
deny * * 127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,169.254.0.0/16,100.64.0.0/10
deny * * * 25
allow *
proxy -a -p$HTTP_PORT
socks -p$SOCKS_PORT
EOF

chown proxy:proxy "$CONF_DIR/passwd" "$CONF_DIR/3proxy.cfg"
chmod 640 "$CONF_DIR/passwd" "$CONF_DIR/3proxy.cfg"

if command -v ufw >/dev/null && ufw status | grep -q "Status: active"; then
  echo "==> Opening ports in ufw"
  ufw allow "$HTTP_PORT/tcp" >/dev/null
  ufw allow "$SOCKS_PORT/tcp" >/dev/null
fi

echo "==> Starting the service"
systemctl enable 3proxy >/dev/null 2>&1
systemctl restart 3proxy
sleep 2

if ! systemctl is-active --quiet 3proxy; then
  echo "3proxy did not start. Details: journalctl -u 3proxy -n 30"
  exit 1
fi

SERVER_IP=""
for URL in https://ifconfig.me https://api.ipify.org; do
  SERVER_IP="$(curl -s --max-time 20 -x "http://$LOGIN:$PASS@127.0.0.1:$HTTP_PORT" "$URL" || true)"
  [ -n "$SERVER_IP" ] && break
done

if [ -z "$SERVER_IP" ]; then
  echo "The proxy runs but its test request failed. Details: tail /usr/local/3proxy/logs/3proxy.log.*"
  exit 1
fi

umask 077
cat > /root/proxy.txt <<EOF
Server:     $SERVER_IP
HTTP port:  $HTTP_PORT
SOCKS port: $SOCKS_PORT
Login:      $LOGIN
Password:   $PASS

curl -x "http://$LOGIN:$PASS@$SERVER_IP:$HTTP_PORT" https://ifconfig.me
curl --socks5-hostname "$LOGIN:$PASS@$SERVER_IP:$SOCKS_PORT" https://ifconfig.me
bash check-proxy.sh $SERVER_IP $HTTP_PORT $SOCKS_PORT $LOGIN $PASS
EOF

echo
echo "Done. These details are saved in /root/proxy.txt"
echo
cat /root/proxy.txt
SCRIPT
bash install-proxy.sh

Voici ce que fait le script, dans l'ordre :

  • installe le paquet 3proxy et vérifie que le fichier a été téléchargé sans altération ;
  • génère un identifiant, un mot de passe et deux ports aléatoires de la plage haute, où les scanners regardent moins qu'en 3128 et 1080 ;
  • interdit la connexion sans identifiant et ferme l'accès du proxy aux adresses internes du serveur et aux adresses de service du cloud ;
  • bloque le port de messagerie 25, pour qu'en cas de fuite du mot de passe les spammeurs ne mettent pas votre adresse sur des listes noires ;
  • retire des en-têtes HTTP les informations sur le client : le site ne verra pas votre vraie IP ;
  • active le démarrage automatique après redémarrage et ouvre les ports dans ufw si ce pare-feu est actif.

À la fin apparaît un rapport comme celui-ci, avec vos valeurs :

Exemple de sortie
Done. These details are saved in /root/proxy.txt

Server:     203.0.113.10
HTTP port:  34512
SOCKS port: 34513
Login:      user4f2a9c
Password:   8c1f0e77a2d94b36c5e1a07d

curl -x "http://user4f2a9c:8c1f0e77a2d94b36c5e1a07d@203.0.113.10:34512" https://ifconfig.me
curl --socks5-hostname "user4f2a9c:8c1f0e77a2d94b36c5e1a07d@203.0.113.10:34513" https://ifconfig.me
bash check-proxy.sh 203.0.113.10 34512 34513 user4f2a9c 8c1f0e77a2d94b36c5e1a07d

Copiez ces données chez vous. Sur le serveur, elles sont dans le fichier /root/proxy.txt, et la commande cat /root/proxy.txt les réaffiche.

Étape 3. Ouvrez les ports dans le panneau de l'hébergeur

Certains hébergeurs placent devant le serveur leur propre pare-feu réseau, réglé dans l'espace client. Si vous en avez un, autorisez-y les deux ports en TCP. Si le panneau n'a pas cette section, vous pouvez sauter cette étape.

Étape 4. Testez le proxy de l'extérieur

Le test se fait depuis votre ordinateur : vous voyez ainsi le serveur avec les yeux du monde extérieur. Sous Linux et macOS, collez le bloc dans un terminal : il crée le fichier check-proxy.sh. Collez ensuite et lancez la dernière ligne du rapport de l'installateur, qui contient déjà vos données.

Votre ordinateur : contrôle
cat > check-proxy.sh <<'SCRIPT'
#!/usr/bin/env bash
# Usage: bash check-proxy.sh HOST HTTP_PORT SOCKS_PORT LOGIN PASSWORD
# Run it from your own computer: only an outside check shows the real picture.
set -u
if [ "$#" -ne 5 ]; then
  echo "Usage: bash check-proxy.sh HOST HTTP_PORT SOCKS_PORT LOGIN PASSWORD"
  exit 2
fi
HOST="$1"; HTTP_PORT="$2"; SOCKS_PORT="$3"; LOGIN="$4"; PASS="$5"
URL="https://ifconfig.me"
FAILED=0

pass() { echo "[ OK ] $1"; }
fail() { echo "[FAIL] $1"; FAILED=$((FAILED + 1)); }
info() { echo "[INFO] $1"; }

MY_IP=$(curl -4 -s --max-time 10 "$URL" || curl -4 -s --max-time 10 https://api.ipify.org || true)
info "Your own IP: ${MY_IP:-unknown}"

HTTP_IP=$(curl -s --max-time 20 -x "http://$LOGIN:$PASS@$HOST:$HTTP_PORT" "$URL" || true)
if [ -n "$HTTP_IP" ]; then pass "HTTP proxy works, exit IP $HTTP_IP"; else fail "HTTP proxy gave no answer"; fi

SOCKS_IP=$(curl -s --max-time 20 --socks5-hostname "$LOGIN:$PASS@$HOST:$SOCKS_PORT" "$URL" || true)
if [ -n "$SOCKS_IP" ]; then pass "SOCKS5 proxy works, exit IP $SOCKS_IP"; else fail "SOCKS5 proxy gave no answer"; fi

if [ -n "$HTTP_IP" ] && [ "$HTTP_IP" = "$MY_IP" ]; then
  info "Exit IP equals your IP: fine on the server itself, a problem anywhere else"
fi

CODE=$(curl -s --max-time 20 -o /dev/null -w "%{http_code}" -x "http://$HOST:$HTTP_PORT" "http://ifconfig.me" || true)
if [ "$CODE" = "407" ]; then pass "HTTP without login is refused (407)"; else fail "HTTP without login returned $CODE, expected 407"; fi

CODE=$(curl -s --max-time 20 -o /dev/null -w "%{http_code}" -x "http://$LOGIN:wrong-$PASS@$HOST:$HTTP_PORT" "http://ifconfig.me" || true)
if [ "$CODE" = "407" ]; then pass "HTTP with a wrong password is refused (407)"; else fail "HTTP with a wrong password returned $CODE, expected 407"; fi

if [ -n "$SOCKS_IP" ]; then
  if curl -s --max-time 20 -o /dev/null --socks5-hostname "$HOST:$SOCKS_PORT" "$URL"; then
    fail "SOCKS5 lets you in without a login: the proxy is open"
  else
    pass "SOCKS5 without login is refused"
  fi
fi

if [ -n "$MY_IP" ] && [ -n "$HTTP_IP" ] && [ "$HTTP_IP" != "$MY_IP" ]; then
  if curl -s --max-time 20 -x "http://$LOGIN:$PASS@$HOST:$HTTP_PORT" "http://ifconfig.me/all" | grep -qF "$MY_IP"; then
    fail "The site can see your own IP in the proxy headers"
  else
    pass "Your own IP is not visible in the headers"
  fi
fi

echo
if [ "$FAILED" -eq 0 ]; then
  echo "All checks passed."
else
  echo "Failed checks: $FAILED"
  exit 1
fi
SCRIPT

Si tout est bien réglé, la sortie ressemble à ceci :

Exemple de sortie
[INFO] Your own IP: 198.51.100.7
[ OK ] HTTP proxy works, exit IP 203.0.113.10
[ OK ] SOCKS5 proxy works, exit IP 203.0.113.10
[ OK ] HTTP without login is refused (407)
[ OK ] HTTP with a wrong password is refused (407)
[ OK ] SOCKS5 without login is refused
[ OK ] Your own IP is not visible in the headers

All checks passed.

Sous Windows, le script tourne dans Git Bash. Sans lui, deux commandes PowerShell suffisent, et chacune doit afficher l'adresse de votre serveur. Écrivez bien curl.exe : un simple curl dans PowerShell appelle une autre commande.

PowerShell
curl.exe -x "http://LOGIN:PASSWORD@HOST:HTTP_PORT" https://ifconfig.me
curl.exe --socks5-hostname "LOGIN:PASSWORD@HOST:SOCKS_PORT" https://ifconfig.me

Si le test échoue

Ce que vous voyezQuel est le problèmeQue faire
Les deux lignes « gave no answer », code 000ports fermés sur le chemin du serveurouvrez-les dans le panneau de l'hébergeur et dans ufw, vérifiez l'adresse du serveur
Le proxy n'a répondu que sur le serveur lui-mêmepare-feu de l'hébergeur ou du fournisseurrépétez l'étape 3, écrivez au support de l'hébergeur
Code 407 avec le bon mot de passefaute dans l'identifiant ou le mot de passe, ou votre IP n'est pas autoriséecomparez avec /root/proxy.txt et la ligne allow des réglages
SOCKS5 laisse entrer sans identifiantréglages modifiés à la mainrelancez l'installateur, de nouvelles données seront délivrées
L'installateur affiche « did not start »le service n'a pas démarrévoyez la cause : journalctl -u 3proxy -n 30
L'installateur affiche « test request failed »le service tourne, mais le serveur ne sort pas sur internet par le proxyvoyez le journal : tail /usr/local/3proxy/logs/3proxy.log.*
Erreur de dépendances à l'installationsystème plus ancien qu'Ubuntu 22.04 et Debian 12réinstallez un OS récent dans le panneau de l'hébergeur

Étape 5. Connectez le proxy

Dans le navigateur, utilisez le port HTTP : Chrome et Firefox sans extensions ne savent pas saisir identifiant et mot de passe pour SOCKS5. Où mettre quoi est expliqué dans l'article sur la configuration manuelle du proxy. Les programmes acceptent en général une ligne du type IP:PORT:LOGIN:PASSWORD, et s'il leur faut un autre format, le convertisseur de proxy la réécrit.

Connecté ? Ouvrez le test d'anonymat à travers le proxy : la page montre quelle adresse et quels en-têtes voit un site. En quoi HTTP diffère de SOCKS5 et quel port prendre pour tel logiciel est expliqué dans la comparaison des protocoles.

Comment gérer le serveur

Toutes les commandes ci-dessous s'exécutent sur le serveur. État du service et journal des connexions du jour. 3proxy crée un nouveau fichier chaque jour et les garde une semaine. Sortez du journal avec Ctrl+C :

Serveur
systemctl status 3proxy --no-pager
tail -f "$(ls -t /usr/local/3proxy/logs/* | head -1)"

Changer le mot de passe. Mettez l'identifiant du rapport à la place de LOGIN. La commande affiche le nouveau mot de passe, l'ancien cesse aussitôt de fonctionner, et /root/proxy.txt garde les anciennes données :

Serveur
NEW="$(openssl rand -hex 12)"
sed -i "s/^LOGIN:CL:.*/LOGIN:CL:$NEW/" /usr/local/3proxy/conf/passwd
systemctl restart 3proxy
cat /usr/local/3proxy/conf/passwd

Ajouter un second utilisateur :

Serveur
echo "friend:CL:$(openssl rand -hex 12)" >> /usr/local/3proxy/conf/passwd
systemctl restart 3proxy
cat /usr/local/3proxy/conf/passwd

Autoriser uniquement votre adresse, si elle est permanente. Mettez votre IP à la place de YOUR_IP. Depuis d'autres adresses, le proxy répondra par le code 407 même avec le bon mot de passe :

Serveur
sed -i 's/^allow \*$/allow * YOUR_IP/' /usr/local/3proxy/conf/3proxy.cfg
systemctl restart 3proxy

Tout supprimer quand le serveur n'est plus nécessaire :

Serveur
systemctl disable --now 3proxy
apt-get purge -y 3proxy </dev/null
rm -rf /usr/local/3proxy /etc/3proxy /root/proxy.txt

Liste de sécurité

Un proxy avec une erreur de réglage d'accès devient public. Les scanners parcourent sans cesse les adresses des hébergeurs, et un port ouvert arrive vite dans les listes gratuites : suivent le trafic d'autrui, le canal dévoré et les plaintes à l'hébergeur. Le script ferme l'essentiel, le reste vous revient :

  1. Activez le pare-feu avec la commande ci-dessous, en mettant les ports du rapport : vers l'extérieur ne restent que SSH et le proxy.
  2. Activez les mises à jour automatiques du système. 3proxy est un paquet séparé, vérifiez donc tous les quelques mois si une nouvelle version est sortie.
  3. Rappelez-vous que l'identifiant et le mot de passe du proxy circulent sans chiffrement. Sur un réseau public, un voisin peut les intercepter, donc dans les cafés et aéroports connectez-vous au proxy par VPN ou limitez l'accès à votre IP. Plus de détails dans l'analyse du Wi-Fi public.
  4. Une fois par mois, parcourez le journal à la recherche d'adresses inconnues et vérifiez l'IP du serveur dans les listes noires RBL.
Serveur
DEBIAN_FRONTEND=noninteractive apt-get install -y ufw unattended-upgrades </dev/null
printf 'APT::Periodic::Update-Package-Lists "1";\nAPT::Periodic::Unattended-Upgrade "1";\n' > /etc/apt/apt.conf.d/20auto-upgrades
ufw allow 22/tcp
ufw allow HTTP_PORT/tcp
ufw allow SOCKS_PORT/tcp
ufw --force enable

Si votre SSH est sur un autre port, remplacez 22 avant le lancement, sinon vous perdrez l'accès au serveur.

Ce que vous gagnez et ce que vous perdez

Votre VPSService de proxy
Contrôle et journauxentièrement à vouscôté opérateur
Adressesune, quelques-unes au pluspools de milliers d'adresses
Type d'adressecentre de données de l'hébergeurdu centre de données au domestique et cellulaire
Localisationle pays de votre VPSchoix du pays, ville en résidentiel
Rotationnon, l'adresse est permanentepar requête ou par session
Maintenancemises à jour et disponibilité à votre chargeincluse dans le prix
Prix d'entréelocation du VPS plus tempsdès un abonnement à l'heure

Le plus important ici est la ligne du type d'adresse. Un VPS vit dans un sous-réseau d'hébergement, et tout site le voit par le système autonome : vérifiez votre serveur par la recherche ASN. Les marketplaces et réseaux sociaux se méfient de ces plages, et un serveur personnel n'y change rien. Son adresse ne deviendra ni domestique ni cellulaire.

Côté argent non plus, pas d'illusions. Un VPS bon marché partage processeur et canal avec ses voisins, les baisses de vitesse du soir y sont donc normales. Beaucoup d'hébergeurs limitent le trafic, et le dépassement coûte nettement plus qu'un giga chez un service de proxy.

Quand un proxy personnel se justifie

  • IP permanente pour vos services. Panneaux d'administration et internes ouverts depuis une seule adresse : un VPS la donne à bas prix et pour longtemps.
  • Tunnel entre vos machines. Bureau et serveur reliés directement, et vous décidez de ce qui passe par ce point.
  • Exigences sur les journaux. Les traces de trafic doivent rester chez vous seul.
  • Apprentissage. Monter, casser, réparer : c'est le plus rapide pour comprendre comment un proxy fonctionne de l'intérieur.

Quand il faut un service

Un serveur personnel sort du jeu dès qu'une tâche demande plus d'une adresse, de la rotation ou un type d'IP précis : entretenir des centaines de VPS coûte plus que toute offre. Le scraping, le suivi des prix, le travail sur les comptes et le contrôle des publicités vivent sur des pools. Nos offres leur conviennent : packs avec liste ip:port et adresses résidentielles avec choix du pays. Beaucoup gardent les deux : un serveur personnel pour accéder à leurs systèmes et un pool de service pour le travail.

À lire ensuite

Trois tunnels lumineux de formes différentes convergent vers une arche dans un centre de données sombre

Proxy

Types de serveurs proxy : en quoi HTTP diffère de SOCKS5

Le protocole décide comment le logiciel passe la requête au proxy : un proxy HTTP la lit entière, CONNECT ouvre un tunnel pour TLS et SOCKS5 transmet le flux et gère UDP. Nous voyons les quatre…

8 min de lecture
Carte sombre en relief de l'Europe avec des fils lumineux entre les villes

Proxy

Proxies en Europe : qui a besoin d'une IP européenne

Les sites lient de plus en plus le contenu au pays du visiteur : prix, résultats, stock et annonces diffèrent entre Berlin et Paris. Nous passons en revue les tâches qui exigent une adresse…

5 min de lecture

Tous les articles

Tarifs Prendre une heure offerte