On Thu, Mar 27, 2025 at 11:39:38AM +0300, Alexey Kashavkin wrote:
> Hi,
>
> I’m trying to understand how firewall filter works for isolated network in
> libvirt v11.1.0. When I start the network I can see following rules in
> nftables:
>
> table ip libvirt_network {
> chain forward {
> type filter hook forward priority filter; policy accept;
> counter packets 0 bytes 0 jump guest_cross
> counter packets 0 bytes 0 jump guest_input
> counter packets 0 bytes 0 jump guest_output
> }
>
> chain guest_output {
> iif "virbr3" counter packets 0 bytes 0 reject
> }
>
> chain guest_input {
> oif "virbr3" counter packets 0 bytes 0 reject
> }
>
> chain guest_cross {
> iif "virbr3" oif "virbr3" counter packets 0 bytes 0 accept
> }
>
> chain guest_nat {
> type nat hook postrouting priority srcnat; policy accept;
> }
> }
>
> But when I start ping from one VM to another on the same isolated network, I
> don't see an increase in counters in either chain.
>
> In the libvirt code, I found a comment in src/network/network_nftables.c:
>
> /**
> * nftablesAddForwardAllowCross:
> *
> * Add a rule to @fw to allow traffic to go across @iface (the virtual
> * network's bridge) from one port to another. This allows all traffic
> * between guests on the same virtual network.
> */
>
> But it seems that these rules don't work and are not needed. If I delete this
> table or some chains, nothing happens. VMs have connectivity with each other
> on this network.
>
> What are these rules for?
This is inherited from our old iptables impl, where this was probably
needed to workaround a default REJECT policy in the table. Quite
possibly redundant in nftables with our use of dedicated tables.
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|