0

私はパケット キューイングのロープを学習しようとしているので、既知の Tor 出口ノードからポート 80 に着信するトラフィックに制限を設定しようと考えました。これは FreeBSD 9 上にあるため、OpenBSD 固有のソリューションは適用されない可能性があります (構文/その他)。

# Snipped to mainly the relevant parts
table <torlist> persist file "/var/db/torlist"

# ...

set block-policy return 

scrub in all
scrub out on $ext_if all

# What I *want* to do is create a cue for known tor exit nodes
# no single one IP should be able to do more than 56k/sec
# but the combined bandwidth of all tor visitors should not
# exceed 512k/sec, basically limiting Tor visitors to something
# like dialup

altq on $ext_if cbq bandwidth 512k queue { qin-tor }
queue qin-tor bandwidth 56Kb cbq ( default rio )

# ...

block in log all

antispoof for { $ext_if, $tun_if }
antispoof quick for $int_if inet

### inbound web rules
# Main Jail ($IP4_PUB3 is my webserver IP)

pass in on $ext_if inet proto tcp from <torlist> to $IP4_PUB3 port www synproxy state queue qin-tor
pass in on $ext_if inet proto  tcp to $IP4_PUB3 port www synproxy state

問題は、torlist に固有の altq、queue、および pass ラインが有効になっている場合、すべての接続が非常に遅くなることです。自分の IP を pfctl -t torlist -T test に対してテストしたところ、「0/1 アドレス一致」が返されました。リストから 1 つをテストすると、「1/1 アドレス一致」になります。

したがって、私が間違っていることについてはあまり教育を受けていません。それに沿ったパスは、その表にリストされているIPにのみ適用されると想定していました。そのため、自分のIPは検証されませんそのルールに基づいて、次のルールに渡します。

それを機能させることは緊急ではありませんが、私が失敗している場所を理解するための助けをいただければ幸いです。

4

1 に答える 1

1

altq の仕組みをよく理解していなかったことがわかりました。キューを 1 つだけ使用して外部インターフェイスにキューを作成したときに、すべての接続のデフォルトを作成しました。その結果、最高速度を定義し、その他すべてのデフォルト キューを作成する必要がありました。

たとえば、私のシステムに 100Mb のトップがある場合

altq on $ext_if cbq bandwidth 100Mb queue { qin-www, qin-tor }
queue qin-www bandwidth 98Mb priority 1 cbq ( default borrow )
queue qin-tor bandwidth 56Kb priority 7 cbq ( rio )

...

pass in on $ext_if inet proto tcp to $IP4_PUB3 port www synproxy state
pass in on $ext_if inet proto tcp from <torlist> to $IP4_PUB3 port www synproxy state queue qin-tor

('quick' を使用しない限り、pf はすべてのルールを解析するため、一番上にある必要はありません)

このようにして、一致する IP のみが qin-tor キューに抑制され、定義されていない他のすべての IP はデフォルトで qin-www キューになります。

OpenBSD の pf に関する FAQ は、「デフォルト」にエラーが発生する理由を考えるまで、これを明確にしているようには見えませんでした。その後、インターフェイス全体に適用される可能性があるため、ルールのデフォルトを定義する必要があると考えました。特定のキューにマークされていません。

それで、それは...私の「単純な」問題の解決策です。この問題を抱えている他の誰かがこれに遭遇することを願っています。

これは、私がパケット キューイングについて行っていた FAQ です: http://www.openbsd.org/faq/pf/queueing.html

于 2012-12-01T05:43:04.593 に答える