IPTables 和透明代理

Blu*_*irm 5 networking iptables proxy tcp

我已经在 上设置了本地透明 TCP 代理localhost。我想将所有 TCP 流量重定向到该代理,这样它就可以处理它,并且不会“泄漏”任何东西,从而绕过代理。我需要使用 IPTables 来重定向流量。我考虑过使用 TPROXY,但这需要应用程序支持,并且目前仅支持 REDIRECT 目标。

我使用了以下 IPTables 规则:

iptables -t nat -A OUTPUT -o lo -j RETURN
iptables -t nat -A OUTPUT -d 127.0.0.0/8 -j RETURN
iptables -t nat -A OUTPUT -d 192.168.0.0/16 -j RETURN
iptables -t nat -A OUTPUT -m owner --uid-owner proxy-owner -j RETURN
iptables -t nat -A OUTPUT -p tcp --syn -j REDIRECT --to-ports $PROXY_PORT

iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -d 127.0.0.0/8 -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner proxy-owner -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j LOG
iptables -P OUTPUT DROP
Run Code Online (Sandbox Code Playgroud)

它们似乎工作得很好,但我很困惑为什么。

这里有两个问题我仍然不知道答案:

1) 关于 NAT 表中的最后一条规则,为什么我只想将 SYN 数据包重定向到本地代理端口 ( --syn)? 我想重定向所有 TCP 数据包。在当前配置中,似乎只有 SYN 数据包被重定向到本地代理,而所有其他数据包都被允许直接流向目的地,导致(理论上)完全混乱(或者除了 SYN 之外的所有数据包都被过滤器阻止)桌子)。但是,如果我删除该--syn选项并将所有数据包重定向到本地代理,则代理根本无法工作。为什么?

2)关于过滤表中的第四条规则,为什么我需要显式允许传出已建立的连接?无论如何,代理是唯一允许将数据包发送到非本地主机目的地的应用程序,而且它已经被允许这样做(规则 3),那么我需要第四条规则做什么呢?似乎它允许非代理连接绕过代理。

谢谢你!

sym*_*ean 0

我需要使用 iptables 来重定向流量

不 - 您只需设置网络,以便这是唯一可以访问互联网的主机,并告诉其他所有主机将其用作路由器。

您需要的其他东西只是 NAT/伪装 - 试图让它充当代理是愚蠢的。