Introduction#
Dans un environnement contrôlé, où selon la configuration un processus doit parfois passer par un proxy, parfois non, il n’est pas forcément simple de savoir si la configuration est correctement appliquée.
Un exemple est le package manager yum. On peut changer sa configuration proxy via l’édition de son fichier de configuration /etc/yum.conf.
[main]
gpgcheck=1
[...]
proxy=http://proxy.host:portMais cette configuration peut être remplacée par une seconde configuration au niveau des repos, via leur fichier dédié, tel que /etc/yum.repos.d/package.repo.
[package_name]
gpgcheck=0
enabled=1
[...]
proxy=http://proxy.host:portDe plus, yum appelle libcurl, qui laisse supposer que la configuration proxy par variable d’environnement fonctionne.
$ strace yum install package 2>&1 | grep -i curl
openat(AT_FDCWD, "/lib64/libcurl.so.4", O_RDONLY|O_CLOEXEC) = 3"
^CCe qui est discuté dans un précédent article1 devrait donc être pris en compte par yum.
→ Mais comment savoir rapidement où notre processus se connecte, et ainsi en déduire si la configuration de notre système est bonne ?
Solution#
Se baser sur tcpdump peut être utile en filtrant par hostname.
$ tcpdump dst example.orgmais pour s’assurer une pleine visibilité de ce qui se passe au niveau du processus, la commande strace nous propose exactement ce qu’il nous faut.
$ strace -f -tt -T -s 256 -yy -e trace=connect command 2>&1| grep connectavec la description des options suivante :
-f: suivi des processus enfants,-tt: affichage du timestamp pour chaque appel système,-T: affichage du temps passé dans chaque appel système,-s 256: afficage plus verbeux,-yy: affichage des détails sockets et file descriptor,-e trace=connect: suivi des connexions.
dans ce cas d’exemple,
$ strace -f -tt -T -s 256 -yy -e trace=connect yum install package 2>&1 | grep connect
[...]
11:18:57.000889 connect(5<TCP:[101416]>, {sa_family=AF_INET, sin_port=htons(443), sin_addr=inet_addr("10.0.1.1")}, 16) =
[...]