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 运行。多个进程可能共用一个 UID,因此基于 UID 的放行只是账户边界,并不能证明是某个特定可执行文件创建了每一条被允许的连接。