- FreeBSDPFファイアウォール
- FreeBSD。PFトラフィックのフィルタリング
- FreeBSD。PFのストリーム、タグ、アンカー
- FreeBSD。PF条件付きルーティング
- FreeBSD。カーネル内のネットワークパケットのパス。<-あなたはここにいます
以前の記事では、PFとその主な機能について説明し、さまざまな状況でこのファイアウォールを適用しようとしました。ただし、どのルールとどの順序で構成を配置するかについての単純な知識だけでは、目標を達成するのに必ずしも十分ではありません。OSカーネルレベルと、ファイアウォールがOSカーネルとどのように相互作用するかについて、もう少し深く見て初めて、多くのことが明らかになります。
ネットワークカードドライバー(OSIモデルのレベル2)のレベルは分析しませんが、すぐにレベル3に上がり、tcp / ipカーネルスタックが機能します。
着信パッケージごとに、最初に行うことはmbufオブジェクトを作成することです。これはカーネルの基本的なデータ構造であり、パッケージ自体とパッケージに関するすべてのメタデータ(送信元アドレスと宛先アドレス、ルート(ネクストホップ)、ttl、ラベル、その他の属性)の両方を格納します。同じオブジェクトがローカルソケットバッファを格納します。ヘッダーと小さな内部データバッファで構成されています。次に、このmbufはカーネルスタックのツアーを開始します。
ip_input()
2番目のレベルの出口で、パケットはip_input()関数に入ります。
- TT1およびその他のパラメータがチェックされます。
- 次に、ALTQ(トラフィック優先順位付けシステム)の条件に従って通過します(存在する場合)。
- IPSEC_CAPS(), ipsec, , , , . ipsec ip_input(), .
- pfil. . , , . rc.conf PF, .
- . — IP, ip_forward(). .
- (reassemble), .
- IPSEC_INPUT().
- , . — icmp error ip_output().
, .
ip_forward()
.
- ipsec — IPSEC_FORWARD().
- . , net.inet.ip.forwarding 1. - , icmp error ip_output().
- , , icmp_redirect, .
- ttl.
- ip_output().
ip_output()
.
- . , .
- ipsec — IPSEC_OUTPUT().
- pfil — .
- , (dst), (fib) . , . , .
- , .
- .
, . , . , . , , , . mbuf.
, pf in out.
pass in on re0 inet...
ip_input. out — ip_output.
pass out quick on $ExtIf2 ...
anchors .
route-to reply-to next hop :
pass in quick on $ExtIf2 reply-to ($ExtIf2 $ExtIf2Gw ) tagged DSTNAT pass in quick on $IntIf1 route-to ( $Tun1 $Tun1Gw ) from ($IntIf1:network)
rtable:
pass in quick on $IntIf2 from { $IntIf2Net } rtable 1 tag PASS
FreeBSD, , , , .
— . , , , , , VPN , , ftp-, web- jabber-, IP-… , . 35 , 9 .