Squid

通過作為 tproxy 執行的 squid 返回數據包不起作用

  • July 13, 2011

兩天來我一直在努力讓它正常工作,我迫切需要幫助。我已將 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 輸出:


鏈 INPUT(策略 DROP)
目標 prot opt 源目標 
動態所有 ::/0 ::/0 ctstate 無效,新
net2fw 全部 ::/0 ::/0 
loc2fw 全部 ::/0 ::/0 
接受所有 ::/0 ::/0 
刪除所有 ::/0 ::/0 
LOG all ::/0 ::/0 LOG flags 0 級別 6 前綴“Shorewall:INPUT:DROP:”
刪除所有 ::/0 ::/0 

Chain FORWARD(策略 DROP)
目標 prot opt 源目標 
net2loc 全部 ::/0 ::/0 
loc2net 全部 ::/0 ::/0 
lo_fwd 全部 ::/0 ::/0 
拒絕所有 ::/0 ::/0 
LOG all ::/0 ::/0 LOG 標誌 0 級別 6 前綴“Shorewall:FORWARD:REJECT:”
拒絕所有 ::/0 ::/0 [轉到]

鏈 OUTPUT(策略 DROP)
目標 prot opt 源目標 
fw2net 全部 ::/0 ::/0 
fw2loc 全部 ::/0 ::/0 
接受所有 ::/0 ::/0 
拒絕所有 ::/0 ::/0 
LOG all ::/0 ::/0 LOG 標誌 0 級別 6 前綴“Shorewall:OUTPUT:REJECT:”
拒絕所有 ::/0 ::/0 [轉到]

鏈下降(3 參考)
目標 prot opt 源目標 
拒絕 tcp ::/0 ::/0 tcp dpt:113 /* Auth */
dropBcast 全部 ::/0 ::/0 
dropInvalid all ::/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 個參考)
目標 prot opt 源目標 
拒絕 tcp ::/0 ::/0 tcp dpt:113 /* Auth */
dropBcast 全部 ::/0 ::/0 
dropInvalid all ::/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 回复 */

鏈dropBcast(2個參考)
目標 prot opt 源目標 
刪除所有 ::/0 2001:388:e000:c100::/128
刪除所有 ::/0 2001:388:e000:c100:ffff:ffff:ffff:ff80/121
刪除所有 ::/0 ff00::/8 

鏈掉落無效(2 個參考)
目標 prot opt 源目標 
刪除所有 ::/0 ::/0 ctstate 無效

鏈 dropNotSyn (2 參考)
目標 prot opt 源目標 
丟棄 tcp ::/0 ::/0 tcpflags:! 0x17/0x02

鍊式動態(7 篇參考文獻)
目標 prot opt 源目標 

鏈 fw2loc (1 參考)
目標 prot opt 源目標 
接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED
接受所有 ::/0 ::/0 

鏈 fw2net (1 參考)
目標 prot opt 源目標 
接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED
接受 41 ::/0 ::/0 
接受所有 ::/0 ::/0 

鏈 lo_fwd (1 參考)
目標 prot opt 源目標 
sfilter all ::/0 ::/0 [轉到]
動態所有 ::/0 ::/0 ctstate 無效,新

鏈 lo_in (0 引用)
目標 prot opt 源目標 
動態所有 ::/0 ::/0 ctstate 無效,新

鏈 loc2fw (1 參考)
目標 prot opt 源目標 
動態所有 ::/0 ::/0 ctstate 無效,新
接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED
接受所有 ::/0 ::/0 

鏈 loc2net (1 參考)
目標 prot opt 源目標 
sfilter all ::/0 ::/0 [轉到]
動態所有 ::/0 ::/0 ctstate 無效,新
接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED
接受所有 ::/0 ::/0 

鏈 logdrop (0 引用)
目標 prot opt 源目標 
刪除所有 ::/0 ::/0 

鏈日誌標誌(5 個參考)
目標 prot opt 源目標 
LOG all ::/0 ::/0 LOG flags 4 級別 6 前綴“Shorewall:logflags:DROP:”
刪除所有 ::/0 ::/0 

鏈 logreject (0 引用)
目標 prot opt 源目標 
拒絕所有 ::/0 ::/0 

鏈 net2fw (1 參考)
目標 prot opt 源目標 
動態所有 ::/0 ::/0 ctstate 無效,新
藍精靈所有 ::/0 ::/0 ctstate 無效,新
tcpflags tcp ::/0 ::/0 
接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED
接受 41 ::/0 ::/0 
接受 tcp ::/0 ::/0 tcp dpt:2093
刪除所有 ::/0 ::/0 
刪除所有 ::/0 ::/0 

鏈 net2loc (1 參考)
目標 prot opt 源目標 
sfilter all ::/0 ::/0 [轉到]
動態所有 ::/0 ::/0 ctstate 無效,新
藍精靈所有 ::/0 ::/0 ctstate 無效,新
tcpflags tcp ::/0 ::/0 
接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED
接受 tcp ::/0 2001:388:e000:c100:216:3eff:fe24:dce6/128 多埠 dports 25,993
刪除所有 ::/0 ::/0 
刪除所有 ::/0 ::/0 

連鎖拒絕(9 參考)
目標 prot opt 源目標 
刪除所有 ::/0 2001:388:e000:c100::/128
刪除所有 ::/0 2001:388:e000:c100:ffff:ffff:ffff:ff80/121
刪除所有 ff00::/8 ::/0 
刪除 2 ::/0 ::/0 
REJECT tcp ::/0 ::/0 用 tcp-reset 拒絕
拒絕 udp ::/0 ::/0 拒絕 icmp6-port-unreachable
REJECT icmpv6 ::/0 ::/0 拒絕-與 icmp6-addr-unreachable
拒絕所有 ::/0 ::/0 拒絕使用 icmp6-adm-prohibited

鍊式過濾器(3 個參考)
目標 prot opt 源目標 
LOG all ::/0 ::/0 LOG flags 0 級別 6 前綴“Shorewall:sfilter:DROP:”
刪除所有 ::/0 ::/0 

鍊式岸牆(0 篇參考文獻)
目標 prot opt 源目標 

鏈藍精靈 (3 參考)
目標 prot opt 源目標 
LOG all ::/0 ::/0 LOG 標誌 0 級別 6 前綴“Shorewall:smurfs:DROP:”
刪除所有 ::/0 ::/0 

鏈藍精靈 (2 參考)
目標 prot opt 源目標 
smurflog all 2001:388:e000:c100::/128 ::/0 [轉到]
smurflog 所有 2001:388:e000:c100:ffff:ffff:ffff:ff80/121 ::/0 [轉到]
smurflog 所有 ff00::/8 ::/0 [轉到]

鏈 tcpflags(2 個參考)
目標 prot opt 源目標 
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 輸出:

鏈 INPUT(策略 DROP)
目標 prot opt 源目標 
動態所有 ::/0 ::/0 ctstate 無效,新
net2fw 全部 ::/0 ::/0 
loc2fw 全部 ::/0 ::/0 
接受所有 ::/0 ::/0 
刪除所有 ::/0 ::/0 
LOG all ::/0 ::/0 LOG flags 0 級別 6 前綴“Shorewall:INPUT:DROP:”
刪除所有 ::/0 ::/0 

Chain FORWARD(策略 DROP)
目標 prot opt 源目標 
net2loc 全部 ::/0 ::/0 
loc2net 全部 ::/0 ::/0 
lo_fwd 全部 ::/0 ::/0 
拒絕所有 ::/0 ::/0 
LOG all ::/0 ::/0 LOG 標誌 0 級別 6 前綴“Shorewall:FORWARD:REJECT:”
拒絕所有 ::/0 ::/0 [轉到]

鏈 OUTPUT(策略 DROP)
目標 prot opt 源目標 
fw2net 全部 ::/0 ::/0 
fw2loc 全部 ::/0 ::/0 
接受所有 ::/0 ::/0 
拒絕所有 ::/0 ::/0 
LOG all ::/0 ::/0 LOG 標誌 0 級別 6 前綴“Shorewall:OUTPUT:REJECT:”
拒絕所有 ::/0 ::/0 [轉到]

鏈下降(3 參考)
目標 prot opt 源目標 
拒絕 tcp ::/0 ::/0 tcp dpt:113 /* Auth */
dropBcast 全部 ::/0 ::/0 
dropInvalid all ::/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 個參考)
目標 prot opt 源目標 
拒絕 tcp ::/0 ::/0 tcp dpt:113 /* Auth */
dropBcast 全部 ::/0 ::/0 
dropInvalid all ::/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 回复 */

鏈dropBcast(2個參考)
目標 prot opt 源目標 
刪除所有 ::/0 2001:388:e000:c100::/128
刪除所有 ::/0 2001:388:e000:c100:ffff:ffff:ffff:ff80/121
刪除所有 ::/0 ff00::/8 

鏈掉落無效(2 個參考)
目標 prot opt 源目標 
刪除所有 ::/0 ::/0 ctstate 無效

鏈 dropNotSyn (2 參考)
目標 prot opt 源目標 
丟棄 tcp ::/0 ::/0 tcpflags:! 0x17/0x02

鍊式動態(7 篇參考文獻)
目標 prot opt 源目標 

鏈 fw2loc (1 參考)
目標 prot opt 源目標 
接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED
接受所有 ::/0 ::/0 

鏈 fw2net (1 參考)
目標 prot opt 源目標 
接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED
接受 41 ::/0 ::/0 
接受所有 ::/0 ::/0 

鏈 lo_fwd (1 參考)
目標 prot opt 源目標 
sfilter all ::/0 ::/0 [轉到]
動態所有 ::/0 ::/0 ctstate 無效,新

鏈 lo_in (0 引用)
目標 prot opt 源目標 
動態所有 ::/0 ::/0 ctstate 無效,新

鏈 loc2fw (1 參考)
目標 prot opt 源目標 
動態所有 ::/0 ::/0 ctstate 無效,新
接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED
接受所有 ::/0 ::/0 

鏈 loc2net (1 參考)
目標 prot opt 源目標 
sfilter all ::/0 ::/0 [轉到]
動態所有 ::/0 ::/0 ctstate 無效,新
接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED
接受所有 ::/0 ::/0 

鏈 logdrop (0 引用)
目標 prot opt 源目標 
刪除所有 ::/0 ::/0 

鏈日誌標誌(5 個參考)
目標 prot opt 源目標 
LOG all ::/0 ::/0 LOG flags 4 級別 6 前綴“Shorewall:logflags:DROP:”
刪除所有 ::/0 ::/0 

鏈 logreject (0 引用)
目標 prot opt 源目標 
拒絕所有 ::/0 ::/0 

鏈 net2fw (1 參考)
目標 prot opt 源目標 
動態所有 ::/0 ::/0 ctstate 無效,新
藍精靈所有 ::/0 ::/0 ctstate 無效,新
tcpflags tcp ::/0 ::/0 
接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED
接受 41 ::/0 ::/0 
接受 tcp ::/0 ::/0 tcp dpt:2093
刪除所有 ::/0 ::/0 
刪除所有 ::/0 ::/0 

鏈 net2loc (1 參考)
目標 prot opt 源目標 
sfilter all ::/0 ::/0 [轉到]
動態所有 ::/0 ::/0 ctstate 無效,新
藍精靈所有 ::/0 ::/0 ctstate 無效,新
tcpflags tcp ::/0 ::/0 
接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED
接受 tcp ::/0 2001:388:e000:c100:216:3eff:fe24:dce6/128 多埠 dports 25,993
刪除所有 ::/0 ::/0 
刪除所有 ::/0 ::/0 

連鎖拒絕(9 參考)
目標 prot opt 源目標 
刪除所有 ::/0 2001:388:e000:c100::/128
刪除所有 ::/0 2001:388:e000:c100:ffff:ffff:ffff:ff80/121
刪除所有 ff00::/8 ::/0 
刪除 2 ::/0 ::/0 
REJECT tcp ::/0 ::/0 用 tcp-reset 拒絕
拒絕 udp ::/0 ::/0 拒絕 icmp6-port-unreachable
REJECT icmpv6 ::/0 ::/0 拒絕-與 icmp6-addr-unreachable
拒絕所有 ::/0 ::/0 拒絕使用 icmp6-adm-prohibited

鍊式過濾器(3 個參考)
目標 prot opt 源目標 
LOG all ::/0 ::/0 LOG flags 0 級別 6 前綴“Shorewall:sfilter:DROP:”
刪除所有 ::/0 ::/0 

鍊式岸牆(0 篇參考文獻)
目標 prot opt 源目標 

鏈藍精靈 (3 參考)
目標 prot opt 源目標 
LOG all ::/0 ::/0 LOG 標誌 0 級別 6 前綴“Shorewall:smurfs:DROP:”
刪除所有 ::/0 ::/0 

鏈藍精靈 (2 參考)
目標 prot opt 源目標 
smurflog all 2001:388:e000:c100::/128 ::/0 [轉到]
smurflog 所有 2001:388:e000:c100:ffff:ffff:ffff:ff80/121 ::/0 [轉到]
smurflog 所有 ff00::/8 ::/0 [轉到]

鏈 tcpflags(2 個參考)
目標 prot opt 源目標 
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

我發現了問題,缺少兩條規則,我認為應該插入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

引用自:https://serverfault.com/questions/289801