通过作为 tproxy 运行的 squid 返回数据包不起作用

通过作为 tproxy 运行的 squid 返回数据包不起作用

我已经尝试让它正常工作两天了,我迫切需要帮助。我已将 Squid 3 配置为使用 tproxy 标志监听端口 3129 的代理,并遵循以下有关 shorewall 的说明:

http://www.shorewall.net/Shorewall_Squid_Usage.html#TPROXY

我正在使用 IPv6,因此我已相应地调整了这些设置,并且通过 NAT 重定向不是一种选项。

当我尝试连接到远程主机(例如端口 80 上的 ipv6.google.com)时,该连接会被 squid fine 拦截,然后连接到 ipv6.google.com,但最终连接超时并且我看到了 squid 错误页面。

如果我对连接执行 tcpdump,我会得到以下结果

19:09:11.958367 IP6 2001:388:e000:c100:213:e8ff:fe6b:41e5.56667 > 2404:6800:4006:802::1014.80: Flags [S], seq 4011445546, win 12200, options [mss 1220,sackOK,TS val 3255676 ecr 0,nop,wscale 5], length 0
19:09:12.019139 IP6 2404:6800:4006:802::1014.80 > 2001:388:e000:c100:213:e8ff:fe6b:41e5.56667: Flags [S.], seq 1191029984, ack 4011445547, win 5712, options [mss 1410,sackOK,TS val 967841584 ecr 3255676,nop,wscale 6], length 0

每次请求 TTL 超时时都会重复此操作。

如果我使用 squid 作为非透明代理服务器,它能够毫无问题地处理 IPv6 请求。因此,出于某种原因,数据包无法返回 squid。

我在跑步:

kernel     - 2.6.39
iptables   - 1.4.11
shorewall6 - 4.4.20
squid3     - 3.1.12

编辑-我在 IPv4 中也看到了同样的行为

ip6tables -nL 输出:

链输入(政策删除)
目标 保护 优化 源 目标         
动态全部 ::/0 ::/0 ctstate INVALID,NEW
net2fw 全部 ::/0 ::/0                
loc2fw 全部 ::/0 ::/0                
全部接受 ::/0 ::/0                
全部删除 ::/0 ::/0                
LOG 全部 ::/0 ::/0 LOG 标志 0 级别 6 前缀“Shorewall:INPUT:DROP:”
删除全部 ::/0 ::/0                

链转发(策略丢弃)
目标 保护 优化 源 目标         
net2loc 全部 ::/0 ::/0                
loc2net 全部 ::/0 ::/0                
lo_fwd 全部 ::/0 ::/0                
全部拒绝 ::/0 ::/0                
LOG 全部 ::/0 ::/0 LOG 标志 0 级别 6 前缀“Shorewall:FORWARD:REJECT:”
全部拒绝 ::/0 ::/0 [转到]

链输出(政策下降)
目标 保护 优化 源 目标         
fw2net 全部 ::/0 ::/0                
fw2loc 全部 ::/0 ::/0                
全部接受 ::/0 ::/0                
全部拒绝 ::/0 ::/0                
LOG 全部 ::/0 ::/0 LOG 标志 0 级别 6 前缀“Shorewall:OUTPUT:REJECT:”
全部拒绝 ::/0 ::/0 [转到]

连锁掉落 (3 处引用)
目标 保护 优化 源 目标         
拒绝 tcp ::/0 ::/0 tcp dpt:113 /* 验证 */
dropBcast 全部 ::/0 ::/0                
dropInvalid 全部 ::/0 ::/0                
DROP udp ::/0 ::/0 多端口 dports 135,445 /* SMB */
DROP udp ::/0 ::/0 udp dpts:137:139 / * SMB * /
DROP udp ::/0 ::/0 udp spt:137 dpts:1024:65535 /* SMB */
DROP tcp ::/0 ::/0 多端口 dports 135,139,445 /* SMB */
dropNotSyn tcp ::/0 ::/0                
DROP udp ::/0 ::/0 udp spt:53 /* 延迟 DNS 回复 */

链式拒绝 (2 个引用)
目标 保护 优化 源 目标         
拒绝 tcp ::/0 ::/0 tcp dpt:113 /* 验证 */
dropBcast 全部 ::/0 ::/0                
dropInvalid 全部 ::/0 ::/0                
拒绝 udp ::/0 ::/0 多端口 dports 135,445 /* SMB */
拒绝 udp ::/0 ::/0 udp dpts:137:139 /* SMB */
拒绝 udp ::/0 ::/0 udp spt:137 dpts:1024:65535 /* SMB */
拒绝 tcp ::/0 ::/0 多端口 dports 135,139,445 /* SMB */
dropNotSyn tcp ::/0 ::/0                
DROP udp ::/0 ::/0 udp spt:53 /* 延迟 DNS 回复 */

Chain dropBcast (2 个引用)
目标 保护 优化 源 目标         
删除所有 ::/0 2001:388:e000:c100::/128
删除所有 ::/0 2001:388:e000:c100:ffff:ffff:ffff:ff80/121
删除所有 ::/0 ff00::/8            

Chain dropInvalid(2 个引用)
目标 保护 优化 源 目标         
删除所有 ::/0 ::/0 ctstate 无效

Chain dropNotSyn(2 个引用)
目标 保护 优化 源 目标         
删除 tcp ::/0 ::/0 tcpflags:!0x17/0x02

链动态 (7 个引用)
目标 保护 优化 源 目标         

链 fw2loc (1 引用)
目标 保护 优化 源 目标         
接受所有 ::/0 ::/0 ctstate 相关,已建立
全部接受 ::/0 ::/0                

链 fw2net (1 个引用)
目标 保护 优化 源 目标         
接受所有 ::/0 ::/0 ctstate 相关,已建立
接受 41 ::/0 ::/0                
全部接受 ::/0 ::/0                

Chain lo_fwd (1 引用)
目标 保护 优化 源 目标         
sfilter 全部 ::/0 ::/0 [转到]
动态全部 ::/0 ::/0 ctstate INVALID,NEW

Chain lo_in (0 引用)
目标 保护 优化 源 目标         
动态全部 ::/0 ::/0 ctstate INVALID,NEW

Chain loc2fw (1 引用)
目标 保护 优化 源 目标         
动态全部 ::/0 ::/0 ctstate INVALID,NEW
接受所有 ::/0 ::/0 ctstate 相关,已建立
全部接受 ::/0 ::/0                

Chain loc2net (1 引用)
目标 保护 优化 源 目标         
sfilter 全部 ::/0 ::/0 [转到]
动态全部 ::/0 ::/0 ctstate INVALID,NEW
接受所有 ::/0 ::/0 ctstate 相关,已建立
全部接受 ::/0 ::/0                

Chain logdrop (0 引用)
目标 保护 优化 源 目标         
删除全部 ::/0 ::/0                

链式日志标志 (5 个引用)
目标 保护 优化 源 目标         
LOG 全部 ::/0 ::/0 LOG 标志 4 级别 6 前缀“Shorewall:logflags:DROP:”
删除全部 ::/0 ::/0                

Chain logreject (0 引用)
目标 保护 优化 源 目标         
全部拒绝 ::/0 ::/0                

Chain net2fw (1 个引用)
目标 保护 优化 源 目标         
动态全部 ::/0 ::/0 ctstate INVALID,NEW
smurfs 全部 ::/0 ::/0 ctstate INVALID,NEW
tcp标志 tcp ::/0 ::/0                
接受所有 ::/0 ::/0 ctstate 相关,已建立
接受 41 ::/0 ::/0                
接受 tcp ::/0 ::/0 tcp dpt:2093
全部删除 ::/0 ::/0                
删除全部 ::/0 ::/0                

Chain net2loc (1 引用)
目标 保护 优化 源 目标         
sfilter 全部 ::/0 ::/0 [转到]
动态全部 ::/0 ::/0 ctstate INVALID,NEW
smurfs 全部 ::/0 ::/0 ctstate INVALID,NEW
tcp标志 tcp ::/0 ::/0                
接受所有 ::/0 ::/0 ctstate 相关,已建立
接受 tcp ::/0 2001:388:e000:c100:216:3eff:fe24:dce6/128 多端口 dports 25,993
全部删除 ::/0 ::/0                
删除全部 ::/0 ::/0                

链式拒绝 (9 引用)
目标 保护 优化 源 目标         
删除所有 ::/0 2001:388:e000:c100::/128
删除所有 ::/0 2001:388:e000:c100:ffff:ffff:ffff:ff80/121
删除所有 ff00::/8 ::/0                
下降 2 ::/0 ::/0                
拒绝 tcp ::/0 ::/0 拒绝并重置 tcp
拒绝 udp ::/0 ::/0 拒绝-icmp6 端口不可达
拒绝 icmpv6 ::/0 ::/0 拒绝-icmp6-addr-不可达
拒绝所有 ::/0 ::/0 拒绝 - 使用 icmp6-adm-禁止

链式过滤器 (3 个参考)
目标 保护 优化 源 目标         
LOG 全部 ::/0 ::/0 LOG 标志 0 级别 6 前缀“Shorewall:sfilter:DROP:”
删除全部 ::/0 ::/0                

链式岸墙 (0 引用)
目标 保护 优化 源 目标         

Chain smurflog(3 个引用)
目标 保护 优化 源 目标         
LOG 全部 ::/0 ::/0 LOG 标志 0 级别 6 前缀“Shorewall:smurfs:DROP:”
删除全部 ::/0 ::/0                

连锁小精灵 (2 个引用)
目标 保护 优化 源 目标         
smurflog 全部 2001:388:e000:c100::/128 ::/0 [转到]
smurflog 全部 2001:388:e000:c100:ffff:ffff:ffff:ff80/121 ::/0 [转到]
smurflog 全部 ff00::/8 ::/0 [转到]

链式 tcpflags(2 个引用)
目标 保护 优化 源 目标         
logflags tcp ::/0 ::/0 [转到] tcpflags:0x3F/0x29
logflags tcp ::/0 ::/0 [转到] tcpflags:0x3F/0x00
logflags tcp ::/0 ::/0 [转到] tcpflags:0x06/0x06
logflags tcp ::/0 ::/0 [转到] tcpflags:0x03/0x03
logflags tcp ::/0 ::/0 [转到] tcp spt:0flags: 0x17/0x02

ip6tables -t mangle -nL 输出:

链输入(政策删除)
目标 保护 优化 源 目标         
动态全部 ::/0 ::/0 ctstate INVALID,NEW
net2fw 全部 ::/0 ::/0                
loc2fw 全部 ::/0 ::/0                
全部接受 ::/0 ::/0                
全部删除 ::/0 ::/0                
LOG 全部 ::/0 ::/0 LOG 标志 0 级别 6 前缀“Shorewall:INPUT:DROP:”
删除全部 ::/0 ::/0                

链转发(策略丢弃)
目标 保护 优化 源 目标         
net2loc 全部 ::/0 ::/0                
loc2net 全部 ::/0 ::/0                
lo_fwd 全部 ::/0 ::/0                
全部拒绝 ::/0 ::/0                
LOG 全部 ::/0 ::/0 LOG 标志 0 级别 6 前缀“Shorewall:FORWARD:REJECT:”
全部拒绝 ::/0 ::/0 [转到]

链输出(政策下降)
目标 保护 优化 源 目标         
fw2net 全部 ::/0 ::/0                
fw2loc 全部 ::/0 ::/0                
全部接受 ::/0 ::/0                
全部拒绝 ::/0 ::/0                
LOG 全部 ::/0 ::/0 LOG 标志 0 级别 6 前缀“Shorewall:OUTPUT:REJECT:”
全部拒绝 ::/0 ::/0 [转到]

连锁掉落 (3 处引用)
目标 保护 优化 源 目标         
拒绝 tcp ::/0 ::/0 tcp dpt:113 /* 验证 */
dropBcast 全部 ::/0 ::/0                
dropInvalid 全部 ::/0 ::/0                
DROP udp ::/0 ::/0 多端口 dports 135,445 /* SMB */
DROP udp ::/0 ::/0 udp dpts:137:139 / * SMB * /
DROP udp ::/0 ::/0 udp spt:137 dpts:1024:65535 /* SMB */
DROP tcp ::/0 ::/0 多端口 dports 135,139,445 /* SMB */
dropNotSyn tcp ::/0 ::/0                
DROP udp ::/0 ::/0 udp spt:53 /* 延迟 DNS 回复 */

链式拒绝 (2 个引用)
目标 保护 优化 源 目标         
拒绝 tcp ::/0 ::/0 tcp dpt:113 /* 验证 */
dropBcast 全部 ::/0 ::/0                
dropInvalid 全部 ::/0 ::/0                
拒绝 udp ::/0 ::/0 多端口 dports 135,445 /* SMB */
拒绝 udp ::/0 ::/0 udp dpts:137:139 /* SMB */
拒绝 udp ::/0 ::/0 udp spt:137 dpts:1024:65535 /* SMB */
拒绝 tcp ::/0 ::/0 多端口 dports 135,139,445 /* SMB */
dropNotSyn tcp ::/0 ::/0                
DROP udp ::/0 ::/0 udp spt:53 /* 延迟 DNS 回复 */

Chain dropBcast (2 个引用)
目标 保护 优化 源 目标         
删除所有 ::/0 2001:388:e000:c100::/128
删除所有 ::/0 2001:388:e000:c100:ffff:ffff:ffff:ff80/121
删除所有 ::/0 ff00::/8            

Chain dropInvalid(2 个引用)
目标 保护 优化 源 目标         
删除所有 ::/0 ::/0 ctstate 无效

Chain dropNotSyn(2 个引用)
目标 保护 优化 源 目标         
删除 tcp ::/0 ::/0 tcpflags:!0x17/0x02

链动态 (7 个引用)
目标 保护 优化 源 目标         

链 fw2loc (1 引用)
目标 保护 优化 源 目标         
接受所有 ::/0 ::/0 ctstate 相关,已建立
全部接受 ::/0 ::/0                

链 fw2net (1 个引用)
目标 保护 优化 源 目标         
接受所有 ::/0 ::/0 ctstate 相关,已建立
接受 41 ::/0 ::/0                
全部接受 ::/0 ::/0                

Chain lo_fwd (1 引用)
目标 保护 优化 源 目标         
sfilter 全部 ::/0 ::/0 [转到]
动态全部 ::/0 ::/0 ctstate INVALID,NEW

Chain lo_in (0 引用)
目标 保护 优化 源 目标         
动态全部 ::/0 ::/0 ctstate INVALID,NEW

Chain loc2fw (1 引用)
目标 保护 优化 源 目标         
动态全部 ::/0 ::/0 ctstate INVALID,NEW
接受所有 ::/0 ::/0 ctstate 相关,已建立
全部接受 ::/0 ::/0                

Chain loc2net (1 引用)
目标 保护 优化 源 目标         
sfilter 全部 ::/0 ::/0 [转到]
动态全部 ::/0 ::/0 ctstate INVALID,NEW
接受所有 ::/0 ::/0 ctstate 相关,已建立
全部接受 ::/0 ::/0                

Chain logdrop (0 引用)
目标 保护 优化 源 目标         
删除全部 ::/0 ::/0                

链式日志标志 (5 个引用)
目标 保护 优化 源 目标         
LOG 全部 ::/0 ::/0 LOG 标志 4 级别 6 前缀“Shorewall:logflags:DROP:”
删除全部 ::/0 ::/0                

Chain logreject (0 引用)
目标 保护 优化 源 目标         
全部拒绝 ::/0 ::/0                

Chain net2fw (1 个引用)
目标 保护 优化 源 目标         
动态全部 ::/0 ::/0 ctstate INVALID,NEW
smurfs 全部 ::/0 ::/0 ctstate INVALID,NEW
tcp标志 tcp ::/0 ::/0                
接受所有 ::/0 ::/0 ctstate 相关,已建立
接受 41 ::/0 ::/0                
接受 tcp ::/0 ::/0 tcp dpt:2093
全部删除 ::/0 ::/0                
删除全部 ::/0 ::/0                

Chain net2loc (1 引用)
目标 保护 优化 源 目标         
sfilter 全部 ::/0 ::/0 [转到]
动态全部 ::/0 ::/0 ctstate INVALID,NEW
smurfs 全部 ::/0 ::/0 ctstate INVALID,NEW
tcp标志 tcp ::/0 ::/0                
接受所有 ::/0 ::/0 ctstate 相关,已建立
接受 tcp ::/0 2001:388:e000:c100:216:3eff:fe24:dce6/128 多端口 dports 25,993
全部删除 ::/0 ::/0                
删除全部 ::/0 ::/0                

链式拒绝 (9 引用)
目标 保护 优化 源 目标         
删除所有 ::/0 2001:388:e000:c100::/128
删除所有 ::/0 2001:388:e000:c100:ffff:ffff:ffff:ff80/121
删除所有 ff00::/8 ::/0                
下降 2 ::/0 ::/0                
拒绝 tcp ::/0 ::/0 拒绝并重置 tcp
拒绝 udp ::/0 ::/0 拒绝-icmp6 端口不可达
拒绝 icmpv6 ::/0 ::/0 拒绝-icmp6-addr-不可达
拒绝所有 ::/0 ::/0 拒绝 - 使用 icmp6-adm-禁止

链式过滤器 (3 个参考)
目标 保护 优化 源 目标         
LOG 全部 ::/0 ::/0 LOG 标志 0 级别 6 前缀“Shorewall:sfilter:DROP:”
删除全部 ::/0 ::/0                

链式岸墙 (0 引用)
目标 保护 优化 源 目标         

Chain smurflog(3 个引用)
目标 保护 优化 源 目标         
LOG 全部 ::/0 ::/0 LOG 标志 0 级别 6 前缀“Shorewall:smurfs:DROP:”
删除全部 ::/0 ::/0                

连锁小精灵 (2 个引用)
目标 保护 优化 源 目标         
smurflog 全部 2001:388:e000:c100::/128 ::/0 [转到]
smurflog 全部 2001:388:e000:c100:ffff:ffff:ffff:ff80/121 ::/0 [转到]
smurflog 全部 ff00::/8 ::/0 [转到]

链式 tcpflags(2 个引用)
目标 保护 优化 源 目标         
logflags tcp ::/0 ::/0 [转到] tcpflags:0x3F/0x29
logflags tcp ::/0 ::/0 [转到] tcpflags:0x3F/0x00
logflags tcp ::/0 ::/0 [转到] tcpflags:0x06/0x06
logflags tcp ::/0 ::/0 [转到] tcpflags:0x03/0x03
logflags tcp ::/0 ::/0 [转到] tcp spt:0flags: 0x17/0x02

答案1

我发现了问题,缺少两条我认为 shorewall 应该插入的规则,运行以下命令解决了该问题。

ip6tables -t mangle -N DIVERT
ip6tables -t mangle -A DIVERT -j MARK --set-mark 1
ip6tables -t mangle -A DIVERT -j ACCEPT
ip6tables -t mangle -I tcpre 1 -p tcp -m socket -j DIVERT

相关内容