network: firewall integration with NFT sets
authorTopi Miettinen <toiwoton@gmail.com>
Sun, 22 May 2022 11:09:06 +0000 (14:09 +0300)
committerTopi Miettinen <topimiettinen@users.noreply.github.com>
Wed, 8 Jun 2022 16:12:25 +0000 (16:12 +0000)
commitab51fd9dbdc59f9a37acd8acaea3e9088d092bba
tree82dbd77f4def265280ea0bb5463cd105f6cd3fcb
parente8f1b50f271f5e28b99182c56eb1b8c704456c34
network: firewall integration with NFT sets

New directives `NFTSet=`, `IPv4NFTSet=` and `IPv6NFTSet=` provide a method for
integrating configuration of dynamic networks into firewall rules with NFT
sets.

/etc/systemd/network/eth.network
```
[DHCPv4]
...
NFTSet=netdev:filter:eth_ipv4_address
```

```
table netdev filter {
        set eth_ipv4_address {
                type ipv4_addr
                flags interval
        }
        chain eth_ingress {
                type filter hook ingress device "eth0" priority filter; policy drop;
                ip saddr != @eth_ipv4_address drop
                accept
        }
}
```
```
sudo nft list set netdev filter eth_ipv4_address
table netdev filter {
        set eth_ipv4_address {
                type ipv4_addr
                flags interval
                elements = { 10.0.0.0/24 }
        }
}
```
13 files changed:
man/systemd.network.xml
src/basic/parse-util.c
src/basic/parse-util.h
src/network/networkd-address.c
src/network/networkd-address.h
src/network/networkd-network-gperf.gperf
src/network/networkd-network.c
src/network/networkd-network.h
src/shared/firewall-util-nft.c
src/shared/firewall-util.h
src/test/meson.build
src/test/test-nft-set.c [new file with mode: 0644]
test/fuzz/fuzz-network-parser/directives