通过使用 iptables 将 squid 传递给少数主机

通过使用 iptables 将 squid 传递给少数主机

我们有一个 squid 代理设置,它监听 eht0(192.xxx)上的默认端口(3128)。

它有另一个接口 eth1 (10.xxx) 用于连接外部世界。它使用 squidguard 进行高质量内容过滤。

但是现在我们希望网络中的某些主机能够绕过squid,为少数人提供完全访问权限。

我正在考虑使用 iptables 的一些事情:来自那些特定主机(要通过代理)的任何数据包到达代理的端口 3128 上的 eth0 都应重定向到 eth1,并且应该能够访问任何东西。

这可以吗?如果可以,请帮我制定规则?

我知道使用 squidgaurd 可以很好地完成此操作,但只想使用 iptables 来完成。

答案1

除非您使用透明代理(但您没有使用透明代理),否则您将无法实现这一点。使用明确配置的代理,iptables 只能看到客户端主机和 squid 代理之间的对话。这将使流量操纵变得不可能,因为 iptables 不知道您尝试访问的网站/IP 地址。

但是,使用透明代理,您可以相当轻松地以相反的方式完成此操作。也就是说,让 iptables 将所有 www 流量重定向到代理,除非它满足某些条件。

如果在透明模式下使用代理是您的选项,那么您可以按照以下指南实现您的目标,但需要修改 iptables 中的预路由阶段,以便在代理重定向上方设置例外。如下所示:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -s $PROXY_BYPASS_HOST -j RETURN
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port $SQUID-SERVER:$SQUID_PORT

SQUID/iptables 透明代理指南

答案2

它不会起作用,因为 HTTP“聊天”嵌入在客户端代理会话中。

但是您可以将代理服务器配置为透明,并根据需要设置重定向 iptables 规则。

答案3

使用带有范围规则的 iptables 可以绕过 Squid 透明模式。

#NAT:
iptables --table nat --append POSTROUTING --out-interface eth1 -j MASQUERADE
iptables --append FORWARD --in-interface eth0 -j ACCEPT

#Bypass range of ip: 
iptables -t nat -A PREROUTING -i eth0 -m iprange ! --src-range 192.168.3.39-192.168.3.44 -p tcp --dport 80 -j DNAT --to 192.168.3.1:8028
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8028

相关内容