利用 LDAP 为 Squid 提供用户认证服务

前言

  Squid cache,简称 Squid,是一款高性能的代理缓存软件。Squid 本身支持包括 HTTP、HTTPS、FTP、SSH 在内的多种协议,且采用一个单独的、非模块化的、I/O 驱动的进程来处理所有的客户端请求,从而提供主动缓存加速的功能。除此之外,Squid 还可以提供应用层过滤控制的功能,也可与其他的防病毒软件一起使用。在一些大公司、学校、研究机构内部,一般采用 Squid 代理上网的方式,可以过滤危险内容或操作、节省网络带宽、提升访问速度。

  但实际上 Squid 代理也可用于正向代理,即为外来用户访问内网应用提速。这也是 CDN(内容分发网络)的加速原理,利用位于全球网络边缘的节点提供服务,而实际上的应用内容则通过边缘节点间的内网来缓存提速。

  虽然 Squid 一般部署在团队或公司网络内部,但是由于用户的权限不同可能需要应用不同的规则,所以能够与 LDAP 认证服务结合就变得非常重要了。

实践

环境要求

  在进行正式的实践之前,务必确保已有以下环境:

  • Docker
  • docker-compose

启动实例

  笔者已经编译并公开了在多种体系架构上可用的 Docker 镜像 zhonger/squid。这里直接使用以下 docker-compose.yml 配置文件和 docker-compose up -d 命令启动实例。

# docker-compose.yml
version: '3.2'

services: 
  squid:
    image: zhonger/squid
    container_name: squid
    hostname: squid
    ports:
      - "3128:3128"
    volumes:
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    environment: 
      - SQUID_SSH=true
      - SQUID_RSYNC=false
      - LDAP_ENABLE=true
      - LDAP_HOST=yourldap.domain.com
      - LDAP_PORT=389
      - LDAP_BindDN="cn=admin,dc=yourdomain,dc=com"
      - LDAP_BindPass="********"
      - LDAP_DN="ou=Users,dc=yourdomain,dc=com"
      - LDAP_ATTRIBUT="uid=%s"
      - PROXY_NAME="Proxy Display Name"
    restart: always

  上面有关的配置变量及其含义可以访问 zhonger/squid 了解更多。

测试

  通过浏览器访问 http://ip:3128 并输入对应的用户名和密码可以看到类似下面的内容。

nUOnpb

客户端连接

  由于我们未指定实际需要访问的地址,Squid 会直接报错。一般使用时,需要使用操作系统的网络设置中的代理来配置好 Squid。如下图所示,勾选“网页代理(HTTP)”并填写相关的 IP、端口、用户名及密码。如果想要同样应用在访问 HTTPS 站点,则还需要勾选“安全网页代理(HTTPS)”及填写相关信息。然后点击保存生效。

oXWsLE

  这样一来就可以将访问的流量完全交给 Squid 来控制了。当然,如果不确定客户端连接是否成功,可以通过访问 ip.sb 来确认当前客户端流量出口 IP 是否为 Squid 服务器 IP。

参考资料

版权声明: 如无特别声明,本文版权归 仲儿的自留地 所有,转载请注明本文链接。

(采用 CC BY-NC-SA 4.0 许可协议进行授权)

本文标题:《 LDAP 集成之 Squid 篇 》

本文链接:https://lisz.me/tech/webmaster/ldap-squid.html

本文最后一次更新为 天前,文章中的某些内容可能已过时!