Limite o conteúdo da web a ser baixado em um minuto de um endereço IP (com iptables) [closed]

2

Qual regra poderíamos aplicar no iptables para limitar a quantidade de tráfego baixado, por exemplo, precisamos limitar o cliente para que ele possa baixar apenas 400 Kilobytes em um minuto de um endereço IP? Se ele baixar mais, então bloqueie seu ip por 5 minutos? Não apache / nginx, mas sim iptabes. Eu gostaria de fechar a conectividade de rede para pessoas que tentam obter > 400kb em um minuto.

    
por VmeansVendetta 02.10.2017 / 20:42

1 resposta

2

Esta resposta pressupõe que este é um problema XY , e o que você realmente O want é uma forma de limitar o uso de recursos do servidor por usuário para proteger contra ataques DoS.

Primeiramente, existem opções muito melhores que não envolvem apenas o uso do iptables, a saber:

  1. Use a limitação de taxa incorporada em qualquer software de servidor que você esteja usando. A maioria dos servidores da Web tem suporte para este módulo interno ou padrão. É também a maneira canônica de limitar o acesso a um serviço específico em um único sistema. Isto tem três grandes vantagens em relação ao uso do iptalbes:
    • Ele não bloqueia ninguém, mas também não permite que excedam o limite de largura de banda (desde que você limite o número de conexões por IP de origem).
    • Não sobrecarrega o seu firewall com coisas que são políticas no nível do aplicativo.
    • Geralmente é muito fácil de configurar. Com o NGinx, é literalmente uma linha (cinco se você incluir a limitação de conexão por fonte). Para o Apache, são duas linhas (não incluindo a linha para carregar o módulo).
  2. Use algum software de proxy reverso (isso pode ser executado diretamente em seu servidor de aplicativos em alguns casos) para fornecer limitação de taxa. O Squid é um dos melhores exemplos dessa abordagem, mas a maioria das opções de proxy reverso tem algum tipo de suporte para isso. Essa é a abordagem canônica se você tiver vários sistemas de backend.
  3. Ajusta os parâmetros de escala da janela TCP. Isso é confiável e não quebrará seu cliente se feito corretamente, e não requer nenhum ajuste dinâmico depois de estabilizado. No entanto, não é trivial configurar e um cliente inteligente pode contornar isso para melhorar o desempenho. Isso pode ser feito com qualquer software de servidor com algum trabalho, mas também é limitado à limitação de taxa por conexão.
  4. Use as disciplinas de fila de dispositivo de rede combinadas com a marcação de conexão do iptables para limitar a taxa real por conexão. Isso é extremamente complexo de configurar, mas tem duas vantagens distintas, a saber, que é 100% independente de protocolo (você pode usá-lo com qualquer coisa) e fornece um comportamento extremamente determinístico (o que simplifica o teste).

Se por algum motivo você absolutamente não precisa usar nada além de iptables, você tem três opções gerais:

  1. Use a correspondência limit sozinha. Isso permitirá que você limite o número de pacotes por unidade de tempo. Fazendo algumas contas simples com o MTU para o link, você pode facilmente chegar a um limite para a largura de banda solicitada. Por exemplo, para obter 400 kilobytes por minuto em um link com um MTU de 1500 (padrão para Ethernet), você estaria olhando para um limite de 4 pacotes por segundo, ou 267 por minuto (nenhum é exato, mas ambos são dentro de 1%). No entanto, você terá que adicionar uma regra para cada IP do cliente, pois o limite é compartilhado para tudo que corresponde à regra.
  2. Em uma configuração um pouco mais sofisticada, você poderia usar a correspondência hashlimit , o que permitiria um tratamento um pouco melhor, mas sofrerá da mesma limitação de regra por cliente que a anterior.
  3. Se você quiser limitar a taxa reativa (esta é uma idéia seriamente ruim, até certo ponto eu não posso enfatizar o suficiente aqui, isso quebrará as expectativas do usuário em muitos níveis, e é extremamente difícil de depurar por si só, e torna a depuração outros problemas muito mais difíceis), então dê uma olhada no rateest match and target. O alvo coleta dados, que você pode combinar com a correspondência. Isso, por sua vez, pode usar o destino LOG para acionar a ação de um programa auxiliar do espaço do usuário que pode bloquear o IP.
por 02.10.2017 / 21:33