Per offrirti un'esperienza di navigazione sempre migliore, questo sito utilizza cookie propri e di terze parti, partner selezionati. I cookie di terze parti potranno anche essere di profilazione.
Le tue preferenze si applicheranno solo a questo sito web. Puoi modificare le tue preferenze in qualsiasi momento ritornando su questo sito o consultando la nostra informativa sulla riservatezza.
E' possibile rivedere la nostra privacy policy cliccando qui e la nostra cookie policy cliccando qui.
Per modificare le impostazioni dei cookies clicca qui
  • seguici su feed rss
  • seguici su twitter
  • seguici su linkedin
  • seguici su facebook
  • cerca

SEI GIA' REGISTRATO? EFFETTUA ADESSO IL LOGIN.



ricordami per 365 giorni

HAI DIMENTICATO LA PASSWORD? CLICCA QUI

NON SEI ANCORA REGISTRATO ? CLICCA QUI E REGISTRATI !

Come bloccare traffico in ingresso su Apache utilizzando il file .htaccess

di :: 23 marzo 2018
Come bloccare traffico in ingresso su Apache utilizzando il file .htaccess

Come sappiamo, il file .htaccess è un file utilizzato per modificare la configurazione del server web Apache, per creare un accesso riservato ad una directory, per redirigere il traffico http su https, per l'url rewriting tanto caro ai SEO, per abilitare / disabilitare funzionalità aggiuntive di Apache.

In questo articolo ci occupiamo come bloccare il traffico indesiderato su Apache utilizzando proprio il file .htaccess file

Vediamo come bloccare il traffico proveniente da un determinato IP, o da un certo paese, o da un certo uno spider (un motore di ricerca) o un crawler (cioè un programma che scansiona un sito) non desiderato.

Il vantaggio di utilizzare il file .htaccess risiede nel fatto che potete modificare le impostazioni di Apache senza dover avere accesso come utenti root al server, e in particolare al file di configurazione di Apache (localizzato, ad esempio in una distribuzione Centos, al path "/etc/httpd/conf/httpd.conf").

In file .htaccess infatti è posizionato nella root del vostro sito web, cioè dove è presente la prima pagina (index.html, index.php) del vostro sito, per cui potete crearlo/modificarlo in locale e poi uplodarlo via ftp sullo spazio web esattamente come fate per le pagine web del sito.

Bloccare il traffico in Apache basandosi sugli indirizzi IP

Vediamo come bloccare il traffico proveniente da un determinato indirizzo IP, quindi da una determinata fonte di traffico.

Editiamo (o creiamo) il file .htaccess utilizziamo l'editor "vi" (voi utilizzate l'editor che preferite)

# vi /var/www/html/miosito/.htaccess

All'interno del file occorre aggiungere queste righe

Order allow,deny
Allow from all
Deny from 150.20.0.0/12
Deny from 191.16.0.0/16
Deny from 12.16.1.0/8

Stiamo dicendo a Apache si accettare in ingresso tutto il traffico ("Allow from all") e di negare l'accesso al traffico proviente a range di IP (come nel nostro esempio).

Ma possiamo anche bloccare singoli IP in questo modo

Deny from 62.147.235.247
Deny from 5.239.178.248

E infine possiamo bloccare la radice un un IP, ad esempio tutti gli IP che iniziano per "192.168"

Deny from 62.147
Deny from 5.239

Nelle versioni di Apache 2.4 e/o superiori, possiamo usare anche questo metodo alternativo

<RequireAll>
Require all granted
Require not ip 62.147.235.247
Require not ip 5.239.178.248
</RequireAll>

Un altro modo di scrivere l'htaccess per bloccare uno o più IP ed è tramite l'utillizzo di regole di Rewrite, e le cose inziano a farsi interessanti e un po più complicate.

Editate il file .htaccess in questo modo

RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^62\.147\.235\.247
RewriteRule (.*) - [F,L]

Facciamo attenzione alle backslash "\" presenti nell'indirizzo IP: serve ad indicare al file htaccess di gestire i punti come letterali anziché come carattere "jolly". Un carattere "jolly" è un carattere speciale, utilizzato in modo differente da quello che normalmente facciamo noi. Mettendo la "\" gli stiamo dicendo di leggerlo effettivamente come un punto.

Il flag "[F]" farà si che Apache risponda con un codice di errore "403 Forbidden" (cioè "pagina non trovata").

Il flag "[L]" serve a non andare oltre nella lettura del file .htaccess, nel caso si stata verificata la condizione che stavamo cercando (quello specifico IP). Il file infatti potrebbe avere molte righe successive a quelle che abbiamo scritto. Così facendo, blocchiamo l'utente e ci fermiamo li.

Per utilizzare il Rewrite tuttavia su Apache il modulo rewrite deve essere abilitato. Se siete in un hosting condiviso è molto probabile che lo sia, se invece disponete di un server dedicato verificate la sua installazione.

Per esser quindi certi di applicare la regola SOLO che il modulo è installato, dobbiamo racchiudere quel codice all'interno dei tag "IfModule": così facendo, se il modulo non è installato, la regola verrà saltata

<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{REMOTE_ADDR} ^192\.168\.46\.174
	RewriteRule (.*) - [F,L]
</IfModule>

Se vogliamo bloccare molti IP:

<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{REMOTE_ADDR} ^62\.147\.235\.247 [OR]
	RewriteCond %{REMOTE_ADDR} ^5\.239\.178\.248  [OR]
	RewriteCond %{REMOTE_ADDR} ^77\.73\.215\.123  [OR]
	RewriteRule (.*) - [F,L]
</IfModule>

Come vediamo è utilizzato "OR" per prendere in esame più condizioni: se una di quelle condizioni è verificata, l'utente verrà bloccato.

Ed ancora, per bloccare dei range di IP

<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{REMOTE_ADDR} ^62\.147\.      [OR]
	RewriteCond %{REMOTE_ADDR} ^5\.239\.       [OR]
	RewriteCond %{REMOTE_ADDR} ^77\.73\.213\.
	RewriteRule (.*) - [F,L]
</IfModule>

Vediamo adesso altri utilizzi del modulo rewrite per bloccare l'accesso al nostro sito (di seguito non utilizziamo "<ifmodule>" sono per non scrivere troppo codice).

Bloccare il traffico in Apache basandosi sullo USER AGENT

Capita spesso di vedere sul proprio sito traffico proveniente ad esempio da motori di ricerca, attività normale per uno spider che indicizza le nostre pagine periodicamente.

Tuttavia questa analisi del nostro sito potrebbe arrivare da spider che vogliamo bannare perchè non ci interessa essere presenti su quel motore di ricerca, o da spider "sospetti" (ad esempio un crowler che vuole tentare un attacco ad aree protette del sito). I motori di ricerca si presentano sempre con lo stesso nome, o meglio con lo stesso USER AGENT.

Potete trovare la lista di tutti gli spider presente sul web (in continua evoluzione) cercando sul vostro motore di ricerca preferito le parole "user agent crowler list" o "user agent spider list" o parole simili.

Vediamo come bloccare il traffico sulla base dello USER AGENT

Ad esempio vogliamo bloccare il traffico proveniente dallo spider "EvilBot"

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^EvilBot [NC]
RewriteRule (.*) - [F,L]

Stiamo dicendo ad .htaccess di bloccare il traffico il cui user agent inzia "^" con EvilBot.  Con "NC" diciamo al file .htaccess di fermarsi alla lettura delle righe successive se la regola è stata verificata.

Se vogliamo bloccare gli spider "EvilBot" "ScumSucker" e "FakeAgent"

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^EvilBot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^ScumSucker [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^FakeUser [NC]
RewriteRule (.*) - [F,L]

Come vediamo si è utilizzato "OR" per dire al file .htaccess di verificare che almeno una delle regole indicate sia verificata

In alternatica possiamo scrivere la regola così, tutto su una riga

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} (EvilBot|ScumSucker|FakeAgent) [NC]
RewriteRule (.*) - [F,L]

Bloccare il traffico in Apache basandosi sulla Request URI

Capita spesso, guardando i log, di vedere accessi a pagina inesistenti ma palesemente indirizzati a pagine o directory riservate.

Ad esempio spesso mi capita di trovare tentativi di accesso ripetuti al PhpMyAdmin, cioè da dove amministro il database del mio sito web, attraverso url simili a queste.

http://www.miosito.it/phpmyadmin
http://www.miosito.it/PhpMyAdmin
http://www.miosito.it/phpma
http://www.miosito.it/padmin
.........

Questi sono evidentemente crowler che hanno l'obiettivo di individuare aree sensibili del sito per poi tentarne un attacco.
Blocchiamo tutte i tentativi di accesso alle url inesistenti (tranne ovviamente quella che usiamo anche noi) così

RewriteEngine On
RewriteCond %{QUERY_STRING} (PhpMyAdmin|phpma|padmin) [NC]
RewriteRule (.*) - [F,L]

Possiamo usare questa metodologia anche per bloccare gli accessi alle nostre pagine che presentano appesi alle nostre url parametri che non ci aspettiamo

Ad esempio se vogliamo bloccare gli accessi come questi

http://miosito.it/?id=123&hack=2&set=1235
http://miosito.it/?id=123&what=2&set=1235

Se voglio bloccare gli accessi che nelle url sono presenti le stringhe "hack" e "what" opero così

RewriteEngine On
RewriteCond %{QUERY_STRING} (hack|what) [NC]
RewriteRule (.*) - [F,L]

In generale con questo metodo agiamo sulla "Request URI" del nostro indirizzo, cioè su tutto cio che è presente nella url dalla fine del dominio "http://miosito.it" in avanti, e quindi su eventuali directory presenti o parametri appesi.

Bloccare il traffico basandosi sul REFERER

Qualche sito "furbone", per non utilizzare le risorse del proprio server, potrebbe inserire nelle proprie pagine degli oggetti, ad esempio delle immagini, presenti nel nostro sito, sottraendo quindi banda al nostro sito invece che al suo.

Se ci accorgiamo di essere oggetto di questa tecnica, tramite l'analisi del REFERER, cioè del sito di provenienza, possiamo banner il sito in questione così:

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^http://(.*)sitofurbo\.com [NC]
RewriteRule .* - [F,L]

Per bloccare contemporaneamente più siti utilizziamo questo codice

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^http://(.*)sitofurbo1\.com [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://(.*)sitofurbo2\.com [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://(.*)sitofurbo3\.com [NC]
RewriteRule .* - [F,L]

Abbandoniamo il metodo rewrite e vediamo ancora un metodo per bloccare gli accessi.

Bloccare il traffico in Apache proveniente da un determinato paese

Per bloccare il traffico in ingresso da un determinato paese non è necessario conoscere tutti gli IP di quel paese. E' sufficiente disporre del codice che identifica il paese.

Ad esempio "IT" per l'Italia, "DE" per la Germania, "FR" per la Francia, "ES" per la Spagna, "PT" per il Portogallo,...

E' possibile cercare la lista completa dei codici paese, cercando sul vostro motore di ricerca preferito i termini "iso country code list". Questa la lista fornita da Wikipedia.

Se, ad esempio, volessimo bloccare il traffico proveniente dalla Francia e dalla Germania utilizziamo queste righe nel file ".htaccess"

SetEnvIf CF-IPCountry FR BuzzOff=1
SetEnvIf CF-IPCountry DE BuzzOff=1
Order allow,deny
Allow from all
Deny from env=BuzzOff

In modo similiare possiamo bloccare il traffico proveniente da altri paesi.

Potrebbe interessarti

 
 
 
 
pay per script

Hai bisogno di uno script PHP personalizzato, di una particolare configurazione su Linux, di una gestione dei tuoi server Linux, o di una consulenza per il tuo progetto?

x

ATTENZIONE