O que eu preciso :

O que eu preciso :

O que eu preciso :

Há muitos resultados para adicionar regras de descarte por uma quantidade de solicitação por voltas de tempo, mas preciso descartar pela contagem de bytes recebidos de um endereço específico durante um período de tempo.

O que eu investiguei:

Eu olhei para o iptables: para o primeiro caso, vi um dedicadocorresponder. Eu também vi ocorrespondência de cotamas a contagem de dados é rastreada globalmente.
Não tenho ideia de como misturar as duas regras para rastrear os dados recebidos por IP.

Outras coisas :

Estou ciente de que rastrear a contagem de bytes por IP pode consumir muita memória, por isso também quero manter o período curto.
Posso aceitar outros métodos, desde que haja um exemplo detalhado para isso.

Responder1

Você pode usar IPSET com opções de tempo limite e contador. Isso será parecido com isto:

#create ipset for accounting with default lifetime 300 secs
ipset create IP_QUOTA_SET hash:ip timeout 300 counters

#create separated rule chain
iptables --new-chain PER_IP_QUOTING

#send packets to chain
iptables -t filter -A INPUT \
  -i <in-iface> --dst <ip>  \
  -p tcp --dport <dstport>  \
  -j PER_IP_QUOTING

#if ip doesn't exist in the set, add it
iptables -t filter -A PER_IP_QUOTING    \
  -m set ! --match-set IP_QUOTA_SET src \
  -j SET --add-set IP_QUOTA_SET src --timeout 300

#if packet exists in the set, check bytes
#if byte counter > quota then close connection
#by sending of tcp-reset packet.
iptables -t filter -A PER_IP_QUOTING    \
  -m set --match-set IP_QUOTA_SET src   \
  --bytes-gt 1000 -j REJECT --reject-with tcp-rst

#pass other packets (for debug purpose)
iptables -t filter -A PER_IP_QUOTING \
  -j RETURN

Neste caso você pode verificar a lista e editá-la pelo comando ipset. Mostrar lista atual com contadores e tempos limites: lista ipset IP_QUOTA_SET.

Para obter detalhes, leia a documentação.

informação relacionada