PFファイアウォールを使用するOpenBSDルータのポート転送

PFファイアウォールを使用するOpenBSDルータのポート転送

私はOpenBSD FAQの指示に従ってファイアウォールを設定し、ポート転送を行いました。

https://www.openbsd.org/faq/pf/example1.html https://www.openbsd.org/faq/pf/rdr.html

私がポートフォワーディングを試みる理由は、オンラインゲームのためです。例に示すように、ポート転送ルールはすべてのブロックルールの後に配置する必要があります。ただし、この設定ではポート転送は実行されません。転送するポートは常にブロックされており、最後のルールと一致しません。

私のルールは

pass in on egress inet proto udp from any to any port 3074:3079 rdr-to $gamepc

ところで、ゲームを開始するたびにポート3075で接続がブロックされ、ゲーム内の私のNATが厳しいと思います。

私は何を逃したことがありませんか?

編集:追加情報

現在作成されているすべてのルールのブロックに応じて、block drop in log on $pubif次のルールがあります。

pass out on { $l1 $l2 $l3 $l4 $l5 } inet keep state

各ポート $l1 ~ $l5 に対して、次の規則を繰り返します。

pass out on $pubif inet from $l1:network to any nat-to ($pubif)

それから

# Gaming Port Forward Begins Here
pass in on egress inet proto udp from any to any port 3074:3079 rdr-to $gamepc
pass in on egress inet proto udp from any to any port 3478 rdr-to $gamepc
pass in on egress inet proto udp from any to any port 4379:4380 rdr-to $gamepc
pass in on egress inet proto udp from any to any port 27000:27031 rdr-to $gamepc
pass in on egress inet proto udp from any to any port 27036 rdr-to $gamepc
pass in on egress inet proto tcp from any to any port 3074 rdr-to $gamepc
pass in on egress inet proto tcp from any to any port 27014:27050 rdr-to $gamepc

ベストアンサー1

pf優先順位の問題がある可能性があるため、残りの規則を見ないと話すのは難しいです。

inルールはインターフェイスの受信パケットにのみ適用されますegresspass outパケットをリダイレクトするルールがありますか?時には単純な包括的なpass out quickルールを使用すると作業が簡単になり、インターネットまたはLANからの着信トラフィックのルールを追加するだけです。これは通常、単純なルーター/ファイアウォールで十分です。

logパケットがブロックされていることを確認するblockために使用できるディレクティブをルールに追加することも役立ちます。tcpdump -ei pflog0同様にlog、ルールディレクティブはpassデバッグおよび/または監視にも役立ちます。

修正する(OPが追加情報を提供した後):

あなたのルールセットが正しいようです。ゲームはUDPを介してのみ接続されますか(またはUDPを介した接続をテストしますか)。passTCP/3075 ルールがありません。tcpdumpingpflog0または内部インタフェースは手がかりを提供しますか?

アップデート2(この回答にコメントした後)

pass着信トラフィックのルールもあることを確認してください。$gamepc簡単に言うと:

# Some macros to improve readibility
gamer_udp = "{ 3074:3079, 3478, 4379:4380, 27000:27031, 27036 }"
gamer_tcp = "{ 3074, 27014:27050 }"

# Block (and log) by default
block log

# Generic outgoing traffic (NAT)
pass out on $pubif inet from $l1:network nat-to ($pubif)

# Incoming traffic (redirection)
pass in on egress inet proto udp to port $gamer_udp rdr-to $gamepc
pass in on egress inet proto tcp to port $gamer_tcp rdr-to $gamepc

# Incoming (redirected) traffic must be allowed to pass out to the LAN
pass out on $l1 inet proto udp to $gamepc port $gamer_udp
pass out on $l1 inet proto tcp to $gamepc port $gamer_tcp

# LAN must be allowed to reach the internet (and me)
pass in on $l1 from $l1:network

警告:これは明らかにテストされていませんが、ほとんど正しいと思います。盲目的にコピーして貼り付けるのではなく、ニーズに合わせて調整してルールセットに統合します。そこに別のルールを挿入することもできます。logデバッグ目的でディレクティブを追加することもできます(私は常にblockルールを文書化します)。pass outこのルールblockの後に単純なルールを追加し、両方のルールをpass out削除してこの例をさらに簡素化することもできます$l1(ルールを維持する必要があります)。nat-toさらにpf、SSHを介してルールを変更することは、コンピュータ上で自分自身をロックしようと試みられ、テストされた方法であるため、コンソールアクセスが優先されます。

頑張ってください!

おすすめ記事