Come bannare gli utenti tramite .htaccess

Aperto da Flavio93Zena, Venerdì - 19 Febbraio 2021 - 13:46

0 Utenti e 1 Visitatore stanno visualizzando questa discussione.

Flavio93Zena

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:
  • http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#order
  • http://httpd.apache.org/docs/current/mod/mod_access_compat.html#allow
    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ì:
    order allow,deny or order deny,allow
    In 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:
    order allow,deny
    deny from 30.31.32.33
    allow from all
    or either
    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ì:
    order allow,deny
    deny from 30.31.32.0/24
    allow from all

    oppure
    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ì:
    order allow,deny
    deny from 30.31.0/16
    allow from all

    oppure
    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ì:
    order allow,deny
    deny from 30.0/8
    allow from all

    oppure
    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)
    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:
    SetEnvIf X-FORWARDED-FOR 1.2.3.4 deniedip o SetEnvIf X-FORWARDED-FOR 1.2.3.4 allowedip
    Questo deve essere fatto per OGNI stringa di ban.

    Alla fine di tutto dovrete aggiungere anche deny from env=deniedip per fare in modo che funzioni :) Ovviamente dovrete cambiarlo in 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 SetEnvIf X-FORWARDED-FOR

    Esempio 1 (IP 1.2.3.4 è l'unico bannato):

    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):

    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.

Discussioni simili (3)