Как правильно регистрировать и просматривать активность nftables?

испытание человека

Используйте -h, чтобы проверить, является ли файл символической ссылкой и Файл существует.

   -h FILE
          FILE exists and is a symbolic link (same as -L)

.

bash-4.2$ ls -lrt
total 0
-rw-r--r--. 1 MYID MYID 0 Apr 26 14:37 test
lrwxrwxrwx. 1 MYID MYID 4 Apr 26 14:37 t -> test
bash-4.2$ [ -h t ] && echo "yes" || echo "no"
yes
bash-4.2$ [ -h test ] && echo "yes" || echo "no"
no
1
14.10.2020, 12:26
1 ответ

Вы можете использоватьnftraceдля отслеживания потоков пакетов. Это очень многословно, но не попадает в журналы ядра, а вместо этого распространяется по многоадресному сетевому сокету (, т.е. если их никто не слушает, трассировки просто идут в "/dev/null" ).

Если вы действительно хотите трассировать все, трассируйте из предварительной маршрутизации и вывода с низким приоритетом. Лучше использовать отдельную таблицу, потому что то, что вы отображаете с помощью nft list ip table filter, на самом деле является iptables -поверх -nftables с API уровня соответствия xt совместимости и не должно быть изменено с (, но можно безопасно использовать на трассах ). Также вам следует знать, что для iptables могут существовать и другие таблицы, например, таблица nat .

Итак, с набором правил из файла traceall.nft, загруженного сnft -f traceall.nft:

table ip traceall
delete table ip traceall

table ip traceall {
    chain prerouting {
        type filter hook prerouting priority -350; policy accept;
        meta nftrace set 1
    }

    chain output {
        type filter hook output priority -350; policy accept;
        meta nftrace set 1
    }
}

Теперь вы можете отслеживать эти (очень подробные )трассировки IPv4 с помощью:

nft monitor trace

Это будет работать так же, даже если делать это внутри контейнера (, что обычно не имеет места для целей журнала ).

Вы можете активировать эти трассировки в другом месте или поставить условия перед их активацией, а также снова(meta nftrace set 0)деактивировать их в правиле с более поздним приоритетом, чтобы избежать трассировки всех хуков/цепочек. Следование этой схеме поможет понять порядок событий:Поток пакетов в Netfilter и General Networking .

Если вы решите использовать эквивалентную цель-j TRACEв iptables , проконсультируйтесь также с человеком для xtables-monitor, потому что iptables -вместо -nftables меняет свое поведение (по сравнению с iptables -наследие).


Хотя я ответил на вопрос OP, вот дикие предположения как о проблемах, так и о проблемах с журналом:

  • Если Docker работает внутри контейнера, журналы могут быть недоступны. Их можно сделать доступными для хоста,и всем контейнерам , которым разрешено запрашивать сообщения ядра, с sysctl -w net.netfilter.nf_log_all_netns=1просто потому, что сообщения ядра не имеют экземпляров пространства имен.

  • счетчик в правиле log в ip filter INPUT равен нулю, а счетчик в предыдущем правиле с оператором drop — нет. Это означает, что правило журнала создается слишком поздно :после сброса . Правило log (или, скорее, iptables 's-j LOG)должно быть вставлено перед последним оператором drop , а не после где его никогда не достичь.

  • Единственное правило INPUT для Docker — iifname "docker0" counter packets 0 bytes 0 accept. Если контейнеры не находятся в сети Docker по умолчанию, нет правила, позволяющего им достигать хоста.

    Попробуйте добавить правило для проверки. Убедитесь, что результат вставлен до правила drop . Используйте iptables , избегайте добавления правила с nftables , которое может быть несовместимо с iptables -вместо -nftables :

    .
    iptables -I INPUT 8 -i "br-*" -j ACCEPT
    
1
18.03.2021, 22:57

Теги

Похожие вопросы