网站搜索

如何在 CentOS 7/8 上使用 Squid 创建 HTTP 代理


网络代理已经存在相当长一段时间了,并已被全球数百万用户使用。它们有广泛的用途,最流行的是在线匿名,但您还可以通过其他方式利用网络代理。以下是一些想法:

  • 在线匿名
  • 提高在线安全性
  • 改善加载时间
  • 阻止恶意流量
  • 记录您的在线活动
  • 规避区域限制
  • 在某些情况下可以减少带宽使用

代理服务器如何工作

代理服务器是用作客户端和客户端可以向其请求资源的其他服务器之间的中介的计算机。一个简单的例子是,当客户端发出在线请求(例如想要打开网页)时,他首先连接到代理服务器。

然后,代理服务器检查其本地磁盘缓存,如果可以在其中找到数据,则将数据返回给客户端,如果没有缓存,则将使用代理 IP 地址(不同于代理 IP 地址)代表客户端发出请求。客户端),然后将数据返回给客户端。代理服务器将尝试缓存新数据并将其用于将来向同一服务器发出的请求。

什么是 Squid 代理

Squid 是一个网络代理,我的组织广泛使用它。它通常用作缓存代理并提高响应时间并减少带宽使用。

出于本文的目的,我将在 Linode CentOS 7 VPS 上安装 Squid 并将其用作 HTTP 代理服务器。

如何在 CentOS 7/8 上安装 Squid

在我们开始之前,您应该知道 Squid 没有任何最低要求,但 RAM 使用量可能会根据通过代理服务器浏览互联网的客户端而有所不同。

Squid 包含在基础存储库中,因此安装简单明了。但是,在安装之前,请通过运行确保您的软件包是最新的。

yum -y update

继续安装鱿鱼,使用以下命令在系统启动时启动并启用它。

yum -y install squid
systemctl start squid
systemctl  enable squid

此时,您的 Squid Web 代理应该已经在运行,您可以使用以下命令验证服务的状态。

systemctl status squid
样本输出
 squid.service - Squid caching proxy
   Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2018-09-20 10:07:23 UTC; 5min ago
 Main PID: 2005 (squid)
   CGroup: /system.slice/squid.service
           ├─2005 /usr/sbin/squid -f /etc/squid/squid.conf
           ├─2007 (squid-1) -f /etc/squid/squid.conf
           └─2008 (logfile-daemon) /var/log/squid/access.log

Sep 20 10:07:23 tecmint systemd[1]: Starting Squid caching proxy...
Sep 20 10:07:23 tecmint squid[2005]: Squid Parent: will start 1 kids
Sep 20 10:07:23 tecmint squid[2005]: Squid Parent: (squid-1) process 2007 started
Sep 20 10:07:23 tecmint systemd[1]: Started Squid caching proxy.

以下是您应该注意的一些重要文件位置:

  • Squid配置文件:/etc/squid/squid.conf
  • Squid 访问日志:/var/log/squid/access.log
  • Squid 缓存日志:/var/log/squid/cache.log

最小的 squid.conf 配置文件(不含注释)如下所示:

acl localnet src 10.0.0.0/8	# RFC1918 possible internal network
acl localnet src 172.16.0.0/12	# RFC1918 possible internal network
acl localnet src 192.168.0.0/16	# RFC1918 possible internal network
acl localnet src fc00::/7       # RFC 4193 local private network range
acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80		# http
acl Safe_ports port 21		# ftp
acl Safe_ports port 443		# https
acl Safe_ports port 70		# gopher
acl Safe_ports port 210		# wais
acl Safe_ports port 1025-65535	# unregistered ports
acl Safe_ports port 280		# http-mgmt
acl Safe_ports port 488		# gss-http
acl Safe_ports port 591		# filemaker
acl Safe_ports port 777		# multiling http
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localnet
http_access allow localhost
http_access deny all
http_port 3128
coredump_dir /var/spool/squid
refresh_pattern ^ftp:		1440	20%	10080
refresh_pattern ^gopher:	1440	0%	1440
refresh_pattern -i (/cgi-bin/|\?) 0	0%	0
refresh_pattern .		0	20%	4320

将 Squid 配置为 HTTP 代理

在这里,我们将向您展示如何将squid配置为仅使用客户端IP地址进行身份验证的HTTP代理。

添加 Squid ACL

如果您希望允许该 IP 地址通过新的代理服务器访问网络,则需要在配置文件中添加新的 ACL访问控制列表)行。

vim /etc/squid/squid.conf

您应该添加的行是:

acl localnet src XX.XX.XX.XX

其中 XX.XX.XX.XX 是您要添加的实际客户端 IP 地址。该行应添加到定义 ACL 的文件的开头。最好在 ACL 旁边添加注释,该注释将描述谁使用此 IP 地址。

需要注意的是,如果 Squid 位于本地网络之外,则应添加客户端的公共 IP 地址。

您需要重新启动 Squid 才能使新更改生效。

systemctl  restart squid

打开 Squid 代理端口

正如您可能在配置文件中看到的那样,仅允许某些端口进行连接。您可以通过编辑配置文件来添加更多内容。

acl Safe_ports port XXX

其中 XXX 是您要加载的实际端口。同样,最好在旁边留下评论,描述该端口的用途。

为了使更改生效,您需要再次重新启动squid。

systemctl  restart squid

Squid 代理客户端身份验证

您很可能希望您的用户在使用代理之前进行身份验证。为此,您可以启用基本 HTTP 身份验证。配置简单快捷。

首先,您需要安装httpd-tools

yum -y install httpd-tools

现在让我们创建一个文件,稍后将存储用于身份验证的用户名。 Squid 与用户“squid ” 一起运行,因此该文件应归该用户所有。

touch /etc/squid/passwd
chown squid: /etc/squid/passwd

现在我们将创建一个名为“proxyclient”的新用户并设置其密码。

htpasswd /etc/squid/passwd proxyclient

New password:
Re-type new password:
Adding password for user proxyclient

现在要配置身份验证,请打开配置文件。

vim /etc/squid/squid.conf

在端口 ACL 后添加以下行:

auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Squid Basic Authentication
auth_param basic credentialsttl 2 hours
acl auth_users proxy_auth REQUIRED
http_access allow auth_users

保存文件并重新启动squid以使新的更改生效:

systemctl restart squid

在 Squid 代理上阻止网站

最后,我们将创建最后一个ACL,它将帮助我们阻止不需要的网站。首先,创建用于存储黑名单站点的文件。

touch /etc/squid/blacklisted_sites.acl

您可以添加一些您想要阻止的域。例如:

.badsite1.com
.badsite2.com

前面的点告诉鱿鱼阻止所有对该站点的引用,包括 www.badsite1subsite.badsite1.com 等。

现在打开 Squid 的配置文件。

vim /etc/squid/squid.conf

在端口 ACL 后面添加以下两行:

acl bad_urls dstdomain "/etc/squid/blacklisted_sites.acl"
http_access deny bad_urls

现在保存文件并重新启动squid:

systemctl restart squid

正确配置所有内容后,现在您可以配置本地客户端浏览器或操作系统的网络设置以使用您的鱿鱼 HTTP 代理。

结论

在本教程中,您学习了如何自行安装、保护和配置 Squid HTTP 代理服务器。根据您刚刚获得的信息,您现在可以通过 Squid 对传入和传出流量添加一些基本过滤。

如果您想多走一步,您甚至可以配置鱿鱼在工作时间阻止某些网站以防止分心。如果您有任何问题或意见,请在下面的评论部分发表。