Pergunta

Gente, todos nós sabemos que a lista negra IP não funciona - spammers pode entrar através de um proxy, além disso, os usuários legítimos pode ter afetado ... Dito isto, lista negra parece-me ser um mecanismo eficiente para parar um persistente atacante, dado que a lista real de IP do é determinado dinamicamente, com base no comportamento de feedback e de usuário do aplicativo.

Por exemplo: - alguém tentando brute-force sua tela de login - solicitações HTTP um mal escritos questões bot muito estranhos para o seu site - um script-kiddie usa um scanner para procurar vulnerabilidades em seu aplicativo

Eu estou querendo saber se o seguinte mecanismo iria funcionar, e se assim for, você sabe se existem ferramentas que fazem isso:

  • Em uma aplicação web, colaborador tem um gancho para relatar uma "ofensa". Uma ofensa pode ser menor (senha inválida) e levaria dezenas de tais crimes para obter lista negra; ou pode ser grande, e um par de tais crimes em um período de 24 horas chuta para fora.
  • Alguns forma de um bloco-servidor de nível web entra em ação antes de cada página é carregada, e determina se o usuário vem de um "mau" IP.
  • Não há um mecanismo de "perdão" built-in:. Ofensas já não contam contra um IP depois de um tempo

Obrigado!

Nota extra: seria incrível se a solução funcionou em PHP, mas eu adoraria ouvir seus pensamentos sobre a abordagem em geral, para qualquer linguagem / plataforma

Foi útil?

Solução

Você está em uma máquina * nix? esse tipo de coisa é provavelmente melhor deixada para o nível do sistema operacional, usando algo como iptables

edit:

em resposta ao comentário, sim (tipo de). no entanto, a ideia é que o iptables pode trabalhar de forma independente. você pode definir um determinado limiar de acelerador (por exemplo, bloquear solicitações na porta 80 TCP que excedem x solicitações / minuto), e isso é tudo tratado com transparência (ou seja, sua aplicação realmente não precisa saber nada sobre isso, para ter dinâmica bloqueando take place).

eu gostaria de sugerir o método iptables se você tem o controle total da caixa, e prefere deixar seu punho firewall de estrangulamento (vantagens são, você não precisa para construir essa lógica em seu aplicativo web, e pode poupar recursos como pedidos são descartados antes que eles atinjam o seu servidor web)

Caso contrário, se você espera que o bloqueio não será um enorme componente, (ou seu aplicativo é portátil e pode não garantir o acesso aos iptables), então não faria mais sentido para construir essa lógica em seu aplicativo.

Outras dicas

Dê uma olhada fail2ban . Um quadro python que lhe permite levantar blocos tabelas IP a partir de rejeitos arquivos de log para os padrões de comportamento errante.

Eu acho que deveria ser uma combinação de nome de utilizador e bloqueio do IP. Não apenas IP.

você está olhando para código de bloqueio personalizado. Existem aplicações no mundo open source que contêm vários sabores de tal código. Talvez você deve olhar para alguns dos que, embora suas exigências são bastante trivial, então marcar uma combinação IP / nome de usuário, e utilizar isso para bloquear um IP para x quantidade de tempo. (Nota eu disse bloquear o IP, não o usuário. O usuário pode tentar obter on-line através de um IP válido / usuário / PW combinação.)

Na verdade, você pode até mesmo manter vestígios de logins, e quando o log em de um IP desconhecido com um 3 greves mau nome de usuário / PW combinação, bloqueio que IP para fora pelo tempo que quiser para esse nome de usuário. (Note que um monte de ISPs compartilhar IPs, assim ....)

Você também pode querer colocar um atraso na autenticação, de modo que um IP não pode tentar um login mais do que uma vez a cada segundo 'y' ou assim.

Eu desenvolvi um sistema para um cliente que manteve o controle de acessos contra o servidor web e endereços IP proibidos dinamicamente no nível do sistema operacional / firewall por períodos variáveis ??de tempo para certos crimes, por isso, sim, este é definitivamente possível. Como disse Owen, regras de firewall são um lugar muito melhor para fazer esse tipo de coisa do que no servidor web. (Infelizmente, o cliente escolheu para realizar uma copyright apertado sobre este código, por isso não estou a liberdade de compartilhá-lo.)

Eu geralmente trabalho em Perl em vez de PHP, mas, desde que você tem uma interface de linha de comando para o seu motor de regras de firewall (como, digamos, / sbin / iptables), você deve ser capaz de fazer isso facilmente de qualquer linguagem que tem a capacidade de executar comandos do sistema.

err este tipo de sistema é fácil e comum, eu posso te dar o meu com bastante facilidade

seu simplesmente e brevemente explicado aqui http://www.alandoherty.net/info/webservers/

os scripts como escrito Arn't download {como nenhuma commentry adicionado atualmente} mas me mande um e-mail, a partir do site acima, e eu vou arremessar o código para você e ajuda de bom grado com a depuração / taloring-lo ao seu servidor

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top