Netfilter
Linuxのカーネルないで実装されているパケット処理フレームワーク netfilterはフィルタリングを行う対象を決定するテーブルと、フィルタリングを行う対象を選択するチェーンを組み合わせてパケットの処理する
Linuxカーネル内のネットワークスタックでは nf_* といった関数はNetfilterに飛ばしている処理なのでカーネルソースコードリーディングでは無視して良い
https://upload.wikimedia.org/wikipedia/commons/thumb/3/37/Netfilter-packet-flow.svg/2880px-Netfilter-packet-flow.svg.png
テーブル
Filter
主に遮断などに利用される
iptablesで利用される主な機能
INPUT, FORWARD, OUTPUT Chainで処理出来る
NAT
NATを行うためのテーブル
PREROUTING, OUTPUT, POSTROUTINGで処理出来る
raw
特殊なテーブルでコントラック(接続の追跡)を除外するルールを追加したり出来る skbにmarkを付けたりするならここが早いのでおすすめ
ip_conntrackなどの前に呼ばれる
PREROUTING, OUTPUT Chainで処理出来る
mangle
TOSや、通信のマークを書き換えるためのテーブル
PREROUTING, OUTPUT, INPUT, FORWARD, POSTROUTING Chaineで処理出来る。
それぞれのルールの処理されるタイミングが重要なので、上記のWikipediaに出ているパケットのLinuxカーネル内での経路を参考にしてルールを検討する必要がある。
意外と何でも出来て、チェーンを作成してそれを繋げたりすると結構何でも出来る。
kube-proxyのフォワードやロードバランスといった機能もiptablesで実装出来て、利用する事が出来る