如何在 Debian 11 上为专用连接设置 Squid 代理如何在 Debian 11 上为专用连接设置 Squid 代理如何在 Debian 11 上为专用连接设置 Squid 代理如何在 Debian 11 上为专用连接设置 Squid 代理
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Debian 11 上为专用连接设置 Squid 代理

介绍

代理服务器是一种服务器应用程序,充当最终用户和 Internet 资源之间的网关。通过代理服务器,最终用户能够出于各种目的控制和监控他们的 Web 流量,包括隐私、安全和缓存。例如,您可以使用代理服务器从不同于您自己的 IP 地址发出 Web 请求。您还可以使用代理服务器来研究网络在不同司法管辖区之间的服务方式有何不同,或者避免使用某些监视或网络流量限制方法。

Squid 是一种稳定、流行、开源的 HTTP 代理。在本教程中,您将安装和配置 Squid 以在 Debian 11 服务器上提供 HTTP 代理。

先决条件

要完成本指南,您需要:

  • Debian 11 服务器和具有 sudo 权限的非根用户。您可以在我们的 Debian 11 初始服务器设置指南中详细了解如何为用户设置这些权限。

您将在本教程中使用域名 your_domain,但您应该将其替换为您自己的域名或 IP 地址。

第 1 步 — 安装 Squid 代理

除了路由单个用户的出站流量之外,Squid 还有许多用例。在大规模服务器部署的上下文中,它可以用作分布式缓存机制、负载平衡器或路由堆栈的另一个组件。然而,一些通常涉及代理服务器的水平扩展服务器流量的方法已经被 Kubernetes 等容器化框架所超越,后者分发应用程序的更多组件。同时,使用代理服务器将 Web 请求重定向为个人用户已变得越来越流行,以保护您的隐私。在使用开源代理服务器时,记住这一点很有帮助,因为在较低优先级的维护模式下,这些代理服务器可能看起来具有许多功能。代理的用例随着时间的推移发生了变化,但基本技术没有变化。

首先以非 root 用户身份运行以下命令来更新您的软件包列表并安装 Squid Proxy:

  1. sudo apt update
  2. sudo apt install squid

Squid 会自动设置后台服务并在安装后启动。您可以检查服务是否正常运行:

  1. systemctl status squid.service
Output
● squid.service - Squid Web Proxy Server Loaded: loaded (/lib/systemd/system/squid.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2021-12-15 21:45:15 UTC; 2min 11s ago

默认情况下,squid 不允许任何客户端从该服务器外部连接到它。为了启用它,您需要对其配置文件进行一些更改,该文件存储在 /etc/squid/squid.conf 中。在 nano 或您最喜欢的文本编辑器中打开它:

  1. sudo nano /etc/squid/squid.conf

请注意,squid 的默认配置文件非常非常长,并且包含大量选项,这些选项通过在它们所在行的开头放置一个 # 暂时禁用,也称为 being 注释掉了。您很可能希望搜索文件以找到要编辑的行。在 nano 中,这是通过按 Ctrl+W,输入搜索词,按 Enter,然后重复按 Alt+ 来完成的W 以在需要时查找该术语的下一个实例。

首先导航到包含短语 http_access deny all 的行。您应该看到一段解释 Squid 的默认访问规则的文本:

. . . 
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
include /etc/squid/conf.d/*
# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
http_access allow localhost

# And finally deny all other access to this proxy
http_access deny all
. . . 

从这里,您可以看到当前的行为——localhost 是允许的;其他连接不是。请注意,这些规则是按顺序解析的,因此最好将 deny all 规则保留在此配置块的底部。您可以将该规则更改为 allow all,使任何人都可以连接到您的代理服务器,但您可能不想这样做。相反,您可以在 http_access allow localhost 上方添加一行,其中包含您自己的 IP 地址,如下所示:

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
include /etc/squid/conf.d/*
# Example rule allowing access from your local networks.
acl localnet src your_ip_address
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
http_access allow localhost

  • acl 表示访问控制列表,权限策略的常用术语
  • 本例中的 localnet 是您的 ACL 的名称。
  • src 是此 ACL 下请求的来源,即您的 IP 地址。

如果你不知道你的本地 IP 地址,最快的方法是访问 What's my IP 这样的网站,它可以告诉你你是从哪里访问它的。进行更改后,保存并关闭文件。如果您使用的是 nano,请按 Ctrl+X,然后在出现提示时按 Y,然后按 Enter。

此时,您可以重新启动 Squid 并连接到它,但是您可以做更多的事情来首先保护它。

第 2 步 — 保护鱿鱼

大多数代理和大多数连接到代理的客户端应用程序(例如网络浏览器)都支持多种身份验证方法。这些可以包括共享密钥或单独的身份验证服务器,但最常见的是需要常规的用户名-密码对。 Squid 允许您使用内置的 Linux 功能创建用户名-密码对,作为通过 IP 地址限制对代理的访问的附加或替代步骤。为此,您将创建一个名为 /etc/squid/passwords 的文件并将 Squid 的配置指向它。

首先,您需要从 Apache 项目安装一些实用程序,以便访问 Squid 喜欢的密码生成器。

  1. sudo apt install apache2-utils

这个包提供了htpasswd 命令,您可以使用它来为新的 Squid 用户生成密码。 Squid 的用户名不会以任何方式与系统用户名重叠,因此您可以根据需要使用与登录时相同的名称。系统还会提示您添加密码:

  1. sudo htpasswd -c /etc/squid/passwords your_squid_username

这会将您的用户名和新密码的散列存储在 /etc/squid/passwords 中,它将被 Squid 用作身份验证源。之后您可以 cat 文件以查看其外观:

  1. sudo cat /etc/squid/passwords
Output
sammy:$apr1$Dgl.Mtnd$vdqLYjBGdtoWA47w4q1Td.

验证您的用户名和密码已存储后,您可以更新 squid 的配置以使用新的 /etc/squid/passwords 文件。使用 nano 或您最喜欢的文本编辑器,重新打开 Squid 配置文件并添加以下突出显示的行:

  1. sudo nano /etc/squid/squid.conf
…
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
include /etc/squid/conf.d/*
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
# Example rule allowing access from your local networks.
acl localnet src your_ip_address
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
http_access allow localhost
http_access allow authenticated
# And finally deny all other access to this proxy
http_access deny all
…

这些额外的指令告诉 squid 检查您的新 passwords 文件以获取可以使用 basic_ncsa_auth 机制解析的密码散列,并要求对您的代理的访问进行身份验证。您可以查看 Squid 的文档以获取有关此或其他身份验证方法的更多信息。之后,您最终可以使用您的配置更改重新启动 squid。这可能需要一些时间才能完成。

  1. sudo systemctl restart squid.service

如果您正在使用 ufw,请不要忘记在您的防火墙中打开端口 3128:

  1. sudo ufw allow 3128

在下一步中,您将最终连接到您的代理。

第 3 步 — 通过 Squid 连接

为了演示您的 Squid 服务器,您将使用一个名为 curl 的命令行程序,该程序常用于发出不同类型的 Web 请求。一般来说,如果您想验证给定连接是否应该在理想情况下在浏览器中正常工作,您应该始终首先使用 curl 进行测试。您将在本地计算机上使用 curl 来执行此操作——它默认安装在所有现代 Windows、Mac 和 Linux 环境中,因此您可以打开任何本地 shell 来运行此命令:

  1. curl -v -x http://your_squid_username:your_squid_password@your_server_ip:3128 http://www.google.com/

-x 参数将代理服务器传递给 curl,在这种情况下,您使用的是 http:// 协议,指定您的用户名和密码到该服务器,并且然后连接到已知可用的网站,例如 google.com。如果命令成功,您应该会看到以下输出:

Output
* Trying 138.197.103.77... * TCP_NODELAY set * Connected to 138.197.103.77 (138.197.103.77) port 3128 (#0) * Proxy auth using Basic with user 'sammy' > GET http://www.google.com/ HTTP/1.1

也可以使用您的 Squid 代理访问 https:// 网站,而无需进行任何进一步的配置更改。它们使用一个名为 CONNECT 的单独代理指令来保护客户端和服务器之间的 SSL:

  1. curl -v -x http://your_squid_username:your_squid_password@your_server_ip:3128 https://www.google.com/
Output
* Trying 138.197.103.77... * TCP_NODELAY set * Connected to 138.197.103.77 (138.197.103.77) port 3128 (#0) * allocate connect buffer! * Establish HTTP proxy tunnel to www.google.com:443 * Proxy auth using Basic with user 'sammy' > CONNECT www.google.com:443 HTTP/1.1 > Host: www.google.com:443 > Proxy-Authorization: Basic c2FtbXk6c2FtbXk= > User-Agent: curl/7.55.1 > Proxy-Connection: Keep-Alive > < HTTP/1.1 200 Connection established < * Proxy replied OK to CONNECT request * CONNECT phase completed!

您用于 curl 的凭据现在应该可以在您可能想要使用新代理服务器的任何其他地方使用。

结论

在本教程中,您学习了如何部署一个流行的开源 API 端点来代理流量,几乎没有开销。许多应用程序都有内置的代理支持(通常在操作系统级别)可以追溯到几十年前,使这个代理堆栈高度可重用。

接下来,您可能想了解如何部署 Dante,这是一个 SOCKS 代理,可以与 Squid 一起运行以代理不同类型的网络流量。

由于代理服务器最常见的用例之一是代理进出不同全球区域的流量,接下来您可能需要查看如何使用 Ansible 来自动化服务器部署,以防您发现自己想要在其他数据中心复制此配置.

©2015-2025 艾丽卡 support@alaica.com