2 votes

Je fais un DOS sur mon propre serveur Apache et je ne peux pas m'arrêter immédiatement. Que puis-je faire pour améliorer les choses à court terme?

Nous avons une multitude de clients répartis qui, entre autres, téléchargent des fichiers journaux sur notre serveur Apache.

Nous avons eu des problèmes de rotation des journaux sur certains fichiers, donc nous téléchargeons maintenant relativement de gros fichiers de ces clients plusieurs fois par jour. Évidemment, la solution est de remettre en marche la rotation des journaux et d'ajouter un peu plus d'intelligence aux clients pour qu'ils arrêtent de faire cela. Mettre en place UN quelconque changement pour les clients prendra des jours, voire une semaine ou deux.

En attendant, nos 3 lignes T1 sont saturées à 100 % par ces téléchargements, et de nombreuses connexions vitales (beaucoup plus importantes que les téléchargements de journaux) arrivent à expiration.

Le téléchargement des journaux est géré par un script Python fonctionnant sous mod-wsgi, et nous avons essayé de lui faire immédiatement envoyer un succès 200 (via le script Python). Cela ne fonctionne pas - curl (ce que nous utilisons pour le téléchargement) signalera 200 et une connexion rompue après 30 secondes, mais le téléchargement se poursuit toujours pendant ces 30 secondes.

Avez-vous des suggestions sur ce que nous pourrions faire à ce sujet? Nous ne nous soucions pas vraiment de perdre des fichiers journaux, mais nous voulons vraiment que le trafic vital passe.

2voto

Cyber Points 87

Serait-il possible de modifier votre DNS pour pointer vers un serveur (ou une ferme de serveurs équilibrés) capable de gérer la charge, et/ou vers un serveur avec une meilleure connectivité Internet, afin de ne pas être limité par les 3 T-1 ?

Si les clients se connectent à une adresse IP, et non à un nom DNS, avez-vous discuté avec vos fournisseurs amont pour changer votre routage, de sorte que l'adresse IP en question soit dirigée vers un espace serveur sur site chez votre fournisseur ou à proximité dans une installation de colocation ?

2voto

KristoferA Points 8036

Pourquoi ne pas essayer une autre solution sans apache, comme iptables, si cela correspond à vos besoins.
Voici un bon début.
Cutter: http://www.lowth.com/cutter/

Apache ou le client ne s'arrêteront pas exactement à la seconde. Parce que les connexions ont déjà été établies. Même si vous redémarrez apache. ou bloquez le port 80 pour les emplacements de téléchargement. il attendra jusqu'à la fin du délai d'attente.

Mais avec cutter, vous pouvez interrompre la connexion à une seconde précise. ce qui vous donnera suffisamment de bande passante/ressources pendant le temps nécessaire. raccourcissez les délais de connexion dans la configuration d'apache pour économiser de la mémoire & des processus apache morts/zombies. puis utilisez cutter pour interrompre les téléchargements inutiles.

1voto

BMDan Points 7059

Envoyer une réponse HTTP est tout à fait bien, mais ce que vous devez vraiment faire, c'est de fermer la connexion. Je ne connais pas mod_wsgi intimement, mais dans mod_php, par exemple, un simple :

exit(0);

au début du script fonctionne à merveille. Vous lirez toujours (potentiellement) un buffer d'entrée juste avant que le script ne soit appelé, mais ce n'est généralement pas un problème.

L'autre alternative, puisque vous utilisez Apache, est de bloquer les choses à un niveau plus élevé; ajoutez une nouvelle chaîne GET à vos clients mis à jour, puis ajoutez une configuration comme :

RewriteEngine on
RewriteCond %{QUERY_STRING} !.*isNotBraindead=1.*
RewriteRule path/to/python/script.py - [F,L]

0voto

medina Points 1950

Dans la lignée d'une autre suggestion, y a-t-il un nom DNS spécifique qui est résolu pour le téléchargement des données? Vous pourriez essayer simplement de supprimer l'enregistrement A s'il n'est pas utilisé pour autre chose.

Je ne sais pas quelles sont vos capacités réseau, mais vous pourriez également envisager si vous pouvez déployer des ACL en amont pour bloquer le trafic client (en supposant que la transmission de ces données de journal est la seule chose pour laquelle ils vous atteignent). Vous pourriez également utiliser quelque chose comme NBAR pour rejeter le trafic dirigé vers l'URL de téléchargement. Ces méthodes pourraient préserver la bande passante limitée sur vos lignes T, mais il n'est pas clair si vous avez ce niveau d'accès au réseau.

Je suis un peu surpris de votre commentaire selon lequel les clients téléchargent plusieurs fois par jour mais que vous êtes toujours submergé après avoir immédiatement quitté / retourné le code 200 en raison des ~30 secondes de transmission.

0voto

Jason Points 8799

Dans la configuration Apache, ajoutez temporairement :

Deny from all

Fondamentalement, interdisez l'accès à l'URL utilisée pour le gestionnaire de téléchargement.

Cela suppose que le chemin d'accès complet de l'URL pour le gestionnaire de téléchargement n'est pas utilisé pour autre chose.

En cas d'erreur, c'est-à-dire un statut non 200 retourné, Apache abandonnera la connexion immédiatement.

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