iptables の owner マッチは、ローカルプロセスのソケットが作成したパケットを識別できる。たとえば -m owner --uid-owner 1234 は UID 1234 が所有するローカルソケットを指し、HTTP プロキシのユーザー名を識別するものではない。

Squid が動作するマシンでは、次の経路を区別する:

トラフィック関連する区別
クライアントがこのマシンの Squid に接続するプロキシリスナーへの着信接続
Squid が宛先への接続を開くローカルで作成された外向きソケット
LAN クライアントがこのマシンを直接経由してルーティングするローカルの作成元ソケットを持たない転送トラフィック

この拡張は OUTPUT と POSTROUTING で有効である。転送パケットにはこのマッチに対応するローカルソケットがないため、FORWARD ルールが Squid の UID を尋ねてリモートコンピュータのユーザーを特定することはできない。

したがって Squid 自身の外向きソケットを許可するポリシーは、プロキシだけに依存するネットワーク設計の一部しか扱わない。ゲートウェイ転送、リスナーへのアクセス、他の許可サービス、実際のプロキシサービスアカウントは、それぞれ適切な範囲で扱う必要がある。

Squid が nobody で動作していると決めつけず、設定された実行時 ID を使う。複数のプロセスが一つの UID を共有し得るため、UID に基づく許可はアカウントの境界であり、特定の実行ファイルがすべての許可された接続を作成した証拠ではない。

関連記事