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.

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
| Quoi | Lequel |
|---|---|
| Serveur | VPS avec 1 cœur et 512 Mo de mémoire : l'offre la plus petite suffit à un proxy personnel |
| Système | Ubuntu 22.04 ou 24.04, Debian 12 ou 13 propres |
| Accès | utilisateur root et mot de passe du courriel de l'hébergeur |
| Terminal | PowerShell 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 :
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.
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.shVoici 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 :
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 8c1f0e77a2d94b36c5e1a07dCopiez 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.
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
SCRIPTSi tout est bien réglé, la sortie ressemble à ceci :
[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.
curl.exe -x "http://LOGIN:PASSWORD@HOST:HTTP_PORT" https://ifconfig.me
curl.exe --socks5-hostname "LOGIN:PASSWORD@HOST:SOCKS_PORT" https://ifconfig.meSi le test échoue
| Ce que vous voyez | Quel est le problème | Que faire |
|---|---|---|
| Les deux lignes « gave no answer », code 000 | ports fermés sur le chemin du serveur | ouvrez-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ême | pare-feu de l'hébergeur ou du fournisseur | répétez l'étape 3, écrivez au support de l'hébergeur |
| Code 407 avec le bon mot de passe | faute dans l'identifiant ou le mot de passe, ou votre IP n'est pas autorisée | comparez avec /root/proxy.txt et la ligne allow des réglages |
| SOCKS5 laisse entrer sans identifiant | réglages modifiés à la main | relancez 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 proxy | voyez le journal : tail /usr/local/3proxy/logs/3proxy.log.* |
| Erreur de dépendances à l'installation | système plus ancien qu'Ubuntu 22.04 et Debian 12 | ré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 :
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 :
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/passwdAjouter un second utilisateur :
echo "friend:CL:$(openssl rand -hex 12)" >> /usr/local/3proxy/conf/passwd
systemctl restart 3proxy
cat /usr/local/3proxy/conf/passwdAutoriser 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 :
sed -i 's/^allow \*$/allow * YOUR_IP/' /usr/local/3proxy/conf/3proxy.cfg
systemctl restart 3proxyTout supprimer quand le serveur n'est plus nécessaire :
systemctl disable --now 3proxy
apt-get purge -y 3proxy </dev/null
rm -rf /usr/local/3proxy /etc/3proxy /root/proxy.txtListe 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 :
- 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.
- 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.
- 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.
- Une fois par mois, parcourez le journal à la recherche d'adresses inconnues et vérifiez l'IP du serveur dans les listes noires RBL.
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 enableSi 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 VPS | Service de proxy | |
|---|---|---|
| Contrôle et journaux | entièrement à vous | côté opérateur |
| Adresses | une, quelques-unes au plus | pools de milliers d'adresses |
| Type d'adresse | centre de données de l'hébergeur | du centre de données au domestique et cellulaire |
| Localisation | le pays de votre VPS | choix du pays, ville en résidentiel |
| Rotation | non, l'adresse est permanente | par requête ou par session |
| Maintenance | mises à jour et disponibilité à votre charge | incluse dans le prix |
| Prix d'entrée | location du VPS plus temps | dè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

Proxies en Chine : qui a besoin d'une IP chinoise, pourquoi
Le segment chinois du web a ses propres règles, et le regarder de l'extérieur ne sert presque à rien : certains sites ne répondent qu'aux adresses de Chine, et les prix et résultats diffèrent du…
5 min de lecture
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
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