Auteur Sujet: Limitation à 10 connexions TCP par IP sur LaFibre.info  (Lu 9388 fois)

0 Membres et 1 Invité sur ce sujet

vivien

  • Administrateur
  • *
  • Messages: 47 088
    • Twitter LaFibre.info
Limitation à 10 connexions TCP par IP sur LaFibre.info
« le: 12 décembre 2017 à 09:08:46 »
Il y a deux jours, le site a été victime d'une attaque DOS qui a réussi à aspirer 17 000 pages du site en 4 minutes.
Le but est probablement la saturation du CPU du serveur vu qu'il a aspiré les pages en PHP et pas le contenu statique comme les images.
Le site a été ralenti, mais il a tenu.
Pour avoir un tel nombre de pages, l’attaquant a utilisé de nombreuses connexion CP en parallèle.

Pour éviter de dégrader les performances lors d'éventuels prochains épisodes, je vais limiter à 10 connexions TCP utilisées simultanèment par adresse IP.
Ce chiffre de 10 connexions  TCP en parallèle ne devrait pas impacter les clients qui sont sur une IP partagée où plusieurs personnes regardent simultanèment le forum.

Pour ceux qui souhaitent regarder, voici les log Apache de l'attaque : 201712_attaque_dos.ods (fichier Libreoffice Calc, lisible également avec Microsoft Excel)

Marin

  • Client Bbox vdsl
  • Modérateur
  • *
  • Messages: 2 804
  • 73
Limitation à 10 connexions TCP par IP sur LaFibre.info
« Réponse #1 le: 12 décembre 2017 à 09:22:03 »
Beaucoup plus de chances que ce soit un crawler avec des paramètres trop agressifs qu'une attaque.

D'après l'historique DNS ça ressemble à un mutualisé chinois https://virustotal.com/fr/ip-address/74.91.24.130/information/

turold

  • Profil non complété
  • ******
  • Messages: 1 683
  • mp fermée (sauf admin et exceptions temporaires)
Limitation à 10 connexions TCP par IP sur LaFibre.info
« Réponse #2 le: 12 décembre 2017 à 12:31:42 »
Salut,

Mon dernier aspirateur de site que j'avais utilisé a quelque chose comme ça en limite en dur (quelques dizaines, pas plus). Aucun risque que je fasse n'importe quoi.^^

Par contre, c'est en connexions ou requêtes?
Car dans le 2ème cas, en IP partagée, ou multi-user sur une IP, cela va bien ralentir. Il y a déjà plusieurs requêtes par page affichée.
J'ai déjà 99 requêtes, juste pour afficher la page d'accueil!

vivien

  • Administrateur
  • *
  • Messages: 47 088
    • Twitter LaFibre.info
Limitation à 10 connexions TCP par IP sur LaFibre.info
« Réponse #3 le: 12 décembre 2017 à 13:45:37 »
C'est en nombre de connexion TCP, généralement un navigateur ouvre une ou deux connexions TCP.
Après tu fais ce que tu souhaites comme requête sur ta connexion TCP, les demandes sont traites les unes après les autres.

La 17 000 requêtes sont sur 17 000 connexions TCP différentes, à chaque fois il faut des échanges TLS pour le chiffrement.
Le port source change a chaque fois et varie entre 1066 et 65347
A noter que ce n'est pas le comportement par défaut de Windows ou Linux de mettre des ports source < 32768

Les ports clients sont normalement dans la plage suivante :
- Windows 2000 / XP (sortie en 2001) : du port 1025 au port 5000
- Windows modernes (à partir de 2007) : du port 49152 au port 65535
- Linux avant 2001 (noyaux 2.2.x) : du port 1024 au port 4999
- Linux à partir de 2001 (noyaux 2.4.x à 3.13) : du port 32768 au port 61000
- Linux à partir de 2015 (noyaux 3.19 et suivants) : du port 32768 au port 60999
- MacOS X / FreeBSD modernes : du port 49152 au port 65535

turold

  • Profil non complété
  • ******
  • Messages: 1 683
  • mp fermée (sauf admin et exceptions temporaires)
Limitation à 10 connexions TCP par IP sur LaFibre.info
« Réponse #4 le: 12 décembre 2017 à 16:06:04 »
Ok pour les connexions TCP.

Cela va bien ralentir uniquement dans des cas spécifiques. Genre >10 personnes sur la même IP partagée ou connexion internet... et qui veulent tous surfer sur ce forum en même temps.^^

Il y a 10 ans, je crois, Microsoft recommandait au maxi 600/IP/minute pour éviter les attaques DOS. Ne me demander pas pourquoi pour les minutes.
Et maxi 160/IP en simultané. Tout ceci en connexions TCP.
En ne regardant que l'overview de l'outil intégré au navigateur, il y aurait 2 connexions TCP... et les 99 requêtes sont traitées en moins de 1s. Donc la puissance de calcul est là.

Optix

  • AS41114 - Expert OrneTHD
  • Abonné Orne THD
  • *
  • Messages: 4 644
  • WOOHOO !
    • OrneTHD
Limitation à 10 connexions TCP par IP sur LaFibre.info
« Réponse #5 le: 12 décembre 2017 à 17:37:54 »
Citer
Cela va bien ralentir uniquement dans des cas spécifiques. Genre >10 personnes sur la même IP partagée ou connexion internet... et qui veulent tous surfer sur ce forum en même temps.^^
Non, le timeout du KeepAlive est réduit à 2sec max déjà, donc même après le chargement de la page, les ressources sont libérées très très rapidement dans le cadre d'un surf.

C'est déjà plus délicat lors de longues sessions (de l'ordre de l'heure carrèment), genre des sessions Usenet avec des gens en VPN ou CGNAT en face :)

turold

  • Profil non complété
  • ******
  • Messages: 1 683
  • mp fermée (sauf admin et exceptions temporaires)
Limitation à 10 connexions TCP par IP sur LaFibre.info
« Réponse #6 le: 12 décembre 2017 à 19:20:53 »
2 secondes?
La vache! C'est extrêmement court... :o
5 à 10 secondes serait plus adapté, tout en restant dans de petites valeurs.
C'est quoi par défaut? 2 minutes en moyenne des navigateurs, non?
Côté serveur, Apache recommande 5 secondes minimum. Et perso, 10 secondes minimum.

Mais pour le principe, c'est vrai que cela réduit encore les cas de ralentissement dû à ces paramètres.

Optix

  • AS41114 - Expert OrneTHD
  • Abonné Orne THD
  • *
  • Messages: 4 644
  • WOOHOO !
    • OrneTHD
Limitation à 10 connexions TCP par IP sur LaFibre.info
« Réponse #7 le: 12 décembre 2017 à 21:13:48 »
2 secondes?
La vache! C'est extrêmement court... :o
5 à 10 secondes serait plus adapté, tout en restant dans de petites valeurs.
C'est quoi par défaut? 2 minutes en moyenne des navigateurs, non?
Côté serveur, Apache recommande 5 secondes minimum. Et perso, 10 secondes minimum.

Mais pour le principe, c'est vrai que cela réduit encore les cas de ralentissement dû à ces paramètres.

Attention, tu mélanges plusieurs notions.

Le KeepAlive, c'est la notion de garder une même connexion active après le chargement d'une ressource. De base, 1 connexion = 1 ressource (la page elle-même, les images, CSS, scripts, etc). Sauf que le KA permet d'éviter de fermer/ouvrir sans arrêt, et donc d'optimiser le temps de chargement. Donc là, la connexion se ferme 2sec après le chargement de la dernière ressource.

Après, tu as le timeout classique d'une connexion. Je ne m'étends pas là dessus, tu dois connaître.

Par contre, c'est pervers : une ressource doit être chargée en qq secondes : une page 1sec max, une image, 2sec, etc. Ta connexion n'a pas vocation à être ouverte pendant X minutes ! La connexion ne devrait donc pas durer pas plus de qq secondes, tout au plus. Sinon un gus peut facilement ouvrir des sockets dans une boucle... et saturer le serveur juste en 3/4 lignes de code. Il faut donc pouvoir couper les sessions inactives très rapidement.

willemijns

  • Abonné FreeMobile
  • *
  • Messages: 2 680
Limitation à 10 connexions TCP par IP sur LaFibre.info
« Réponse #8 le: 12 décembre 2017 à 21:23:57 »
Ce chiffre de 10 connexions  TCP en parallèle ne devrait pas impacter les clients qui sont sur une IP partagée où plusieurs personnes regardent simultanèment le forum.

ca met une erreur HTTP type "too many connexion" si on depasse ?


vivien

  • Administrateur
  • *
  • Messages: 47 088
    • Twitter LaFibre.info
Limitation à 10 connexions TCP par IP sur LaFibre.info
« Réponse #9 le: 12 décembre 2017 à 21:41:40 »
La connexion est bloqué au niveau d'iptables, elle n'arrive pas à Apache, donc pas de message.

Voici c que j'utilise :
iptables  -A INPUT -p tcp --syn -m connlimit --connlimit-above 10 -j REJECT
ip6tables -A INPUT -p tcp --syn -m connlimit --connlimit-above 10 --connlimit-mask 64 -j REJECT



Dans ma configuration Apache, j'ai mis KeepAliveTimeout 2 soit deux secondes comme le dit Hugues.
La valeur par défaut est de 5 secondes. Cf doc Apache2.4 : https://httpd.apache.org/docs/2.4/mod/core.html#keepalivetimeout

MaxKeepAliveRequests 100 est à sa valeur par défaut : 100 cf https://httpd.apache.org/docs/2.4/mod/core.html#maxkeepaliverequests

j'ai baissé le timeout de 300 (valeur par défaut d'Ubuntu) à 60 secondes (valeur par défaut d'un apache non customisé par Ubuntu) : Timeout 60 C'est le temps maximum où  le serveur ne reçois plus rien d'une connexion avant quelle ne soit fermée. J'ai fait pas mal de test et il ne faut pas descendre en dessous de 60 secondes sinon les clients Free en itinérance 3G Orange n'arriveront pas à charger la page (et même dans certains cas, il arrive que Free ne laisse rien passer pendant 60 secondes). Cf doc Apache 2.4 : https://httpd.apache.org/docs/2.4/mod/core.html#timeout

J'ai configuré mon serveur pour répondre à 1000 connexions simultanées :
<IfModule mpm_prefork_module>
   StartServers      30
   MinSpareServers      25
   MaxSpareServers      75
   MaxRequestWorkers   1000
   ServerLimit      1000
   MaxConnectionsPerChild   0
   GracefulShutdownTimeout   3600
</IfModule>



GracefulShutdownTimeout 3600 permet d'éviter d'avoir des slots occupés pas des téléchargements qui durent plusieurs heures alors que apache2 souhaite réduire le nb de slots. Par défaut il n'y a pas de limite de temps (0). Là je coupe les connexions 3600 secondes après la demande pour libérer le slot (par exemple à chaque rotation de log). Je laisse donc un minimum d'une heure pour télécharger un fichier, cela me semble bien suffisant, même pour ceux qui ont des connexion à 36 Kb/s. Cf la doc https://httpd.apache.org/docs/2.4/mod/mpm_common.html#gracefulshutdowntimeout

Il faut prévoir tous les types d'abus... (si je l'ai mis en place, c'est que j'ai déjà vu des téléchargement qui dépassent les 24h)

Toujours dans les optim, j'ai mis dans /etc/sysctl.conf  ces 3 lignes, pour réduire le swap et augmenter certaines limites

vm.swappiness = 10
net.ipv4.tcp_max_syn_backlog = 1024
net.core.somaxconn = 512



turold

  • Profil non complété
  • ******
  • Messages: 1 683
  • mp fermée (sauf admin et exceptions temporaires)
Limitation à 10 connexions TCP par IP sur LaFibre.info
« Réponse #10 le: 12 décembre 2017 à 22:04:42 »
ok.
Disons que l'ensemble est fonctionnel, mais bon, je suppose que t'affineras selon la quantité de retours négatifs.

Je garde mes réserves, mais je comprends aussi que tu veuilles libérer des ressources serveur, entre l'augmentation des activités normales, et celle des activités douteuses.

willemijns

  • Abonné FreeMobile
  • *
  • Messages: 2 680
Limitation à 10 connexions TCP par IP sur LaFibre.info
« Réponse #11 le: 12 décembre 2017 à 22:10:26 »
bloquer en iptables c'est pour les gros trucs je pense... si tu trouves que ca DDOSe trop ok ca le fait mais là...

j'ai vu rapido qu'il y a des mods apache https://www.google.fr/search?q=limit+ddos+apache

PS: je te l'avais déjà dit sur le sujet des IP belges, choisis mieux tes ex ;)