Можно ли определить несколько хуков в цепочке nftables или есть какой-либо другой элегантный способ предотвратить дублирование правил внутри (без включения из другого файла)?
table inet raw {
chain mangle {
type filter hook { prerouting, input, output, forward } priority -190; policy accept;
ct state invalid counter drop
}
}
Нет, базовая цепочка имеет только один крючок в netfilter.
Но в той же таблице вы можете назвать то же самое пользователь цепочка из каждой базовой цепи. Вот пример с дополнительными счетчиками, показывающими их состояние после одного ping -c1 127.0.0.1
:
table inet myfilter {
chain mypreroutingchain {
type filter hook prerouting priority filter; policy accept;
counter packets 2 bytes 168
jump myuserchain
}
chain myinput {
type filter hook input priority filter; policy accept;
counter packets 2 bytes 168
jump myuserchain
}
chain myforward {
type filter hook forward priority filter; policy accept;
counter packets 0 bytes 0
jump myuserchain
}
chain myoutput {
type filter hook output priority filter; policy accept;
counter packets 2 bytes 168
jump myuserchain
}
chain mypostrouting {
type filter hook postrouting priority filter; policy accept;
counter packets 2 bytes 168
jump myuserchain
}
chain myuserchain {
oif "lo" counter packets 4 bytes 336
iif "lo" counter packets 4 bytes 336
counter packets 8 bytes 672
ct state invalid counter packets 0 bytes 0 drop
}
}
та же цепочка пользователей myuserchain был вызван 8 раз на пинг:
исходящий эхо-запрос: из вывод+постмаршрутизация, входящий эхо-запрос от предварительная маршрутизация+ввод, затем снова то же самое с эхо-ответ.