1 votes

L'appliance de sécurité adaptative de Cisco abandonne les paquets où le drapeau SYN n'est pas activé.

Nous disposons d'une instance d'Apache située dans notre zone démilitarisée (DMZ), qui est configurée pour envoyer des requêtes par proxy à une instance de Tomcat NATée interne à notre réseau. Cela fonctionne bien, mais tout à coup, les requêtes d'apache vers l'instance de tomcat cessent d'aboutir avec le résultat suivant dans les journaux d'apache :

[error] (70007)Le délai spécifié a expiré : ajp_ilink_receive() ne peut pas recevoir l'en-tête.

Une enquête dans la visionneuse de journaux Cisco révèle ce qui suit :

Message d'erreur %ASA-6-106015 : Refuser TCP (pas de connexion) de l'adresse IP/port vers IP_address/port flags tcp_flags sur l'interface interface_name. Explication Le dispositif de sécurité adaptatif a rejeté un paquet TCP auquel aucune connexion n'est associée dans la table de connexion du dispositif de sécurité adaptatif. Le dispositif de sécurité adaptatif recherche un indicateur SYN dans le paquet, qui indique une demande d'établissement d'une nouvelle connexion. Si l'indicateur SYN n'est pas défini et qu'il n'y a pas de connexion existante, le dispositif de sécurité adaptatif rejette le paquet.

Action recommandée Aucun requis sauf si l'appliance de sécurité adaptative reçoit un grand volume de ces paquets TCP invalides. Si c'est le cas, retracez les paquets jusqu'à la source et déterminez la raison pour laquelle ces paquets ont été envoyés.

Toutes les machines sont virtualisées à l'aide de VMware, et par défaut, les machines utilisent la carte réseau émulée Intel E1000. Notre administrateur réseau a remplacé cette carte par un pilote VMXNET3 pour tenter de corriger le problème. Nous devons attendre de voir si le problème persiste car il est intermittent.

Y a-t-il quelque chose d'autre qui pourrait causer ce problème ? Ce n'est pas le premier service où nous avons des problèmes similaires.

Notre hôte apache fonctionne sous Ubuntu 11.10 avec une version de noyau de 3.0.0-17-server. Nous avons également rencontré ce problème sur RHEL5 (5.8) avec le noyau 2.6.18-308.16.1.el5, cette machine possède également la carte réseau E1000.

NOTE : Je ne suis pas un administrateur de réseau et je suis un architecte logiciel et un analyste programmeur responsable de ces systèmes.

0 votes

Combien de temps cette connexion est-elle ouverte avant que le problème ne survienne ?

0 votes

Il peut continuer à fonctionner correctement pendant environ 30 minutes avant de commencer à tomber en panne de manière aléatoire. La requête exécutée dans notre scénario de test est une requête légère qui renvoie du contenu statique, la requête prend < 1s lorsqu'elle fonctionne bien. Lorsqu'elle échoue, les requêtes continuent à échouer pendant une période de temps indéterminée avant de recommencer à réussir. Les deux machines en question n'ont aucune charge.

0 votes

Pouvez-vous donner une idée du temps pendant lequel il continue à échouer ? 10 secondes ou une semaine ? Aussi, quel est le timeout conn dans l'ASA ?

1voto

Robert C Points 1

Le problème est dû à l'ASA qui ferme les connexions persistantes après un certain temps. Lorsqu'elle ferme les connexions, elle est également configurée pour ne pas envoyer d'informations. RST les messages lorsqu'un appel est à nouveau effectué.

Pour comprendre pourquoi cela pose un problème, je peux l'illustrer ici.

  1. Apache crée une première connexion qui aboutit.
  2. Après un délai supérieur au temps de réinitialisation de l'ASA, l'ASA ferme la connexion.
  3. La demande est faite et Apache essaie de l'envoyer sur ce qu'il pense être une connexion ouverte et s'arrête au bout d'un certain temps. TimeOut - par défaut 300 secondes
  4. Apache envoie une erreur au client

Le problème est amplifié si un certain nombre de connexions groupées sont encore ouvertes. Par exemple, si Apache a démarré avec 5 connexions groupées, et qu'après la fermeture de l'une d'entre elles, il présentera ce comportement encore 4 fois avant qu'un client n'obtienne une requête réussie.

Il existe plusieurs façons de surmonter ce problème.

  1. Autoriser l'ASA à envoyer RST des messages aux clients en qui il a confiance.
  2. Définir la configuration pour mod_proxy:ProxyPass - keepalive a On
  3. Définir la configuration pour mod_proxy:ProxyPass - ttl à quelque chose de plus bas que le temps de réinitialisation du pare-feu.

N'essayez pas de configurer mod_proxy:ProxyPass - timeout y mod_proxy:ProxyPass - connectiontimeout trop faible, car si vous avez des opérations de longue durée dans votre instance de tomcat, par exemple des services web ou des points de terminaison ReST, elles peuvent commencer à échouer si elles prennent plus de temps que ce temps.

Notre solution consiste à faire les deux premières options.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X