系统管理员指南 · 1 分钟阅读

Squid代理设置和配置

Squid 是经典的 Linux HTTP/HTTPS 缓存代理,支持无数企业网关。这里是一个干净的安装、一个访问控制的 squid.conf、认证以及允许 HTTPS 通过的 CONNECT 规则。

Squid 的用途

Squid 是一个成熟的、功能丰富的 HTTP 和 HTTPS 缓存代理。与小型的 3proxy 或仅支持 SOCKS 的 Dante 不同,Squid 是围绕 web 流量构建的:它可以缓存响应,通过访问控制列表进行过滤,验证用户,并详细记录。这使它成为企业出站网关、繁忙网络的缓存层或受控的 HTTP CONNECT 代理的默认选择。它不支持 SOCKS — 对于这一点,你可以使用 3proxy 或 Dante(见 构建你自己的代理)。

新手总是会遇到的两个问题是访问控制(Squid 默认拒绝所有请求)和 HTTPS(需要允许 CONNECT 方法)。下面的配置同时处理这两者。

一个安全的squid.conf

在端口3128上使用带有ACL的经过身份验证的转发代理,允许CONNECT用于HTTPS,并限制安全端口。根据您的发行版调整路径。

bash
apt update && apt install -y squid apache2-utils
# create a password file for basic auth:
htpasswd -c /etc/squid/passwd USER   # prompts for password

cat > /etc/squid/squid.conf <<'CFG'
http_port 3128

# --- authentication ---
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic realm s4m-proxy
acl authenticated proxy_auth REQUIRED

# --- safe ports / CONNECT for HTTPS ---
acl SSL_ports port 443
acl Safe_ports port 80 443 21 1025-65535
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

# --- allow only authenticated users, deny the rest ---
http_access allow authenticated
http_access deny all

# --- small cache ---
cache_dir ufs /var/spool/squid 1000 16 256
coredump_dir /var/spool/squid
CFG

squid -k parse            # validate config
systemctl restart squid

# test:  curl -x http://USER:PASS@YOUR.VPS.IP:3128 https://api.ipify.org

ACL、HTTPS和诚实限制

Squid 的强大之处在于其 ACL 模型:您可以根据源 IP、目标、端口、时间或认证用户来允许或拒绝访问,规则从上到下进行评估,首个匹配的规则生效。最后的 http_access deny all 行是至关重要的——没有默认拒绝,配置错误的 Squid 会变成一个开放中继。对于 HTTPS,请记住 Squid 使用 CONNECT 隧道加密流量,它无法读取;SSL_ports ACL 限制了该隧道可以到达的端口。 (Squid 还可以使用本地 CA 进行 TLS 拦截,但对于普通的正向代理,您不希望这样。)

自己运行 Squid 可以让您控制数据中心的出口并获得丰富的日志记录,但需要维护。如果您只需要一个经过身份验证的 HTTP 出口而不想操作服务器,这正是 s4m HTTP proxy 在 proxy.s4m.online:3128 提供的功能,带有 专用 IP 选项和 API。如果请求返回 407,请检查凭据——请参阅 407 指南。

Share this page
FAQ

问题,已解答

为什么安装后Squid会阻止我所有的流量?

Squid 默认拒绝所有,直到您添加 http_access allow 规则。您需要一个与您的用户或源 IP 匹配的 ACL,以及一个在最终拒绝所有之前的允许行。默认拒绝是一个安全功能,可以防止 Squid 成为开放中继。

Squid如何处理HTTPS?

通过 CONNECT 方法:Squid 在 443 端口打开到目标的原始隧道,并在不读取的情况下中继加密字节。您必须允许 CONNECT 到您的 SSL_ports ACL。Squid 还可以通过本地 CA 拦截 TLS,但普通的正向代理不需要这样做。

跳过维护

运行Squid以获得完全控制,或者将你的客户端指向端口3128上的经过身份验证的s4m HTTP代理,以便通过管理的数据中心出口——在需要时提供专用IP和API。

人们通过搜索找到此页面

此页面回答的真实搜索短语 — 链接的短语打开详细覆盖它们的页面。