web-dev-qa-db-fra.com

TCP Keepalive et pare-feu tuer des sessions inactives

Dans un site client, l'équipe de réseau a ajouté un pare-feu entre le client et le serveur. Cela provoque une déconnexion des connexions inactives après environ 40 minutes de temps d'inactivité. Les gens du réseau disent que le pare-feu n'a aucun délai de connexion inactif, mais le fait est que les connexions inactives soient cassées.

Afin de contourner cela, nous avons configuré d'abord le serveur (une machine Linux) avec TCP conserve activé avec tcp_keekealive_time = 300, tcp_keekealive_intvl = 300 et tcp_keekeealive_probes = 30000. Cela fonctionne et le Les connexions restent viables pendant des jours ou plus. Cependant, nous aimerions également que le serveur détecte les clients morts et tue la connexion, nous avons donc modifié les paramètres vers le temps = 300, Intvl = 180, Sondes = 10, pensant que si le client était effectivement vivant, le serveur sonderait toutes les 300 secondes (5 minutes) et le client répondrait avec un ACK et qui garderait le pare-feu de voir cela comme une connexion inactive et le tuerait. Si le client était mort, après 10 sondes, le serveur serait Abandonner la connexion. À notre surprise, les connexions inactives mais vivantes sont tuées après environ 40 minutes comme avant.

WireShark en cours d'exécution sur le côté du client ne montre aucune maintenance entre le serveur et le client, même lorsque les contestations sont activées sur le serveur.

Qu'est-ce qui pourrait arriver ici?

Si les paramètres Keepalive sur le serveur sont time = 300, Intvl = 180, Sondes = 10, je m'attendrais à ce que si le client soit en vie mais que le serveur enverrait des sondes de maintien toutes les 300 secondes et laissez la connexion seule, et si le Le client est mort, il en enverrait une après 300 secondes, puis 9 sondes supplémentaires toutes les 180 secondes avant de tuer la connexion. Ai-je raison?

Une possibilité est que le pare-feu intercepte de manière en quelque sorte les sondes de conserve du serveur et omet de les transmettre au client, et le fait qu'il a obtenu une sonde indique que la connexion est active. Ce comportement commun est-il un pare-feu? Nous ne savons pas quel type de pare-feu est impliqué.

Le serveur est un nœud Teradata et la connexion provient d'un utilitaire client Teradata sur le serveur de base de données, le port 1025 du côté serveur, mais nous avons vu le même problème avec une connexion SSH afin que nous pensions que cela affecte tout TCP Connections.

10
Carlos A. Ibarra

Un pare-feu Stateful vérifie les paquets et confirmez également si la connexion est en vie. Je crois que le pare-feu doit également avoir les réglages précis de la même manière que les ordinateurs ont. Par défaut, de nombreux pare-feu ne gardent que des connexions inactives ouvertes pendant 60 minutes, mais cette fois peut changer en fonction du fournisseur.

Certains fournisseurs auront des fonctionnalités telles que TCP Intercept, TCP State Passage et détection de connexion morte qui permettra de gérer des situations spéciales comme la vôtre.

Une autre option consiste à configurer le pare-feu lui-même avec les mêmes paramètres que vous avez sur les serveurs pour vous assurer que tout est cohérent.

Sur un pare-feu Cisco, vous avez la commande suivante pour la configurer.

nom d'hôte (config) # Timeout Timeout Time

timeout Conn HH: MM: SS-Temps de ralenti après lequel une connexion se ferme entre 0: 5: 0 et 1193: 0: 0. La valeur par défaut est 1 heure (1: 0: 0).

vous avez plusieurs paramètres selon vos besoins.

Je conseillerais de parler à l'équipe qui gère le pare-feu et de régler les horaires en fonction de vos besoins ou de vérifier les fonctionnalités.

1
Hugo