Squid 部署
来源:本站原创
点击数: 次
发布时间:2026年09月10日
一、安装与基础服务管理
1. 安装 Squid
根据系统类型执行安装命令:
RHEL / CentOS / Rocky / Anolis / openEuler:
sudo dnf install -y squid # 或旧版本使用 yum install -y squid
Debian / Ubuntu:
sudo apt update && sudo apt install -y squid
2. 启动并设置开机自启
sudo systemctl enable --now squid
验证状态:执行
systemctl status squid,显示active (running)即表示正常运行。
3. 防火墙放行(默认端口 3128)
firewalld:
sudo firewall-cmd --permanent --add-port=3128/tcp sudo firewall-cmd --reload
ufw:
sudo ufw allow 3128/tcp
二、配置黑白名单
Squid 的主配置文件路径为 /etc/squid/squid.conf。
配置核心原则:规则自上而下匹配,一旦命中立即执行,后面的规则不再生效。
场景 1:控制「谁能用代理」(客户端来源 IP 限制)
适合用于内网代理或仅对固定公网 IP 开放。1. 编辑配置文件:
sudo vim /etc/squid/squid.conf
2. 找到默认的 http_access 区域,添加自定义 ACL:
# ----------------------------- # 客户端 IP 控制 # ----------------------------- # 定义允许使用代理的 IP 或网段(白名单) acl allowed_clients src 192.168.1.0/24 acl allowed_clients src 10.0.0.50 # 定义明确禁止的恶意 IP(黑名单) acl blocked_clients src 192.168.1.200 # 规则应用(注意顺序:先拒绝黑名单,再允许白名单,最后拒绝全部) http_access deny blocked_clients http_access allow allowed_clients http_access deny all
场景 2:控制「能访问哪些网站」(目标域名限制)
适合内网机器出网管控,防止访问非工作/不安全站点。支持直接在配置中列出,也支持读取外部名单文件。1. 创建外部黑白名单文件:
# 创建黑名单文件(禁止访问的域名) sudo tee /etc/squid/blacklist.txt << 'EOF' .badsite.com .gambling.org EOF # 创建白名单文件(只允许访问的域名,前缀加 . 可匹配所有二级子域名) sudo tee /etc/squid/whitelist.txt << 'EOF' .github.com .microsoft.com api.example.com EOF
2. 在 /etc/squid/squid.conf 中引入文件并配置规则:
模式 A:黑名单模式(除了黑名单里的网站,其他都能访问)
acl bad_sites dstdomain "/etc/squid/blacklist.txt" # 拒绝访问黑名单目标 http_access deny bad_sites # 允许合法客户端访问其他任意网站 http_access allow allowed_clients http_access deny all
模式 B:白名单模式(极严格:只允许访问白名单内的网站)
acl good_sites dstdomain "/etc/squid/whitelist.txt" # 允许访问白名单目标(且客户端在允许列表内) http_access allow allowed_clients good_sites # 其余全部拒绝 http_access deny all
三、校验与生效
每次修改完配置文件后,请执行以下命令:1. 检查语法:
sudo squid -k parse
验证结果:若没有报错输出,说明配置语法合法。2. 热重载配置:
sudo squid -k reconfigure # 或 sudo systemctl reload squid
四、客户端测试与日志排查
1. 客户端测试连通性
在测试机(例如 Linux 或 macOS 终端)上使用 curl 指定代理验证:
# 测试白名单域名(预期返回 HTTP 200/301 等正常响应) curl -x http://<Squid服务器IP>:3128 -I https://github.com # 测试被阻断的请求(预期返回 403 Forbidden) curl -x http://<Squid服务器IP>:3128 -I http://badsite.com
2. 服务端排查日志
若遇到连接拒绝或超时,实时查看访问日志定位命中的规则:
sudo tail -f /var/log/squid/access.log
日志中若显示
TCP_DENIED/403,说明被 ACL 规则拦截;显示TCP_TUNNEL/200或TCP_MISS/200表示代理成功放行。
