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

Почему количество байтов iptables для необработанного PREROUTING 0?

Я планирую использовать iptables для измерения моего интернет-трафика (вдохновленный замечательной статьей Питера Круминьша http://www.catonmat.net/blog/traffic-accounting-with-iptables).

Компьютер, предназначенный для измерения трафика, в настоящее время перенаправляет весь трафик LAN в Интернет и из него.

Пытался разобраться, в каких цепочках засчитываются все переданные байты (загрузка + загрузка). В filter FORWARD цепочка - единственная цепочка, размер которой превышает мегабайт после открытия нескольких веб-сайтов (она показывает 17M). Вроде бы загрузка (+ может закачка).

Но следующее наблюдение вызвало у меня подозрение:

me@computer:~$ sudo iptables -vL -t raw
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
me@computer:~$ sudo iptables -vL -t raw
Chain PREROUTING (policy ACCEPT 34 packets, 2244 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 16 packets, 2664 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Хотя я посетил некоторые веб-сайты, raw PREROUTING цепочка все еще имела 0 байтов при запуске sudo iptables -vL -t raw первый раз (первый запуск sudo iptables -vL -t raw выделялся длительным временем выполнения (более секунды). Через несколько секунд оба raw цепочки имели более 2000 байт.

Мне кажется, что он начинает отсчет после первого запроса и пропускает все предыдущие байты.

Я ожидал raw PREROUTING цепочка для подсчета все байтов перенаправленного трафика LAN, поскольку следующая блок-схема предполагает, что: http://stuffphilwrites.com/2014/09/iptables-processing-flowchart

Мне удалось воспроизвести нули на счетчиках при первом запуске iptables --list --verbose -t raw. И причина в моем случае просто заключалась в том, что iptable_raw не был загружен, пока я не запустил команду.

Поскольку мне не нужен raw В моей настройке этот модуль обычно не загружается, и только после того, как я запустил эту команду, модуль был загружен.

Бегом rmmod iptable_raw Я могу выгрузить модуль, и при следующем запуске iptables --list --verbose -t raw счетчики сброшены на ноль.

Все работает как задумано. И я думаю, что то же самое случилось с вами. Если вы создаете правила в raw table модуль будет автоматически загружен, и если вам не нужны какие-либо правила в этой таблице, нет необходимости загружать модуль.

Для перечисления действующих правил рекомендую использовать iptables-save который выведет правила в формате, который можно загрузить обратно с помощью iptables-restore. Он покажет все соответствующие детали ваших текущих правил, и он не будет загружать какие-либо дополнительные модули, он покажет только те, которые в настоящее время загружены.

Задержка при первом запуске команды может быть объяснена множеством разных причин, трудно сказать, какая именно из них была для вас. Но одна из возможностей заключается в том, что диск, с которого нужно было загрузить модуль, был остановлен во время простоя, и вам нужно было дождаться, пока этот диск раскрутится.