2

今天基本上是从 Squid 和 iptables 开始的(谷歌是你的朋友)。这东西会是我的死。

我在 Ubuntu 9.04 服务器上将 Squid3 设置为透明代理。当我使用代理盒作为我的默认网关等时,它工作得很好。这个设置的 iptable 规则是教程的一部分。:P

不幸的是,我无法访问 https 站点(例如 Gmail 或端口 443 上的任何内容)。这是因为 Squid 不喜欢它不能缓存的东西,在这种情况下是 https 流量。

我想添加一个 iptable 规则,以便我基本上可以访问 https 站点并使用 Skype。基本上允许这些类型的流量通过而不经过Squid代理?(绕过它可以这么说)

有人可能知道如何做到这一点,或者有任何可以帮助我弄清楚的来源的链接吗?

谢谢你。

4

3 回答 3

5

在真正考虑过咀嚼我自己的手腕并整夜梦想着 IP + 蛮力谷歌搜索/尝试任何我可以让我的数字手指放在我身上的东西之后,我设法把一些真正有效的东西放在一起。我不知道为什么的技术原因,所以如果你能提供设置的解释,请这样做!:D

PS:解释中的所有内容都是通过命令行完成的

PS:这不是最终解决方案,但它可以回答我自己的问题。

这里是:

第 1 步:必须在盒子上启用 IP 转发:

vim /etc/sysctl.conf

//查找并取消注释以下内容

net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=1

步骤2:添加环回规则(这更适用于覆盖所有端口时,显然很多应用程序都需要它?

iptables -I INPUT -i lo -j ACCEPT

Step 3. 添加绕过443端口的规则:(eth1为internet接口,xxxx/eth0为LAN接口)

iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -t filter -A FORWARD -i eth0 -p tcp --dport 443 -j ACCEPT

iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source x.x.x.x

Step 4. 最后是让 Squid 透明的规则:(xxxx 是 LAN 接口的 IP)

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination x.x.x.x:3128

iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
于 2010-04-09T12:30:41.280 回答
3
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source x.x.x.x

那是错的。意味着TCP/UDP/etc您从内部 LAN 发送到 Internet 的每个数据包都将使用私有 LAN IP(可能是 192.178.xx)作为源 IP,而不是公共 IP。

可能对您有帮助:

PREROUTING == DestinationNAT -> From Internet to Intern LAN

POSTROUTING == SourceNAT -> From Intern LAN to Internet


iptables -t nat -A PREROUTING -i intern -p tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -A INPUT -j ACCEPT -m state --state NEW,ESTABLISHED,RELATED -i intern -p tcp --dport 3128 
iptables -A OUTPUT -j ACCEPT -m state --state NEW,ESTABLISHED,RELATED -o extern -p tcp --dport 80
iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED -i extern -p tcp --sport 80
iptables -A OUTPUT -j ACCEPT -m --state ESTABLISHED,RELATED -o intern -p tcp --sport 80

绕过 443 就足够了:

iptables -I FORWARD -p tcp --dport 443 -j ACCEPT

如果您system/squid/firewall也是从您的网络到互联网的路由器,请不要忘记:

iptables -t nat -A POSTROUTING -o extern -j SNAT --to-source Public_external_IP
于 2011-09-27T14:33:07.210 回答
1

对于那些解释...

步骤#1 将机器设置为路由器。这对于任何要接受或转发发往其他机器的 IP 流量的 Linux 机器都是必需的。如果没有这个,网络堆栈的最低级别将拒绝流量,NAT 甚至没有机会做它的事情。

步骤 #2 与所询问的问题无关。与代理无关的路由器操作可能需要也可能不需要。

第 3 步让机器将 443 端口作为路由器正常中继。POSTROUTING 规则可以通过使用 MASQUERADE 而不是 SNAT 来改进。

步骤#4 两条线以不同的方式做同样的事情。如果您不知道 DNAT 和 REDIRECT 之间的区别是什么,第一行可能会给您带来麻烦。为简单起见,仅使用 REDIRECT。

阅读http://wiki.squid-cache.org/ConfigExamples/Intercept/LinuxRedirect可以为您省去很多麻烦。

您的设置中还缺少一个关键的 mangle 表规则,该 wiki 页面上对此进行了说明。

于 2016-09-27T21:27:15.707 回答