Autore Topic: Come bannare gli utenti tramite .htaccess  (Letto 89 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Flavio93Zena

  • Staff IS
  • *******
  • Post: 3141
  • Sesso: Maschio
  • Sniper Legends
    • Mostra profilo
  • Versione SMF: 2.0.x
  • Versione ElkArte: -
Come bannare gli utenti tramite .htaccess
« il: Venerdì, 19 Febbraio 2021 13:46 »
Questa è la traduzione della mia stessa guida, che ho postato sul sito ufficiale, e che non linkerò di proposito :)

SMF ha di default una funzione che consente agli amministratori di bannare gli utenti tramite IP, ma questa cosa ha diversi problemi che non possono essere risolti:
  • Ogni volta che un utente carica una pagina SMF deve controllare se l'IP che sta utilizzando abbia o meno l'autorizzazione per vedere la pagina stessa;
  • SMF deve controllare tutti gli utenti connessi, confrontando il loro IP con quelli presenti nella lista di IP bannati;
  • Gli utenti bannati spammano il registro errori, specialmente se sono spambot che tentano di accedere alla pagina centinaia di volte (100 accessi negati significano 100 errori nel registro per UNO spambot);
  • Questo controllo rallenterà il sistema, inevitabilmente;
  • Non può essere cambiato creando una tabella, e questo check e l'unico modo di bannare gli utenti tramite SMF (e qualunque altro forum software).


Come dovrei bannare gli utenti?

Dovresti bannare gli utenti tramite il file .htaccess che è salvato sul tuo server, oppure creandolo. Se non sai come crearlo semplicemente crea un file .txt, incollaci il codice dentro e quando hai finito rinominalo, cambiando l'estensione da .txt ad ".htaccess". ;)
Per esempio: fileditesto.txt --> rinomina --> .htaccess
Aprilo e aggiungi il codice, meglio se alla fine ;)



Che cosa dovrei aggiungere al mio file .htaccess?

Grazie a Lou69 posso aggiungere questi due link come esempi:

Ma siccome contengono un sacco di altre cose mi limiterò a spiegare solo quelle che ci interessano. Il server può essere configurato per accettare o rifiutare l'accesso ad ogni IP non incluso nella lista che faremo. Come? Così:
Codice: [Seleziona]
order allow,deny or
Codice: [Seleziona]
order deny,allowIn pratica il primo configura il server per negare l'accesso a qualunque IP non nella lista, mentre il secondo consente l'accesso a tutti gli IP non nella lista di default.
Fai attenzione nello scegliere tra i due perchè è vitale, essendo che controllano l'ordine delle operazioni effettuate dal server. Cosa significa? "allow,deny" elaborerà prima tutti gli IP nella lista delle eccezioni, mentre invece "deny,allow" farà il contrario.
Come dicevo prima scegliere uno dei due è cruciale e dovrai scrivere tutto perfettamente o il tuo sito potrebbe risultare irraggiungibile per tutti.



Facciamo qualche esempio, diciamo di voler bannare questo IP 30.31.32.33 e vogliamo ammettere tutti gli altri IP sul sito, come facciamo? Possiamo farlo in 2 modi:
Codice: [Seleziona]
order allow,deny
deny from 30.31.32.33
allow from all
or either
Codice: [Seleziona]
order deny,allow
deny from 30.31.32.33
Come vedi sono leggermente diversi
  • Il primo ha "allow from all" alla fine, perchè il setup di default del server è di negare l'accesso a tutti gli IP non sulla lista
  • Il secondo non ha quella stringa perchè il server elabora gli IP bannati prima di quelli ammessi e scrivere "allow from all" sbannerebbe tutti gli utenti bannati ( :P )


Come bannare un range di IP?

Diciamo di voler bannare tutti gli utenti con questo range di IP: 30.31.32.XX, dove le XX stanno per qualsiasi numero. Dovremo fare così:
Codice: [Seleziona]
order allow,deny
deny from 30.31.32.0/24
allow from all
oppure
Codice: [Seleziona]
order deny,allow
deny from 30.31.32.0/24
Non spiegherò le ragioni per lo 0/24 perchè è piuttosto complicato per i nuovi utenti.

Un altro esempio, vogliamo bannare questo range: 30.31.XX.XX dove le XX stanno per qualsiasi numero. Dovremo fare così:
Codice: [Seleziona]
order allow,deny
deny from 30.31.0/16
allow from all
oppure
Codice: [Seleziona]
order deny,allow
deny from 30.31.0/16

Ancora un altro esempio - vogliamo bannare questo range: 30.XX.XX.XX dove le XX stanno per qualsiasi numero. Dovremo fare così:
Codice: [Seleziona]
order allow,deny
deny from 30.0/8
allow from all
oppure
Codice: [Seleziona]
order deny,allow
deny from 30.0/8

Potrete trovare maggiori informazioni qui: http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#IPv4_CIDR_blocks



Avete bisogno di un'eccezione per sbannare un IP dentro un range di IP bannato?

Diciamo di voler bannare questo range di IP (30.31.32.XX) ma di voler mantenere questo IP sbannato (30.31.32.33). Come? (Ovviamente a qualsiasi altro utente sarà dato l'accesso)
Codice: [Seleziona]
order deny,allow
deny from 30.31.32.0/24
allow from 30.31.32.33
Non si può fare con "order allow,deny" perchè elaborerebbe gli utenti bannati dopo quelli ammessi, per cui inevitabilmente bannerebbe anche le eccezioni. Dunque stavolta niente alternativa.



Utilizzate Cloudflare sul vostro forum?

Se utilizzate Cloudflare sul vostro forum, tutti i codici sopra non funzioneranno correttamente e dovrete cambiare alcune cose. "order allow,deny" e "order deny,allow" funzioneranno con Cloudflare ma siccome questo servizio maschera tutti gli IP come se provenissero (di solito) da 108.162.XXX.XXX tutti i ban effettuati con il metodo di cui sopra non funzioneranno correttamente.
Come bannare gli utenti se abbiamo Cloudflare allora? Dovrete aggiungere questo codice:
Codice: [Seleziona]
SetEnvIf X-FORWARDED-FOR 1.2.3.4 deniedip o
Codice: [Seleziona]
SetEnvIf X-FORWARDED-FOR 1.2.3.4 allowedipQuesto deve essere fatto per OGNI stringa di ban.

Alla fine di tutto dovrete aggiungere anche
Codice: [Seleziona]
deny from env=deniedip per fare in modo che funzioni :) Ovviamente dovrete cambiarlo in
Codice: [Seleziona]
allow from env=allowedip se volete dare l'accesso solo a poche persone.

La notazione CIDR (0/8, 0/16, 0/24) funzionerà fintanto che aggiungerete il codice
Codice: [Seleziona]
SetEnvIf X-FORWARDED-FOR
Esempio 1 (IP 1.2.3.4 è l'unico bannato):
Codice: [Seleziona]
SetEnvIf X-FORWARDED-FOR 1.2.3.4 deniedip
order allow,deny
deny from env=deniedip

Esempio 2 (IP 1.2.3.4 è l'unico IP ammesso):
Codice: [Seleziona]
SetEnfIf X-FORWARDED-FOR 1.2.3.4 allowedip
order deny,allow
deny from all
allow from env=allowedip

Questa parte mi ha fatto venire parecchi mal di testa e probabilmente è la più complicata... Ho provato ad essere più chiaro possibile ma se non capite sentitevi liberi di chiedere :)
A livello di "crediti" la parte di Cloudflare è stata adattata da qui: http://blog.ergatides.com/2011/09/07/securing-wordpress-dashboard-using-htaccess-behind-cloudflare-or-any-other-cdn/ non è esattamente la stessa ma ho preso ispirazione da lì.



Non inserite spazi vuoti fra "order", "deny" e viceversa! Scrivete semplicemente "order allow,deny" o "order deny,allow" e niente spazi vuoti vicino alla virgola! Stessa cosa per tutte le stringhe di Cloudflare.



Topic e messaggi relativi:



Crediti: Arantor, a10, Antechinus, Kindred, br360, emanuele, Shambles e CoreISP, grazie per il vostro input e aiuto.

Ringraziamenti speciali per Lou69 per i link.
« Ultima modifica: Venerdì, 19 Febbraio 2021 19:17 da Flavio93Zena »

 

Gestione utenti veloce

Aperto da giulianoSezione Mods - Modifiche SMF

Risposte: 5
Visite: 2534
Ultimo post Lunedì, 01 Aprile 2013 14:13
da giuliano
Gruppo utenti

Aperto da titaniumSezione SMF 2.0

Risposte: 12
Visite: 3454
Ultimo post Venerdì, 17 Maggio 2013 22:05
da emanuele
Utenti online

Aperto da ikarowebSezione SMF 2.0

Risposte: 9
Visite: 3011
Ultimo post Lunedì, 24 Giugno 2013 11:54
da ikaroweb
SimplePortal 2.3.7 © 2008-2018, SimplePortal