OpenBSD pf DHCP/DNS ベースの NAT ルール

OpenBSD pf DHCP/DNS ベースの NAT ルール

NAT、ファイアウォール、DNS、およびDHCP用の他のすべてのVMの前にProxmoxおよびOpenBSD VMをインストールしました。

私はフル機能のDNSとDHCPを持っています。私のDHCPは私のDNSレコードを正しく更新しています。他のVMがインターネットにアクセスできるため、私のNATも正常に動作します。

これで、動作するファイアウォールと着信NATルールが必要です。

たとえば、.NET経由で接続できるnginxという仮想マシンがありますnginx.local.lan

簡単に言えば、私がやりたいことは次のとおりです。

  • ポート80と443を私ngnix.local.lan
  • nated(80および443からnginxまで)およびSSHを除くWANインターフェイス(em0)のすべてをブロックします。
  • しかし、LANインターフェイス(em1)のすべても許可したいと思います。

これは私の現在のpf.confファイルです。

 set skip on lo
 block return    # block stateless traffic
 pass            # establish keep-state

 # Define interfaces
 ext_if=em0
 int_if=em1

 # Allow SSH connections
 pass in on $ext_if inet proto tcp from any to ($ext_if) port 22

 # Allow VMs to get out of the network
 pass out on $ext_if inet from $int_if:network to any nat-to $ext_if

ベストアンサー1

私はついに私が前に言ったことすべてをする方法を見つけました。説明します。

存在する/etc/pf.conf

すべての着信トラフィックの拒否

(LANインターフェースを除く)

 block in all
 pass in quick on $int_if

最初の行はすべてをブロックし、2番目の行はLANインターフェイスからのすべての着信を許可します。quickキーワードが何であるかを知りたい場合は、読んでください。これ

それがうまくいくかどうか確信できますか? a を実行すると、pfctl -sr次のような結果が出力されます。

 block drop in all
 pass in quick on em1 all flags S/SA

HTTP(S) トラフィックを仮想マシンにリダイレクトする

前述のように、有効なDNS、DHCP、DDNS設定を構成しました。つまり、DHCPリースを要求するnginx仮想マシンがある場合は、自動的にnginx.local.lanドメインエントリをリースされたIPに関連付けます。

これを知り、マクロを使って設定ファイルでエレガントにしようとしました。

nginx_vm_map=80 443
pass in quick on $ext_if proto tcp from any to any port {$nginx_vm_map} rdr-to nginx.local.lan

最初の行は、仮想マシンにリダイレクトするポートを定義し、ナットルール$nginx_vm_mapでこのマクロを使用して簡単に変更できるようにします。

おすすめ記事