Squid 配置

Squid 配置

我想允许我的用户仅登录我的域的 Google 应用。我找到了一个解决方案,即添加 HTTP 标头,X-GoogApps-Allowed-Domains如中所述此 Google 帮助页面

我使用 Squid,但不知道该如何配置 Squid 来实现这一点。如何使用 Squid 添加此请求标头?

答案1

您可以使用支持命令“request_header_add”的新 Squid 3.3 吗?我使用 CentOS 来执行此操作。

我的 Squid.conf 是:

acl CONNECT method CONNECT
visible_hostname MySERVER.local
acl local src 192.168.0.0/24
http_access allow local
ssl_bump client-first all
always_direct allow all
http_port 3128 ssl_bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/usr/local/squid/etc/cert.pem
request_header_add X-GoogApps-Allowed-Domains "mycompany.com" all
cache_dir ufs /usr/local/squid/var/cache 8192 32 256

对于SSL证书,是否需要用openSSL生成:

openssl req -new -newkey rsa:1024 -days 36500 -nodes -x509 -keyout /usr/local/squid/etc/cert.pem -out /usr/local/squid/etc/cert.pem 

对于无法在浏览器中查看错误的用户,请将其安装为每台计算机上受信任的根或添加到您的 Active Directory 中(谷歌可能会提供帮助)。

openssl x509 -in /usr/local/squid/etc/cert.pem -outform DER -out /usr/local/squid/etc/cert.der

答案2

根据鱿鱼常见问题

Squid.conf ACL

通过 Squid ACL 修改标头仅限于删除标头或用常量字符串替换匹配的标头。

换句话说,您无法仅使用 Squid ACL 添加任意请求标头。Squid ACL 限制您删除现有标头或替换现有标头,但不允许添加新标头。添加新标头的唯一方法是结合使用 ICAP 服务器和 Squid。有关更多信息,请参阅ICAP 部分在 Squid 常见问题解答中。

答案3

使用 squid,您将:

  1. 设置动态 SSL 证书生成. 在 Web 客户端的浏览器中安装根证书。
  2. 设置 SSL Bump 以拦截代理 SSL/TLS 流量
  3. 使用ACL插入您想要的标题

答案4

因此,您可以结合使用 Web 代理和 ICAP 服务器来实现此目的。我最熟悉的是 Squid Proxy 和 GreasySpoon 的 ICAP。我使用的是 Squid v3.2.1 和 GreasySpoon 1.0.8。

  • 乌贼:http://www.squid-cache.org/
  • GreasySpoon:已停用!:( 这个想法在其他 ICAP 服务器上是相同的,只是实现不同。它曾经在 sourceforge 上托管,所以也许回溯机器会有。不确定。

Squid 配置

无论如何,请将 Squid 配置为标准缓存。以下是示例配置。有关正确 Squid 配置的更多详细信息,请查看那里的大量文档。您关心的有关此问题的部分位于底部# ICAP Configurations

cache_effective_user squid
cache_effective_group squid

acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7       # RFC 4193 local private network range
acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines

acl SSL_ports port 443
acl Safe_ports port 80      # http
acl Safe_ports port 81      # http - public
acl Safe_ports port 21      # ftp
acl Safe_ports port 443     # https
acl Safe_ports port 70      # gopher
acl Safe_ports port 210     # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280     # http-mgmt
acl Safe_ports port 488     # gss-http
acl Safe_ports port 591     # filemaker
acl Safe_ports port 777     # multiling http
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

http_access deny blocksites
http_access allow localnet
http_access allow localhost

http_access deny all

http_port 3128 transparent

# Leave coredumps in the first cache dir
core dump_dir /var/cache/squid

# ICAP Configurations
icap_enable on
icap_preview_enable on
icap_service service_req reqmod_precache bypass=0 icap://127.0.0.1:1344/reqmod
adaptation_access service_req allow all
icap_service service_resp respmod_precache bypass=0 icap://127.0.0.1:1344/respmod
adaptation_access service_resp allow all

请注意,我使用的 ICAP 服务器与 squid 代理位于同一主机上,因此我使用了 127.0.0.1。如果您的代理和 ICAP 位于不同的主机上,那么请务必将环回替换为其他服务器的 IP 或服务器名称。

ICAP 配置

这是简单的部分。

再次,我使用的是现已停用的“Greasy Spoon” ICAP 服务器。我发现它非常简单,可以完成我想要的工作,而且麻烦很少。此外,虽然还有其他选项可用,但我使用 Java 插件功能。

对于 GreasySpoon 的情况,我仅创建了一个小型 Java 脚本(不是 javascript,尽管许多 ICAP 服务器都可以做到这一点),该脚本针对 HTTP 请求并添加了所需的标头(请注意,前导注释为 GS 服务器提供了元数据。其他服务器可能不需要):

//------------------------------------------------------------------- 
// ==ServerScript==
// @name            Add_Header
// @status on
// @description     
// @include        .*
// @exclude        
// @order           0
// ==/ServerScript==
// --------------------------------------------------------------------

public void main(HttpMessage httpMessage){
    // Add the "my-header" header with a value of "test.server.com"
    httpMessage.addHeader("my-header", "test.server.com");
}

这会将 my-header 标头元素添加到每个请求中。

相关内容