1

Je souhaite interdire les adresses IP qui provoquent des erreurs multiples 404 sur mon site Web. J'ai beaucoup googlé et trouvé quelques scripts qui m'ont donné des idées pour commencer. Et je les ai combinés. Voici mon script:script mod_secure pour bloquer les adresses IP qui provoquent plusieurs 404

# Determining temp data dir  
SecDataDir "C:\logs\datastore" 
# 
# Loading previous data for the IP request 
SecAction "phase:1,initcol:ip=%{REMOTE_ADDR},id:'1006'" 
# 
# Incrementing block_script counter if client caused status #404 
SecRule RESPONSE_STATUS "@streq 404" "phase:2,pass,setvar:ip.block_script=+1,expirevar:ip.block_script=30,id:'1007'" 
# 
# Denying the request if the block_script counter is greater than 3 
SecRule IP:BLOCK_SCRIPT "@gt 3" "phase:2,deny,status:403,id:'1008'" 

Pour une raison quelconque, cela ne fonctionne pas. Je crois qu'il y a une erreur. Je suis vraiment désolé, je ne suis pas codeur gourou ou même programmeur. Je suis juste en train de jouer avec mon projet homebrewed quand j'ai le temps. J'espère que quelqu'un m'aidera et que mon erreur est facile à trouver et à corriger.

Merci d'avance!

Le répertoire 'datastore' est créé, accessible et j'y vois 2 fichiers de 0 octets.

Merci!

+0

Cela peut-il être dû à la limitation de l'erreur d'analyse 404? "Notez que certains codes d'état de réponse (tels que 404) sont traités plus tôt dans le cycle de requête par Apache et que mon code ne peut pas être déclenché comme prévu." " ** SecAuditEngine ** ModSecurity peut actuellement enregistrer la plupart des transactions, mais pas toutes. Les transactions impliquant des erreurs (par exemple 400 et 404 transactions) utilisent un chemin d'exécution différent, que ModSecurity ne prend pas en charge. " – EIKA

Répondre

0

Vous essayez de lire l'état de la réponse dans une règle de phase 2. Ce ne sera pas réglée jusqu'à la phase 3 pour modifier la règle 1007 à la phase 3.

Je ne sais pas c'est une bonne idée mais pour plusieurs raisons:

  • Première des collections persistantes dans ModSecurity sont notoirement instable sous n'importe quel type de charge et vous suivez chaque adresse IP qui frappe votre serveur, chaque fois qu'il frappe. C'est beaucoup de suivi et beaucoup d'accès à cette collection. Personnellement, jusqu'à ce que ModSecurity apporte un système de stockage en mémoire au lieu d'un disque, je ne recommande pas de les utiliser et conseille fortement ModSecurity est utilisé uniquement avec les mêmes règles de transaction qui ne nécessitent pas de stockage persistant.

  • Ensuite, vous bloquez après trois 404 dans la même fenêtre de 30 secondes. Une page Web mal configurée avec quelques images manquantes que vous bloquez le trafic légitime. En outre, si vous avez 3 pages manquantes dans un moteur de recherche, vous bloquez les moteurs de recherche (par exemple GoogleBot), ce qui pourrait causer des dommages considérables à votre site.

  • Enfin, quel est le point? Vous ne sauvegardez probablement aucune charge sur votre serveur web car les frais généraux en exécutant cette règle de ModSecurity et en renvoyant un 403 l'emporteront probablement sur la surcharge en retournant simplement un vieux 404. Le délai de 30 secondes semble arbitraire, est facilement contourné (soit intentionnellement ou non), et il en résultera une bizarrerie qui ne fera que compliquer plus tard ("hé bogue bizarre, certaines réponses fonctionnent, certains retournent 403 - apparemment au hasard, je ne peux pas le comprendre") et analysant les vrais 404 ou le trafic web difficile que les changements de classification.

Je ne sais pas si vous vouliez ce conseil plutôt que la simple réponse, mais je vous préviens que si vous n'aviez pas envisagé cela!

+0

Merci pour votre réponse Maintenant, avec la phase modifiée, il commence à fonctionner! Mais il nécessite 4 des 404 visites avant le premier acte Mais non 3. Vous savez pourquoi? Je veux y remédier À propos de vos préoccupations Ne vous inquiétez pas du tout! Ce sont des valeurs de test, je vais utiliser un autre. Et c'est pour un projet spécial avec vraiment Il y a seulement 20 à 50 visiteurs par jour au maximum, et enfin, je vais ajuster l'interdiction pour une semaine et augmenter 404 contre 5 ou quelque chose comme ça: FYI: c'est Windows Apache, et les solutions comme Fail2Ban ne fonctionnera pas – EIKA

+0

Est-ce que la phase 3 fonctionne après tout en fonction de votre réponse ci-dessous? –

+0

Oui, merci! J'ai posté le code de travail final. – EIKA

1

On dirait que la version finale et avec précision de travail est:

SecAction "phase:1,initcol:ip=%{REMOTE_ADDR},id:'1006'" 
SecRule RESPONSE_STATUS "@streq 404" "phase:3,pass,setvar:ip.block_script=+1,expirevar:ip.block_script=600,id:'1007'" 
SecRule IP:BLOCK_SCRIPT "@ge 3" "phase:2,deny,status:403,id:'1008'" 

Vous devez changer ip.block_script var (temps d'interdiction) et après ge (contre les erreurs) aux valeurs requises. Par exemple. 3600 et 5 en conséquence.