Дело в том, что по умолчанию срабатывание правил не логгируется (оно-то и правильно). Но часто возникает необходимость узнать что происходит с пакетами и на каком правиле они срабатывают. Для этих целей используем такую конструкцию:
– логгируем полностью каждую цепочку:
#iptables -A INPUT -j LOG --log-level 6 --log-prefix "fp=INPUT a=DROP "
#iptables -A FORWARD -j LOG --log-level 6 --log-prefix "fp=FORWARD a=DROP "
#iptables -A OUTPUT -j LOG --log-level 6 --log-prefix "fp=OUTPUT a=DROP "
причём логгирование затронет все правила, находящиеся ниже вышеописанных. То есть перемещая вверх/вниз правила логгирования вы можете логгировать нужные блоки правил.
– логгируем отдельное правило:
#iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j LOG --log-level 6 --log-prefix "fp=bad_tcp_packets:2 a=DROP "
После этого, логи будут писаться в файл /var/log/syslog
С помощью iptables-tracer можно посмотреть, проходит ли трафик через нужные нам цепочки iptables. Делает он это, вставляя в каждую цепочку специальные правила-маркеры (-j NFLOG), которые будут срабатывать при прохождении пакета через цепочку. Важно помнить, что после остановки трассировки созданные в iptables служебные правила не удаляются, так что потом их нужно удалить такой командой:
./iptables-tracer -c