squid默认配置拒绝所有请求,需修改acl和http_access规则放行本地网段,并执行squid -z初始化缓存、systemctl start squid启动服务,再通过curl -x测试代理连通性。

能直接用 squid 做正向代理,但默认配置是拒绝所有请求的 —— 你装完不改配置,客户端连上去立刻被 HTTP/1.1 403 Forbidden 拒绝。
确认系统环境与安装方式
Squid 在主流 Linux 发行版中都进官方源,无需编译。Ubuntu/Debian 用 apt,CentOS/RHEL 用 yum 或 dnf,路径和默认服务名一致,但 systemd 单元名都是 squid.service。
- Ubuntu 22.04+ 或 Debian 12:运行
sudo apt update && sudo apt install squid - CentOS 7:用
sudo yum install squid;CentOS 8+ 或 RHEL 9:用sudo dnf install squid - 安装后别急着启动,先检查配置文件是否存在:
ls -l /etc/squid/squid.conf(注意不是/etc/squid.conf) - 首次安装后,
squid通常不会自动启用开机自启,需手动执行sudo systemctl enable squid
必须修改的最小配置项
默认的 squid.conf 把所有请求都拦在门外,关键就卡在两条 ACL 规则上。不改它们,任何客户端 IP 都无法通过。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 找到并注释掉这行:
http_access deny all(它在文件末尾附近,是最终兜底规则) - 在它前面加一条放行规则,例如允许本地网段:
http_access allow localnet - 确保
localnetACL 已正确定义,典型写法是:acl localnet src 192.168.1.0/24(按你实际内网段调整) - 如果要支持任意来源(仅限测试),可用:
acl all src 0.0.0.0/0.0.0.0+http_access allow all,但生产环境严禁这么干 - 改完务必运行
sudo squid -k parse校验语法,无输出才表示配置合法
启动服务与验证端口监听
Squid 默认监听 3128 端口,但启动失败时不会报错到前台,容易误以为“启动成功”。得靠日志和服务状态双重确认。
- 首次启动前建议初始化缓存目录:
sudo squid -z(否则可能报Failed to initialize cache) - 启动服务:
sudo systemctl start squid - 检查状态:
sudo systemctl status squid,重点看是否为active (running),且没有Failed行 - 确认端口监听:
sudo ss -tlnp | grep :3128,应看到squid进程绑定在*:3128 - 临时关闭防火墙验证连通性:
sudo ufw disable(Ubuntu)或sudo systemctl stop firewalld(RHEL/CentOS)
客户端测试与常见失败信号
浏览器或 curl 直连 http://your-server-ip:3128 是无效的 —— Squid 正向代理不响应裸 HTTP GET,必须由客户端明确发起代理请求。
- curl 测试命令:
curl -x http://your-server-ip:3128 https://httpbin.org/ip,返回客户端真实出口 IP 才算通 - 浏览器配代理后访问网页,若出现
The requested URL could not be retrieved,大概率是 ACL 没放行或 DNS 解析失败(Squid 默认不处理 DNS,需确保服务器本身能解析域名) - 日志位置:
/var/log/squid/access.log(记录请求)和/var/log/squid/cache.log(记录错误),出问题第一时间看后者 - 最隐蔽的坑:SELinux 启用状态下,Squid 可能被策略拦截,临时关闭测试:
sudo setenforce 0
ACL 顺序、squid -z 初始化、SELinux 和防火墙 —— 这四点没理清,90% 的“装好了却不能用”问题就出在这儿。










