Чи є спосіб дізнатися кількість пакетів, які дозволяються через iptables кожну секунду?
Чи є спосіб дізнатися кількість пакетів, які дозволяються через iptables кожну секунду?
Відповіді:
Я даю два відповіді для двох можливих сценаріїв:
З установкою iptables за замовчуванням, правила не мають статусу, тобто вони не відстежують, скільки пакетів приймаються. Щоб почати зберігати a лічильник пакетів, які проходять через iptables, нам знадобиться використовувати його модулів або, можливо, патч квоти ( див. тут, як налаштувати це ).
Тут я розгляну пару модулів "вбудованих", які ви можете використовувати для встановлення ліміту пакетів на секунду. Для наших цілей є limit
і conntrack
Модулі ви можете використовувати для визначення пропускної здатності. Ця процедура полягає у створенні нової ланцюжка iptables:
$ sudo iptables --flush # start again
$ sudo iptables --new-chain RATE-LIMIT
$ sudo iptables --append INPUT --match conntrack --ctstate NEW --jump RATE-LIMIT
Пояснення: The --match
опція вказує модуль для використання (ми будемо вказувати використання input
нижче).
Потім у межах цього ланцюжка створіть нове правило. У цьому прикладі наше правило відповідає не більше 50 пакетів в секунду:
$ sudo iptables --append RATE-LIMIT --match limit --limit 50/sec --jump ACCEPT
Обмеження швидкості відбувається, коли пакети не потрапляють у вищезазначене правило, і в цьому випадку ми захочемо відкинути ці пакети:
$ sudo iptables --append RATE-LIMIT --jump DROP
Це лише один з можливих способів, за допомогою яких можна «оцінити обмеження» пакетів за допомогою iptables. Додаткові приклади і багато великого пояснення див цього посібника .
Примітка: Iptables є складною програмою і вимагає знайомства з нею, перш ніж приступити до таких правил. Ви повинні почати з читання цього посібника якщо ви ще не дуже задоволені iptables.
Отримання пакетної інформації у потрібному форматі (пакет / сек), ймовірно, потрібно буде зробити за допомогою сніфера пакетів, оскільки iptables самостійно не має більш детальних інструментів звітів на пакети (просто проходження журналу на пакеті- пакетної бази). Два найпоширеніші опції Linux:
tcpdump
The tcpdump
Програма, подібно багатьом іншим пакункам linux (включаючи Wireshark), використовує libpcap бібліотека, яка шукає пакети безпосередньо на мережевому інтерфейсі (NIC). Якщо ви зацікавлені в перегляді статистики за секунду всі пакети , ви можете використовувати цей швидкий і брудний метод:
sudo tcpdump -i <interface-name> -w my-capture.pcap
Ви можете залишити це запуск на деякий час, якщо ви хочете, відкрийте нове вікно терміналу і відновіть звичайну мережеву діяльність. Хіт Ctrl+C
щоб зупинити його, коли захочете. Це повинно відображати певну статистику з захоплення, включаючи пакети, "скинуті ядром". Це пакети, заблоковані iptables. Щоб отримати швидкість пакета на секунду для всіх пакетів (у тому числі падіння), використовуйте capinfos
команда:
capinfos my-capture.pcap
Ви отримаєте кілька рядків виводу. Шукайте Average packet rate
лінії.
Wireshark
Нарешті, ви можете скористатися Wireshark для перегляду цієї інформації. Він більш складний, ніж tcpdump і має багато доступних фільтрів (наприклад,
tcp.analysis.lost_segment фільтр ), який може показати вам, які пакети були втрачені на секунду. Зверніть увагу, що втрата пакетів не завжди є результатом брандмауера. Якщо ви впевнені, що ваш мережевий інтерфейс є надійним і не втрачає пакети, ваші дані все одно будуть більш точними.
Щоб переглянути статистику пакетів у Wireshark, натисніть кнопку Statistics
а потім виберіть IO Graph
. Переглянути це відео для демонстрація графіків у Wireshark .
Редагувати: Ви згадали, що ви розробляєте програму Java для запуску певної події, коли досягнута певна квота пакетної передачі за секунду. У цьому випадку слід використовувати бібліотеку для роботи з мережею Java Pcap4J яка використовує ту ж саму бібліотеку, яку використовує більшість snoffers пакетів. З їхнього github repo:
Pcap4J - це бібліотека Java для захоплення, створення та надсилання пакетів. Pcap4J переносить бібліотеку власного пакета захоплення (libpcap, WinPcap або Npcap) через JNA і надає вам орієнтовані на Java API.
Ось сайт з інструкціями, які допоможуть вам розпочати роботу.