Bloqueio de IP em massa que afeta o desempenho do servidor?

4

Eu tenho um servidor de jogo e alguém está enviando spam com bots. O cliente SpamBot faz o handshake com meu servidor usando conexões UDP. Isso é feito por meio de uma lista de proxies. Basicamente, o Cliente Spambot envia muitos pacotes UDP para o meu servidor e o envia aos bots.

Agora eu tenho 6 grandes listas de proxies que eu conheço a pessoa que me usa spambots. Eu posso escrever um script de shell para bloquear todos os IPs de todas as listas. Cada IP está em uma nova linha, então é bem fácil fazer isso com um loop for.

O problema é que estou preocupado com o desempenho do meu servidor. Se eu bloquear 15k endereços IP, isso afetará o desempenho do meu servidor?

No momento, eu corro o CentOS 7. Você pode me dizer se o IP Tables é o melhor caminho a seguir, ou que outras alternativas devo tentar? Por favor, escreva os comandos também. Eu só quero que meu servidor pare de responder a esses endereços IP, para não estabelecer nenhuma conexão com eles.

    
por Brian Briu 28.01.2016 / 11:23

4 respostas

9

Para uma quantidade tão grande de IPs, você deve usar o módulo ipsets . ipset cria conjuntos de dados nos quais o iptables pode reagir, ele pode lidar facilmente com 10s de 1000s de entradas .

Verifique se você tem o repo EPEL ativado e instale o ipset por meio de:

yum install ipset

Um exemplo:

ipset -N blockedip iphash

cria um conjunto chamado 'blockedip' no formato 'iphash' (existem diferentes formatos, este é apenas para IPs).

com ipset -A você pode adicionar dados (neste caso, IPs) ao conjunto de dados:

ipset -A blockedip 192.168.1.1
ipset -A blockedip 192.168.1.2

e assim por diante ...

Ou para criar em lote sem precisar executar uma invocação de ipset para cada endereço IP, supondo que você big-file.list seja uma lista de endereços IPv4, um por linha:

ipset -N blockedip iphash
sed 's/^/add blockedip /' < big-file.list | ipsec restore

Com o seguinte comando iptables você pode dizer ao kernel para descartar todos os pacotes vindos de qualquer uma das fontes deste conjunto:

iptables -A INPUT -m set --set blockedip src -j DROP
    
por 28.01.2016 / 12:19
1

Se você está falando sobre 15.000 endereços IP diferentes, você realmente não quer usar uma regra iptables separada para cada endereço. Isso reduzirá a taxa de transferência da sua rede.

Em vez disso, você deve considerar usar um único IP Set e colocar seus 15000 endereços nele.

ipset create spambots iphash
iptables -A INPUT -m set --match-set spambots src -j DROP

while read ip; do ipset add spambots "$ip"; done < ip_addresses.txt

Você pode del (excluir) endereços individuais do conjunto de IPs, flush do conjunto inteiro de entradas ou destroy do IP definido completamente.

    
por 28.01.2016 / 12:40
-1

Dado um arquivo de entrada "ips.txt" no formato:

1.2.3.4
2.3.4.5

Então este scripty adicionará todos os endereços IP à cadeia de entrada do iptables, DROP alvo, então os pacotes correspondentes serão descartados:

 cat ips.txt| while read a; do echo $a;  iptables -I INPUT -p udp -s $a -j DROP ; done

Quando você tenta adicionar uma grande quantidade de ip's, tente acumulá-los de maneira similar ao exemplo, para que

1.2.3.4
1.2.3.5

torna-se

1.2.3.0/28

ou similar. Esse acúmulo também pode ser feito por um script.

    
por 28.01.2016 / 11:47
-1

Uma alternativa seria bloquear esses IPs usando o chamado blackholing de rota. %código% Isso significa que você define uma rota para o endereço mencionado, que enviará dados para lugar nenhum. Depende da configuração do seu servidor, se ele pode funcionar melhor do que a solução regular do iptables. Eu acho que você deve comparar esses dois métodos antes de implantar em sistemas de produção.

    
por 28.01.2016 / 12:36