Невозможно смыть набор nftable элемента
На самом деле я учусь использовать nftables в тестовой среде, и я на самом деле работаю с наборами nftables. У меня была версия 0.7, и поскольку мои тесты не работали, я обновился до версии 0.9.4, но моя проблема осталась прежней.
Я могу без проблем создавать свои наборы на своем столе. И мои элементы набора должны содержать адреса ipv4. Я работал с таблицами, цепочками и наборами nftables без проблем, мои правила работали и т. Д.
Итак, что я хочу сделать, но не могу найти, как это сделать, так это удалить все элементы моего набора, не уточняя адреса ipv4 один за другим.
Скажем, имя моей таблицы - test, а имя моего набора - tmp с типом ipv4_addr, моя конфигурация будет выглядеть так:
table ip test {
set tmp {
type ipv4_addr
}
}
Я могу успешно добавить элемент в этот набор с помощью этой команды:
nft add element ip test tmp { 10.10.10.10 }
Теперь я хочу удалить все элементы моего набора, я просмотрел страницу руководства nft и сказал, что я могу очистить все элементы из моего набора с помощью команды flush:
SETS
[...]
flush Remove all elements from the specified set.
Итак, я попробовал эту команду, чтобы удалить все мои элементы из моего набора:
nft flush set test tmp
Но он возвращает мне эту ошибку:
Error: Could not process rule: Invalid argument
flush set test tmp
^^^^^^^^^^^^^^^^^^^
Я пробовал много команд таким же образом (добавление таблицы перед установкой, без уточнения таблицы), он всегда возвращает мне ошибку, но не каждый раз одинаково.
Я думаю, что должен сделать что-то не так, но не могу понять, что именно. Если у вас есть идеи, пожалуйста? Буду очень признателен!
Может быть, моя общая конфигурация плохая, и я не должен так думать о наборах?
И если невозможно очистить элементы из набора, есть ли способ удалить все элементы из набора (помимо определения тайм-аута флага)?
Извините, если мое сообщение неясно, я француз, и мне немного сложно писать на другом языке, чтобы описать проблему...
Спасибо!
С уважением.
2 ответа
Я связался с командой netfilter и дал мне ответ.
Опция сброса для набора работает только с Linux 4.10 и выше, и моя версия была ниже.
Я нашел способ очистить таблицу с помощью этих команд в Debian, если вам интересно:
Сохраните элементы из набора в переменной:
elements=$(nft list set test tmp | awk '/{ /,/}/' | cut -d '=' -f 2)
Удалите элементы с помощью команды удаления
nft delete element test tmp ${ip_elements}
Надеюсь, это поможет некоторым людям.
Если вы используете сценарий nft для функции атомарного обновления, вы также можете сохранить свой набор в качестве переменной в этом сценарии.
Используя именованный набор, вы бы сделали что-то вроде
#!/usr/sbin/nft -f
flush set ip test tmp
table ip test {
set tmp {
type ipv4_addr
elements = { 10.10.10.10 }
}
chain somechain {
type filter hook input priority 0; policy accept
ip saddr @tmp meta nftrace set 1
}
}
но так как это не работает, вы можете сделать это вместо
define tmp = { 10.10.10.10 }
flush chain ip test somechain
table ip test {
chain somechain {
type filter hook input priority 0; policy accept
ip saddr $tmp meta nftrace set 1
}
}
Это сохраняет удобочитаемость использования именованного набора, но при выполнении он преобразуется во встроенный анонимный набор.
Это обновляет все правило и, таким образом, "сбрасывает" старые значения в наборе.
Конечно, для этого требуется, чтобы правило было в цепочке, которую вы можете сбрасывать и воссоздавать при каждом запуске.