强曰为道

与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

02 - 安装与初始化

第二章:安装与初始化

2.1 安装方式总览

安装方式适用场景优点缺点
包管理器快速部署、测试环境简单快捷、自动处理依赖版本可能较旧
源码编译需要最新版本或自定义模块版本可控、可裁剪功能编译耗时、需手动管理
Docker容器化部署、CI/CD环境隔离、一致性强需要 Docker 运行时
预编译二进制无编译环境即下即用平台受限

2.2 Ubuntu / Debian 安装

2.2.1 使用 APT 安装

# 更新包索引
sudo apt update

# 安装 Squid
sudo apt install -y squid

# 查看安装版本
squid -v

# 启动服务
sudo systemctl start squid
sudo systemctl enable squid

# 检查服务状态
sudo systemctl status squid

2.2.2 安装额外模块

# 安装 Squid 常用辅助工具
sudo apt install -y squidclient    # Squid 客户端工具
sudo apt install -y squid-langpack # 语言包(错误页面多语言)
sudo apt install -y libssl-dev     # SSL 支持(源码编译需要)

# 可选:LDAP 认证模块
sudo apt install -y squid-ldap

# 可选:SMB/NTLM 认证模块
sudo apt install -y smbclient winbind

2.2.3 安装最新版本

如果仓库中的版本较旧,可以使用 Squid 官方 PPA 或第三方源:

# 方法一:添加 Squid 6.x 源(以 Ubuntu 22.04 为例)
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:squid/ppa
sudo apt update
sudo apt install -y squid

# 方法二:从 Debian sid 获取最新包(仅限 Debian 用户)
# 在 /etc/apt/sources.list 中添加 sid 源
# 然后 pin 优先级避免意外升级其他包

2.3 CentOS / RHEL / Fedora 安装

2.3.1 使用 DNF/YUM 安装

# CentOS Stream 9 / RHEL 9 / Fedora
sudo dnf install -y squid

# CentOS 7(仍使用 yum)
sudo yum install -y squid

# 启动并设置开机自启
sudo systemctl start squid
sudo systemctl enable squid

# 检查状态
sudo systemctl status squid

2.3.2 启用 EPEL 获取更新版本

# 安装 EPEL 源
sudo dnf install -y epel-release

# 搜索可用版本
dnf search squid

# 安装
sudo dnf install -y squid

2.4 源码编译安装

适用于需要最新版本、自定义编译选项或特殊模块的场景。

2.4.1 安装编译依赖

# Ubuntu / Debian
sudo apt install -y \
    build-essential \
    libssl-dev \
    libcap2-dev \
    libdb-dev \
    libnetfilter-conntrack-dev \
    libldap2-dev \
    libsasl2-dev \
    libkrb5-dev \
    libcppunit-dev \
    pkg-config \
    wget

# CentOS / RHEL
sudo dnf install -y \
    gcc gcc-c++ make \
    openssl-devel \
    libcap-devel \
    libdb-devel \
    libnetfilter_conntrack-devel \
    openldap-devel \
    cyrus-sasl-devel \
    krb5-devel \
    cppunit-devel \
    pkgconfig \
    wget

2.4.2 下载并编译

# 下载 Squid 6.x 源码
SQUID_VERSION="6.10"
cd /tmp
wget http://www.squid-cache.org/Versions/v6/squid-${SQUID_VERSION}.tar.gz
tar xzf squid-${SQUID_VERSION}.tar.gz
cd squid-${SQUID_VERSION}

# 配置编译选项
./configure \
    --prefix=/usr/local/squid \
    --sysconfdir=/etc/squid \
    --localstatedir=/var/squid \
    --enable-ssl \
    --with-openssl \
    --enable-ssl-crtd \
    --enable-auth \
    --enable-auth-basic="DB NCSA NIS PAM POP3 RADIUS" \
    --enable-auth-ntlm="fake SMB" \
    --enable-auth-negotiate="kerberos wrapper" \
    --enable-external-acl-helpers="file_userip LDAP_group session unix_group" \
    --enable-icap-client \
    --enable-ecap \
    --enable-eui \
    --enable-wccpv2 \
    --enable-linux-netfilter \
    --enable-cache-digests \
    --enable-icmp \
    --enable-delay-pools \
    --enable-snmp \
    --with-filedescriptors=65536 \
    --with-large-files

# 编译(使用所有 CPU 核心)
make -j$(nproc)

# 安装
sudo make install

# 创建必要目录
sudo mkdir -p /var/squid/cache
sudo mkdir -p /var/squid/log
sudo chown -R nobody:nobody /var/squid/

2.4.3 创建 systemd 服务文件

sudo tee /etc/systemd/system/squid.service <<'EOF'
[Unit]
Description=Squid Web Proxy Cache Server
Documentation=man:squid(8)
After=network.target

[Service]
Type=forking
PIDFile=/var/squid/squid.pid
ExecStartPre=/usr/local/squid/sbin/squid -k parse
ExecStart=/usr/local/squid/sbin/squid -sYC
ExecReload=/usr/local/squid/sbin/squid -k reconfigure
ExecStop=/usr/local/squid/sbin/squid -k shutdown
KillMode=mixed
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

# 重载 systemd 并启动
sudo systemctl daemon-reload
sudo systemctl start squid
sudo systemctl enable squid

2.5 Docker 安装

2.5.1 快速启动

# 拉取官方镜像
docker pull ubuntu/squid:latest

# 创建配置目录
mkdir -p /opt/squid/{config,cache,logs}

# 生成默认配置文件
docker run --rm ubuntu/squid cat /etc/squid/squid.conf \
    > /opt/squid/config/squid.conf

# 启动容器
docker run -d \
    --name squid \
    --restart unless-stopped \
    -p 3128:3128 \
    -v /opt/squid/config/squid.conf:/etc/squid/squid.conf:ro \
    -v /opt/squid/cache:/var/spool/squid \
    -v /opt/squid/logs:/var/log/squid \
    ubuntu/squid:latest

2.5.2 使用自定义 Dockerfile

FROM ubuntu:22.04

RUN apt-get update && \
    apt-get install -y squid squidclient && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# 复制自定义配置
COPY squid.conf /etc/squid/squid.conf

# 初始化缓存目录
RUN squid -z -f /etc/squid/squid.conf 2>/dev/null || true

EXPOSE 3128

VOLUME ["/var/spool/squid", "/var/log/squid"]

CMD ["squid", "-N", "-d", "1"]

构建并运行:

docker build -t my-squid .
docker run -d --name squid -p 3128:3128 my-squid

2.6 初始化配置

2.6.1 默认配置文件结构

Squid 的主配置文件位于 /etc/squid/squid.conf。默认配置文件通常包含大量注释说明:

# 备份默认配置
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak

# 查看配置文件行数
wc -l /etc/squid/squid.conf

# 仅查看生效的配置(去掉注释和空行)
grep -vE '^\s*#|^\s*$' /etc/squid/squid.conf

2.6.2 最小化配置

以下是一个最精简的可运行配置,适合快速测试:

# /etc/squid/squid.conf — 最小化配置

# 监听端口
http_port 3128

# ACL 定义
acl localnet src 10.0.0.0/8
acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16
acl localnet src fc00::/7
acl localnet src fe80::/10

# SSL 端口
acl SSL_ports port 443
acl Safe_ports port 80 443 21 70 8080

# 访问规则
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow localnet
http_access deny all

# 缓存目录(100MB 内存,16 一级目录,256 二级目录)
cache_dir ufs /var/spool/squid 100 16 256

# 内存缓存大小
cache_mem 64 MB

# 日志路径
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log

# 可见主机名
visible_hostname proxy.example.com

# 错误页面语言
error_directory /usr/share/squid/errors/zh-cn

2.6.3 初始化缓存目录

# 初始化缓存目录结构
sudo squid -z

# 确认缓存目录已创建
ls -la /var/spool/squid/

# 预期输出类似:
# drwxr-x---  16 proxy proxy 4096 ...
# 00  01  02  03  ... 0F

2.6.4 语法检查与启动

# 检查配置文件语法
sudo squid -k parse

# 启动 Squid(前台模式,适合调试)
sudo squid -N -d 1

# 或以后台守护进程模式启动
sudo squid -s

# 通过 systemd 管理
sudo systemctl start squid
sudo systemctl status squid

2.6.5 验证代理工作

# 使用 curl 测试 HTTP
curl -x http://localhost:3128 http://httpbin.org/ip

# 使用 curl 测试 HTTPS
curl -x http://localhost:3128 https://httpbin.org/ip

# 查看响应头中的代理信息
curl -x http://localhost:3128 -vI http://example.com 2>&1 | grep -i "via\|x-cache\|squid"

# 使用 squidclient 工具测试
squidclient -h localhost -p 3128 http://example.com

# 查看 Squid 运行状态
squidclient -h localhost mgr:info

2.7 目录结构说明

路径说明
/etc/squid/squid.conf主配置文件
/etc/squid/squid.conf.bak配置备份
/etc/squid/mime.confMIME 类型映射
/etc/squid/errorpage.css错误页面样式
/var/spool/squid/缓存数据目录
/var/log/squid/access.log访问日志
/var/log/squid/cache.log缓存/运行日志
/var/log/squid/store.log缓存存储日志
/usr/lib/squid//usr/lib64/squid/辅助程序和认证模块
/usr/share/squid/errors/多语言错误页面

2.8 防火墙配置

2.8.1 使用 ufw(Ubuntu)

# 允许代理端口
sudo ufw allow 3128/tcp

# 仅允许特定子网
sudo ufw allow from 192.168.1.0/24 to any port 3128 proto tcp

# 重载规则
sudo ufw reload

2.8.2 使用 firewalld(CentOS/RHEL)

# 开放端口
sudo firewall-cmd --permanent --add-port=3128/tcp

# 或仅允许特定子网
sudo firewall-cmd --permanent --add-rich-rule='
  rule family="ipv4"
  source address="192.168.1.0/24"
  port protocol="tcp" port="3128"
  accept'

# 重载
sudo firewall-cmd --reload

2.8.3 使用 iptables

# 允许代理端口
sudo iptables -A INPUT -p tcp --dport 3128 -j ACCEPT

# 仅允许特定子网
sudo iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 3128 -j ACCEPT

# 持久化规则
sudo iptables-save > /etc/iptables.rules

2.9 常用运维命令

命令说明
squid -k parse检查配置语法
squid -k reconfigure热重载配置(不断开连接)
squid -k rotate日志轮转
squid -k shutdown优雅关闭(等待活跃连接结束)
squid -k interrupt立即关闭
squid -k debug启用调试日志
squid -k kill强制杀死进程
squid -z初始化缓存目录
squid -N前台运行(调试用)
squid -d 1设置调试级别 1
# 配置修改后热重载
sudo squid -k reconfigure

# 日志轮转
sudo squid -k rotate

# 查看当前配置的有效值
squid -k parse 2>&1 | head -50

2.10 卸载 Squid

# Ubuntu / Debian
sudo systemctl stop squid
sudo systemctl disable squid
sudo apt remove --purge squid squid-common
sudo rm -rf /var/spool/squid/*
sudo rm -rf /var/log/squid/*

# CentOS / RHEL
sudo systemctl stop squid
sudo systemctl disable squid
sudo dnf remove squid
sudo rm -rf /var/spool/squid/*
sudo rm -rf /var/log/squid/*

# 源码编译安装
sudo systemctl stop squid
sudo systemctl disable squid
sudo rm /etc/systemd/system/squid.service
sudo systemctl daemon-reload
sudo rm -rf /usr/local/squid
sudo rm -rf /etc/squid /var/squid

2.11 本章小结

步骤命令/说明
1. 安装apt install squiddnf install squid
2. 配置编辑 /etc/squid/squid.conf
3. 初始化sudo squid -z
4. 语法检查sudo squid -k parse
5. 启动sudo systemctl start squid
6. 验证curl -x http://localhost:3128 http://example.com

注意:生产环境部署前,务必修改默认配置中的访问控制规则,避免成为开放代理(Open Proxy)被恶意利用。

扩展阅读