Назад | Перейти на главную страницу

Как использовать IPTables для постоянного подсчета количества данных, передаваемых с одного IP-адреса и на него?

Мне нужно постоянно подсчитывать количество байтов, прошедших между моим сервером и удаленным сервером (порт не указан). Я хотел бы, чтобы эта сумма была записана в файле. Я немного новичок в IPtables, но не уверен, нужно ли мне ставить в очередь все согласованные пакеты для обработки скриптом (не знаю python, но полное чтение байтов, вероятно, не будет слишком сложным) . Кажется, что IPtables может делать это прямо из коробки с журналом, но документация меня немного хоронит.

iptables -I INPUT 1 -s <remote ip>/8 -j QUEUE ???
iptables -I OUTPUT 1 -d <remote ip>/8 -j QUEUE ???

Любая помощь по указанию его на файл python или цепочку iptables, которая справится с этим из коробки, была бы замечательной.

Вам не нужно указывать цель прыжка. Выберите пакеты, которые вы хотите подсчитать, готово.

-j, --jump target

Это указывает цель правила; т.е. что делать, если пакет ему соответствует. [..]

Если эта опция не указана в правиле (и -g не используется), то соответствие правилу не повлияет на судьбу пакета, но счетчики в правиле будут увеличены.

Что нужно иметь в виду:

  • добавить пояснения для тех, кто пересмотрит эти правила в будущем
  • несколько собственных / 8 блоков ipv4, постарайтесь быть более конкретными, чтобы не учитывать соседний трафик
  • добавить аналогичные правила ipv6
  • NATing или DROPing пакетов в других таблицах может привести к завышенному или заниженному подсчету, в зависимости от того, что вы действительно хотите измерить.
  • в зависимости от вашей ОС счетчики в iptables могут быть ненадежно восстановлены после перезагрузки или изменений конфигурации.

Пример:

iptables -I INPUT 1 -s 192.0.2.1/32 -m comment --comment "billing: example company"
ip6tables -I INPUT 1 -s 2001:db8::1/128 -m comment --comment "billing: example company"
iptables -I OUTPUT 1 -d 192.0.2.1/32 -m comment --comment "billing: example company"
ip6tables -I OUTPUT 1 -d 2001:db8::1/128 -m comment --comment "billing: example company"

Проверить с iptables -L | grep example ; ip6tables -L | grep example