
作为一个经常上网的人,你可能想知道怎样才能最好地保护你的网络隐私。其中一个选择是利用 VPN 加密您的流量并保证数据隐私和匿名性。另一个同样有效的选择是使用代理服务器。
在这篇文章中,将逐步向您展示如何在 Ubuntu 22.04 上安装 squid 代理服务器。
什么是代理服务器?
代理服务器是位于您的计算机和互联网之间的系统或中介,将您与您访问的网站分开。代理根据您的浏览需求或公司的 IT 策略提供不同的隐私和安全级别。
使用代理服务器后,流量先经过代理服务器再进入你的设备,代理服务器充当到目标网站的中介。网站所在的 web 服务器响应请求,并通过相同的代理服务器发送回 web 流量,然后代理服务器将数据从网站转发给您。
什么是 Squid 代理服务器?
Squid 是一个开源、灵活、功能齐全的代理服务器,主要用作缓存代理。它是高度可定制的,并提供一系列功能,如流量优化、缓存、负载平衡和 IP 匿名化。
通过缓存频繁访问的内容,压缩流量,从而降低网络带宽,从而优化网络性能。此外,Squid 代理允许您规避政府施加的内容限制(访问地理受限的网站)。通过访问控制列表功能,您可以根据 URL 或关键字控制员工或其他用户可以浏览的网站。代理还可以与 VPN 相结合,以提供额外的安全层。
实验架构

废话不多说,下面介绍 squid 代理服务器的安装。
1) 更新 APT 缓存
登录到服务器并更新本地包索引
$ sudo apt update
2) 安装 Squid 代理服务器
执行如下命令,查看 squid 策略
$ sudo apt-cache policy squid
该命令输出关键信息,例如包是否安装、版本和存储库的 URL

接下来,安装 squid
$ sudo apt install squid -y

查看 squid 服务状态
$ sudo systemctl status squid

默认情况下,squid 运行在 TCP 端口 3128 上。执行 ss 命令确认,如下所示。
$ sudo ss -pnltu | grep -i 3128

3) 为客户端配置 Squid
如实验架构图所示,我们客户的网络是 192.168.56.0/24,我们将允许通过 squid 连接到该网络。编辑 squid 配置文件,并在其中添加以下行。
$ sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak
$ sudo vi /etc/squid/squid.conf
注释掉默认的 localnet ACL,大约 1333 行处,为您的客户机网络添加新的 ACL

接下来,设置 http_access 和 http_deny 规则。大约 1554 行处,添加以下行。
………………
http_access allow clients_net
acl blocksites dstdomain /etc/squid/blocksites.txt
http_access deny blocksites
………………
将默认的 squid 端口从 3128 更改为 8080
http_port 8080
保存并关闭问题
创建 /etc/squid/blocksites.txt 文件,然后添加要通过 Squid 阻止的网站域名。
$ cat /etc/squid/blocksites.txt
.facebook.com
.whatsapp.com
重启 squid 服务使以上更改生效
$ sudo systemctl restart squid
4) 配置 Squid 的基本 HTTP 认证
在本节中,我们将为客户机系统配置基本的 HTTP 身份验证,这是 HTTP 协议提供的最简单的身份验证。
安装 apache2-utils
$ sudo apt install apache2-utils -y

接下来,创建一个包含客户端身份验证详细信息的密码文件。
$ sudo touch /etc/squid/passwords
$ sudo chmod 777 /etc/squid/passwords
接下来,使用 htpasswd 生成客户机的密码,系统将提示您输入用户密码,alex 是客户端的用户名。
$ sudo htpasswd -c /etc/squid/passwords alex
使用如下命令,测试密码文件
$ /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
当执行该命令时,您将注意到 shell 出现挂起,输入用户名和密码(请确保用您各自的用户名和密码替换这些),然后按回车键。

编辑 squid.conf 文件
$ sudo vi /etc/squid/squid.conf
然后添加以下行,我们将简要地讨论一下它们所涉及的内容。
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 24 hours
auth_param basic casesensitive off
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
http_access allow clients_net
acl blocksites dstdomain /etc/squid/blocksites.txt
http_access deny blocksites
# And finally deny all other access to this proxy
http_access deny all
dns_v4_first on
forwarded_for delete
via off
保存并关闭文件

配置说明:
- auth_param basic casesensitive off: 不区分大小写
- acl authenticated proxy_auth REQUIRED: 需要对代理服务器进行身份验证
- http_access allow authenticated: 允许通过认证的客户端进行 HTTP 访问
- dns_v4_first on: 只有 IPv4 将被用于加速代理
- forwarded_for delete: 防止 http 头的转发,这将暴露您的源到目的地
- via off: 删除其他标头以避免暴露源
5) 重启 Squid Proxy 服务
要使更改生效,请重新启动 Squid Proxy 服务。
$ sudo systemctl restart squid
您也可以重新加载 Squid 而不重新启动服务
$ sudo systemctl reload squid
查看 Squid 服务状态
$ sudo systemctl status squid
6) 配置 Firewall Rule
如果开启了防火墙,请确保打开 Squid Proxy 端口。在本例中,我们打开端口 8080。
$ sudo ufw allow 8080/tcp
$ sudo ufw reload
7) 测试 Squid Proxy Server
现在让我们对代理服务器进行测试。在本例中,我们使用 Firefox 进行演示。
Firefox -> 网络设置 -> 代理设置。填写代理服务器的 IP 地址和端口号。此外,选择使用大多数站点使用的 HTTPS 协议的代理。

现在打开你的浏览器,试着访问任何一个网站。将出现一个弹出窗口,提示输入 Squid 身份验证凭证,即步骤 4 中配置的用户名和密码。

您的 Firefox 浏览器现在已配置为使用代理服务器。你可以去 google.com 搜索“What is my IP”来确认。
您将注意到您的 IP 与代理服务器相同,这确认我们已成功连接到代理服务器。
