Hop, un article aide mémoire qui reprend quelques commandes (glanées sur
internet) pour analyser un problème de proxying.
Curl#
| Commande |
Description |
curl -v http://backend:8080/ |
Tester une requête HTTP avec le détail de la connexion |
curl -vk https://frontend.example.com/ |
Tester HTTPS en ignorant la validation TLS |
curl -I http://frontend.example.com/ |
Récupérer uniquement les headers HTTP |
curl -H 'Host: example.com' http://127.0.0.1/ |
Tester le routage HAProxy avec un Host spécifique |
curl --resolve example.com:443:127.0.0.1 https://example.com/ |
Tester un domaine vers une IP précise tout en conservant SNI/Host |
curl -w '\nDNS:%{time_namelookup} CONNECT:%{time_connect} TLS:%{time_appconnect} TTFB:%{time_starttransfer} TOTAL:%{time_total}\n' -o /dev/null -s https://example.com/ |
Mesurer les différentes latences d’une requête |
curl --http1.1 -v https://example.com/ |
Forcer HTTP/1.1 pour isoler un problème HTTP/2 |
curl --http2 -v https://example.com/ |
Tester explicitement HTTP/2 |
curl -H 'Connection: close' -v http://frontend/ |
Tester le comportement sans keep-alive |
curl -X OPTIONS -v https://example.com/ |
Diagnostiquer les requêtes CORS/preflight |
curl -H 'X-Forwarded-For: 1.2.3.4' -v http://frontend/ |
Tester la gestion des headers de forwarding |
Certificat#
| Commande |
Description |
openssl s_client -connect example.com:443 -servername example.com |
Inspecter la négociation TLS et le certificat |
openssl s_client -connect 127.0.0.1:443 -servername example.com -showcerts |
Vérifier TLS/SNI directement sur HAProxy |
Connectivité et écoute d’un port#
| Commande |
Description |
nc -vz backend 8080 |
Vérifier qu’un port backend est accessible |
nc -v backend 8080 |
Ouvrir une connexion TCP brute vers le backend |
timeout 3 bash -c '</dev/tcp/backend/8080' |
Tester rapidement l’accessibilité TCP d’un port |
ss -lntp |
Voir les ports TCP en écoute et les processus associés |
ss -ntp |
Inspecter les connexions TCP actives |
ss -nt state established |
Lister les connexions TCP établies |
tcpdump -ni any port 443 |
Capturer le trafic entrant/sortant sur HTTPS |
tcpdump -ni any host 10.0.0.10 and port 8080 |
Capturer le trafic vers un backend précis |
tcpdump -ni any -s0 -w /tmp/haproxy.pcap port 443 |
Enregistrer une capture PCAP pour analyse Wireshark |
tcpdump -ni any 'tcp[tcpflags] & tcp-rst != 0' |
Repérer les TCP RST |
ip route |
Vérifier la table de routage |
ip addr |
Inspecter les interfaces et adresses IP |
ip neigh |
Vérifier la résolution ARP/NDP des voisins |
traceroute backend |
Identifier le chemin réseau vers un backend |
tracepath backend |
Tester le chemin réseau et la MTU |
Résolution de nom#
| Commande |
Description |
dig +short example.com |
Vérifier la résolution DNS |
dig example.com |
Inspecter en détail la réponse DNS |
getent hosts example.com |
Tester la résolution utilisée par le système |
HAProxy#
| Commande |
Description |
haproxy -c -f /etc/haproxy/haproxy.cfg |
Valider la configuration HAProxy |
haproxy -vv |
Afficher la version, options de build et fonctionnalités |
systemctl status haproxy |
Vérifier l’état du service HAProxy |
journalctl -u haproxy -f |
Suivre les logs HAProxy en temps réel |
journalctl -u haproxy --since "10 min ago" |
Examiner les logs récents |
tail -f /var/log/haproxy.log |
Suivre le trafic/logs en temps réel |
curl http://127.0.0.1:8404/stats |
Consulter les statistiques HAProxy si l’endpoint est configuré |
curl -s http://127.0.0.1:8404/stats\;csv |
Récupérer les statistiques HAProxy au format CSV |
socat stdio /run/haproxy/admin.sock |
Se connecter à la socket d’administration HAProxy |
show stat |
Afficher les stats (à utiliser avec socat) |
show servers state |
Afficher l’état des serveurs (à utiliser avec socat) |
show info |
Afficher les info (à utiliser avec socat) |
ping -c 4 backend |
Vérifier la connectivité IP de base |
strace -p $(pidof haproxy) -f -e trace=network |
Observer les appels réseau d’un HAProxy en fonctionnement |
lsof -nP -iTCP -sTCP:ESTABLISHED |
Associer les connexions TCP aux processus |