Базовая статистика трафика с iptables проста. Один создает правило без цели, например
iptables -I INPUT -p tcp --dport 80
Тогда, например, после загрузки данных через http, можно прочитать счетчики с помощью
iptables -L INPUT -n -v
Можно ли с помощью таких правил iptables отслеживать входящий и исходящий FTP-трафик?
Я пробовал обычные правила, разрешающие трафик FTP, который будет использоваться с модулем ядра ip_conntrack_ftp:
iptables -I INPUT -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 21
Но, судя по всему, iptables здесь считает только управляющие соединения.
Вы можете только отслеживать, использует ли клиент активный режим, когда сервер будет подключаться к клиентскому порту 20 tcp для доставки данных.
Если клиент использует пассивный режим, что чаще всего используется, сервер отправляет клиенту команду PASV, сообщая ему IP-адрес и порт для подключения на сервере. Поскольку порт случайный, вы не сможете различить трафик и получить статистику.
Другой способ - использовать такой модуль, как OpenDPI с участием OpenDPI-сетевой фильтр или L7-фильтр для проверки трафика уровня 7 и декодирования команд PORT / PASV.
Или, если вы управляете ftp-сервером, вы можете настроить порты данных на ограниченный диапазон и затем отслеживать их.