Jump to content
Sign in to follow this  
fabio10

Troppe richieste GET contemporanee crashano il server

Recommended Posts

Ciao ! Ho un grosso problema con un server dedicato e vorrei un consiglio su come risolvere questo problema.

Spesso dei simpatici bot si diverto a richiedere contemporaneamente più di 20 pagine del mio blog wordpress (queste pagine fanno riferimento agli archivi dei post quindi molto "costose" da generare) e purtroppo il server si blocca inesorabilmente.

Si possono bloccare gli ip che mandano più di 5 GET contemporaneamente verso pagine diverse?

Ho già provato mod_evasive, ma purtroppo questo prende in considerazione anche le GET verso gli altri file (css, jpg etc.), e non posso settarlo con valori inferiori a 50 (altrimenti non posso far scaricare a nessuno le numerose immagini presenti in alcune pagine). Ecco un esempio di log che sovraccarica il server:

195.210.94.33 - - [23/Feb/2011:15:07:11 +0100] "GET /2008/01/12/giorgio-gaber/ HTTP/1.1" 200 44384
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /feed/ HTTP/1.1" 200 103585
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /feed/atom/ HTTP/1.1" 200 106954
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2010/09/ HTTP/1.1" 200 41645
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2010/11/ HTTP/1.1" 200 42660
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /xmlrpc.php HTTP/1.1" 200 42
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2010/08/ HTTP/1.1" 200 39437
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2011/02/ HTTP/1.1" 200 38643
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2011/01/ HTTP/1.1" 200 45978
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2010/12/ HTTP/1.1" 200 42726
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2010/10/ HTTP/1.1" 200 42690
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2010/06/ HTTP/1.1" 200 42130
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2010/07/ HTTP/1.1" 200 44876
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2009/10/ HTTP/1.1" 200 45470
195.210.94.33 - - [23/Feb/2011:15:07:20 +0100] "GET /wp-includes/js/tw-sack.js?ver=1.6.1 HTTP/1.1" 200 3619
195.210.94.33 - - [23/Feb/2011:15:07:20 +0100] "GET /2008/04/ HTTP/1.1" 200 46051
195.210.94.33 - - [23/Feb/2011:15:07:21 +0100] "GET /wp-content/themes/super-adsense-music/js/ajax_comments.js HTTP/1.1" 200 968
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /feed/rss/ HTTP/1.1" 200 6163
195.210.94.33 - - [23/Feb/2011:15:07:22 +0100] "GET /wp-content/plugins/nextgen-gallery/css/ngg_shadow.css?ver=1.0.0 HTTP/1.1" 200 6205
195.210.94.33 - - [23/Feb/2011:15:07:22 +0100] "GET / HTTP/1.1" 200 43596
195.210.94.33 - - [23/Feb/2011:15:07:22 +0100] "GET /min/f=wp-includes/js/jquery/jquery.js HTTP/1.1" 200 72054

Share this post


Link to post
Share on other sites
Ciao ! Ho un grosso problema con un server dedicato e vorrei un consiglio su come risolvere questo problema.

Spesso dei simpatici bot si diverto a richiedere contemporaneamente più di 20 pagine del mio blog wordpress (queste pagine fanno riferimento agli archivi dei post quindi molto "costose" da generare) e purtroppo il server si blocca inesorabilmente.

Si possono bloccare gli ip che mandano più di 5 GET contemporaneamente verso pagine diverse?

Ho già provato mod_evasive, ma purtroppo questo prende in considerazione anche le GET verso gli altri file (css, jpg etc.), e non posso settarlo con valori inferiori a 50 (altrimenti non posso far scaricare a nessuno le numerose immagini presenti in alcune pagine). Ecco un esempio di log che sovraccarica il server:

195.210.94.33 - - [23/Feb/2011:15:07:11 +0100] "GET /2008/01/12/giorgio-gaber/ HTTP/1.1" 200 44384
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /feed/ HTTP/1.1" 200 103585
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /feed/atom/ HTTP/1.1" 200 106954
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2010/09/ HTTP/1.1" 200 41645
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2010/11/ HTTP/1.1" 200 42660
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /xmlrpc.php HTTP/1.1" 200 42
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2010/08/ HTTP/1.1" 200 39437
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2011/02/ HTTP/1.1" 200 38643
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2011/01/ HTTP/1.1" 200 45978
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2010/12/ HTTP/1.1" 200 42726
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2010/10/ HTTP/1.1" 200 42690
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2010/06/ HTTP/1.1" 200 42130
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2010/07/ HTTP/1.1" 200 44876
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2009/10/ HTTP/1.1" 200 45470
195.210.94.33 - - [23/Feb/2011:15:07:20 +0100] "GET /wp-includes/js/tw-sack.js?ver=1.6.1 HTTP/1.1" 200 3619
195.210.94.33 - - [23/Feb/2011:15:07:20 +0100] "GET /2008/04/ HTTP/1.1" 200 46051
195.210.94.33 - - [23/Feb/2011:15:07:21 +0100] "GET /wp-content/themes/super-adsense-music/js/ajax_comments.js HTTP/1.1" 200 968
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /feed/rss/ HTTP/1.1" 200 6163
195.210.94.33 - - [23/Feb/2011:15:07:22 +0100] "GET /wp-content/plugins/nextgen-gallery/css/ngg_shadow.css?ver=1.0.0 HTTP/1.1" 200 6205
195.210.94.33 - - [23/Feb/2011:15:07:22 +0100] "GET / HTTP/1.1" 200 43596
195.210.94.33 - - [23/Feb/2011:15:07:22 +0100] "GET /min/f=wp-includes/js/jquery/jquery.js HTTP/1.1" 200 72054

 

utilizza iptables e limita il numero di connessioni per x secondi. una cosa di questo tipo (ps. copia/incolla a tuo rischio e pericolo):

 

#!/bin/bash

IPTABLES=/sbin/iptables
CHAINNAME="INPUT"
HTTPDS=30
HTTPDH=19

#HTTPD protection
$IPTABLES -N HTTPD_CHECK
$IPTABLES -A $CHAINNAME -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 80 -m state --state NEW -j HTTPD_CHECK
$IPTABLES -A HTTPD_CHECK -m recent --set --name HTTPD
$IPTABLES -A HTTPD_CHECK -m recent --update --seconds $HTTPDS --hitcount $HTTPDH --name HTTPD -j LOG --log-prefix "DDOS: " --log-level debug
$IPTABLES -A HTTPD_CHECK -m recent --update --seconds $HTTPDS --hitcount $HTTPDH --name HTTPD -j DROP

Share this post


Link to post
Share on other sites
utilizza iptables e limita il numero di connessioni per x secondi. una cosa di questo tipo (ps. copia/incolla a tuo rischio e pericolo):

 

#!/bin/bash

IPTABLES=/sbin/iptables
CHAINNAME="INPUT"
HTTPDS=30
HTTPDH=19

#HTTPD protection
$IPTABLES -N HTTPD_CHECK
$IPTABLES -A $CHAINNAME -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 80 -m state --state NEW -j HTTPD_CHECK
$IPTABLES -A HTTPD_CHECK -m recent --set --name HTTPD
$IPTABLES -A HTTPD_CHECK -m recent --update --seconds $HTTPDS --hitcount $HTTPDH --name HTTPD -j LOG --log-prefix "DDOS: " --log-level debug
$IPTABLES -A HTTPD_CHECK -m recent --update --seconds $HTTPDS --hitcount $HTTPDH --name HTTPD -j DROP

Grazie per la risposta!

Così però blocco tutte le connessioni indipendentemente se sono per immagini, css etc.

Si potrebbero bloccare solo quelle verso pagine e non gli altri file ?

Share this post


Link to post
Share on other sites
Grazie per la risposta!

Così però blocco tutte le connessioni indipendentemente se sono per immagini, css etc.

Si potrebbero bloccare solo quelle verso pagine e non gli altri file ?

 

Non con iptables che lavora a livello di IP e porta.

 

Scusa ma come mai nei log che ci riporti non compaiono gli UserAgent? Magari già con un htaccess puoi bloccare in parte questi bot.

Share this post


Link to post
Share on other sites
Non con iptables che lavora a livello di IP e porta.

 

Scusa ma come mai nei log che ci riporti non compaiono gli UserAgent? Magari già con un htaccess puoi bloccare in parte questi bot.

Purtroppo spesso non hanno user agent di bot, ma hanno user agent di normali browser

Share this post


Link to post
Share on other sites

Ciao Fabio10,

sostanzialmente per difenderti da questo tipo di problema puoi adottare queste precauzioni :

 

- utilizzare il connection tracking di iptables per bloccare gli ip che generano troppe connessioni in un determinato lasso di tempo verso la tua porta 80

- utilizzare il modulo hashlimit di iptables

- installare mod_antiloris

- installare mod_security2 e utilizzare la direttiva SecReadStateLimit

- utilizzare mod_security per intercettare i DoS HTTP

- sistemare Nginx davanti ad Apache per assorbire il carico

 

Generalmente con un iptables + antiloris o mod_security dovresti cavartela.Il problema è che dopo la fama mainstream che ha avuto LOIC sono diventati tutti bravi a fare gli HTTP DoS e allora dobbiamo guardarci le spalle più di prima.

Un saluto,ciao.

Share this post


Link to post
Share on other sites
Ciao ! Ho un grosso problema con un server dedicato e vorrei un consiglio su come risolvere questo problema.

Spesso dei simpatici bot si diverto a richiedere contemporaneamente più di 20 pagine del mio blog wordpress (queste pagine fanno riferimento agli archivi dei post quindi molto "costose" da generare) e purtroppo il server si blocca inesorabilmente.

Si possono bloccare gli ip che mandano più di 5 GET contemporaneamente verso pagine diverse?

Ho già provato mod_evasive, ma purtroppo questo prende in considerazione anche le GET verso gli altri file (css, jpg etc.), e non posso settarlo con valori inferiori a 50 (altrimenti non posso far scaricare a nessuno le numerose immagini presenti in alcune pagine). Ecco un esempio di log che sovraccarica il server:

195.210.94.33 - - [23/Feb/2011:15:07:11 +0100] "GET /2008/01/12/giorgio-gaber/ HTTP/1.1" 200 44384
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /feed/ HTTP/1.1" 200 103585
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /feed/atom/ HTTP/1.1" 200 106954
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2010/09/ HTTP/1.1" 200 41645
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2010/11/ HTTP/1.1" 200 42660
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /xmlrpc.php HTTP/1.1" 200 42
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2010/08/ HTTP/1.1" 200 39437
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2011/02/ HTTP/1.1" 200 38643
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2011/01/ HTTP/1.1" 200 45978
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2010/12/ HTTP/1.1" 200 42726
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2010/10/ HTTP/1.1" 200 42690
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2010/06/ HTTP/1.1" 200 42130
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2010/07/ HTTP/1.1" 200 44876
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /2009/10/ HTTP/1.1" 200 45470
195.210.94.33 - - [23/Feb/2011:15:07:20 +0100] "GET /wp-includes/js/tw-sack.js?ver=1.6.1 HTTP/1.1" 200 3619
195.210.94.33 - - [23/Feb/2011:15:07:20 +0100] "GET /2008/04/ HTTP/1.1" 200 46051
195.210.94.33 - - [23/Feb/2011:15:07:21 +0100] "GET /wp-content/themes/super-adsense-music/js/ajax_comments.js HTTP/1.1" 200 968
195.210.94.33 - - [23/Feb/2011:15:07:12 +0100] "GET /feed/rss/ HTTP/1.1" 200 6163
195.210.94.33 - - [23/Feb/2011:15:07:22 +0100] "GET /wp-content/plugins/nextgen-gallery/css/ngg_shadow.css?ver=1.0.0 HTTP/1.1" 200 6205
195.210.94.33 - - [23/Feb/2011:15:07:22 +0100] "GET / HTTP/1.1" 200 43596
195.210.94.33 - - [23/Feb/2011:15:07:22 +0100] "GET /min/f=wp-includes/js/jquery/jquery.js HTTP/1.1" 200 72054

 

Dai un'occhiata anche a fail2ban: Fail2ban

 

Ciao,

 

F.

Share this post


Link to post
Share on other sites

 

Generalmente con un iptables + antiloris o mod_security dovresti cavartela.Il problema è che dopo la fama mainstream che ha avuto LOIC sono diventati tutti bravi a fare gli HTTP DoS e allora dobbiamo guardarci le spalle più di prima.

Un saluto,ciao.

 

Grazie per i consigli :approved:

 

Dai un'occhiata anche a fail2ban: Fail2ban

Ciao,

F.

Con una espressione regolare potrei far bloccare a fail2ban proprio le GET verso le pagine e non verso le immagini. Credo che proverò così, grazie!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×