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.conf | MIME 类型映射 |
/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 squid 或 dnf 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)被恶意利用。