iptables --uid-owner が一致するのは Squid のローカルソケットであり、LAN ユーザーではない
Squid の外向き通信を考えるときは --uid-owner をローカルソケットの作成者という意味で捉え、転送される LAN パケットとは分けて扱う。
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 に基づく許可はアカウントの境界であり、特定の実行ファイルがすべての許可された接続を作成した証拠ではない。