Devo classificar os pacotes de limite com iptables?

7

Estou usando o iptables no Ubuntu Server. É um servidor web em um VPS.
Gostaria de saber se devo limitar os pacotes com limite de taxa. Se sim, o que devo limitar? E devo fazê-lo globalmente ou por endereço IP?

Referência
Eu vi pessoas sugerindo isso:

# Limit packet traffic on a TCP or UDP port:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -m limit --limit $lim/s --limit-burst $lb -j ACCEPT

# Limit established/related packet traffic:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -m limit --limit $lim/s --limit-burst $lb -j ACCEPT

Acima, um limite de taxa global não parece muito útil, pelo menos para os casos que eu possa imaginar. Existe algum caso em que eu deveria limitar o limite globalmente?
Acredito que um limite de taxa por IP geralmente é melhor:

# Add the IP to the list:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -m recent --set --name RATELIMITED
# Drop if exceeded limit:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -m recent --update --seconds $sec --hitcount $hc --rttl --name RATELIMITED -j DROP
# Accept if inside limit:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -j ACCEPT

Pergunta adicional: IPs remotos podem ser falsificados. Como os limitar corretamente?
Adicionada outra pergunta para isso: link

O objetivo
Estou tentando atenuar o risco de alguns ataques D / DoS e abuso em geral.

Relacionado em Como posso avaliar o limite de conexões SSH com o iptables?

PS : Acabei de abrir uma questão relacionada apenas para o ICMP e inclui a limitação de taxa para este protocolo: iptables | Tipos de ICMP: quais são potencialmente prejudiciais?

    
por ML-- 12.12.2011 / 22:36

3 respostas

7

Um limite de taxa não é uma prevenção, mas um convite ao DoS - especialmente no sabor apresentado acima, no qual os pacotes serão descartados se uma determinada taxa de pacotes não autenticados sem informações de estado tiver sido excedida. Como todos podem forjar pacotes (incluindo endereços IP de origem) nesse estado de conexão sem maiores esforços, um novo vetor de ataque DoS, aproveitando seu recurso de limite de taxa, surgirá.

Geralmente, um limite de taxa só fará sentido se você tiver

  1. um limite de conexão difícil ou flexível previsível em sua configuração
  2. defina o limite de taxa para o tráfego geral abaixo desse limite para poder configurar conexões para tráfego prioritário ou administrativo, independentemente da carga

Enquanto 1. frequentemente é difícil o suficiente para determinar até mesmo incomodar, 2. obviamente só funcionará se você for capaz de diferenciar de forma confiável o tráfego "prioritário ou administrativo" do restante na configuração da conexão - por exemplo, se está vindo através de uma interface de rede diferente.

Em outros casos, seria melhor reduzir a resiliência do sistema do que adicionar a ele.

    
por 12.12.2011 / 23:19
4

O problema com o limite -m é a limitação de todos os pacotes TCP, quaisquer que sejam os endereços IP de origem. Então, se você tem uma baixa limitação para pacotes syn como

-A INPUT -p tcp  --syn -m limit --limit 30/s --limit-burst 30 -j ACCEPT
-A INPUT -p tcp --syn -j DROP

apenas um cliente com a linha de comando hping pode derrubar seu servidor enviando tantos pacotes tcp com o sinalizador SYN, porque a regra de limite irá corresponder e derrubará muitos pacotes, quaisquer que sejam os endereços IP de origem. O limite não faz diferença entre tráfego bom e tráfego ruim. Ele também vai derrubar o bom tráfego de entrada.

hping poderia ser algo como:

hping thetargetedhostip -p 80 -S -c 1000 -i u20000

É melhor usar hashlimit para limitar as conexões tcp por endereço IP . A regra a seguir irá corresponder apenas se 30 pacotes por segundo forem recebidos, reduzindo o número de pacotes autorizados por IP para 15 pacotes por segundo.

-A INPUT -p tcp --syn -m hashlimit --hashlimit 15/s --hashlimit-burst 30 --hashlimit-mode srcip --hashlimit-srcmask 32 --hashlimit-name synattack -j ACCEPT 
-A INPUT -p tcp --syn -j DROP

Na verdade, estou CONVENCIDO de que muitos servidores que são desativados hoje não são tomados por estarem sem recursos durante um ataque, mas devido ao módulo de limite perder todo o tráfego de entrada.

    
por 23.08.2015 / 11:35
1

Normalmente, limite as regras de limitação de taxa a servidores que espero ter:

  • baixas quantidades de tráfego esperado
  • serviços de autenticação

Por exemplo, uma página de login do painel de controle de hospedagem, POP3, IMAP, SSH, etc. Eu geralmente deixo os serviços HTTP abertos e só bloqueio se houver um problema.

Você não quer perder um bom tráfego na web. Um link no slashdot pode enviar toneladas de tráfego e, com as regras globais, você pode não perceber um problema.

Com relação a IPs falsificados, eles não podem ser bloqueados usando esse método e normalmente não são uma preocupação, pois essas regras concentram-se principalmente na limitação de conexões TCP estabelecidas. Com um IP falso, a conexão TCP nunca pode ser estabelecida.

    
por 12.12.2011 / 22:45