Squid简介

Squid是一个支持HTTP,HTTPS,FTP等服务的Web缓存代理软件,它可以通过缓存页面来提高服务器的相应速度并降低带宽占用。并且,Squid还具有强大的访问控制功能。Squid可以运行在各种操作系统平台上。 Squid会将访问页面的结果缓存在硬盘和内存上。所以Squid对硬盘和内存的空间大小具有较高的要求。内存和硬盘越大,缓存的命中率就越高。但是真实服务器数据是实时更新的,因此,我们就需要不定期的清空缓存数据以保证用户访问结果的准确性。 Squid 将数据元缓存在内存和硬盘中,同时也缓存 DNS 查询的结果。Squid 支持 SSL,支持访问控制。由于使用了 ICP(轻量 Internet 缓存协议),Squid 能够实现层叠的代理阵列,从而最大限度的节约带宽。 Squid Cache(简称 Squid)是一个流行的代理服务器和 Web 缓存服务器软件。Squid 可以做正向代理,也可以做反向代理。官方网站地址为:http://www.squid-cache.org/

Web代理功能
# 1. 将区域网中的主机保护起来
# 2. 对网站的内容缓存,加快客户端的访问速度,减少网络流量
# 3. 静态页面的站点越来越少,可缓存的内容也变少,因为数据库中的信息是不能被缓存.

常用代理服务器类型

代理服务器有多种类型,一般意义上常分为标准正向代理服务器,透明代理服务器,反向代理服务器.

正向代理服务器主要应用于内部网络希望访问外部网络时缓存页面数据, 由于公网IP地址稀缺,企业内部成百上千台计算机不可能同时大欧连接到Internet上,目前的解决方案就是通过一个统一的网络接口连接Internet。Squid就可以提供这样的接口。所有的客户端通过设置代理服务器连接值Squid,通过代理上网。此模型下,Squid主要负责提供缓存加速服务和访问控制的功能。正向代理是对用户的一种操作。

透明代理与传统的正向代理相似,区别在于传统的正向代理需要每个客户端都进行代理服务器的设置。而透明代理通过网关进行部署。即,所有的设置都是由管理员在网关服务器以及代理服务器进行的。因此,透明代理对于用户是透明的,不需要用户进行任何设置。

反向代理结合智能DNS可以实现基本的CDN框架。通过DNS的分离解析功能,可以为不同地区的DNS请求解析不同的结果返回给客户端。用户访问时,感觉不到是在访问代理服务器。由于使用到了缓存技术,当大的并发量到达时,Squid也可以更快的给用户返回响应结果。反向代理结构如下图所示。

Squid代理服务器原理

Squid原理:客户端访问Squid代理服务器,由代理服务器代表客户访问后端真实服务器,真实服务器将响应的数据返回给Squid代理服务器。最后,Squid代理服务器将响应结果返回给客户端,同时将结果缓存在硬盘上及内存中,当客户端再次访问相同的网页时,代理服务器直接将响应结果返回给客户端。

正向代理

当 Squid 做正向代理时,Squid 后面是客户端,客户端想访问外部网络资源,必须经过 Squid。正向代理按其客户端配置方式不同,又可以分为标准(普通)代理模式和透明代理模式。 标准(普通)代理模式,是代理内部网络用户访问 internet 上服务器的连接请求,客户端必须指定代理服务器,并将本来要直接发送到 internet 上服务器的连接请求发送给代理服务器处理。用户在上网时必须在浏览器等软件中填写代理服务器的 IP 地址与端口号信息,否则默认不使用代理。 透明代理模式,是相对于代理服务器而言,客户端不需要做任何和代理服务器相关的设置和操作,对用户而言,感觉不到代理服务器的存在,所以称之为透明代理。即把代理服务器部署在核心的上网出口,当用户上网浏览页面时,会交给代理服务器向外请求,如果结合iptables,可以实现代理+网关+内容过滤+流量安全控制等完整的上网解决方案。

部署Squid服务
yum -y install squid
systemctl restart squid
配置squid

可以使用squid默认的配置文件,因为默认的配置文件其实就已经设置了正向代理,也可以修改默认的配置文件,如下:

[root@squid ~]# cat /etc/squid/squid.conf
# 默认对外端口为3128
http_port 3128

cache_effective_user squid
cache_effective_group squid

# 内网控制,按需修改
acl manager proto cache_object
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 SSL_ports port 443
acl Safe_ports port 80 8080     # 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 allow manager localhost
http_access deny manager

http_access deny !Safe_ports

# 拒绝443以外的端口访问
http_access deny CONNECT !SSL_ports

# 允许内网
http_access allow localnet
http_access allow localhost

http_access allow all

# 设置缓存文件位置、cache目录容量(单位M)、一级缓存目录数量、二级缓存目录数量
cache_dir ufs /var/spool/squid 128 16 256
cache_mem 128 MB
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服务
systemctl restart squid
验证代理

可以使用浏览器设置代理的方式,也可以直接使用 curl 命令来测试,其中 -x 选项即 –proxy,添加代理服务器地址和端口,如下:

[root@squid ~]# curl  -xlocalhost:3128 www.baidu.com -I
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Content-Length: 277
Content-Type: text/html
Date: Fri, 29 May 2020 12:40:45 GMT
ETag: "575e1f60-115"
Last-Modified: Mon, 13 Jun 2016 02:50:08 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
X-Cache: MISS from squid
X-Cache-Lookup: MISS from squid:3128
Via: 1.1 squid (squid/3.5.20)
Connection: keep-alive
ACL访问控制

只允许 IP 地址为 39.108.140.0 的客户端使用服务器上的 squid 服务程序提供的代理服务,禁止其余所有的主机代理请求 编辑 /etc/squid/squid.conf,添加如下设置:

acl client src 39.108.140.0
http_access allow client
http_access deny all

[root@blog ~]# curl -x49.233.69.195:3128 -I www.baidu.com
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Content-Length: 277
Content-Type: text/html
Date: Fri, 29 May 2020 12:35:27 GMT
ETag: "575e1f60-115"
Last-Modified: Mon, 13 Jun 2016 02:50:08 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
X-Cache: MISS from squid
X-Cache-Lookup: MISS from squid:3128
Via: 1.1 squid (squid/3.5.20)
Connection: keep-alive

    
# 我们试一下其他IP服务器
[root@jd ~]# curl -x49.233.69.195:3128 www.baidu.com -I
HTTP/1.1 403 Forbidden
Server: squid/3.5.20
Mime-Version: 1.0
Date: Fri, 29 May 2020 12:45:44 GMT
Content-Type: text/html;charset=utf-8
Content-Length: 3513
X-Squid-Error: ERR_ACCESS_DENIED 0
Vary: Accept-Language
Content-Language: en
X-Cache: MISS from squid
X-Cache-Lookup: NONE from squid:3128
Via: 1.1 squid (squid/3.5.20)
Connection: keep-alive
禁止所有客户端访问网址包含baidu关键词网站

编辑 /etc/squid/squid.conf,添加如下设置

acl deny_keyword url_regex -i baidu
http_access deny deny_keyword

systemctl restart squid

curl -x49.233.69.195:3128 -I www.baidu.com
HTTP/1.1 403 Forbidden
Server: squid/3.5.20
Mime-Version: 1.0
Date: Fri, 29 May 2020 12:50:39 GMT
Content-Type: text/html;charset=utf-8
Content-Length: 3511
X-Squid-Error: ERR_ACCESS_DENIED 0
Vary: Accept-Language
Content-Language: en
X-Cache: MISS from squid
X-Cache-Lookup: NONE from squid:3128
Via: 1.1 squid (squid/3.5.20)
Connection: keep-alive


curl -x49.233.69.195:3128 -I https://www.cnblogs.com/you-men/
HTTP/1.1 200 Connection established

HTTP/1.1 200 OK
Date: Fri, 29 May 2020 12:50:06 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
禁止下载带有某些后缀的文件,比如.rar和.avi
acl badfile urlpath_regex -i \.rar$ \.avi$
http_access deny badfile

systemctl restart squid
# 此处就不测试了

反向代理

反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从内部服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

来源:云+社区