凌峰创科服务平台

linux 代理服务器 squid

目录

  1. 什么是 Squid?
  2. Squid 的主要用途
  3. 工作原理
  4. 安装与配置 Squid
  5. 常用配置详解
  6. 高级功能
  7. 安全与访问控制
  8. 日志管理
  9. 常见问题与排查

什么是 Squid?

Squid 是一个广泛使用的、高性能的代理缓存服务器,它主要运行在 Linux 和其他类 Unix 系统上。

linux 代理服务器 squid-图1
(图片来源网络,侵删)

Squid 就像一个“网络中间人”,当你(客户端)想访问互联网上的某个资源(www.google.com)时,你的请求不是直接发往 Google,而是先发给 Squid 服务器,Squid 代表你去获取资源,并将获取到的内容缓存一份,当下一个用户再请求同样的资源时,Squid 就可以直接从本地缓存中返回,而无需再次访问互联网,从而大大加快访问速度并节省网络带宽。

Squid 不仅仅是一个 HTTP/HTTPS 代理,它也支持 FTP、Gopher 等多种协议。


Squid 的主要用途

  • 内容缓存与加速:这是 Squid 最核心的功能,通过缓存频繁访问的网页、图片、视频等,显著提高用户访问速度,减少重复请求对互联网带宽的占用。
  • 访问控制与内容过滤:可以配置 Squid 作为企业的网关,统一管理员工上网行为。
    • 黑白名单:禁止或允许访问特定网站(如社交网站、视频网站)。
    • 时间控制:在特定时间段(如工作时间)禁止访问某些网站。
    • 用户认证:要求用户输入用户名和密码才能上网。
  • 安全网关:作为内网与外网之间的一个屏障,可以隐藏内网客户端的真实 IP 地址,提供一定程度的匿名性,Squid 可以与杀毒软件(如 ClamAV)集成,扫描下载的文件。
  • 反向代理:这是 Squid 的一项高级应用,它将 Squid 部署在 Web 服务器(如 Nginx, Apache)前面,代替 Web 服务器接收来自互联网的请求,Squid 缓存 Web 服务器的动态或静态内容,从而减轻 Web 服务器的负载,提高网站的整体响应速度和可用性。
  • 网络流量日志与分析:Squid 会记录所有经过它的访问请求,这些日志可以用于分析网络流量模式、用户行为、排查网络问题等。

工作原理(正向代理)

以最常见的正向代理为例,其工作流程如下:

  1. 客户端配置:将浏览器或其他网络应用(如 curl, wget)的代理服务器地址设置为 Squid 服务器的 IP 和端口(默认为 3128)。
  2. 发送请求:客户端访问 http://www.example.com,该请求被发送到 Squid 服务器。
  3. Squid 处理请求
    • Squid 首先检查自己的缓存中是否已经有 www.example.com 的副本。
    • 缓存命中

      Squid 发现缓存中有该资源且未过期,它会直接将缓存中的内容返回给客户端,这个过程非常快。

      linux 代理服务器 squid-图2
      (图片来源网络,侵删)
    • 缓存未命中
      • Squid 缓存中没有该资源,或者资源已过期,它会代表客户端向 www.example.com 的真实服务器发起请求。
      • 后,Squid 会将内容存一份到自己的缓存中,然后将内容返回给客户端。
  4. 客户端接收:客户端收到 Squid 返回的内容,就像直接从目标网站获取到的一样,对用户完全透明。

安装与配置 Squid

安装

以 Ubuntu/Debian 和 CentOS/RHEL 为例:

Ubuntu/Debian:

sudo apt update
sudo apt install squid -y

CentOS/RHEL:

sudo yum install squid -y
# 对于 CentOS 8/RHEL 8 及以后版本
sudo dnf install squid -y

安装完成后,Squid 服务通常会自动启动。

基本配置

Squid 的主配置文件是 /etc/squid/squid.conf (Ubuntu) 或 /etc/squid.conf (CentOS),这是一个非常长的文件,但大部分都是注释和默认示例,我们主要关注以下几个核心部分:

  1. 监听端口

    # Squid 默认监听所有网络接口的 3128 端口
    http_port 3128
  2. 访问控制列表:这是 Squid 的核心,定义了“谁”和“什么”。

    # 定义一个名为 "localnet" 的 ACL,代表本地网络
    # 允许 192.168.1.0/24 网段
    acl localnet src 192.168.1.0/24
    # 定义一个名为 "all" 的 ACL,代表所有
    acl all src all
    # 定义一个名为 "block_websites" 的 ACL,用于阻止特定网站
    acl block_websites dstdomain .facebook.com .twitter.com .youtube.com
  3. HTTP 访问规则:将 ACL 与具体规则绑定。

    # 允许 localnet 网段的客户端使用代理
    http_access allow localnet
    # 默认拒绝所有其他客户端的访问
    http_access deny all
    # 如果你想阻止特定网站
    http_access deny block_websites
  4. 缓存配置

    # 设置缓存目录
    cache_dir ufs /var/spool/squid 100 16 256
    # 解释: /var/spool/squid 是缓存目录,100 MB 是缓存大小(旧版本单位是MB,新版本是GB),16 和 256 是目录层级数。
  5. 设置缓存日志、访问日志等路径

    cache_log /var/log/squid/access.log
    cache_store_log /var/log/squid/store.log

启动、重启与查看状态

# 启动 Squid 服务
sudo systemctl start squid
# 设置开机自启
sudo systemctl enable squid
# 重启 Squid 服务(修改配置后需要执行)
sudo systemctl restart squid
# 查看 Squid 状态
sudo systemctl status squid
# 查看 Squid 是否在监听 3128 端口
sudo netstat -tuln | grep 3128
# 或者使用 ss
sudo ss -tuln | grep 3128

常用配置详解

如何允许特定 IP 使用代理?

假设你只允许 IP 地址为 168.1.100 的电脑使用代理。

  1. squid.conf 中定义 ACL:
    acl allowed_ip src 192.168.1.100
  2. 修改 http_access 规则:
    http_access allow allowed_ip
    http_access deny all
  3. 重启 Squid 服务。

如何配置用户名密码认证?

  1. 安装 apache2-utils

    sudo apt install apache2-utils  # Ubuntu/Debian
    sudo yum install httpd-tools  # CentOS/RHEL
  2. 创建密码文件

    # -c 表示创建新文件,后面是用户名
    sudo htpasswd -c /etc/squid/passwd admin
    # New password: [输入密码]
    # Re-type new password: [再次输入]

    如果要添加更多用户,去掉 -c

    sudo htpasswd /etc/squid/passwd another_user
  3. 修改 squid.conf

    • http_port 后面添加 auth_param 配置:
      auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
      auth_param basic children 5
      auth_param basic realm Squid Proxy Authentication
      auth_param basic credentialsttl 2 hours
    • 创建一个 ACL 用于认证用户:
      acl auth_users proxy_auth REQUIRED
    • 应用访问规则:
      http_access allow auth_users
      http_access deny all
  4. 重启 Squid 服务

任何未认证的请求都会被 Squid 拒绝,浏览器会弹出用户名和密码输入框。


高级功能


分享:
扫描分享到社交APP
上一篇
下一篇