Хорошо! Как сказал @dirkt в своем комментарии, есть возможность использовать расширение iptables. Одним из очень хороших для этого целей может быть statistic --mode nth
. Его можно легко использовать на мосту (для моста необходимо net.bridge.bridge-nf-call-iptables
!)
Итак, если кто-то захочет заблокировать первый пакет, входящий в bridge0
из ethA
, команда будет выглядеть так:
iptables -N log-and-drop # create new chain
iptables -A log-and-drop -j LOG --log-level 6 --log-prefix SOMEREALLYUNIQUESTRING # log received packet into syslog with some string unique enough
iptables -A log-and-drop -j DROP # drop the packet
# rules for every single interface in the bridge
iptables -A FORWARD -m physdev --physdev-in ethA -m statistic --mode nth --every 1000000 --packet 0 -j log-and-drop
Это создаст цепочку log-and-drop
которая будет использоваться для регистрации и отбрасывания полученного пакета. Затем он пройдет первый проходящий пакет (а затем каждый миллионный пакет) и отбросит его.
Последнее, что нам нужно сделать, - это создать "скрипт наблюдения", который будет ждать появления этой уникальной строки в журнале и затем удалит все правила iptables.
if tail /var/log/messages | grep -m 1 SOMEREALLYUNIQUESTRING ; then
iptables -D FORWARD -m physdev --physdev-in ethA -m statistic --mode nth --every 1000000 --packet 0 -j log-and-drop
iptables -F log-and-drop
iptables -X log-and-drop
fi
Это не очень красивое решение, но это единственное, что мне удалось выяснить. Если кто-то может найти лучшее решение, я с нетерпением жду его увидеть :)