Les IPTables ne bloquent pas immédiatement IP avec ipset

J’ai les IPTables suivants avec IPSet comme source de règles pour bloquer les attaques IP , mais quand j’ajoute une IP attaquante à IPSet , dans mon journal d’access nginx , je vois toujours un access continu à l’ IP attaque. Au bout d’un moment, peut-être 3 à 5 minutes, l’ IP était bloquée.

iptables

 ~$ sudo iptables -nvL --line-numbers Chain INPUT (policy ACCEPT 317K packets, 230M bytes) num pkts bytes target prot opt in out source destination 1 106K 6004K DROP all -- * * 0.0.0.0/0 0.0.0.0/0 match-set Blacklist src Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 match-set Blacklist src Chain OUTPUT (policy ACCEPT 350K packets, 58M bytes) num pkts bytes target prot opt in out source destination 

ipset

 sudo ipset -L Name: Blacklist Type: hash:ip Revision: 4 Header: family inet hashsize 1024 maxelem 65536 timeout 60 Size in memory: 13280 References: 2 Members: xxx.xxx.xxx.xxx(attacker ip) timeout 0 

Je ne sais pas pourquoi la règle n’a pas d’effet immédiat, ce qui me rend fou, tout comme l’attaquant se moque de moi.

J’ajoute ipset à la règle iptables avec l’option -I qui devrait conserver la règle à la première position. Alors peut-être que la Chain INPUT(policy Accept) fait l’affaire?

S’il vous plaît, aidez-moi, merci beaucoup.

BTW.

J’utilise Nginx+Djano/uWSGI pour déployer mon application, et j’utilise un script shell pour parsingr le journal nginx afin de placer ip mal à Blacklist ipset .

La raison pour laquelle une règle de pare-feu n’a pas d’effet immédiat sur le blocage du trafic peut être due à une inspection dynamic des paquets.

Il peut être inefficace pour le pare-feu d’parsingr chaque paquet qui arrive dans la ligne. Par conséquent, pour des raisons de performances, les règles créées par l’utilisateur ne s’appliquent souvent qu’aux paquets initiaux qui établissent la connexion ( SYN de TCP). SYN + ACK , ACK ) – par la suite, cette connexion est automatiquement mise en liste blanche (pour être plus précis, c’est l’état que la règle d’origine a créé et qui est ajouté à la liste blanche), jusqu’à sa fin ( FIN ).

Ce qui se passe probablement ici, c’est que, en raison du pipelining et des connexions persistantes, sur lesquelles nginx excelle, une seule connexion peut être utilisée pour émettre et traiter plusieurs requêtes HTTP indépendantes.

Donc, pour résoudre le problème, vous pouvez soit désactiver le traitement en pipeline et restr actif dans nginx (ce n’est pas une bonne idée, car cela affectera les performances), ou supprimer les connexions en liste blanche existantes , par exemple avec quelque chose comme tcpdrop(8) sur * BSD – il doit sûrement y avoir un outil équivalent à Linux.

Cependant, si vous rencontrez simplement un problème avec un seul client exécutant trop de requêtes et en surchargeant votre backend, la procédure appropriée peut consister à limiter les clients en fonction de l’adresse IP, avec l’aide de la directive standard limit-req de nginx . (Notez, cependant, que certains de vos clients peuvent être derrière un NAT de classe opérateur, donc soyez prudent avec la façon dont vous appliquez la limitation pour vous assurer que les faux positifs ne seront pas un problème.)

Avez-vous regardé ce post ici: https://serverfault.com/questions/523021/why-is-iptables-not-blocking-an-ip-address

Cet article montre que l’IP de la personne est supprimée en utilisant -A INPUT -p tcp –dport 80 -j LOG –log-prefix “HTTP:”

Je n’ai pas rencontré ce problème personnellement, alors s’il vous plaît laissez-moi savoir si cela est utile, bonne chance.