My guess is you are trying to use firewall rules to force bridge behavior on a NAT configuration. virb0 is the default interface set up when you first install KVM and Libvirt. The default is NAT. It allows your guests to reach the outside world, but they are not seen on the network for inbound traffic.

I suspect you need an actual bridge, br0. This is something you have to set up yourself. Then you attach your VM‘s to that interface. I use Virt Manager when installing VMs & selecting the interface.

My hosts use networkd and a netplan (.yaml) file for configuration. This netplan file is where you define your physical interface and your bridge interface. Alternatively, If you are using Network Manager instead, there is a way to set up a bridge using nmcli commands but I haven’t done that in a while.

The folks on this thread taught me how to do this when I started so I defer to their many years of expertise. I am also not familiar with GNS.