Configurer, utiliser et tester des proxies (forward proxy) sous Linux.
Sujets associés : Proxy — Vue d’ensemble, Forward Proxy, Load Balancer vs Forward Proxy
Variables d’environnement proxy
La manière la plus universelle de configurer un proxy sur Linux : les variables d’environnement standard.
# Configurer le proxy pour la session courante
export http_proxy="http://proxy.exemple.com:3128"
export https_proxy="http://proxy.exemple.com:3128"
export ftp_proxy="http://proxy.exemple.com:3128"
# Proxy avec authentification
export http_proxy="http://utilisateur:motdepasse@proxy.exemple.com:3128"
export https_proxy="http://utilisateur:motdepasse@proxy.exemple.com:3128"
# Majuscules aussi reconnues par certains outils
export HTTP_PROXY="http://proxy.exemple.com:3128"
export HTTPS_PROXY="http://proxy.exemple.com:3128"
# Exclure des hôtes du proxy (pas de proxy pour ces destinations)
export no_proxy="localhost,127.0.0.1,192.168.0.0/16,*.interne.exemple.com"
export NO_PROXY="localhost,127.0.0.1,192.168.0.0/16"
# Vérifier les variables actives
env | grep -i proxy
# Supprimer la config proxy
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY no_proxy NO_PROXYRendre permanent (tous les utilisateurs)
# /etc/environment (lu au login)
sudo tee -a /etc/environment <<'EOF'
http_proxy="http://proxy.exemple.com:3128"
https_proxy="http://proxy.exemple.com:3128"
no_proxy="localhost,127.0.0.1,10.0.0.0/8"
EOF
# /etc/profile.d/proxy.sh (scripts shell)
sudo tee /etc/profile.d/proxy.sh <<'EOF'
export http_proxy="http://proxy.exemple.com:3128"
export https_proxy="http://proxy.exemple.com:3128"
export no_proxy="localhost,127.0.0.1"
EOFProxy pour APT (Debian/Ubuntu)
# /etc/apt/apt.conf.d/99proxy
sudo tee /etc/apt/apt.conf.d/99proxy <<'EOF'
Acquire::http::Proxy "http://proxy.exemple.com:3128";
Acquire::https::Proxy "http://proxy.exemple.com:3128";
EOF
# Ou passer en argument
sudo apt-get -o Acquire::http::Proxy="http://proxy.exemple.com:3128" updateProxy pour systemd (services)
# Ajouter le proxy à un service systemd
sudo systemctl edit docker
# Ajouter dans le fichier :
[Service]
Environment="HTTP_PROXY=http://proxy.exemple.com:3128"
Environment="HTTPS_PROXY=http://proxy.exemple.com:3128"
Environment="NO_PROXY=localhost,127.0.0.1"
sudo systemctl daemon-reload
sudo systemctl restart dockercurl avec proxy
# Proxy HTTP
curl -x http://proxy.exemple.com:3128 https://api.exemple.com/
# Proxy SOCKS5
curl --socks5 proxy.exemple.com:1080 https://api.exemple.com/
curl --socks5-hostname proxy.exemple.com:1080 https://api.exemple.com/
# Proxy avec authentification
curl -x http://user:pass@proxy.exemple.com:3128 https://api.exemple.com/
# Exclure du proxy
curl --noproxy "localhost,192.168.1.0/24" -x http://proxy:3128 https://api.exemple.com/
# Proxy via variable d'environnement (curl la respecte automatiquement)
export https_proxy="http://proxy.exemple.com:3128"
curl https://api.exemple.com/ # utilise le proxy automatiquement
# Ignorer la variable d'environnement proxy pour cette requête
curl --noproxy "*" https://api.exemple.com/wget avec proxy
# Via variable d'environnement
export https_proxy="http://proxy.exemple.com:3128"
wget https://exemple.com/fichier.zip
# En argument
wget -e "https_proxy=http://proxy.exemple.com:3128" https://exemple.com/fichier.zip
# Via ~/.wgetrc
echo "https_proxy=http://proxy.exemple.com:3128" >> ~/.wgetrc
echo "no_proxy=localhost,127.0.0.1" >> ~/.wgetrcProxy SOCKS5 via SSH (tunnel dynamique)
# Créer un proxy SOCKS5 local via SSH (port 1080)
ssh -D 1080 -f -N utilisateur@serveur-distant
# │ │ └── pas de commande distante (tunnel seulement)
# │ └───── en arrière-plan
# └─────────── dynamic port forwarding
# Utiliser ce tunnel SOCKS5
curl --socks5 localhost:1080 https://api.exemple.com/
export http_proxy="socks5://localhost:1080"
export https_proxy="socks5://localhost:1080"
# Vérifier que le tunnel est actif
ss -tnlp | grep 1080mitmproxy — inspection HTTPS en développement
mitmproxy est un proxy interceptant qui déchiffre et affiche le trafic HTTPS.
# Démarrer mitmproxy (interface TUI)
mitmproxy --listen-port 8080
# Mode web (navigateur)
mitmweb --listen-port 8080
# Mode script (headless)
mitmdump --listen-port 8080 -w capture.mitm
# Configurer le client pour utiliser mitmproxy
export http_proxy="http://localhost:8080"
export https_proxy="http://localhost:8080"
# Installer le certificat CA de mitmproxy (pour déchiffrer HTTPS)
# Le certificat est dans ~/.mitmproxy/mitmproxy-ca-cert.pem
sudo cp ~/.mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy.crt
sudo update-ca-certificates
# Capturer le trafic d'une commande spécifique
mitmdump --listen-port 8080 &
http_proxy=http://localhost:8080 https_proxy=http://localhost:8080 \
curl -k https://api.exemple.com/endpointTester la configuration proxy
# Vérifier si le proxy est joignable
nc -zv proxy.exemple.com 3128
# Tester une requête via le proxy
curl -v -x http://proxy.exemple.com:3128 https://google.com
# Vérifier quelle IP est vue par le serveur distant (avec/sans proxy)
curl https://api.ipify.org # sans proxy
curl -x http://proxy.exemple.com:3128 https://api.ipify.org # avec proxy
# Tester avec authentification proxy
curl -v -x http://user:pass@proxy.exemple.com:3128 https://google.com
# Déboguer les variables proxy actives
env | grep -i proxy
# Vérifier que no_proxy fonctionne
curl -v --noproxy "exemple-interne.com" https://exemple-interne.com/iptables REDIRECT — proxy transparent
Forcer du trafic vers un proxy sans configurer les clients (proxy transparent).
# Rediriger tout le trafic HTTP (port 80) vers mitmproxy (port 8080)
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 \
-j REDIRECT --to-port 8080
# Rediriger HTTPS (port 443) — nécessite SSL bumping (ex. Squid en mode SSL)
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 \
-j REDIRECT --to-port 8443
# Exclure la machine proxy elle-même (éviter boucle infinie)
sudo iptables -t nat -A PREROUTING -p tcp -m owner --uid-owner proxy \
-j RETURNEn relation avec
- Linux Réseau — Vue d’ensemble — index des commandes réseau Linux
- Forward Proxy — fonctionnement du proxy sortant
- Proxy — Vue d’ensemble — hub proxy : types, usages, outils
- HTTP et APIs — Commandes — curl avec proxy pour les requêtes API
- SSH — Commandes — tunnel SOCKS5 via SSH
- Firewall et iptables — REDIRECT et DNAT pour proxy transparent
- Analyse de trafic — tcpdump pour voir le trafic proxy