Mit der integrierten Firewall hatte ich nur Probleme bzgl. NAT, daher hab ich ganz old-school iptables-Regeln manuell angelegt.
Die Config kann ich morgen mal hier reinkopieren, falls es jemanden interessiert 
EDIT:
Also im Prinzip hab ich eigentlich nur ein kleines Shellscript das als Parameter die VM-ID nimmt (meine VMs haben alle IPs nach dem Schema 10.0.0.<VM-ID> bzw fc00::<VM-ID>), den Host Port, den VM Port, und das Protokoll. Das sieht dann ca. so aus:
iptables -t nat -A PREROUTING -i enp35s0 -p $PROTOCOL --dport $HOST_PORT -j DNAT --to-destination 10.0.0.${VM_ID}:${VM_PORT}
iptables -A FORWARD -p $PROTOCOL --dport $HOST_PORT -j ACCEPT
ip6tables -t nat -A PREROUTING -i enp35s0 -p $PROTOCOL --dport $HOST_PORT -j DNAT --to-destination [fc00::${VM_ID}]:${VM_PORT}
ip6tables -A FORWARD -p $PROTOCOL --dport $HOST_PORT -j ACCEPT
Das wird dann mehrere male von meinem "Haupt-iptables-Skritp" aufgerufen ($route ist der Pfad zur route-port.sh).
# ...
$route 101 80 80 tcp
$route 101 443 443 tcp
## Mailcow
for PORT in 25 465 587 143 993 110 995 4190; do
$route 109 $PORT $PORT tcp
done
## Ptero SFTP
$route 111 2022 2022 tcp
## Ptero Wings
$route 111 8080 8080 tcp
## Gameservers
$route 112 25565 25565 tcp # proxy
$route 112 25565 25565 udp
$route 112 19132 19132 tcp # bedrock ipv4
$route 112 19132 19132 udp
$route 112 19133 19133 tcp # bedrock ipv6
$route 112 19133 19133 udp
# ...
Display More
Sehr unsauber, aber es funktioniert wenigstens. Das sind jetzt nur die Regeln für öffentlich erreichbare Ports. Für das Webinterface z.b. habe ich folgende Regeln, wobei $fly_v4 und $fly_v6 jeweils die IPs vom Wireguard sind:
## Allow SSH from VPN, Ansible and Fly
ip6tables -A INPUT -p tcp --dport 22 -s "$fly_v6" -j ACCEPT
ip6tables -A INPUT -p tcp --dport 22 -s fc00::102 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 22 -j REJECT
iptables -A INPUT -p tcp --dport 22 -s "$fly_v4" -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s 10.0.0.102 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j REJECT
## Allow Webinterface from VPN
ip6tables -A INPUT -p tcp --dport 8006 -s "$fly_v6" -j ACCEPT
ip6tables -A INPUT -p tcp --dport 8006 -j REJECT
iptables -A INPUT -p tcp --dport 8006 -s "$fly_v4" -j ACCEPT
iptables -A INPUT -p tcp --dport 8006 -j REJECT
Display More
Sind wahrscheinlich ziemliche Drecks-Regeln, aber wie gesagt, funktioniert für mich 
Auf dem Host läuft auch noch irgendwas auf en Ports 111, 3128 und 4949, ich weiß nicht mehr was das ist und hab grad auch keine Lust nachzugucken, ich weiß nur dass das bei Proxmox standardmäßig offen ist, die hab ich daher ebenfalls dicht gemacht und nur für den Wireguard geöffnet.
Hier mal die komplette ungeschnittene Config:
iptables.sh: https://paste.jeff-media.com/?…MH2sskfiU3j4nJ73jASuWPtyj
route-port.sh: https://paste.jeff-media.com/?…sais3u9G973hMAbLejdSFwYeq