Linux は、ネットワーク名前空間を認識するインターフェースを通じてネットワーク状態を公開します。Linux 2.6.25 以降、
/proc/net は /proc/self/net への互換性シンボリックリンクであるため、読み取りを行うプロセスの
ネットワーク名前空間を示します。現在のツールは通常、procfs を解析する代わりに Netlink を使用します。
ルートと Netlink #
IPv4 転送情報ベース(FIB)は、パケットの送信先を決定します。
/proc/net/route はその歴史的なビューです。一方、ip route は Netlink を通じてカーネルに問い合わせ、
カーネルの設定を変更します。Netlink はメッセージ指向ソケットのファミリーであり、新しいシステムコールを
追加せずに、ユーザー空間からカーネルサブシステムを設定および検査できるようにします。
ルーティング、リンク、アドレス、近隣、トラフィック制御、Netfilter はすべてこれを使用します。
Netfilter と iptables #
Netfilter は、ネットワークスタックにおけるパケット処理フックを提供します。iptables は IPv4 用の
従来のユーザー空間ルール管理ツールです(IPv6 には ip6tables を使用します)。現在のシステムでは一般に
nftables が使用されますが、その互換性レイヤーは引き続き iptables 構文を受け付けることができます。
重要な iptables テーブルは次のとおりです。
filterはデフォルトのフィルタリングテーブルで、INPUT、FORWARD、OUTPUTチェーンを持ちます。natは接続の最初のパケットに対してアドレスまたはポートの変換を行い、PREROUTING、INPUT、OUTPUT、POSTROUTINGチェーンを持ちます。mangleは複数のフックで、特殊なパケットフィールドを変更します。rawはコネクション追跡より前に実行され、NOTRACKによってトラフィックを除外できます。securityはfilterテーブルの後に強制アクセス制御ラベルを適用し、SELinux および関連する Linux Security Module ポリシーに使用されます。
ルールはチェーンの順序に従って評価されます。INPUT はローカルソケット宛てのパケットに適用され、
FORWARD はルーティングされたトラフィックに、OUTPUT はローカルで生成されたパケットに適用されます。
コネクション追跡により、後続のパケットはそのフローに対して決定された処理に従うことができます。
コメント
GitHub で閲覧・コメントする(投稿にはログインが必要です)