Uma maneira relativamente fácil de bloquear todo o tráfego de um país específico?

12

Eu tenho um aplicativo da web que não tem usuários nas Filipinas, mas é constantemente bombardeado por spammers, cartões de teste de carders e outras atividades indesejáveis de lá. Eu posso ver nos registros que eles têm IPs nas Filipinas e estão encontrando inicialmente meu site por meio de google.ph ou outros .ph sites.

Eu tenho filtros e verificações de segurança muito bons, então eles não causam muito dano, mas mesmo assim eu estou ficando cansado disso. Eles usam a largura de banda, preenchem meu banco de dados, abusam de logs, e registram logs de segurança com lixo, desperdiçam meu tempo, contas etc.

Embora a grande maioria dos cidadãos filipinos não seja spammers, e eu não posso simplesmente bloquear todos os países que me incomodam, neste momento, acho que as soluções são simplesmente bloquear todo o tráfego das Filipinas para o meu webapp. (Eu sei que bloquear blocos de IP de países inteiros não é uma ótima prática, e tem muitos problemas, mas para este país, eu quero fazer uma exceção.)

(Eu sei que eles poderiam falsificar seu endereço IP, mas pelo menos eu posso fazê-los trabalhar um pouco.)

Eu sei que existem alguns serviços de geoip por aí. Alguém sabe de algum serviço gratuito ou barato? Ou alguma outra maneira de filtrar o tráfego de um país específico?

Estou executando o PHP no Apache 2, se isso for importante.

    
por 3 revs, 2 users 70%anon 24.02.2016 / 02:13

9 respostas

7

Você poderia fazer isso com base no endereço IP usando uma API de IP local personalizada como IPInfoDB http://ipinfodb.com/index.php.

    
por 09.06.2009 / 12:16
22

Ao contrário da maioria dos outros cartazes aqui, eu não vou lhe dizer que isso é uma má idéia, que você não deve fazer isso, que não vai resolver o seu problema, ou que você deveria fazer outra coisa. Veja o que aconteceu com a gente:

Indivíduos da China e Coréia (ou usando procuradores na China e Coréia, de qualquer forma) continuaram nos incomodando. Portscanning, rastreando nossos sites à procura de vulnerabilidades, fazendo tentativas de login, etc. Eu tentei ignorá-los (fail2ban cuida deles normalmente), mas em alguns pontos eles estavam nos batendo com tanta força que efetivamente se transformou em um ataque DoS. Quando você tem centenas de conexões de uma só vez de pessoas tentando usar seu servidor web como um proxy, tentando SSH em sua máquina, tentando nomes de usuários e senhas aleatórias, ele tende a pesar no site. Eu eventualmente me cansei.

Não recebemos tráfego legítimo da China ou da Coreia; nossa empresa não vende lá (somos e-commerce), então não havia risco de perder tráfego legítimo, então percebi que era mais fácil bloqueá-los antes do tempo, em vez de esperar que eles fossem paus.

  1. Visite o link e faça o download do seu banco de dados IP < - & gt ;.
  2. Extraiu todos os intervalos de endereços IP chineses e coreanos.
  3. Instalado o módulo ipset para o netfilter
  4. Construiu lixeiras do Ipset para a China e a Coreia (veja abaixo)
  5. Adicionadas regras ao iptables para eliminar silenciosamente o tráfego desses conjuntos.

E é isso. Nossos usuários problemáticos foram embora, carregaram na rede e o servidor foi reduzido, e nós resistimos à temporada de Natal sem dificuldade.

Nota 1 : você pode fazer isso com iptables regulares (ou seja, sem ipset), mas é mais computacionalmente caro do que usar o ipset.

Nota 2 : É assim que os despejos aparecem (o ipset irá gerar estes para você se você quiser):

# Generated by ipset 2.3.3 on Sat Oct  4 18:02:57 2008
-N china nethash --hashsize 5184 --probes 4 --resize 50
-A china 203.207.128.0/17
-A china 221.176.0.0/13
-A china 58.154.0.0/15
-A china 114.54.0.0/15
...etc...

Nota 3 : Usamos uma nethash porque todos os nossos intervalos são armazenados como blocos CIDR. Se você não quiser convertê-los em CIDR, poderá usar um iptreemap, mas imagino que isso seja menos eficiente se você estiver obtendo muito tráfego.

    
por 10.06.2009 / 03:34
2

Como você conserta um bug no código?

Como assim?

Bug: Add (2,2) retorna 0, deve retornar 4.

Código fixo:

int Add(int x, int y)
{
   if (x == 2 && y == 2)
      { return 4; }
   return 0;
}

Obviamente não. Você não cria apenas uma monstruosidade inconstante de casos especiais, que é enormemente frágil e uma receita para o desastre. Você também não corrige o sintoma atual do problema subjacente.

Em vez disso, descubra a causa raiz e corrija isso. Isso é muito mais robusto do que qualquer patch de caso especial hacky que você possa implementar.

Por que seu aplicativo da Web é vulnerável a spam? Quais características o tornam vulnerável? Quais características o tornam um alvo valioso? Existem maneiras de alterar essas características para tornar seu aplicativo mais robusto contra spam e menos um alvo tentador? Quase certamente a resposta a estas perguntas é sim. Adicione cadeias de validação aos seus formulários, use um captcha de forma inteligente, randomize urls e / ou nomes de parâmetros para torná-los hostis aos bots. Existem milhões de maneiras de abordar esse problema, lamento dizer que você escolheu uma das soluções menos valiosas, menos úteis e mais frágeis do mercado.

    
por 09.06.2009 / 12:30
1

Primeiro, sugiro strongmente que você não faça isso.

Como os outros dizem de forma mais eloqüente, bloquear um país específico não resolve o problema, apenas o adia um pouco. Além disso, quando os usuários desse país verem que você bloqueou eles especificamente, isso só os motivará a causar mais problemas.

Dito isto, se você realmente quiser fazer isso, IPinfoDB fornece um banco de dados de geolocalização por IP gratuito ,

First, would be to locate a IP simply by country.

You would search this way :

SELECT * FROM 'ip_group_country' where 'ip_start' <= INET_ATON('74.125.45.100') order by ip_start desc limit 1;

Or

SELECT * FROM 'ip_group_country' where 'ip_start' <= 1249717504 order by ip_start desc limit 1;

Second, you might want to get the IP of a specific country to generate a blocklist with iptable, htaccess file or whatever you use. It would be done like this :

SELECT 'ip_cidr' FROM 'ip_group_country' WHERE 'country_code' = 'AF' order by ip_start;

which would give you :

63.243.149.0/24
67.212.160.0/24
    
por 09.06.2009 / 16:00
0

Você deve usar produtos como o fail2ban para desativar os erros que você lança em seu aplicativo da Web, indicando que uma tentativa de envio de spam está sendo feita. Isso bloqueará o IP por um período de tempo, tornando seu site resistente, mas não bloqueando totalmente blocos IP.

    
por 09.06.2009 / 16:03
0

Algumas soluções:

  • exclui alguns IPs na configuração do Apache com mod_access
  • use o GeoIp diretamente do Apache: link
  • Exclua alguns IPs do Linux iptables diretamente. Isso é mais arriscado se você tiver acesso remoto apenas, você pode se trancar ou da máquina
  • geoip + iptables

Estas soluções são fáceis e rápidas de implementar e gratuitas.

Uma solução de longo prazo seria detectar o spam de seu aplicativo da web, registrar o IP e alimentar seus iptables para bloqueá-los automaticamente.

    
por 10.06.2009 / 00:53
0

Você considerou encontrar quem está operando as redes das quais está sendo atacado? Encontre o contato "abuso" usando whois e reporte-se a eles. É claro que pode vir de várias redes, mas também pode valer a pena se você vir alguns endereços / blocos de rede recorrentes.

    
por 10.06.2009 / 01:27
0

Você tem todo direito de bloquear endereços IP de qualquer motivo que possa justificar por si mesmo. É você que fornece um serviço e é você quem decide quem pode ou não ter. Talvez seja questionável se isso é moral, mas isso é algo que você só pode decidir por si mesmo.

No entanto, bloquear um segmento IP porque ele tem alguns aspectos geográficos me parece mais ou menos como uma abordagem de pânico.

O que eu fiz no passado é ter um rastreador passando por meus registros mais recentes e com base nessa proibição IPs individuais que são irritantes por um período de 24 horas. Se esse IP específico está se comportando mal novamente, ele é banido por 2 dias, depois 3 dias, etc., etc., você tem a tendência.

IP's que são banidos por mais de uma semana serão enviados para mim e eu enviarei um e-mail de abuso para esse provedor de serviços (que sabe que pode até ajudar).

    
por 10.06.2009 / 05:04
0

Eu optaria por uma solução Snort + OSSEC que pudesse manter algo assim dinamicamente.

    
por 21.09.2016 / 15:20