Squid 是一款广泛使用的开源代理服务器软件,主要用于缓存网页数据、过滤流量以及提供安全访问控制等功能,它支持 HTTP、HTTPS、FTP 等多种协议,能够有效减少网络带宽占用,提高访问速度,并在企业网络中实现内容过滤和访问策略管理,以下是 Squid 代理服务器的详细配置步骤及相关说明。

安装 Squid 代理服务器
在 Linux 系统中(以 Ubuntu/Debian 为例),可通过以下命令安装 Squid:
sudo apt update sudo apt install squid -y
安装完成后,Squid 服务会自动启动,可通过 systemctl status squid 检查服务状态,对于 CentOS/RHEL 系统,可使用 yum install squid 或 dnf install squid 进行安装。
配置 Squid 主配置文件
Squid 的主配置文件位于 /etc/squid/squid.conf,建议在修改前先备份原始文件:
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak
以下是关键配置项的说明及示例:

基础配置
- 监听地址和端口:默认 Squid 监听所有接口的 3128 端口,可修改为特定 IP 或端口:
http_port 192.168.1.100:3128
- 访问控制列表(ACL):定义规则,如允许/拒绝特定 IP、域名或用户组:
acl localnet src 192.168.1.0/24 # 允许内网网段 acl blocked_sites dstdomain example.com bad.com # 定义被屏蔽的域名
- HTTP 访问规则:结合 ACL 控制访问权限:
http_access allow localnet # 允许内网访问 http_access deny blocked_sites # 屏蔽指定域名 http_access deny all # 默认拒绝所有其他访问
缓存配置
- 缓存目录设置:定义缓存路径、大小及层级结构:
cache_dir ufs /var/spool/squid 10000 16 256 # 缓存路径、大小(MB)、目录层级、子目录数
- 缓存过期策略:针对不同类型资源设置缓存时间:
refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320
日志配置
- 日志文件路径:默认访问日志为
/var/log/squid/access.log,错误日志为/var/log/squid/cache.log。 - 日志格式优化:可自定义日志格式以包含更多字段(如用户 IP、请求耗时等)。
高级功能配置
身份验证
若需用户名密码认证,可先安装 apache2-utils 生成密码文件:
sudo apt install apache2-utils sudo htpasswd -c /etc/squid/users admin # 创建用户 admin
在 squid.conf 中添加:
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/users auth_param basic realm Squid Proxy Authentication acl authenticated proxy_auth REQUIRED http_access allow authenticated
HTTPS 流量代理
Squid 可作为 HTTPS 代理,需配置以下参数:
https_port 3128 ssl-bump cert=/etc/squid/ssl_cert/ca.pem generate-certificates=all sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/ssl_db -M 4MB acl step1 at_step SslBump1 ssl_bump peek all ssl_bump bump step1 ssl_bump none all
反向代理配置
Squid 也可作为反向代理加速 Web 服务,示例配置:

http_port 80 vhost vport cache_peer example.com parent 80 0 no-query originserver acl all src 0.0.0.0/0 http_access allow all
优化与安全建议
- 性能优化:
- 调整
cache_mem值(如cache_mem 256 MB)分配内存缓存。 - 增大
maximum_object_size_in_memory限制内存中缓存的最大对象大小。
- 调整
- 安全加固:
- 限制
visible_hostname隐藏服务器信息。 - 使用
cache_effective_user和cache_effective_group指定运行用户(如squid)。 - 启用
access_log的combined格式记录详细请求信息。
- 限制
重启与测试
配置完成后,检查语法并重启服务:
sudo squid -k parse # 检查配置语法 sudo systemctl restart squid
客户端配置代理服务器 IP 和端口(3128),测试访问 http://www.example.com,可通过 tail -f /var/log/squid/access.log 查看日志。
常见问题解决
- 权限问题:确保 Squid 对缓存目录有读写权限(
chown -R squid:squid /var/spool/squid)。 - 端口占用:若 3128 端口被占用,修改
http_port为其他端口。 - ACL 规则冲突:检查
http_access顺序,默认规则从上至下匹配。
相关问答FAQs
问题1:如何配置 Squid 代理服务器支持透明代理?
解答:透明代理需在防火墙或路由器上将目标流量(如 80/443 端口)重定向到 Squid 的 3128 端口,以 iptables 为例:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 3128
同时在 squid.conf 中启用 http_port 3128 transparent,并确保 Squid 允许源端口重定向(http_access allow all)。
问题2:Squid 代理服务器如何实现基于时间的访问控制?
解答:可通过 time ACL 定义时间段,例如限制工作日 9:00-18:00 禁止访问视频网站:
acl worktime time MTWHF 9:00-18:00 acl video_sites dstdomain youtube.com vimeo.com http_access deny video_sites worktime http_access allow all
配置后重启 Squid 服务,系统将根据时间规则自动拦截匹配请求。
