По умолчанию встроенных таблиц (filter, mangle, nat...) и цепочек (INPUT, OUTPUT, FORWARD) нет - все абсолютно пусто.
Встроенных счетчиков у каждого правила нет (для увеличения производительности) - нужен счетчик - создаем явно.# создаем таблицу filter
table filter {
chain input { # создаем цепочку input
table filter hook input priority 0; # вставляем перехват пакета
ct state established accept # разрешаем established
ct state related accept # разрешаем related
meta iif lo accept # разрешаем входящий на localhost-интерфейса
tcp dport ssh counter packets 0 bytes 0 accept # разрешаем SSH
counter packets 5 bytes 5 log drop # для всех остальных пакетов считаем пакеты и байты, логируем и игнорируем в одном правиле
}
chain output { # создаем цепочку output
table filter hook output priority 0; # вставляем перехват пакета
ct state established accept # разрешаем established
ct state related accept # разрешаем related
meta oif lo accept # разрешаем исходящий с localhost- интерфейса
ct state new counter packets 0 bytes 0 accept # считаем и разрешаем новые исходящие соединения
}
}
В целом здесь все идентично iptables за исключением явного создания таблиц и цепочек, и возможности объединения нескольких вердиктов в одной команде.
Система гибкая за счет отказа от зашитости всего в ядро - поэтому все надо создать из userspace.
Естественно, что создавать таблицы и цепочки можно один раз и скорее всего в дистрибах будут скрипты базовой настройки, так что вам можно будет не заморачиваться особо.
З.Ы. Похоже что либо старый пример, либо не проверенный - не совсем соответствует синтаксису http://git.netfilter.org/nftables/tree/src/parser.y
В частности в "table filter hook output priority 0;" вроде не должно быть "table", а между всеми правилами должен быть разделитель ";"