如何在 Rocky Linux 9 上为专用连接设置 Squid 代理

介绍

代理服务器是缓存或掩盖网页流量的有用的方法,这意味着网页请求可以从不同的输入或输出地址提供服务,通过下载连接到中间商。对于常规的最终用户来说,这通常意味着允许您从不同的IP地址进行网页请求。

有许多第三方代理服务提供商,但它们可能不值得信赖 - 特别是如果您使用代理服务的主要目标是将流量从您的互联网服务提供商处路由,可能会有商业代理服务提供商实际上不那么安全或在实践中不那么法律约束。

Squid是一个稳定的,流行的,开源的HTTP代理程序. 在本教程中,您将安装和配置Squid以在Rocky Linux 9上提供HTTP代理程序。

前提条件

要完成本指南,您将需要:

  • Rocky Linux 9 服务器和具有 sudo 特权的非根用户. 您可以在我们的 Rocky Linux 9 初始服务器设置指南中了解有关如何设置具有这些特权的用户的更多信息。

你将在本教程中使用域名 your_domain,但你应该用自己的域名或IP地址来代替。

步骤 1 – 安装 Squid Proxy

Squid 除了路由个别用户的输出流量之外,还有许多用例。在大规模服务器部署的背景下,它可以用作分布式缓存机制、负载平衡器或路由堆的其他组成部分。然而,某些方法以横向规模扩展服务器流量,通常涉及到代理服务器,已被库伯内特(Kubernetes)等集装箱化框架所超越,这些框架在应用程序中分发了更多的组件。同时,使用代理服务器来重定向网页请求作为个别用户已经变得越来越受欢迎,以保护您的隐私。在使用开源代理服务器时,这有助于记住,这些框架可能在较低优先级维护模式中具有许多功能。代理服务器的使用案例随着时间的推移而改变,但基本技术

squid包在 Rocky Linux 的默认包源中不可用,相反,您可以通过 EPEL 存储库安装 Squid。

要添加 Rocky Linux EPEL 存储库,请使用dnf包管理器运行dnf install epel-release

1sudo dnf install epel-release

接下来,您可以继续使用dnf来安装 Squid:

1sudo dnf install squid

在Rocky Linux上,Squid 在安装后不会自动启动,您可以使用systemctl status来检查是否已创建服务,但不活跃:

1systemctl status squid.service
1[secondary_label Output]
2 squid.service - Squid caching proxy
3   Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled; vendor preset: disa>
4   Active: inactive (dead)
5     Docs: man:squid(8)

在启用 Squid 之前,您需要对其配置文件进行一些更改,该文件存储在 /etc/squid/squid.conf. Rocky Linux 9 附带的默认文本编辑器是 vi. vi` 是一个极其强大的文本编辑器,但对于缺乏经验的用户来说,它可能有点杂。

1sudo dnf install nano

nano或您最喜欢的文本编辑器中打开 Squid 配置文件:

1sudo nano /etc/squid/squid.conf

你应该看到一个解释Squid的默认访问规则的文本块:

 1[label /etc/squid/squid.conf]
 2. . . 
 3#
 4# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
 5#
 6
 7# Example rule allowing access from your local networks.
 8# Adapt localnet in the ACL section to list your (internal) IP networks
 9# from where browsing should be allowed
10http_access allow localnet
11http_access allow localhost
12
13# And finally deny all other access to this proxy
14http_access deny all
15. . .

从这里,你可以看到当前的行为 - 「localhost」被允许;其他连接不被允许。 注意这些规则被序列解析,所以保持这个配置块底部的「否定所有」规则是一个好主意。 您可以将该规则更改为「允许所有」,允许任何人连接到您的代理服务器,但您可能不想这样做。

 1[label /etc/squid/squid.conf]
 2#
 3# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
 4#
 5include /etc/squid/conf.d/*
 6# Example rule allowing access from your local networks.
 7acl localnet src your_ip_address
 8# Adapt localnet in the ACL section to list your (internal) IP networks
 9# from where browsing should be allowed
10#http_access allow localnet
11http_access allow localhost
  • acl 是指一个 A接入 C控制 List,这是允许政策的一种常见术语
  • localnet 在这种情况下是您的 ACL 的名称。

如果你不知道你的本地IP地址,那么最快的办法是去一个网站,比如什么是我的IP(https://www.whatismyip.com/),它可以告诉你你从哪里访问了它. 进行这种更改后,保存并关闭文件。

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

步骤2 - 保护 Squid

大多数代理商和大多数连接到代理商的客户端应用程序(例如,网页浏览器)都支持多种身份验证方法,这些方法可能包括共享密钥或单独的身份验证服务器,但通常涉及常规的用户名和密码对。

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

1sudo dnf install httpd-tools

此套件提供htpasswd命令,您可以使用它来为新的 Squid 用户生成密码。 Squid 的用户名不会以任何方式与系统用户名重叠,因此您可以使用您已登录的相同名称,如果您想要。

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

这将存储您的用户名以及您新密码的哈希在/etc/squid/passwords,这将被用作Squid的身份验证源。

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

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

1sudo nano /etc/squid/squid.conf
 1[label /etc/squid/squid.conf]
 2 3#
 4# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
 5#
 6include /etc/squid/conf.d/*
 7auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwords
 8auth_param basic realm proxy
 9acl authenticated proxy_auth REQUIRED
10# Example rule allowing access from your local networks.
11acl localnet src your_ip_address
12# Adapt localnet in the ACL section to list your (internal) IP networks
13# from where browsing should be allowed
14#http_access allow localnet
15http_access allow localhost
16http_access allow authenticated
17# And finally deny all other access to this proxy
18http_access deny all
19

这些额外的指示告诉Squid在你的新密码文件中查找可以通过basic_ncsa_auth机制进行解析的密码哈希,并要求对访问代理程序进行身份验证。你可以查看Squid的文档(https://wiki.squid-cache.org/ConfigExamples/Authenticate/Ncsa)以获取有关此或其他身份验证方法的更多信息。

1sudo systemctl start squid.service

您可以再次使用systemctl status来验证它是否正确启动:

1sudo systemctl status squid.service
 1[secondary_label Output]
 2 squid.service - Squid caching proxy
 3   Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled; vendor preset: disa>
 4   Active: active (running) since Fri 2022-10-28 19:17:04 UTC; 21s ago
 5     Docs: man:squid(8)
 6  Process: 263480 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/>
 7 Main PID: 263485 (squid)
 8    Tasks: 3 (limit: 11152)
 9   Memory: 15.7M
10   CGroup: /system.slice/squid.service
11           ├─263485 /usr/sbin/squid --foreground -f /etc/squid/squid.conf
12           ├─263489 (squid-1) --kid squid-1 --foreground -f /etc/squid/squid.conf
13           └─263490 (logfile-daemon) /var/log/squid/access.log
14
15Oct 28 19:17:03 rocky systemd[1]: Starting Squid caching proxy...
16Oct 28 19:17:04 rocky squid[263485]: Squid Parent: will start 1 kids
17Oct 28 19:17:04 rocky squid[263485]: Squid Parent: (squid-1) process 263489 star>
18Oct 28 19:17:04 rocky systemd[1]: Started Squid caching proxy.

不要忘了允许Squid通过您的防火墙,如果你使用防火墙d,通过添加端口3128的规则:

1sudo firewall-cmd --permanent --add-port=3128/tcp
2firewall-cmd --reload

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

步骤 3 – 通过 Squid 连接

为了演示你的 Squid 服务器,你会使用一个命令行程序叫做curl,这很受欢迎,以做不同类型的网络请求. 一般来说,如果你想验证一个特定的连接是否应该在一个浏览器中在理想情况下工作,你应该总是先测试curl。你会使用你的 本地机器上的 curl 来做到这一点 – 它默认安装在所有现代的 Windows、Mac 和 Linux 环境中,所以你可以打开任何本地壳来运行这个命令:

1[environment local]
2curl -v -x http://your_squid_username:your_squid_password@your_server_ip:3128 http://www.google.com/

x参数将代理服务器传递到弯曲中,在这种情况下,您正在使用http://协议,将您的用户名和密码指定给该服务器,然后连接到像google.com这样的已知的网站。

1[secondary_label Output]
2*   Trying 165.227.119.46:3128...
3* Connected to 165.227.119.46 (165.227.119.46) port 3128 (#0)
4* Proxy auth using Basic with user 'squid'
5> GET http://www.google.com/ HTTP/1.1

您还可以使用 Squid 代理程序访问 https:// 网站,而不进行任何进一步的配置更改. 这些程序使用一个名为 `CONNECT' 的独立代理指令,以便在客户端和服务器之间保持 SSL:

1[environment local]
2curl -v -x http://your_squid_username:your_squid_password@your_server_ip:3128 https://www.google.com/
 1[secondary_label Output]
 2*   Trying 165.227.119.46:3128...
 3* Connected to 165.227.119.46 (165.227.119.46) port 3128 (#0)
 4* allocate connect buffer
 5* Establish HTTP proxy tunnel to www.google.com:443
 6* Proxy auth using Basic with user 'squid'
 7> CONNECT www.google.com:443 HTTP/1.1
 8> Host: www.google.com:443
 9> Proxy-Authorization: Basic c3F1aWQ6c3F1aWQ=
10> User-Agent: curl/7.83.1
11> Proxy-Connection: Keep-Alive
12>
13< HTTP/1.1 200 Connection established
14<
15* Proxy replied 200 to CONNECT request
16* CONNECT phase completed

您用于弯曲的凭证现在应该在您可能想要使用新的代理服务器的任何其他地方工作。

结论

在本教程中,你学会了如何部署一个流行的开源API终端,用于代理流量,几乎没有过剩。

由于代理服务器最常见的使用案例之一是向和从不同全球区域的代理流量,因此您可能需要查看如何使用 Ansible来自动化服务器部署,如果您想在其他数据中心中重复此配置。

Published At
Categories with 技术
comments powered by Disqus