Estou fornecendo duas respostas para dois cenários possíveis:
Se você está perguntando como definir uma regra para limitar pacotes por segundo
Com a instalação padrão do iptables, as regras são sem estado, o que significa que elas não rastreiam quantos pacotes são aceitos. Para começar a manter um contador de pacotes que passam pelo iptables, precisaremos usar um de seus módulos ou talvez o patch de cota ( veja aqui como configurar isso ).
Aqui, discutirei alguns dos módulos "incorporados" que você pode usar para definir um limite de pacotes por segundo. Para nossos propósitos, existem os módulos limit
e conntrack
que você pode usar para definir limites de largura de banda. Esse procedimento consistiria em criar uma nova cadeia de iptables:
$ sudo iptables --flush # start again
$ sudo iptables --new-chain RATE-LIMIT
$ sudo iptables --append INPUT --match conntrack --ctstate NEW --jump RATE-LIMIT
Explicação: A opção --match
especifica o módulo a ser utilizado (especificaremos o uso do módulo input
abaixo).
Em seguida, nessa cadeia, crie uma nova regra. Neste exemplo, nossa regra não corresponderia a mais de 50 pacotes por segundo:
$ sudo iptables --append RATE-LIMIT --match limit --limit 50/sec --jump ACCEPT
O limite de taxa acontece quando os pacotes não são capturados pela regra acima, e nesse caso, queremos descartar esses pacotes:
$ sudo iptables --append RATE-LIMIT --jump DROP
Esta é apenas uma das maneiras possíveis de você poder limitar os pacotes com o iptables. Para mais exemplos e muitas ótimas explicações, consulte este guia .
Nota: O Iptables é um programa complicado e requer familiaridade com ele antes de prosseguir com regras como essas. Você deve começar a ler em este guia se você ainda não está tão confortável com o iptables.
Se você está perguntando como simplesmente visualizar os pacotes aceitos por segundo
Obter as informações do pacote no formato que você precisa (pacote / segundo) provavelmente precisará ser feito com um sniffer de pacotes, já que o iptables não possui ferramentas de relatório mais detalhadas nos pacotes (apenas um registro simples em um pacote) por pacote). As duas opções mais comuns do Linux são:
tcpdump
O programa tcpdump
, como muitos outros farejadores de pacotes linux (incluindo o Wireshark), usa a biblioteca libpcap que procura por pacotes diretamente em uma rede interace (sua NIC). Se estiver interessado em visualizar as estatísticas por segundo para todos os pacotes , pode utilizar este método rápido e sujo:
sudo tcpdump -i <interface-name> -w my-capture.pcap
Você pode deixar isso em andamento por um tempo, se desejar, abra uma nova janela de terminal e retome suas atividades de rede normais. Bata Ctrl+C
para pará-lo quando quiser. Isso deve exibir algumas estatísticas da captura, incluindo pacotes "descartados pelo kernel". Estes são pacotes bloqueados pelo iptables. Para obter uma taxa de pacotes por segundo para todos os pacotes (incluindo os descartados), use o comando capinfos
:
capinfos my-capture.pcap
Você terá algumas linhas de saída. Procure a linha Average packet rate
.
Wireshark
Por fim, você pode considerar usar o Wireshark para visualizar essas informações. É mais sofisticado que o tcpdump e tem muitos filtros disponíveis (como o Filtro tcp.analysis.lost_segment ) que pode mostrar quais pacotes foram perdidos por segundo. Note que a perda de pacotes nem sempre é o resultado de um firewall. Se você tem certeza de que sua interface de rede é sólida e não perde pacotes, seus dados ainda serão mais precisos.
Para visualizar as estatísticas de pacotes no Wireshark, clique no menu Statistics
e selecione IO Graph
. Veja este vídeo para uma demonstração de representação gráfica no Wireshark .
Editar: Você mencionou que está desenvolvendo um aplicativo Java para acionar algum evento quando uma determinada cota de pacote por segundo é atingida. Neste caso, você deve usar uma biblioteca de rede para Java como o Pcap4J que faz uso da mesma biblioteca que a maior parte dos sniffers de pacotes linux usam. Do repositório do github:
Pcap4J is a Java library for capturing, crafting and sending packets. Pcap4J wraps a native packet capture library (libpcap, WinPcap, or Npcap) via JNA and provides you Java-Oriented APIs.
Aqui está o site , com instruções para ajudar você a começar.