Bonjour,Le samedi 07 juin 2014, Philippe Gras a écrit...Y a-t-il un moyen de lister les paquets rejetés pour vérifier que mes règlessont conformesà ce que je souhaitais faire ?Tu peux loger les paquets qui correspondent à une règle. Il suffit demettre la règle « -j LOG » juste avant la règle qui jette, avec uneoption --log-prefix parlante pour toi. Quand tu es bon sur la règle, tuvires le logging.--jm
On Saturday 07 June 2014 14:18:23 Philippe Gras wrote:C'était du brute force et non du ddos, donc son script n'avait deconséquences que dans l'administration : 15.000 requêtes par jouret par action, sur la même page, et tout le backend ramaitcomme pas possible !Ça vous intéresse de savoir comment j'ai fait ?Ph. GrasOui,car mon site reçoit des requêtes permanentessur des pages obsolètes et/ou sur des chemins quin'existent pas... etc :400 Bad Request403 Forbidden404 Not Found
302 tentative d'attaques
Bonjour,Le 07/06/2014 18:16, Philippe Gras a écrit :=====================================================================# iptables -A INPUT -p tcp --dport 80 -s 72.44.248.136 -j DROP# iptables -A INPUT -p tcp --dport 80 -s 66.23.229.10 -j DROP# iptables -A INPUT -m state --state RELATED,ESTABLISHED -p tcp --dport 80 -s 72.44.248.136 -j DROP# iptables -A INPUT -m state --state RELATED,ESTABLISHED -p tcp --dport 80 -s 66.23.229.10 -j DROP=====================================================================Sauf erreur de ma part, les deux dernière règles ci-dessussont inutiles. Si ça matche pour l'une d'entre elles, çamatchera de toute façon pour une des deux premières.
Bonjour à tous,Le 07/06/2014 23:05, nb a écrit :Le 07/06/2014 20:31, Philippe Gras a écrit :Non, justement pas quel que soit l'état de la connexion, et c'est logique.On n'aurait pas de règle pour les connexions établies, sinon ;-)Philippe a raison.INPUT ne sert pas pour une connexion déjà établie, seulement pour l'établissement d'une connexion (paquet tcp syn)Loin de moi l'idée de vouloir vous embêter avec tout ça (j'essayevraiment d'être constructif dans ma démarche) mais il me semblesincèrement que Philippe et toi nb vous trompez sur ce point.J'essaye de donner une explication ci-dessous qui tend à le prouver.Certes, ça n'a pas de rapport direct avec Debian mais je trouve quele sujet n'est pas inintéressant en soi. Et dans le pire des cas,si on me montre que j'ai tort (ce qui est tout à fait envisageable;)), j'en serais le premier content car j'aurais appris quelquechose (et je pense que je ne serai pas le seul).
J'ai une petite Debian Wheezy toute simple sur laquelle j'ai unpetit apache2 qui tourne (avec la fameuse page « It works »). Jen'ai fait à la base aucune modification iptables (et donc pardéfaut tout passe etc). Cette machine a pour IP 172.31.0.1/16.
Bonjour,Le 08/06/2014 14:02, Philippe Gras a écrit :Le 8 juin 14 à 11:47, Jean-Michel OLTRA a écrit :C'est un peu ça que j'aimerais arriver à faire chez moi :Lister les IP qui envoient une requête "Get wp-login.php"Selon la fréquence de ces requêtes dans le temps, ACCEPT ou DROP.--Je pense que pour avoir des regles en fonction de la fréquence, il faut regarder du coté du module limit d'iptables
Le 8 juin 14 à 15:53, Denis Mugnier a écrit :Ce n'est pas ce que j'ai lu ici:Bonjour,Le 08/06/2014 14:02, Philippe Gras a écrit :Le 8 juin 14 à 11:47, Jean-Michel OLTRA a écrit :C'est un peu ça que j'aimerais arriver à faire chez moi :Lister les IP qui envoient une requête "Get wp-login.php"Selon la fréquence de ces requêtes dans le temps, ACCEPT ou DROP.--Je pense que pour avoir des regles en fonction de la fréquence, il faut regarder du coté du module limit d'iptables================================================Malheureusement, il ne semble pas que le module recent permette d'utiliser des préfixes (par exemple de longueur 26 ou 28) mais seulement des adresses IP
Ce module est très simple. Mais le module limit, comme recent, ne permet pas de travailler par préfixe IP.
C'est un peu ça que j'aimerais arriver à faire chez moi :Lister les IP qui envoient une requête "Get wp-login.php"Selon la fréquence de ces requêtes dans le temps, ACCEPT ou DROP.Un hids comme Ossec te permet de créer une règle perso, pour extraire cegenre de schéma, et y appliquer le remède que tu choisis (drop,bannissement) dans le cadre de sa réponse active. Ossec utilise unparamètre timeframe qui donne à l'administrateur toute latitude pourdéfinir le nombre de correspondances autorisées dans un laps de tempsdonné.
Le 07/06/14 à 18:16, Philippe Gras <ph....@worldonline.fr> a écrit :PG> Pour ce qui est des 400, de certaines 404 et 403, je pense que tuPG> peux t'inspirer de ça:PG>PG> Je vais d'ailleurs le faire moi-même, parce que j'ai plein dePG> requêtes avec cette chaîne :En quoi c'est gênant ?Répondre à ce genre de requete avec une 404 coûtera bcp moins de ressources qu'une règleiptables qui va analyser tous les paquets http.
Si vraiment ça dérange, ajouter une règle nginx (location ~ w00tw00t) pour écrire l'ip dans unfichier tmp (sans passer par du php, avec echo dans nginx) et une tâche cron qui récupère leslistes pour les blacklister avec iptables et les recopier ailleurs pour les enlever au prochainpassage me parait plus efficace, mais j'ai jamais pris la peine de le faire malgré des milliersde requetes comme ça par jour.
Même chose pour la dernière règle de la page, lancer une regex plus un algo pour lespaquets qui match me parait un gaspillage important, mieux vaudrait créer un vhost par défautqui va prendre les requetes directes sur l'ip (http://xxx.xxx.xxx.xxx/) pour bannir tout lemonde qui arrive là (faudrait être sûr que les googlebot & co lancent jamais ces requetes, pasétudié la question car me sens pas concerné avec un varnish en frontal).
J'ai l'impression que ce genre de "protection" ne protège que des scripts kiddies assezinoffensifs, les vrais méchants sont pas assez stupides pour se faire repérer avec des attaquesaussi connues.
Et vis à vis des règles, toujours pour un service web, je serais plus d'avis à répondre par un bon 404 pour une requête demandant une ressource incorrecte simplement. Ensuite ça dépend ... Si tu n'as aucune page de login accessible en front, est-ce que le fait de répondre par un 404 simplement te coûte plus que de rejeter un packet filtré ? (Sachant que online et ovh fournissent la partie ddos).Ensuite oui, si tu as une page de connexion tu va obligatoirement "logger" et blacklister la source.(À savoir que ton backend n'a pas à être accessible par tout le monde).
Attention aux réglages trop sophistiqués, au risque de laisser des trous dans votre muraille ou de perdre en efficacité.Cordialement.
Si je comprend bien, vous avez un serveur web avec un cms type blog et vous avez des attaques sur votre backend.
Car dans ce cas là, ma solution était de mettre votre répertoire d'administration en deny pour tous port 80 dans la conf de votre apache/nginx ou autre..
Vu que pour un système de blog les lecteurs n'ont pas besoin de SSL, vous pouvez vous le réserver.Parfait alors vous mettez également votre serveur web en écoute sur le port 443.
Maintenant je trouve assez sympa le principe de louer un NOIP pour que je puisse avoir un moyen de me faire identifier ..Car maintenant ma règle est simple et efficace ... Je flush ma table "dynamique" créer exprès. J'ai donc ma regle iptables qui vient ajouter le lookup de mon NOIP toute les 40 minutes pour le port 443.Et je laisse mon client NOIP ouvert. Sinon je sais que au pire si je tombe à un mauvais moment, il faudra que j'attende 40 minutes ce qui n'est pas bien grave comparé ce dont je me débarrasse.
Le 09/06/14 à 14:38, Philippe Gras <ph....@worldonline.fr> a écrit :PG>PG> Le 9 juin 14 à 13:32, Daniel Caillibaud a écrit :PG>PG> > Le 07/06/14 à 18:16, Philippe Gras <ph....@worldonline.fr> a écrit :
PG> > PG> Pour ce qui est des 400, de certaines 404 et 403, je pense que tu
PG> > PG> peux t'inspirer de ça:
PG> > PG>
PG> > PG> Je vais d'ailleurs le faire moi-même, parce que j'ai plein dePG> > PG> requêtes avec cette chaîne :PG> >PG> > En quoi c'est gênant ?PG> >PG> > Répondre à ce genre de requete avec une 404 coûtera bcp moins dePG> > ressources qu'une règle
PG> > iptables qui va analyser tous les paquets http.PG>
PG> Ah, bon ? Je veux bien le croire, mais ça demande à être confirmé.
PG> Parce que si ce n'est pasPG> iptables qui analyse les paquets, c'est le serveur virtuel qui va lePG> faire ensuite, non ? Donc le
PG> résultat serait identique au niveau du temps d'attente, non ?Je pense pas, le serveur web n'aura que les urls à pbs à traiter, alors que iptable va
traiter tous les paquets tcp du port 80.
(chez moi les scripts kiddies c'est qq centaines de requetes, milliers quand ils s'excitent, sur
pas mal de millions, j'ai jamais vu d'impact sur les temps de réponse des utilisateurslégitimes)
PG> > Si vraiment ça dérange, ajouter une règle nginx (location ~PG> > w00tw00t) pour écrire l'ip dans un
PG> > fichier tmp (sans passer par du php, avec echo dans nginx) et une
PG> > tâche cron qui récupère les
PG> > listes pour les blacklister avec iptables et les recopier ailleursPG> > pour les enlever au prochainPG> > passage me parait plus efficace, mais j'ai jamais pris la peine de
PG> > le faire malgré des milliersPG> > de requetes comme ça par jour.PG>PG> Oui, ça me parait une bonne idée. Comment comparer la vitessePG> d'exécution des 2 règles ?La mesurer...Mais amha c'est de l'énergie gaspillée, sauf si tu veux étudier ce cas en détails...
PG> > Même chose pour la dernière règle de la page, lancer une regex plus
PG> > un algo pour lesPG> > paquets qui match me parait un gaspillage important, mieux vaudrait
PG> > créer un vhost par défaut
PG> > qui va prendre les requetes directes sur l'ip (http://PG> > xxx.xxx.xxx.xxx/) pour bannir tout le
PG> > monde qui arrive là (faudrait être sûr que les googlebot & co
PG> > lancent jamais ces requetes, pas
PG> > étudié la question car me sens pas concerné avec un varnish enPG> > frontal).PG>PG> C'est déjà le cas chez moi. Je ne crois pas que les crawlersPG> s'intéressent aux IP, je ne l'ai jamaisPG> remarqué. Mais ça pourrait venir, on ne sait jamais…PG> >PG> > J'ai l'impression que ce genre de "protection" ne protège que desPG> > scripts kiddies assezPG> > inoffensifs, les vrais méchants sont pas assez stupides pour sePG> > faire repérer avec des attaquesPG> > aussi connues.PG>PG> Je suis complètement d'accord avec cette assertion. Le problème,
PG> c'est que les script kiddies sont
PG> très gourmands, et vraiment très envahissants.C'est là que j'ai du mal à suivre, si qq milliers de requetes sur une 404 ralentissent ton
appli c'est l'appli qui a un pb.
(c'est vrai que certains cms envoient toutes les 404 au controleur principal, qui doit charger
toute l'appli pour répondre à la fin 404, si c'est du php utiliser apc doit pas mal réduire lacharge en général, et notamment dans ces cas là).
PG> J'aimerais bien réserver l'accès de mon serveur à des utilisateursPG> légitimes, car il est tout petit, pasPG> très costaud, donc le compromis est difficile à trouver entre unePG> certaine tolérance avec les bots, etPG> une discrimination rigoureuse…Si c'est trop compliqué de modifier l'appli faut ajouter qq location pour ces urls à pb, mêmeavec qq milliers d'appels sur une petite machine, c'est pas ça qui va fatiguer ton nginx.
--DanielPour atteindre le bonheur il y a deux règles :