Auteur Sujet: Firefox (sous Ubuntu) ouvre des connexion TCP puis fait un reset  (Lu 20232 fois)

0 Membres et 1 Invité sur ce sujet

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 078
  • Paris (75)
Firerox (sous Ubuntu) ouvre des connexion TCP puis fait un reset
« Réponse #60 le: 13 mai 2019 à 22:18:14 »
Par contre lorsque je tapais auditd -D j'avais comme retour "No rules" normal ?

oui c'est normal, -D enleve toutes les regles d'audit.

cat ton-resultat | grep firefox | cut -f5,6,13 -d' ' donne:

success=no exit=-111 pid=19555
success=no exit=-2 pid=19555
success=yes exit=0 pid=19555
success=yes exit=0 pid=19555
success=no exit=-2 pid=19603
success=no exit=-111 pid=19603
success=yes exit=0 pid=19603
success=yes exit=0 pid=19603

t'as donc 2 process firefox différents. Regarde avec le task manager de ff ou "pgrep -a firefox" a quoi ils correspondent (un c'est l'onglet de la page mais l'autre peut-etre une extension ou autre).

Le mieux est dans doute un strace avec tout les pid de firefox:

sudo strace -e trace=network $(pidof firefox |sed 's/\([0-9]*\)/\-p \1/g')

hwti

  • Abonné Orange Fibre
  • *
  • Messages: 2 237
  • Chambly (60)
Firerox (sous Ubuntu) ouvre des connexion TCP puis fait un reset
« Réponse #61 le: 13 mai 2019 à 22:35:52 »
Si je regarde la capture Firefox du post #4 (https://lafibre.info/navigateurs/firerox-reset/msg650511/#msg650511), je vois :
 - SYN, SYN+ACK, RST : le client semble fermer la connexion immédiatement
 - des connexions qui échangent des données, mais que le client ferme proprement avant la fin (Encrypted Altert + FIN,ACK), et sur lesquelles il continue de recevoir des données (donc il envoie des RST à chaque nouveau paquet reçu) : le serveur avait probablement tout envoyé avant que le client ferme la connexion (latence)

Le premier cas est le plus étrange, mais le second cas reste bizarre car je m'attendrais plus à un client qui garde la connexion ouverte pour faire plusieurs requêtes (comme c'est du TLS, je ne sais pas pourquoi il annule avant d'avoir reçu la totalité de la réponse du serveur).

vivien

  • Administrateur
  • *
  • Messages: 47 081
    • Twitter LaFibre.info
Firerox (sous Ubuntu) ouvre des connexion TCP puis fait un reset
« Réponse #62 le: 13 mai 2019 à 22:40:46 »
Bon, j'ai bien avancé : le problème est facilement reproductible avec plusieurs PC différents équipés d'Ubuntu 19.04 (noyau Linux 5.0.0-13, Firefox 66.0.5).

Coté serveur, lafibre.info exploite un Ubuntu server 16.04 avec la configuration par défaut excepté ça :

# Reduce the swap
vm.swappiness = 5
# Reduce the threshold where a DDOS impacts the server
net.ipv4.tcp_max_syn_backlog = 2048
# TCP congestion control protocol for high-speed and long-distance networks
net.ipv4.tcp_congestion_control=illinois
# Increase TCP buffers
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.core.rmem_max=851968
net.core.wmem_max=851968
# default queuing discipline for 10GigE speeds
net.core.default_qdisc=fq
# Increase the queue within the Linux kernel where traffic is stored after reception from the NIC
net.core.netdev_max_backlog=4000
# Increase number of incoming connections
net.core.somaxconn = 512
# Ignorer les paquets Router Advertisement si IPv6 configuré manuellement
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.all.accept_dad = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.default.accept_ra = 0
net.ipv6.conf.default.accept_dad = 0

Pour le PC avec les captures ci-dessous, la carte réseau est une Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller.
La Box est une box SFR câble 100 Mb/s, modem Sagem F@st 3284 DC, version logiciel  NCC-PC20_2.146.0

Capture coté client : 201905_lafibre_capture_client.pcapng.gz

Capture coté serveur : 201905_lafibre_capture_serveur.pcapng.gz

Les fichiers sont lisibles directement avec Wireshark.

vivien

  • Administrateur
  • *
  • Messages: 47 081
    • Twitter LaFibre.info
Firerox (sous Ubuntu) ouvre des connexion TCP puis fait un reset
« Réponse #63 le: 13 mai 2019 à 22:43:37 »
Exemple de la connexion TCP sur le port 50484 :

Coté client :


Coté serveur :


On note que le serveur n'a pas reçu les reset d'où la retransmission de paquet qu'il considère perdu faite d’acquittement.

vivien

  • Administrateur
  • *
  • Messages: 47 081
    • Twitter LaFibre.info
Firerox (sous Ubuntu) ouvre des connexion TCP puis fait un reset
« Réponse #64 le: 13 mai 2019 à 22:45:13 »
Exemple de la connexion TCP sur le port 50472 :

Coté client :


Coté serveur :


On note que le serveur n'a reçu que le premier reset.

vivien

  • Administrateur
  • *
  • Messages: 47 081
    • Twitter LaFibre.info
Firerox (sous Ubuntu) ouvre des connexion TCP puis fait un reset
« Réponse #65 le: 13 mai 2019 à 22:47:36 »
On garde cette même connexion TCP sur le port 50472 en filtrant dans le sens download :

Coté client :


Coté serveur :


Tous les paquets sont bien là, sauf le deux dernier paquets retransmis (à  T= 30 secondes et T= 60 secondes) ne sont pas reçus par le client, probablement que la box SFR a supprimé cette connexion de sa table qu'elle doit concerner comme terminée.

vivien

  • Administrateur
  • *
  • Messages: 47 081
    • Twitter LaFibre.info
Firerox (sous Ubuntu) ouvre des connexion TCP puis fait un reset
« Réponse #66 le: 13 mai 2019 à 22:49:01 »
On garde cette même connexion TCP sur le port 50472 en filtrant dans le sens upload :

Coté client :


Coté serveur :


Tous les paquets sont bien là, mais il n'y a plus rien après le premier reset envoyé par le client.

A qui la faute de cette perte ?

hwti

  • Abonné Orange Fibre
  • *
  • Messages: 2 237
  • Chambly (60)
Firerox (sous Ubuntu) ouvre des connexion TCP puis fait un reset
« Réponse #67 le: 13 mai 2019 à 23:00:31 »
Sur Fedora 29 (Firefox 66.0.5, Linux 5.0.8 ), j'ai bien 6 connexions, et juste des RST à la fin du chargement :
 - une connexion où le client reçoit encore des données (TLS Application Data, 1378 octets) après avoir fermé proprement
 - les 5 autres où il reçoit juste des Encrypted Alert / FIN,ACK / ACK / FIN+ACK (auquels il répond 4 RST) : le serveur semble vouloir fermer la connexion TCP de sa propre initiative, probablement à cause de l'Encrypted Altert qu'il a reçu (le client a terminé l'échange TLS), alors que le client l'a déjà terminée.

hwti

  • Abonné Orange Fibre
  • *
  • Messages: 2 237
  • Chambly (60)
Firerox (sous Ubuntu) ouvre des connexion TCP puis fait un reset
« Réponse #68 le: 13 mai 2019 à 23:25:02 »
On note que le serveur n'a pas reçu les reset d'où la retransmission de paquet qu'il considère perdu faite d’acquittement.[/size]
En effet, bizarre.
Il y a peut-être quelque chose qui ne plait pas au client dans la réponse du serveur, mais ça n'explique pas que le RST n'arrive pas au serveur (la box ?).

On note que le serveur n'a reçu que le premier reset.[/size]
Dans mon cas je n'ai que la première retransmission du serveur (ce qui ne veut pas dire qu'il n'y en a pas d'autres, potentiellement éliminées par la box).
Le client et le serveur ont fermé la connexion TCP en même temps, chacun de son initiative.
Ca génère le premier RST côté client, mais autant dans mon cas avec la latence je ne suis pas 100% sûr, autant dans ton cas je ne comprends pas pourquoi le serveur persiste après l'avoir reçu.

Sur un test simple, openssl s_client server:433, Ctrl+C (le client termine la connexion TCP, sans même avoir envoyé d'Encrypted Alert SSL) :
 - sur lafibre.info ou apache.org :
    => FIN,ACK
    <= Encrypted Alert
    => RST
    <= FIN, ACK
    => RST
 - sur www.google.fr, mozilla.org, mon nginx en local :
    => FIN,ACK
    <= FIN,ACK
    => ACK
La premier cas est un peu moins élégant, mais tant que ça s'arrête là (pas de retransmission à priori, à moins que ce soit filtré par ma NB6V) ce n'est pas grave car ça ne fait qu'un petit paquet en plus dans chaque sens.
« Modifié: 14 mai 2019 à 00:12:57 par hwti »

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 3 345
Firerox (sous Ubuntu) ouvre des connexion TCP puis fait un reset
« Réponse #69 le: 14 mai 2019 à 00:27:28 »
t'as donc 2 process firefox différents. Regarde avec le task manager de ff ou "pgrep -a firefox" a quoi ils correspondent (un c'est l'onglet de la page mais l'autre peut-etre une extension ou autre).

Le mieux est dans doute un strace avec tout les pid de firefox:

sudo strace -e trace=network $(pidof firefox |sed 's/\([0-9]*\)/\-p \1/g')

Lors de la capture j'avais l'onglet du topic ouvert pour copier les commandes. Cela dit quand je fais un pgrep même avec plusieurs onglets j'ai un seul PID qui sort...

Et dans le task manager, je vois ublock ainsi que le correctif pour les extentions c'est peut-être ça ?

EDIT : j'ai refais un essai avec 2 onglets. L'un est le processus principal de FF l'autre est un des onglets mais il n’apparaît pas avec un pgrep, je ne le vois que dans le moniteur système.

Résultat :
success=yes exit=0 pid=2227
success=no exit=-2 pid=1225
success=no exit=-111 pid=1225
success=yes exit=0 pid=1225
success=yes exit=0 pid=1225
success=yes exit=0 pid=2227
success=yes exit=0 pid=2227

A noter que j'ai 3 "web content" alors que je n'ai que 2 onglets... peut-être qu'un est "confondu" avec le PID principal ?
« Modifié: 14 mai 2019 à 00:55:50 par renaud07 »

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 3 345
Firerox (sous Ubuntu) ouvre des connexion TCP puis fait un reset
« Réponse #70 le: 14 mai 2019 à 01:15:52 »
J'ai viens de réessayer comme il faut avec un seul onglet : J'ai bien un seul PID. L'autre était donc bien le second onglet.

success=yes exit=0 pid=2921
success=yes exit=0 pid=2921
success=no exit=-101 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921
success=no exit=-115 pid=2921

Le dernier se répète près d'un centaine de fois :o A noter que pour le précédent essai le success=yes exit=0 pid=2227 se répétait aussi une trentaine de fois.

vivien

  • Administrateur
  • *
  • Messages: 47 081
    • Twitter LaFibre.info
Firerox (sous Ubuntu) ouvre des connexion TCP puis fait un reset
« Réponse #71 le: 14 mai 2019 à 09:31:00 »
Autre PC ou c'est reproductible:
- Ubuntu 19.04 (noyau Linux 5.0.0-13, Firefox 66.0.5).
- Intel Core i7-2600 @ 3.40GHz
- Connecté en Wi-Fi via Intel Corporation Wireless 7265
- Accès internet fibre avec du matériel pro

Capture coté client : 201905_lafibre_capture_client.pcapng.gz

Le fichier est lisible directement avec Wireshark.

On voit que le nombre de connexions ouverte est vraiment important :


Avec plein de reset immédiatement :


A noter que sur mes deux PC, VirtualBox 6.0.6 est installé (mais non utilisé au moment où j'ai fait la capture)
Je me demande si le module kernel installé par VirtualBox pourrait avoir un impact.