Domanda

Gente, sappiamo tutti che la blacklist IP non funziona - gli spammer possono entrare attraverso un proxy, inoltre, gli utenti legittimi potrebbero essere colpiti ... Detto questo, la blacklist mi sembra essere un meccanismo efficace per fermare un persistente attaccante, dato che l'elenco effettivo di IP viene determinato in modo dinamico, in base al feedback dell'applicazione e al comportamento dell'utente.

Ad esempio: - qualcuno che cerca di forzare la schermata di accesso - un bot scritto male invia richieste HTTP molto strane al tuo sito - uno script-kiddie utilizza uno scanner per cercare vulnerabilità nella tua app

Mi chiedo se il seguente meccanismo funzionerebbe e, in tal caso, sai se ci sono strumenti che lo fanno:

  • In un'applicazione Web, lo sviluppatore ha un hook per segnalare un "reato". Un reato può essere minore (password non valida) e ci vorranno dozzine di tali reati per essere inseriti nella lista nera; oppure può essere grave e un paio di tali reati in un periodo di 24 ore ti mettono fuori gioco.
  • Qualche forma di blocco a livello di server Web si attiva prima che ogni pagina venga caricata e determina se l'utente proviene da un "cattivo" IP.
  • C'è un " perdono " meccanismo incorporato: i reati non contano più contro un IP dopo un po '.

Grazie!

Nota extra: sarebbe fantastico se la soluzione funzionasse in PHP, ma mi piacerebbe sentire le tue opinioni sull'approccio in generale, per qualsiasi lingua / piattaforma

È stato utile?

Soluzione

sei su una macchina * nix? questo genere di cose è probabilmente meglio lasciato al livello del sistema operativo, usando qualcosa come iptables

modifica:

in risposta al commento, sì (sorta di). tuttavia, l'idea è che iptables può funzionare in modo indipendente. puoi impostare una certa soglia per limitare (ad esempio, bloccare le richieste sulla porta 80 TCP che superano x richieste / minuto) e tutto ciò è gestito in modo trasparente (cioè, la tua applicazione non ha davvero bisogno di sapere nulla al riguardo, per avere il blocco dinamico ha luogo).

Suggerirei il metodo iptables se hai il pieno controllo del box e preferirei che il tuo firewall gestisca la limitazione (i vantaggi sono che non hai bisogno di costruire questa logica nella tua app web e può risparmiare risorse poiché le richieste vengono eliminate prima che colpiscano il tuo server web)

altrimenti, se prevedi che il blocco non sarà un componente enorme (o la tua app è portatile e non può garantire l'accesso a iptables), allora avrebbe più senso costruire quella logica nella tua app.

Altri suggerimenti

Dai un'occhiata a fail2ban . Un framework python che consente di sollevare blocchi di tabelle IP dai file di registro di coda per schemi di comportamento errato.

Penso che dovrebbe essere una combinazione di nome utente più blocco IP. Non solo IP.

stai visualizzando il codice di blocco personalizzato. Esistono applicazioni nel mondo open source che contengono vari tipi di tale codice. Forse dovresti esaminare alcuni di questi, anche se i tuoi requisiti sono piuttosto banali, quindi segna una combinazione IP / nome utente e utilizzalo per bloccare un IP per x quantità di tempo. (Nota che ho detto di bloccare l'IP, non l'utente. L'utente può provare a collegarsi online tramite una combinazione valida IP / nome utente / pw.)

È un dato di fatto, potresti anche tenere traccia degli accessi degli utenti e, quando accedi da un IP sconosciuto con una combinazione di 3 nomi utente / pw non validi, blocca quell'IP per il tempo che preferisci per quel nome utente. (Nota che molti ISP condividono IP, quindi ....)

Potresti anche voler ritardare l'autenticazione, in modo che un IP non possa tentare un accesso più di una volta ogni 'y' secondi circa.

Ho sviluppato un sistema per un client che ha tenuto traccia degli hit contro il web server e ha vietato dinamicamente gli indirizzi IP a livello di sistema operativo / firewall per periodi di tempo variabili per determinati reati, quindi sì, questo è sicuramente possibile. Come ha detto Owen, le regole del firewall sono un posto molto migliore per fare questo genere di cose rispetto al web server. (Sfortunatamente, il cliente ha scelto di detenere un copyright rigoroso su questo codice, quindi non sono libero di condividerlo.)

In genere lavoro in Perl piuttosto che in PHP, ma, purché tu abbia un'interfaccia a riga di comando per il tuo motore delle regole del firewall (come, diciamo, / sbin / iptables), dovresti essere in grado di farlo abbastanza facilmente da qualsiasi lingua che abbia la capacità di eseguire comandi di sistema.

err questo tipo di sistema è facile e comune, posso darti il ??mio abbastanza facilmente

qui è spiegato in modo semplice e breve http://www.alandoherty.net/info/webservers/

gli script scritti non sono scaricabili {come nessun commento attualmente aggiunto} ma mandami una e-mail, dal sito sopra, e ti invierò il codice e ti aiuterò volentieri con il debug / il talento per te server

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top