介绍
代理服务器是作为终端用户和互联网资源之间的网关的服务器应用程序的一种类型。通过代理服务器,终端用户可以控制和监控他们的网络流量,包括隐私,安全和缓存,例如,您可以使用代理服务器从不同的IP地址进行网络请求。
Squid是一个稳定的,流行的,开源的HTTP代理程序. 在本教程中,您将安装和配置Squid以在Ubuntu 20.04服务器上提供HTTP代理程序。
前提条件
要完成本指南,您将需要:
- Ubuntu 20.04 服务器和具有 sudo 特权的非 root 用户. 您可以在我们的 Ubuntu 20.04 初始服务器设置 指南中了解有关如何设置具有这些特权的用户的更多信息。
你将在本教程中使用域名 your_domain,但你应该用自己的域名或IP地址来代替。
步骤 1 – 安装 Squid Proxy
Squid 除了路由个别用户的输出流量之外,还有许多用例。在大规模服务器部署的背景下,它可以用作分布式缓存机制、负载平衡器或路由堆的其他组成部分。然而,某些方法以横向规模扩展服务器流量,通常涉及到代理服务器,已被库伯内特(Kubernetes)等集装箱化框架所超越,这些框架在应用程序中分发了更多的组件。同时,使用代理服务器来重定向网页请求作为个别用户已经变得越来越受欢迎,以保护您的隐私。在使用开源代理服务器时,这有助于记住,这些框架可能在较低优先级维护模式中具有许多功能。代理服务器的使用案例随着时间的推移而改变,但基本技术
首先,作为非根用户,运行以下命令来更新您的包列表并安装 Squid Proxy:
1sudo apt update
2sudo apt install squid
Squid 会自动设置背景服务并在安装后启动,您可以检查该服务是否正常运行:
1systemctl status squid.service
1[secondary_label Output]
2● squid.service - Squid Web Proxy Server
3 Loaded: loaded (/lib/systemd/system/squid.service; enabled; vendor preset: enabled)
4 Active: active (running) since Wed 2021-12-15 21:45:15 UTC; 2min 11s ago
默认情况下,Squid 不允许任何客户端从这个服务器之外连接到它. 为了启用此功能,您需要对其配置文件进行一些更改,该文件存储在 `/etc/squid/squid.conf 中。
1sudo nano /etc/squid/squid.conf
请注意,Squid的默认配置文件非常,非常长,并且包含大量的选项,这些选项已暂时被禁用,通过在他们所处的行开始时设置一个#
,也被称为发表评论
。
你应该看到一个解释Squid的默认访问规则的文本块:
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/*
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
10#http_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 apt install apache2-utils
此套件提供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/lib/squid3/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 restart squid.service
如果您使用ufw
,请在防火墙中打开端口3128:
1sudo ufw allow 3128
在下一步中,您最终将连接到您的代理。
步骤 3 – 通过 Squid 连接
为了演示你的 Squid 服务器,你会使用一个命令行程序叫做curl
,这很受欢迎,以做不同类型的网络请求. 一般来说,如果你想验证一个特定的连接是否应该在一个浏览器中在理想情况下工作,你应该总是先测试curl
。你会使用你的 本地机器上的 curl 来做到这一点 – 它默认安装在所有现代的 Windows、Mac 和 Linux 环境中,所以你可以打开任何本地壳来运行这个命令:
1curl -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 138.197.103.77...
3* TCP_NODELAY set
4* Connected to 138.197.103.77 (138.197.103.77) port 3128 (#0)
5* Proxy auth using Basic with user 'sammy'
6> GET http://www.google.com/ HTTP/1.1
您还可以使用 Squid 代理程序访问 https://
网站,而不进行任何进一步的配置更改. 这些程序使用一个名为 `CONNECT' 的独立代理指令,以便在客户端和服务器之间保持 SSL:
1curl -v -x http://your_squid_username:your_squid_password@your_server_ip:3128 https://www.google.com/
1[secondary_label Output]
2* Trying 138.197.103.77...
3* TCP_NODELAY set
4* Connected to 138.197.103.77 (138.197.103.77) port 3128 (#0)
5* allocate connect buffer!
6* Establish HTTP proxy tunnel to www.google.com:443
7* Proxy auth using Basic with user 'sammy'
8> CONNECT www.google.com:443 HTTP/1.1
9> Host: www.google.com:443
10> Proxy-Authorization: Basic c2FtbXk6c2FtbXk=
11> User-Agent: curl/7.55.1
12> Proxy-Connection: Keep-Alive
13>
14< HTTP/1.1 200 Connection established
15<
16* Proxy replied OK to CONNECT request
17* CONNECT phase completed!
您用于弯曲
的凭证现在应该在您可能想要使用新的代理服务器的任何其他地方工作。
结论
在本教程中,你学会了如何部署一个流行的开源API终端,用于代理流量,几乎没有过剩。
接下来,您可能想学习如何部署 Dante,一个可以与Squid一起运行的SOCKS代理,用于代理不同类型的网络流量。
由于代理服务器最常见的使用案例之一是向和从不同全球区域的代理流量,因此您可能需要查看如何使用 Ansible来自动化服务器部署,如果您想在其他数据中心中重复此配置。