Re: Named sets/maps and atomic reload of the ruleset

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/02/2022 00:14, Pablo Neira Ayuso wrote:

>> Both the ability to flush the ruleset and replace it with the new one
>> atomically, without leaving an unprotected window, and the existence of named
>> sets and maps, that can be updated dynamically when e.g. interfaces or routes
>> are added and removed, are awesome features of nftables.
>>
>> The problem is, though, how to make these two features play nice with one
>> another. One use case that I have in mind is to replace the collection of rules
>> in chains with a new improved version, while keeping (or dumping and later
>> restoring) the contents of named maps and sets.
> 
> So you would like to replace one chain and its rules by a new chain
> also containing new rules...

More like, potentially multiple chains changed / added / removed, but the new
chains continue to reference the same maps and sets (precisely because I want to
preserve dynamically accumulated state).

>> Saving the data from maps and sets with a separate command before
>> reload of the ruleset, and repopulating after leaves a window during
>> which dynamic updates may be lost, and a window during which the set
>> operates with unpopulated maps/sets.
> 
> ... and you would like that sets/maps remain in the kernel while this
> chain replacement operation happens.

yes, either that, or dumped "somewhere" and loaded back after reload, all in the
same transaction.

>> What would be the recommended way to solve this problem?
> 
> If what I describe above is accurate, then you could run a batch like this:
> 
> # nft -f update.nft
> flush chain x y
> chain x y {
>         ... # new rules here
> }

Yes, actually this should work! I can dump the ruleset, find all chains, and
construct a batch that flushes them all, and then loads the new configuration on
top of remaining maps and sets. I little complicated, but should work.

What potentially could help for such use case is a command like

	flush chain * * *

i.e. flush all chains in the ruleset, but keep other named objects. I could put
it in /etc/nftables.conf instead of `flush ruleset` and stop worrying :)

Thanks for the hint!

Eugene

Attachment: OpenPGP_signature
Description: OpenPGP digital signature


[Index of Archives]     [Linux Netfilter Development]     [Linux Kernel Networking Development]     [Netem]     [Berkeley Packet Filter]     [Linux Kernel Development]     [Advanced Routing & Traffice Control]     [Bugtraq]

  Powered by Linux