千家信息网

使用Squid部署代理缓存服务

发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,1,工作原理及作用:Squid 是 Linux 系统中最为流行的一款高性能代理服务软件,通常用作 Web 网站的前置缓存服务,能够代替用户向网站服务器请求页面数据并进行缓存。简单来说,Squid 服务
千家信息网最后更新 2024年11月30日使用Squid部署代理缓存服务

1,工作原理及作用:
Squid 是 Linux 系统中最为流行的一款高性能代理服务软件,通常用作 Web 网站的前置缓存服务,能够代替用户向网站服务器请求页面数据并进行缓存。
简单来说,Squid 服务程序会按照收到的用户请求向网站源服务器请求页面、图片等所需的数据,并将服务器返回的数据存储在运行 Squid 服务程序的服务器上。
当有用户再请求相同的数据时,则可以直接将存储服务器本地的数据交付给用户,这样不仅减少了用户的等待时间,还缓解了网站服务器的负载压力。
Squid 服务程序具有配置简单、效率高、功能丰富等特点,它能支持 HTTP、FTP、SSL等多种协议的数据缓存,
可以基于访问控制列表(ACL)和访问权限列表(ARL)执行内容过滤与权限管理功能,还可以基于多种条件禁止用户访问存在威胁或不适宜的网站资源,
因此可以保护企业内网的安全,提升用户的网络体验,帮助节省网络带宽.
由于缓存代理服务不但会消耗服务器较多的 CPU 计算性能、内存以及硬盘等硬件资源,同时还需要较大的网络带宽来保障数据的传输效率,由此会造成较大的网络带宽开销。
因此国内很多 IDC 或 CDN 服务提供商会将缓存代理节点服务器放置在二三线城市以降低运营成本.
工作模式:
Squid 服务程序为用户提供缓存代理服务时,具有正向代理模式和反向代理模式之分。
正向代理模式,是指用户通过Squid 服务程序获取网站页面等资源,以及基于访问控制列表(ACL)功能对用户访问网站行为进行限制;在具体的服务方式上又分为标准代理模式和透明代理模式.
标准正向代理模式是把网站数据缓存到服务器本地,提高数据资源再次访问时的效率,但是用户在上网时必须在浏览器等软件中填写代理服务器的IP地址与端口号等信息,否则默认不使用代理服务器;
透明正向代理模式的作用和标准正向代理模式基本相同,区别是用户不需要手动代理服务的IP地址和端口号,所以这种代理服务对于用户是相对透明的.
反向代理模式是指让多台节点主机反向缓存网站数据,从而加快用户访问速度。因为一般来讲,网站中会普遍加载大量的文字、图片等静态资源,
而且它们相对来说都是比较稳定的数据信息,当用户发起网站页面中这些静态资源的访问请求时,我们可以使用 Squid 服务程序提供的反向代理模式来进行响应。
而且,如果反向代理服务器中恰巧已经有了用户要访问的静态资源,则直接将缓存的这些静态资源发送给用户,这不仅可以加快用户的网站访问速度,还在一定程度上降低了网站服务器的负载压力.
总结来说,正向代理模式一般用于企业局域网之中,让企业用户统一地通过 Squid 服务访问互联网资源,这样不仅可以在一定程度上减少公网带宽的开销,而且还能对用户访问的网站内容进行监管限制,一旦内网用户访问的网站内容与禁止规则相匹配,就会自动屏蔽网站。
反向代理模式一般是为大中型网站提供缓存服务的,它把网站中的静态资源保存在国内多个节点机房中,当有用户发起静态资源的访问请求时,可以就近为用户分配节点并传输资源,因此在大中型网站中得到了普遍应用。
2,配置Squid服务程序
2-1,准备两台虚拟机,一台作为Squid服务器,另一台作用Squid客户端(windows和linux都可用),两台虚拟机的网络必须设置成仅主机模式(Hostonly),然后关闭Squid服务器,添加新网卡设置成桥接模式,用于访问外网.
如果没有物理网络则使用NAT模式,共享主机上的WiFi,在本地WLAN中打开属性,连接旁边有个共享,勾选Internet连接共享,单击家庭网络连接,选择你想通过那个虚拟网卡上网,点击即可.
我们需要把Squid 服务程序部署在这台虚拟机上,然后让另外一台原本只能访问内网的虚拟机(即Squid 客户端)通过 Squid 服务器进行代理上网,从而使得 Squid 客户端也能访问外部网站。
2-2,网络模式配置好后,检测是否可以访问外网
ping www.baidu.com ping 百度的IP地址,出现反馈包即网络畅通
2-3,yum -y install squid 安装Squid服务程序包
出现Complete! 字样安装成功.
systemctl restart squid 重启服务
systemctl enable squid 设置为开机启动
2-4,Squid服务程序的配置文件也是放在/etc目录下一个以服务名称命名的目录中.
常用的 Squid 服务程序配置参数以及作用
http_port 3128 监听的端口号
cache_mem 64MB 内存缓冲区的大小
cache_dir ufs /var/spool/squid 2000 16 256 硬盘缓冲区的大小
cache_effective_user squid 设置缓存的有效用户
cache_effective_group squid 设置缓存的有效用户组
dns_nameservers [IP 地址] 一般不设置,而是用服务器默认的DNS 地址
cache_access_log /var/log/squid/access.log 访问日志文件的保存路径
cache_log /var/log/squid/cache.log 缓存日志文件的保存路径
visible_hostname RHEL7 设置 Squid 服务器的名称
3,正向代理
3-1,标准正向代理
Squid 服务程序软件包在正确安装并启动后,默认就已经可以为用户提供标准正向代理模式服务了,不需要单独修改配置文件或者进行其他操作。
打开Windows10上的任意浏览器,找到工具,然后单击"Internet 选项",找到"连接"选项卡,单击"局域网设置",勾选自动减则配置,填写代理服务起的IP地址和端口号.
设置完成后单击确认,重新打开新网页,成功访问www.baidu.com.
如果访问失败,查看syslinux安全子系统,是否有监听的端口号.
semanage port -l | grep squid_port_t 查看squid程序的端口号
3-2,ACL访问控制
Squid 服务程序的 ACL 是由多个策略规则组成的,它可以根据指定的策略规则来允许或限制访问请求,而且策略规则的匹配顺序与防火墙策略规则一样都是由上至下;在一旦形成匹配之后,则立即执行相应操作并结束匹配过程。
为了避免 ACL 将所有流量全部禁止或全部放行,起不到预期的访问控制效果,运维人员通常会在 ACL 的最下面写上 deny all 或者 allow all 语句,以避免安全隐患.
实验1,只允许192.168.13.129的客户端使用服务器上的Squid代理服务程序提供的代理服务,禁止其余所有的主机代理请求.
下面修改其主配置文件
vim /etc/squid/squid.conf
acl client src 192.168.13.129 在25行左右新起一行添加内容
http_access allow client 只允许client访问
http_access deny all 禁止所有
修改客户端的IP为192.168.13.130(只要不是129即可,我们需要作出错误的提示,即为实验成功),可以看到网页访问失败即为成功.
实验2,禁止所有客户端访问网址中包含linux关键字的网站
vim /etc/squid/squid.conf
acl deny_keyword url_regex -i linux 在30行左右添加内容
http_access deny deny_keyword 拒绝访问含有关键字
访问www.linuxprobe.com 类似带有linux的网站,含有关键字被拒绝访问
实验3,禁止所有客户端访问某个特定的网站
acl deny_url url_regex http://www.linuxcool.com 在33行左右添加内容
http_access deny deny_url 拒绝网站
访问http://www.linuxcool.com 查看是否可以出现内容,报错即为成功.
实验4,禁止员工在企业网内下载带有特定后缀的文件.
acl badfile urlpath_regex -i .rar$ .avi$ 在35行添加内容
http_access deny badfile 拒绝访问
随机找一个地址下载一个带有rar后缀的文件,看是否可以下载,无法下载即为成功.
4,透明正向代理
透明代理模式中,用户无须在浏览器或其他软件中配置代理服务器地址、端口号等信息,而是由 DHCP 服务器将网络配置信息分配给客户端主机,这样只要用户打开浏览器便会自动使用代理服务了.
"透明"二字指的是让用户在没有感知的情况下使用代理服务,这样的好处是一方面不需要用户手动配置代理服务器的信息,进而降低了代理服务的使用门槛;另一方面也可以更隐秘地监督员工的上网行为。
既然要让用户在无需过多配置系统的情况下就能使用代理服务,作为运维人员就必须提前将网络配置信息与数据转发功能配置好。
前面已经配置好的网络参数,使用SNAT 技术完成数据的转发,让客户端主机将数据交给 Squid 代理服务器,再由后者转发到外网中。
简单来说,就是让 Squid 服务器作为一个中间人,实现内网客户端主机与外部网络之间的数据传输。
当前主机没有配置SNAT功能,不能访问外网.
要想让内网中的客户端主机能够访问外网,客户端主机首先要能获取到 DNS 地址解析服务的数据,这样才能在互联网中找到对应网站的 IP 地址。
下面通过 iptables 命令实现 DNS 地址解析服务 53 端口的数据转发功能,并且允许 Squid 服务器转发 IPv4 数据包。
sysctl -p 命令的作用是让转发参数立即生效:
iptables -F 清空当前防火墙策略表
iptables -t nat -A POSTROUTING -p udp --dport 53 -o eno33554952 -j MASQUERADE
vim /usr/lib/sysctl.d/00-system.conf 修改端口转发配置文件
net.ipv4.ip_forward = 1 另起一行添加内容
sysctl -p 使配置文件生效
现在回到客户端主机,再次 ping 某个外网地址。此时可以发现,虽然不能连通网站,但是此时已经能够获取到外网 DNS 服务的域名解析数据。
与配置 DNS 和 SNAT 技术转发相比,Squid 服务程序透明代理模式的配置过程就十分简单了,只需要在主配置文件中服务器端口号后面追加上 transparent 单词(意思为"透明的")
然后把第 62 行的井号(#)注释符删除,设置缓存的保存路径就可以了。保存主配置文件并退出后再使用 squid -k parse 命令检查主配置文件是否有错误
以及使用 squid -z 命令对 Squid服务程序的透明代理技术进行初始化
vim /etc/squid/squid.conf
httpport 3128 transparent
cache
dir ufs /var/spool/squid 100 16 256
squid -k parse 检查主配置文件是否有错误
squid -z 初始化透明代理技术
下面就可以完成 SNAT数据转发功能了。原理很简单,使用 iptables 防火墙管理命令把所有客户端主机对网站 80 端口的请求转发至 Squid 服务器本地的 3128 端口上。
SNAT 数据转发功能的具体配置参数如下。
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3218
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eno33554952 -j SNAT --to 您的桥接网卡 IP 地址
service iptables save 保存防火墙策略
使用客户端刷新浏览器,就可以访问了
5,反向代理
网站页面是由静态资源和动态资源一起组成的,其中静态资源包括网站架构 CSS 文件、大量的图片、视频等数据,这些数据相对于动态资源来说更加稳定,一般不会经常发生改变。
但是,随着建站技术的更新换代,外加人们不断提升的审美能力,这些静态资源占据的网站空间越来越多。
如果能够把这些静态资源从网站页面中抽离出去,然后在全国各地部署静态资源的缓存节点,这样不仅可以提升用户访问网站的速度,而且网站源服务器也会因为这些缓存节点的存在而降低负载。
反向代理是 Squid 服务程序的一种重要模式,其原理是把一部分原本向网站源服务器发起的用户请求交给 Squid 服务器缓存节点来处理。
但是这种技术的弊端也很明显,如果有心怀不轨之徒将自己的域名和服务器反向代理到某个知名的网站上面,从理论上来讲,当用户访问到这个域名时,也会看到与那个知名网站一样的内容(有些诈骗网站就是这样骗取用户信任的)。
因此,当前许多网站都默认禁止了反向代理功能。开启了 CDN(内容分发网络)服务的网站也可以避免这种窃取行为。
如果开启了防护功能的网站,就会出现网页报错(Internal Server Error).
使用 Squid 服务程序来配置反向代理服务非常简单。首先找到一个网站源服务器的 IP 地址,然后编辑 Squid 服务程序的主配置文件,把端口号 3128 修改为网站源服务器的地址和端口号,此时正向解析服务会被暂停(它不能与反向代理服务同时使用)。
然后按照下面的参数形式写入需要反向代理的网站源服务器的 IP 地址信息,保存退出后重启 Squid 服务程序。
vim/etc/squid/squid.conf
http
port 你的桥接网卡IP地址:80 vhost
cache
_peer 你的桥接网卡IP地址 IP parent 80 0 originserver
systemctl restart squid
systemctl enable squid
访问网页成功.

0