Certaines adresses IP ouvrent des milliers de connexions de mon serveur. J'ai un serveur Ubuntu 14. Je vérifie le nombre total de connexions à l'aide de la commande suivante:
netstat -an | grep tcp | awk '{print $ 5}' | coupe -f 1 -d: | trier | uniq -c | trier -n
Ensuite, j'utilise la règle iptables suivante pour bloquer l'IP coupable.
iptables -I INPUT 1 -s xxxx -j DROP
Cela fonctionne très bien et bloque l'adresse IP. Cependant, je ne peux pas rester en ligne 24/7 pour surveiller le serveur. Je me demandais s'il y avait un script Shell que je peux utiliser pour le faire automatiquement? Par exemple, si une adresse IP ouvre plus de X nombre de connexions à tout moment, elle devrait être automatiquement interdite par la règle iptables ci-dessus.
la source
Réponses:
Tout d'abord, ne réinventez pas la roue. C'est précisément à cela que
denyhosts
sert:Pour autant que je sache,
denyhosts
c'est uniquement pour lesssh
connexions mais il y a aussifail2ban
qui traite à peu près n'importe quoi:Les deux sont disponibles dans les référentiels:
Vous pouvez également l'écrire si vous le souhaitez. Quelque chose comme:
Le
awk
va extraire les adresses IP et les compter et imprimer uniquement celles qui apparaissent plusieursmax
fois (ici-vmax=100
, modifiez-les en conséquence). Les adresses IP sont ensuite introduites dans une boucle while qui exécute laiptables
règle appropriée .Pour exécuter ce 24/7, je ferais un cronjob qui exécute la commande ci-dessus toutes les minutes environ. Ajoutez cette ligne à
/etc/crontab
la source
fail2ban
n'est pas seulement pour ssh. Cela fonctionne également très bien pour le port 80. Voir, par exemple ici , ici et ici .Une autre option possible consiste à identifier et à traiter les adresses IP problématiques dans l'ensemble de règles iptables, à l'aide du
recent
module. Le défi avec cette méthode est la limite de comptage par défaut de 20, il faut donc soit dévier des valeurs par défaut, soit créer des compteurs de portage de niveau supérieur pour atteindre un point de déclenchement de décompte plus élevé.L'exemple ci-dessous provient de mon ensemble de règles iptables et interdira une adresse IP pendant un peu plus d'un jour s'il établit 80 nouvelles connexions TCP sur le port 80 en moins de 12 minutes. Une fois sur la liste des méchants, toute tentative de connexion remettra le compteur 1 jour à 0. Cette méthode pourrait atteindre un maximum de 400 hits avant d'être étendu à un autre report (et j'ai testé une autre chaîne de transfert). Notez que le code tel qu'il est publié possède l'infrastructure à utiliser pour interdire pendant longtemps uniquement plusieurs déclencheurs à temps plus court. Actuellement, je dois l'interdire pendant longtemps sur le premier déclencheur.
la source