在我的组织中,我尝试使用 squid 代理允许 Google 应用帐户并阻止消费者 Google 帐户。根据这链接,谷歌说我们可以按照以下步骤进行操作:
- 通过您的网络代理服务器将所有出站流量路由到 google.com。
- 在代理服务器上启用 SSL 拦截。
- 由于您将拦截 SSL 请求,因此您需要通过部署代理使用的内部根证书颁发机构并将其标记为受信任,将每个客户端设备配置为信任您的 SSL 代理。
- 对于每个 google.com 请求:
- 拦截请求。
- 添加 HTTP 标头 X-GoogApps-Allowed-Domains,其值是一个以逗号分隔的允许域名列表。包括您在 Google Apps 中注册的域名以及您可能添加的任何辅助域名。
在参考了一些在线博客和指南后,我编译并安装了 squid,并在 squid.conf 中添加了以下条目:
http_port 3128 intercept
http_port 3129
https_port 3130 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB
acl localnet1 dstdomain .google.com
ssl_bump server-first localnet1
always_direct allow localnet1
sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER
request_header_add X-GoogApps-Allowed-Domains "mydomain.com" localnet1
cert=/usr/local/squid/cert/server.crt key=/usr/local/squid/cert/server.key
sslcrtd_program /usr/local/squid/libexec/ssl_crtd -s /usr/local/squid/var/ssl_db -M 20MB
sslcrtd_children 100
使用上述配置,每个请求(http 和 https)都通过我的代理服务器路由,但它无法阻止消费者 Google 帐户,因此我能够登录该帐户。
我还将代理 IP 添加为节点系统的网关,并在代理服务器的 Iptable 中添加了以下规则
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3130
iptables -I INPUT -p tcp -m tcp --dport 3130 -j ACCEPT
那么我还需要做什么才能屏蔽消费者 Google 帐户?我是不是漏掉了什么?
编辑: 解决上述问题后,我意识到我犯了一个错误。我在 squid.conf 文件中的端口设置如下:
http_port 3128 intercept
http_port 3129
https_port 3130 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB
我已经在节点系统中设置了全局代理。我在 IP 字段中输入了代理服务器的 IP,在端口字段中输入了 3129。因此,我的所有请求都通过 3129 端口,因此不会被拦截,并且能够登录消费者 Google 帐户。因此,我从节点系统中删除了代理设置,只保留了代理服务器 IP 作为网关。在此之后,我的每个请求都到达了代理服务器,但我认为它没有被路由到 squid.conf 中指定的端口。即 80 端口到 3128,443 端口到 3130,现在因为这个原因,一切都被阻止了。
我尝试在 Iptables 中为端口的内部路由设置规则,但没有任何效果。我的代理服务器只有一个以太网接口,即 eth0。那么有人能指导我解决这个问题吗?
答案1
我唯一的建议是最初忽略 squid 拦截/透明 iptables 内容 - 使用 Web 代理设置配置您的浏览器,并首先使其正常工作 - 至少这样需要处理的“移动部件”会稍微少一些。