испытание человека
Используйте -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
Вы можете использовать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