Squid服务程序会按照收到的用户请求向网站源服务器请求页面、图片等所需的数据,并将服务器返回的数据存储在运行Squid服务程序的服务器上。当有用户再请求相同的数据时,则可以直接将存储服务器本地的数据交付给用户,这样不仅减少了用户的等待时间,还缓解了网站服务器的负载压力。
Squid服务程序具有配置简单、效率高、功能丰富等特点,它能支持HTTP、FTP、SSL等多种协议的数据缓存,可以基于访问控制列表(ACL)和访问权限列表(ARL)执行内容过滤与权限管理功能,还可以基于多种条件禁止用户访问存在威胁或不适宜的网站资源,因此可以保护企业内网的安全,提升用户的网络体验,帮助节省网络带宽。
正向代理模式,是指让用户通过Squid服务程序获取网站页面等资源,以及基于访问控制列表(ACL)功能对用户访问网站行为进行限制,在具体的服务方式上又分为标准代理模式与透明代理模式。标准正向代理模式是把网站数据缓存到服务器本地,提高数据资源被再次访问时的效率,但是用户在上网时必须在浏览器等软件中填写代理服务器的IP地址与端口号信息,否则默认不使用代理服务。而透明正向代理模式的作用与标准正向代理模式基本相同,区别是用户不需要手动指定代理服务器的IP地址与端口号,所以这种代理服务对于用户来讲是相对透明的。
反向代理模式,是指让多台节点主机反向缓存网站数据,从而加快用户访问速度。一般来讲,网站中会普遍加载大量的文字、图片等静态资源,而且它们相对来说都是比较稳定的数据信息,当用户发起网站页面中这些静态资源的访问请求时,我们可以使用Squid服务程序提供的反向代理模式来进行响应。而且,如果反向代理服务器中恰巧已经有了用户要访问的静态资源,则直接将缓存的这些静态资源发送给用户,这不仅可以加快用户的网站访问速度,还在一定程度上降低了网站服务器的负载压力。
为了能够相互通信,需要将这两台虚拟机都设置为仅主机模式,新添加的网卡设备选择为桥接模式,否则这两台虚拟机都无法访问外网
使用ping命令检查Squid服务器可以访问外网
[root@localhost ~]# ping www.baidu.com
PING www.a.shifen.com (14.215.177.38) 56(84) bytes of data.
64 bytes from 14.215.177.38: icmp_seq=1 ttl=128 time=5.98 ms
64 bytes from 14.215.177.38: icmp_seq=2 ttl=128 time=5.85 ms
64 bytes from 14.215.177.38: icmp_seq=3 ttl=128 time=6.36 ms
^C
--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 5.853/6.065/6.362/0.234 ms
[root@localhost ~]#
安装Squid服务程序
[root@localhost ~]# yum install squid
已加载插件:langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
正在解决依赖关系
--> 正在检查事务
---> 软件包 squid.x86_64.7.3.3.8-26.el7 将被 安装
--> 正在处理依赖关系 perl(DBI),它被软件包 7:squid-3.3.8-26.el7.x86_64 需要
--> 正在处理依赖关系 perl(Digest::MD5),它被软件包 7:squid-3.3.8-26.el7.x86_64 需要
--> 正在处理依赖关系 libecap.so.2()(64bit),它被软件包 7:squid-3.3.8-26.el7.x86_64 需要
--> 正在检查事务
---> 软件包 libecap.x86_64.0.0.2.0-9.el7 将被 安装
---> 软件包 perl-DBI.x86_64.0.1.627-4.el7 将被 安装
--> 正在处理依赖关系 perl(RPC::PlClient) >= 0.2000,它被软件包 perl-DBI-1.627-4.el7.x86_64 需要
--> 正在处理依赖关系 perl(RPC::PlServer) >= 0.2001,它被软件包 perl-DBI-1.627-4.el7.x86_64 需要
---> 软件包 perl-Digest-MD5.x86_64.0.2.52-3.el7 将被 安装
--> 正在处理依赖关系 perl(Digest::base) >= 1.00,它被软件包 perl-Digest-MD5-2.52-3.el7.x86_64 需要
--> 正在检查事务
---> 软件包 perl-Digest.noarch.0.1.17-245.el7 将被 安装
---> 软件包 perl-PlRPC.noarch.0.0.2020-14.el7 将被 安装
--> 正在处理依赖关系 perl(Net::Daemon) >= 0.13,它被软件包 perl-PlRPC-0.2020-14.el7.noarch 需要
--> 正在处理依赖关系 perl(Compress::Zlib),它被软件包 perl-PlRPC-0.2020-14.el7.noarch 需要
--> 正在处理依赖关系 perl(Net::Daemon::Log),它被软件包 perl-PlRPC-0.2020-14.el7.noarch 需要
--> 正在处理依赖关系 perl(Net::Daemon::Test),它被软件包 perl-PlRPC-0.2020-14.el7.noarch 需要
--> 正在检查事务
---> 软件包 perl-IO-Compress.noarch.0.2.061-2.el7 将被 安装
--> 正在处理依赖关系 perl(Compress::Raw::Bzip2) >= 2.061,它被软件包 perl-IO-Compress-2.061-2.el7.noarch 需要
--> 正在处理依赖关系 perl(Compress::Raw::Zlib) >= 2.061,它被软件包 perl-IO-Compress-2.061-2.el7.noarch 需要
---> 软件包 perl-Net-Daemon.noarch.0.0.48-5.el7 将被 安装
--> 正在检查事务
---> 软件包 perl-Compress-Raw-Bzip2.x86_64.0.2.061-3.el7 将被 安装
---> 软件包 perl-Compress-Raw-Zlib.x86_64.1.2.061-4.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
================================================================================
Package 架构 版本 源 大小
================================================================================
正在安装:
squid x86_64 7:3.3.8-26.el7 yum 2.6 M
为依赖而安装:
libecap x86_64 0.2.0-9.el7 yum 20 k
perl-Compress-Raw-Bzip2 x86_64 2.061-3.el7 yum 32 k
perl-Compress-Raw-Zlib x86_64 1:2.061-4.el7 yum 57 k
perl-DBI x86_64 1.627-4.el7 yum 802 k
perl-Digest noarch 1.17-245.el7 yum 23 k
perl-Digest-MD5 x86_64 2.52-3.el7 yum 30 k
perl-IO-Compress noarch 2.061-2.el7 yum 260 k
perl-Net-Daemon noarch 0.48-5.el7 yum 51 k
perl-PlRPC noarch 0.2020-14.el7 yum 36 k
事务概要
================================================================================
安装 1 软件包 (+9 依赖软件包)
总下载量:3.9 M
安装大小:12 M
Is this ok [y/d/N]: y
Downloading packages:
--------------------------------------------------------------------------------
总计 6.3 MB/s | 3.9 MB 00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : libecap-0.2.0-9.el7.x86_64 1/10
正在安装 : perl-Digest-1.17-245.el7.noarch 2/10
正在安装 : perl-Digest-MD5-2.52-3.el7.x86_64 3/10
正在安装 : 1:perl-Compress-Raw-Zlib-2.061-4.el7.x86_64 4/10
正在安装 : perl-Net-Daemon-0.48-5.el7.noarch 5/10
正在安装 : perl-Compress-Raw-Bzip2-2.061-3.el7.x86_64 6/10
正在安装 : perl-IO-Compress-2.061-2.el7.noarch 7/10
正在安装 : perl-PlRPC-0.2020-14.el7.noarch 8/10
正在安装 : perl-DBI-1.627-4.el7.x86_64 9/10
正在安装 : 7:squid-3.3.8-26.el7.x86_64 10/10
yum/productid | 1.6 kB 00:00
验证中 : perl-Compress-Raw-Bzip2-2.061-3.el7.x86_64 1/10
验证中 : perl-Net-Daemon-0.48-5.el7.noarch 2/10
验证中 : perl-Digest-MD5-2.52-3.el7.x86_64 3/10
验证中 : perl-PlRPC-0.2020-14.el7.noarch 4/10
验证中 : 1:perl-Compress-Raw-Zlib-2.061-4.el7.x86_64 5/10
验证中 : perl-Digest-1.17-245.el7.noarch 6/10
验证中 : 7:squid-3.3.8-26.el7.x86_64 7/10
验证中 : libecap-0.2.0-9.el7.x86_64 8/10
验证中 : perl-DBI-1.627-4.el7.x86_64 9/10
验证中 : perl-IO-Compress-2.061-2.el7.noarch 10/10
已安装:
squid.x86_64 7:3.3.8-26.el7
作为依赖被安装:
libecap.x86_64 0:0.2.0-9.el7
perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.el7
perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7
perl-DBI.x86_64 0:1.627-4.el7
perl-Digest.noarch 0:1.17-245.el7
perl-Digest-MD5.x86_64 0:2.52-3.el7
perl-IO-Compress.noarch 0:2.061-2.el7
perl-Net-Daemon.noarch 0:0.48-5.el7
perl-PlRPC.noarch 0:0.2020-14.el7
完毕!
[root@localhost ~]#
安装完成后重启一下Squid服务程序
[root@localhost ~]# systemctl restart squid
[root@localhost ~]# systemctl enable squid
Created symlink from /etc/systemd/system/multi-user.target.wants/squid.service to /usr/lib/systemd/system/squid.service.
[root@localhost ~]# systemctl enable squid
[root@localhost ~]#
正向代理
在windows 7系统中打开任意浏览器,进行如下操作
填写Squid服务器的IP地址
现在用户可以使用Squid服务程序提供的代理服务上网了
Squid服务程序默认使用3128、3401与4827等端口号,为了防止被人“蹭网”,可以把默认使用的端口号修改为其他值,以便起到一定的保护作用。在/etc目录下的Squid服务程序同名目录中找到配置文件,把Squid服务程序的代理服务端口(http_port参数)修改成新值
[root@localhost ~]# vim /etc/squid/squid.conf
重启Squid服务程序
[root@localhost ~]# systemctl restart squid
[root@localhost ~]# systemctl enable squid
[root@localhost ~]#
将新的端口号添加到Squid服务程序在SElinux域的允许列表中
[root@localhost ~]# semanage port -l | grep squid_port_t
squid_port_t tcp 3128, 3401, 4827
squid_port_t udp 3401, 4827
[root@localhost ~]# semanage port -a -t squid_port_t -p tcp 10086
[root@localhost ~]# semanage port -l | grep squid_port_t
squid_port_t tcp 10086, 3128, 3401, 4827
squid_port_t udp 3401, 4827
[root@localhost ~]#
ACL访问控制
在日常工作中,公司办公电脑一般是通过公司内部的网关服务器来访问互联网,当把Squid服务程序部署为公司网络的网关服务器后,Squid服务程序的访问控制列表(ACL)功能将发挥它的作用。它可以根据指定的策略条件来缓存数据或限制用户的访问。
只允许IP地址为192.168.168.129的客户端使用服务器上的Squid服务程序提供的代理服务,禁止其余所有的主机代理请求。
[root@localhost ~]# vim /etc/squid/squid.conf
重启Squid服务程序
[root@localhost ~]# systemctl restart squid
因为IP地址不符合允许策略,所以访问请求被拒绝
禁止所有客户端访问网址中包含 baidu 关键词的网站
[root@localhost ~]# vim /etc/squid/squid.conf
重启Squid服务程序
[root@localhost ~]# systemctl restart squid
当客户端分别访问带有baidu关键词和不带baidu关键词的网站时的结果
禁止所有客户端访问某个特定的网站
除了禁止所有客户端访问网址中包含baidu关键词的方法,为了避免误封的行为,还可以通过禁止客户端访问某个特定的网址
[root@localhost ~]# vim /etc/squid/squid.conf
为了让实验效果更明显,我就拿HTTP协议和HTTPS协议做对比
禁止员工在企业网内部下载带有某些后缀的文件
在企业网络中,总会遇到有人利用企业网络的高速带宽私自下载资源(比如歌曲、电影等),通过禁止所有用户访问.rar或.avi、.mp3等后缀文件的请求,可以防止他们继续下载资源
[root@localhost ~]# vim /etc/squid/squid.conf
重启Squid服务程序
[root@localhost ~]# systemctl restart squid
反向代理
原理是把一部分原本向网站源服务器发起的用户请求交给Squid服务器缓存节点来处理。但是这种技术的弊端也很明显,如果有人将自己的域名和服务器反向代理到某个知名的网站上面,从理论上来讲,当用户访问到这个域名时,也会看到与那个知名网站一样的内容。因此,当前许多网站都默认禁止了反向代理功能。开启了CDN(内容分发网络)服务的网站也可以避免这种窃取行为。
[root@localhost ~]# vim /etc/squid/squid.conf
………………省略部分输出信息………………
57
58 # Squid normally listens to port 3128
59 http_port 你的桥接网卡IP地址:80 vhost
60 cache_peer 网站源服务器IP地址 parent 80 0 originserver
61
………………省略部分输出信息………………
[root@localhost ~]# systemctl restart squid