LINUX.ORG.RU
решено ФорумAdmin

Подскажите по sets в nftables

 ,


0

1

Хочу перевести фаерволл в своем импровизированном роутере с iptables на nftables чтобы выкинуть кучу портянок все было по-хипстерски.

Затруднение возникло возникло с переработкой скрипта, добавляющего в ipset огромную кучу (over 18k) адресов из списка antifilter. Да-да, я знаю что «выполнять» предписания рыбнадзора можно с помощью BGP, но ЕМНИП для пиринга с antifilter нужен белый ip.

Насколько я понял, в nftables реализованы встроенные сеты, но как с ними работать из скрипта?

Правильно ли будет использовать примерно такую конструкцию?

$NFT_BIN add set ip $TABLE antifilter { type ipv4_addr\; flags interval\; }

while read addr
do
    $NFT_BIN add element ip $TABLE antifilter { $addr }
done </tmp/ipsum.lst

Да и вопрос производительности такого подхода меня тоже волнует.

UPD: скрипт отрабатывает очень долго.

★★★★

Я бы делал так:

  • тянем лист адресов, проверяем хэш от предыдущей загрузки
  • если файл был обновлён, то разбираем его каким-то нормальным ЯП на массив/список/etc.
  • формируем валидный для nft файл, который потом можно загрузить быстрым импортом через nft -f
BOOBLIK ★★ ()
Ответ на: комментарий от BOOBLIK

формируем валидный для nft файл, который потом можно загрузить быстрым импортом через nft -f

Это что-то в виде

define ipsum = { список адресов }
я правильно понимаю? Интересно, насколько долго оно будет обрабатываться.

Meyer ★★★★ ()
Ответ на: комментарий от intelfx

А как связана атомарность применения правил со скоростью их загрузки? ТС ЕЯПП имеет ввиду скорость применения целого массива правил, нежели их проверку на предмет наличия в предыдущем массиве.

anonymous ()
Ответ на: комментарий от anonymous

Если я правильно понимаю, то атомарность в nft вот такого вида:

  • у тебя есть рабочие старые правила фаерволла
  • ты запустил процесс загрузки нового тяжелого листа (с перезаписью всех правил)
  • вжух и ты на новом списке правил без заметного промежутка времени, когда твой фаерволл не настроен до конца.

В таком виде мне вобщем-то всё равно сколько работает скрипт, если переключение между старым и новым фаерволлом происходит моментально.

В случае с iptables или ipset это было в виде «запустили скрипт и с каждой секундой работы твой фаерволл всё ближе и ближе к его нормальному виду».

BOOBLIK ★★ ()
Ответ на: комментарий от anonymous

А как связана атомарность применения правил со скоростью их загрузки?

Когда у тебя загрузка правил атомарная и не блокирующая работу (по типу nft), то пока ты их загружаешь, у тебя работают старые правила, а потом система переключается на новые.

В этих условиях тебе практически всё равно, сколько они загружаются, ты этого не заметишь (кроме возросшей нагрузки на систему). Главное, чтобы они загружались быстрее, чем поступают.

intelfx ★★★★★ ()
Ответ на: комментарий от LeninGad

Да, думаю механизм под капотом тот же.

This is different from bash scripts because nftables will read in all of the included config files, create the config object in memory alongside the existing config, and then in one atomic operation it swaps the old config for the new one meaning there is no moment when the firewall is partially configured.

BOOBLIK ★★ ()