Для отслеживания прохождения пакетов в цепочках iptables в Linux можно использовать утилиту iptables-tracer. Эта утилита позволяет понять, проходит ли трафик через определенные цепочки iptables или нет.
Для использования iptables-tracer нужно установить git и go:
# dnf install git go
# git clone https://github.com/x-way/iptables-tracer
# cd ./iptables-tracer/
Осталось собрать бинарный файл:
# go build
В результате вы получите бинарный файл iptables-tracer в директории.
Список текущих правил в iptables можно получить так:
# iptables -L -v -n
# iptables -L -v -n -t nat
Вам нужно выбрать цепочки iptables, для которых вы хотите проверить прохождение трафика. Например, вы хотите понять по каким цепочкам проходит ICMP трафик ping:
# ./iptables-tracer -f "-d 192.168.1.56 -p icmp" -t 10s
nat PREROUTING NEW IP 192.168.1.1 > 192.168.1.56: ICMP echo request, [In:ens18 Out:] filter INPUT NEW IP 192.168.1.1 > 192.168.1.56: ICMP echo request, [In:ens18 Out:] nat INPUT NEW IP 192.168.1.1 > 192.168.1.56: ICMP echo request, [In:ens18 Out:]
В данном примере видно, что внешние пакеты сначала попали в таблицу NAT, цепочку PREROUTING, потом в таблицу FILTER, цепочку INPUT.
По аналогии вы можете использовать другие фильтры. Синтаксис фильтров iptables-tracer аналогичен правилам iptables. Например, чтобы вывести информацию о трафике с IP 10.24.1.90 на порт TCP 22, выполните команду:
# ./iptables-tracer -f "-s 10.24.1.90 -p tcp --dport 22" -t 60s
При запуске без параметров, iptables-tracer выводит информацию об UDP трафика с dport 53.