web-dev-qa-db-fra.com

Comment puis-je bloquer une adresse IP, si je reçois plusieurs requêtes http en une seconde?

Si quelqu'un a tenté de forcer une attaque par rafale sur mon site Web, comment puis-je les bloquer?

Idéalement, je veux bloquer une IP si j'ai beaucoup de requêtes http/Apache en une seconde.

17
lee peat

fail2ban peut être configuré pour ce faire. Vous pouvez le configurer pour qu'il se déclenche sur une correspondance d'expressions régulières dans un fichier journal et si cela se produit trop de fois par minute (vous ne savez pas s'il passe à la deuxième résolution, mais multipliez simplement ce que vous pensiez par seconde par 60) et il peut supprimer l'adresse IP du client dans le filtre de paquets iptables ou toute autre action que vous souhaitez entreprendre. Ou vous pouvez utiliser le module récent iptables et adapter ce que j'ai fait ici pour SIP attaques par force brute à utiliser avec votre serveur Web:

# Deal with SIP brute forcing
iptables -N SIP_WHITELIST
# home
iptables -A SIP_WHITELIST -s 1.2.3.0/24 -m recent --remove --name SIP -j ACCEPT
# voip provider
iptables -A SIP_WHITELIST -s 4.5.6.0/24 -m recent --remove --name SIP -j ACCEPT
# remote location
iptables -A SIP_WHITELIST -s 7.8.9.0/24 -m recent --remove --name SIP -j ACCEPT

iptables -N SIP_BRUTEFORCE
iptables -A SIP_BRUTEFORCE -m recent --set --name SIP
iptables -A SIP_BRUTEFORCE -p udp --dport 5060 -m state --state NEW -j SIP_WHITELIST
iptables -A SIP_BRUTEFORCE -m recent --update --seconds 30 --hitcount 3 --name SIP -j LOG
iptables -A SIP_BRUTEFORCE -m recent --update --seconds 30 --hitcount 3 --name SIP -j DROP

iptables -A INPUT -p udp --dport 5060 -m state --state NEW -j SIP_BRUTEFORCE

Source: https://web.archive.org/web/20180901235739/http://tracyreed.org/blog/2010/ 12/26/sip-brute-force-attack

10
Tracy Reed

fail2ban est une solution facile à implémenter dans ces cas.

Ajouter un block-all-dem-noobs.conf fichier dans votre filter.d répertoire, quelque chose comme ça

[Definition]
failregex = ^<Host> -.*"GET.*

Traduction: un RegExp pour trouver les requêtes GET

Créez ensuite une nouvelle entrée dans votre jail.conf, quelque chose comme ça

[block-all-dem-noobs]
enabled = true
port = http,https
filter = block-all-dem-noobs
logpath = /var/log/httpd/access.log
maxretry = 100
findtime = 5
bantime = 600
action = iptables[name=HTTP, port=http, protocol=tcp]

Traduction: regardez dans mon access.log fichier, puis bloquer pendant 600 secondes (10 minutes) les adresses IP qui ont fait 100 requêtes en 5 secondes

Un inconvénient majeur, cependant, est que cela pourrait produire des faux positifs pour les utilisateurs de NAT ed, car ils apparaîtront tous comme une seule adresse IP.

13
Adi

Vous pouvez configurer le module Apache mod_evasive. Ce module fournit une fonction très basique en conservant une table de hachage des IP et des pages demandées et lorsqu'un niveau de seuil est dépassé sur une page ou un site cible, il "bloquera" l'IP avec une erreur 403 "Interdit". Pour les détails de configuration, vous lisez " Comment arrêter une attaque Apache DDoS avec mod_evasive ".

2
Ali Ahmad