
Server 3.0.2 を実行している OSX 10.9 システムで IceFloor を使用して pf をセットアップしました。DNS 名または localhost からのパブリック IP を使用してシステムに接続できないことを除いて、すべて正常に見えます。たとえば、インターネットからは http/port 80 に接続できますが、パブリック IP を使用してマシン自体からは接続できません。マシンから localhost/127.0.0.1 への接続は機能します。取得したログは次のとおりです (xxxx はホストのパブリック IP)。
rule 7/0(match): block in on en0: x.x.x.x.80 > x.x.x.x.64460: Flags [R.], seq 1, ack 1, win 65535, length 0
ルールのリストはこちら
$ sudo pfctl -s rules
[sudo] password for paul:
No ALTQ support in kernel
ALTQ related functions disabled
scrub-anchor "icefloor.nat" all fragment reassemble
anchor "icefloor.nat" all
block drop in quick from <emergingthreats> to any
block drop out quick from any to <emergingthreats>
block drop in log quick from <_blacklist> to any
block drop out log quick from any to <_blacklist>
block drop in quick from no-route to any
block drop in quick from urpf-failed to any label "uRPF"
block drop log inet all label "Generic_blocks_(IPv4)"
block drop log inet6 all label "Generic_blocks_(IPv6)"
anchor "icefloor.groupblocks" all label "Blocks"
anchor "inspector.blocks" all label "Temp_blocks"
anchor "icefloor.exceptions" all label "Logs_exceptions"
anchor "icefloor.portknocking" all label "Hidden_services"
anchor "icefloor.genericipv6" all
anchor "icefloor.inbound" all label "Local_services"
anchor "icefloor.outbound" all label "All_traffic"
anchor "icefloor.outbound_nat" all label "NAT_clients_traffic"
anchor "icefloor.custom_rules" all
どれがそれなのか教えていただけますかrule 7/0(match)
? また、なぜ localhost から公開キー (開いているポート) に接続できないのですか? これは f ルールと関係があるのでしょうかno-route
? それとも 2 つのGeneric_blocks_
- ルールでしょうか?
前もって感謝します、
ポール
答え1
tcpdump
私もこの問題に直面しており、すべてを理解するにはかなりのテストと時間がかかりました。
最初の質問にお答えすると、それはどれrule 7/0(match)
ですか? IceFloor によって自動的に追加された「Generic_blocks_(IPv4)」ルールで、明示的に許可されていないすべてのトラフィックをブロックしてログに記録します。そのルールの番号は、root として実行することで確認できますpfctl -gsr
。
ブロックされる理由について。ブロックされるのは受信接続です。これはルートなしや、見えるルールセット。これは、DNS 名がローカルでどのように処理されるかに関係します。マシンのルーティング テーブル ( ) には、インターフェイス上のnetstat -r
を指す DNS 名のエントリがあります。localhost
lo0
ログ エントリには不可解な情報、特に が含まれておりblock in on en0
、インターフェイス で何かが発生していると思われますen0
。しかし、 を実行すると、でtcpdump -nvvvi en0 tcp and port 80
パケットが実際に送信されていないことがわかりましたen0
。ただし、 でパケットが見つかったためtcpdump -nvvvi lo0 tcp and port 80
、トラフィックが (予想どおり) で発生していることが確認されましたlo0
。
デフォルトの IceFloor 構成 ( /Library/IceFloor/icefloor.conf
) は、 という行で生成されますset skip on lo0
。一見すると、これは非常に標準的で歓迎すべき行のように見えます (http://www.openbsd.org/faq/pf/options.html)。 の他のすべての部分は、lo0
pf ルールによって妨げられていないように見えました。 直感的に、その行をコメント アウトして、新しいルール (テーブル インクルードの直後) を追加することにしましたpass quick on lo0
。 この変更された構成でリロードした後、DNS 名を使用して Web サーバーに正常にアクセスできました (問題は解決しました)。 そのため、このset skip on lo0
行に問題があるようです。
icefloor.conf
ファイルを手動で変更すると、IceFloor インターフェースのファイアウォール タブが使用できなくなるという欠点があります。新しい構成を保存すると、手動で行った編集が上書きされてしまうためです。