搭建 Squid HTTP 代理服务器

搭建 Squid HTTP 代理服务器

Squid 是一个成熟的 HTTP 代理服务器,支持 HTTP/HTTPS 代理、访问控制和 Basic Auth 认证。

安装

以 Ubuntu 为例,安装 Squid 和 htpasswd 工具:

sudo apt install squid apache2-utils

配置认证

  1. 创建密码文件并添加用户:

    sudo htpasswd -c /etc/squid/passwd <username>
    

    <username> 改成实际用户名。第一次创建密码文件使用 -c,后续添加用户不要加 -c,否则会覆盖原文件。

  2. 编辑 Squid 配置文件:

    sudoedit /etc/squid/squid.conf
    
    auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
    auth_param basic realm Squid proxy
    acl authenticated proxy_auth REQUIREDhttp_access allow authenticated
    http_access deny allhttp_port 3128
    
  3. 检查配置并重启服务:

    sudo squid -k parse
    sudo systemctl restart squid
    sudo systemctl enable squid
    

防火墙

如果启用了 ufw,需要放行 Squid 默认端口 3128

sudo ufw allow 3128/tcp
sudo ufw reload
sudo ufw status

也可以只允许自己的 IP 访问:

sudo ufw allow from 1.2.3.4 to any port 3128 proto tcp

1.2.3.4 改成自己的公网 IP。即使配置了用户名密码认证,也建议尽量限制来源 IP。

验证

检查 Squid 是否监听端口:

ss -ltnp | grep 3128

使用 curl 测试代理:

$ curl -I --proxy http://username:'password'@server.example.com:3128 https://example.com
HTTP/1.1 200 Connection establishedHTTP/2 200

也可以先在服务器本机测试:

curl -I --proxy http://username:'password'@127.0.0.1:3128 https://example.com

客户端配置

代理地址格式:

http://username:password@server.example.com:3128

终端中临时使用:

export http_proxy="http://username:password@server.example.com:3128"
export https_proxy="http://username:password@server.example.com:3128"

https_proxy 这里仍然使用 http:// 开头,因为客户端是用 HTTP CONNECT 方法通过 Squid 转发 HTTPS 流量。

维护

查看日志:

sudo tail -f /var/log/squid/access.log
sudo tail -f /var/log/squid/cache.log

修改用户密码:

sudo htpasswd /etc/squid/passwd <username>
sudo systemctl reload squid

添加用户:

sudo htpasswd /etc/squid/passwd user2
sudo systemctl reload squid