nftables変装

nftables変装

rhel8 を実行している kvm ホストでは、一部の入力および転送ルールが正常に動作していますが、特定のブリッジである virbr0 のトラフィックを偽装して、転送チェーンを使用せずにインターネットに接続しようとしています。したがって、このvirbr0ブリッジを使用しない仮想マシンまたはシステムコンテナは、発信トラフィックを偽装しないでください。

このvirbr0ブリッジのIPは192.168.100.1/24です。このブリッジを使用する仮想マシンのアドレスは192.168.200.2/24で、デフォルトのgwのIPアドレスはvirbr0です。 kvmホストのDNSリゾルバを指す仮想マシンでDNSクエリを確認できます。

これは私のnftリストルールセットです。

table inet host {
   chain input {
     type filter hook input priority filter; policy drop;
     iif lo accept
     ct state established,related accept
     iifname eth0 tcp dpor { port, port } accept
   }
   chain forward {
     type filter hook forward priority filter; policy drop;
     ct state established,related accept
     # several rules similar to this one
     iifname other-brige oifname tun0 ip saddr x.x.x.x/xx ip daddr { set addresses } tcp dports { set ports } accept
     # here I allow http traffic coming from virbr0 or it will be dropped by nftables (seen in log)
     iifname virbr0 oifname gw0 tcp dport { 80, 443 } accept
     
   }
}
table ip nat {
    chain prerouting {
      type nat hook prerouting priority filter; policy accept; 
    }
    chain postrouting {
      type nat hook postrouting priority mangle; policy accept;
      oifname virbr0 masquerade
    }
}

kvmホストの正しいインターフェイスからトラフィックが出てくることを確認したため、何か間違っていること間違いなしですが、おそらく正しく偽装されていないため、インターネットホストがどうすべきか分からず削除します。

ベストアンサー1

はい、私は何か間違っていました。

ポストパス nat チェーンにソース nat アドレスを追加する必要があります。

だから:

table ip nat {
  chain postrouting {
    type nat hook postrouting priority srcnat; policy accept; 
    ip saddr 192.168.100.0/24 iifname virbr0 oifname gw0 snat to x.x.x.x
    oifname virbr0 masquerade
  }
}

今私の要件を満たしています。

おすすめ記事