Squid 缓存服务器

news2024/11/14 18:54:18

Squid 缓存服务器

作为应用层的代理服务软件,Squid 主要提供缓存加速和应用层过滤控制的功能

☆什么是缓存代理

当客户机通过代理来请求 Web 页面时

  • 指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要访问的页面,则直接将缓存中的页面内容反馈给客户机

  • 如果缓存中没有客户机需要访问的页面,则由代理服务器向 Internet 发送访问请求

  • 当获得返回的 Web 页面以后,将网页数据保存到缓存中并发送给客户机

在这里插入图片描述

☆什么是缓存加速?

HTTP 代理的缓存加速对象主要是文字、图像等静态 Web 元素。

使用缓存机制后,当客户机在不同的时候访问同一 Web 元素,或者不同的客户机访问相同的 Web 元素时,可以直接从代理服务器的缓存中获得结果。这样就大大减少了向 Intermet 重复提交 Web 请求的过程,提高了客户机的 Web 访问响应速度。

由于客户机的 Web 访问请求实际上是由代理服务器来代替完成的,从而可以隐藏用户的真实 IP 地址,起到一定的保护作用。另一方面,代理服务器担任着类似“经纪人的角色,所以有机会针对要访问的目标、客户机的地址、访问的时间段等进行过滤控制。

代理的基本类型

根据实现的方式不同,代理服务可分为传统代理和透明代理两种常见的代理服务。

  • 传统代理:也就是普通的代理服务,首先必须在客户机的浏览器、OO聊天工具、下载软件等程序中手动设置代理服务器的地址和端口,然后才能使用代理服务来访问网络。对于网页浏览器,访问网站时的域名解析请求也会发送给指定的代理服务器。

  • 透明代理:提供与传统代理相同的功能和服务,其区别在于客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将 Web 访问重定向,实际上仍然交给代理服务器来处理。重定向的过程对客户机来说是“透明”的,用户甚至并不知道自己在使用代理服务,所以称为“透明代理”。使用透明代理时,网页浏览器访问网站时的域名解析请求将优先发给 DNS 服务器。

安装和运行控制

1 源码安装 Squid

# 源码包
squid-3.4.6.tar.gz

安装目录为’/usr/local/squid’

[root@localhost ~]# tar xf squid-3.4.6.tar.gz
[root@localhost ~]# cd squid-3.4.6/
[root@localhost squid-3.4.6]# ./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-arp-acl --enable-linux-netfilter --enable-async-io=100 --enable-err-language="Simplify_Chinese" --enable-underscore --enable-poll --enable-gnuregex
[root@localhost squid-3.4.6]# make && make install
./configure 选项含义:
--prefix=/usr/local/squid 	// 安装目录
--sysconfdir=/etc     // 单独将配置文件修改到其他目录
--enable-arp-acl     // 使用内核过滤
--enable-linux-netfilter    // 支持透明模式
--enable-async-io=100    // 异步I/O,提升存储性能
--enable-err-language="Simplify_Chinese"    // 错误信息的显示语言
--enable-underscore     // 运行URL中有下划线
--enable-poll     // 使用Poll()模式,提升性能
--enable-gnuregex	  // 使用GNU正则表达式

路径优化,并创建用户组

[root@localhost ~]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
[root@localhost ~]# useradd -M -s /sbin/nologin squid
[root@localhost ~]# chown -R squid:squid /usr/local/squid/

2 Squid 配置文件

配置文件的路径位于/etc/squid.conf

详细的配置项参考/etc/squid.conf.decunmented

[root@localhost ~]# cp /etc/squid.conf /etc/squid.conf.bak
[root@localhost ~]# vim /etc/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      // 用来指定代理服务器监听的地址和端口
cache_effective_user squid     // 指定 squid 的程序用户,用来设置初始化、运行时缓存的账号
cache_effective_group squid    // 指定用户组

coredump_dir /usr/local/squid/var/cache/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

3 Squid 的运行控制

检测配置文件的语法是否正确

[root@localhost ~]# squid -k parse

第一次启动 Squid 服务时,会自动初始化缓存目录; -z 选项用来初始化缓存目录

[root@localhost ~]# squid -z
[root@localhost ~]# 2023/06/29 19:24:19 kid1| Set Current Directory to /usr/local/squid/var/cache/squid
2023/06/29 19:24:19 kid1| Creating missing swap directories
2023/06/29 19:24:19 kid1| No cache_dir stores are configured.

启动 Squid 服务

[root@localhost ~]# squid

确定 Squid 服务处于监听状态

[root@localhost ~]# netstat -anpt | grep squid
tcp6       0      0 :::3128            :::*         LISTEN      61087/(squid-1)

构建代理服务器

1 传统代理

使用传统代理的特点在于,客户机的相关程序,比如 IE 浏览器等,必须手动指定代理服务器的地址、端口等信息。

案例环境

在这里插入图片描述

  • 构建 Squid 为客户机访向各种网站提供代理服务,但禁止通过代理下载超过 10MB 大小的文件

  • 在客户机上,指定 Squid 作为 Web 访问代理,以隐藏自己的真实 IP 地址

① Squid 服务器的配置

修改配置文件,添加reply_body_max_size配置项

[root@localhost ~]# vim /etc/squid.conf
····
reply_body_max_size 10 MB   // 允许下载的最大文件大小
http_access deny all		// reply_body_max_size放在该配置项之前;定义拒绝规则
····

Squid 服务的默认端口 3128,要么关闭防火墙,要么开放该端口

firewall-cmd --zone=public --add-port=3128/tcp

重载 Squid 服务

[root@localhost ~]# squid -k reconfigure

②客户机的代理配置

在这里插入图片描述

在这里插入图片描述

IP 地址指向代理服务器,端口使用 Squid 服务端口3128,正常访问即代理成功

③代理服务的验证方法

在 Squid 代理服务器中,跟踪 Squid 服务的访问日志文件,应该可以发现客户机192.168.153.144访问网站服务器192.168.153.143的记录

在这里插入图片描述

在这里插入图片描述

查看 web 访问日志的新增记录,通过跟踪 httpd 服务的访问日志文件,能够发现来自代理服务器192.168.153.145的访问记录。

在这里插入图片描述

这说明,当客户机使用代理后,web 服务器并不知道客户机的真实 IP 地址,实际上是由代理服务器在替它访问。

2 透明代理

透明代理提供的服务与传统代理是一致的,但是其“透明”的实现依赖于默认路由和防火墙的重定向策略,因此更适合于为局域网主机服务,而不适合为 Internet 中的客户机提供服务。

案例环境

在这里插入图片描述

在这里插入图片描述

  • 在 Linux 网关上,构建 Squid 为客户机访问 Internet 提供代理服务
  • 在所有的局域网客户机上,只需正确设置 IP 地址、默认网关,而不需要手动指定代理服务器的地址、端口等信息

①设置客户机网关

透明代理的关键在于网关服务器,而对于客户机仅需要正确地设置网络地址、默认网关,并不需要指定代理服务器。

②配置 Squid 支持透明代理

对于2.6以上版本的 Squid 服务,只要在http_port配置行添加transparent选项就可以支持透明代理。

[root@localhost ~]# vim /etc/squid.conf
http_port 3128 transparent
[root@localhost ~]# squid -k reconfigure

③设置防火墙的重定向策略

透明代理中的 Squid 服务实际上是构建在 Linux 网关主机上,因此只需要设置防火墙策略,就可以将局域网主机访问 Internet 的数据包转交给 Squid 进行处理。

[root@localhost ~]# firewall-cmd --zone=public --add-port=3128/tcp
[root@localhost ~]# firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -i ens33 -p tcp --dport 80 -j REDIRECT --to-ports 3128
[root@localhost ~]# firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -i ens33 -p tcp --dport 443 -j REDIRECT --to-ports 3128
[root@localhost ~]# firewall-cmd --runtime-to-permanent

④验证透明代理的使用

如果手动设置了指定的代理服务器,应在客户机中去除

在客户机中通过浏览器访问目标网站192.168.27.168,然后观察 Squid 代理服务器、Web服务器的访问日志,验证透明代理是否发挥作用。

在这里插入图片描述

在 Squid 代理服务器中,能够发现客户机192.168.153.144访问网站服务器192.168.27.168的记录;

在这里插入图片描述

在被访问的 Web 服务器中,能够发现来自代理服务器192.168.27.145的访问记录;

在这里插入图片描述

3 ACL 访问控制

Squid 提供了强大的代理控制机制,通过合理设置 ACL (Access Control List ,访问控制列表)并进行限制,可以针对源地址、目标地址、访问的 URL 路径,访问的时间等各种条件进行过滤。

在配置文件squid.conf中, ACL 访问控制可以通过两个步骤实现:

  • 其一,使用 acl 配置项定义需要控制的条件;
  • 其二,通过 http_access 配置项对已定义的列表做“允许”或“拒绝”访问的控制。

①定义访问控制列表

每一行 acl 配置可以定义一条访问控制列表,基本格式:

acl 列表名称 列表类型 列表内容 ···

其中,“列表名称”由管理员自行指定,用来识别控制条件;

“列表类型”必须使用Squid预定义的值,对应不同类型的控制条件;

“列表内容”是要控制的具体对象,不同类型的列表所对应的内容也不一样,可以有多个值(以空格分隔,都为或的关系);

常用的访问控制列表类型:

列表类型用途/含义示例
src源 IP 地址、网段、IP 地址范围192.168.1.1/32
192.168.1.0/241
192.168.1.0-192.168.3.0/24
dst目标 IP 地址、网段、主机名www.xxx.com
216.163.137.3/32
port目标端口20、21、8080
dstdomain目标域、匹配域内的所有站点.qq.com
time使用电力服务的时间段,字母标识一星期中各天的英文缩写; M-monday、T-tuesday、W-wednesday、H-thursday、F-friday、A-saturday、S-sundayMTWHF 8:30-17:30
12:30-13:30
AS
maxconn每个客户机的并发连接数20
url_regex目标资源的 URL 地址,-i 表示忽略大小写url_regex -i ^rtsp:// ^mms://
url_regex -i ^emule://
urlpath_regex目标资源的整个 RUL 路径,-i 表示忽略大小写urlpath_regex -i sex adult nude
urlpath_regex -i .mp3$ .rar$

在定义访问控制列表时,应结合当前网络环境正确分析用户的访问需卖义他在定理服务的控制条件。例如,针对不同的客户机地址、需要限制访问的目标。特定的时间段等,分别定义列表。

[root@localhost -]# vi /ete/squid.conf
····
acl localhost src 127.0.0.1/255.255.255.255    //源地址为 127.0.0.1
ac1 MYLAN src 192.168.1.0/24 192.168.4.0/24    //客户机网段
acl to localhost dst 127.0.0.0/8    // 目标地址为127.0.0.0/8 网段
acl MC20 maxconn 20    // 最大并发连接 20
acl BlackURL url_regex -i ^rtsp:// /emule://     // 以rtsp://等开头的URL
acl MEDIAFILE urlpath_regex -i \.mp3$ \.mp4$ \.rmvb$    // 以.mp3、.mp4、.rvb 结尾的 URL路名
acl WORKTIME time MTWHF 08:30-17:30    // 时间为周一至周五 8:30~17:30

当需要限制的同一类对象较多时,可以使用独立的文件来存放,在 acl 配置行的列表内容处指定对应的文件位置即可。例如,若要针对目标地址建立黑名单文件,可以参考以下操作。

[root@localhost -]# mkdir /etc/squid
[root@localhost -]# cd /etc/squid
[root@localhost squid]# vi ipblock.list    // 建立目标IP 地址名单
61.135.167.36
125.39.127.25
60.28.14.0/24
[root@localhost squid]# vi dmblock.list    // 建立目标域地址名单
.qq.com
.msn.com
.live.com
[root@localhost squid]# vi /ete/squid.conf    
acl IPBLOCK dst "/etc/squid/ipblock.list" 
acl DMBLOCk dstdomain "/ete/squid/dmblock.list"    // 调用指定文件中的列表内容

设置访问权限

定义好各种访问控制列表以后,需要使用 httpd_access 配置项来进行控制。需要注意的是,http_access 配置行必须放在对应的 acl 配置行之后。每一行 http_access配置确定一条访问控制规则,格式如下:

http_access allow 或 deny 列表名······

在每一条http_access 规则中,可以同时包含多个访问控制列表名,各个列表之间以空格分隔,为“与”的关系,表示必须满足所有访问控制列表对应的条件才会进行限制。需要使用取反条件时,可以在访问控制列表前添加“!”符号。

[root@localhost -]# vi /etc/squid.conf
····
http_access deny MYLAN MEDIAFILE    // 禁止客户机下载MP3、MP4等文件
http_access deny MYLAN IPBLOCK      // 禁止客户机访问黑名单中的 IP 地址
http_access deny MYLAN DMBLOCK      // 禁止客户机访问黑名单中的网站域
http_access deny MYLAN MC20         // 客户机的并发连接超过 20 时将被阻止
http_access allow MYLAN WORKTIME    // 允许客户机在工作时间上网
http_access deny all                //默认禁止所有客户机使用代理

执行访问控制时,Squid 将按照各条规则的顺序依次进行检查,如果找到一条相匹配的规则就不再向后搜索(这点与 iptables 的规则匹配类似)。因此,规则的顺序安排是非常重要的,以下两种默认情况需要我们注意。

  • 没有设置任何规则时:Squid 服务将拒绝客户端的请求。
  • 有规则但找不到相匹配的项: Squid 将采用与最后一条规则相反的权限,即如果最后一条规则是 allow,就拒绝客户端的请求,否则允许该请求。

通常情况下,把最常用到的控制规则放在最前面,以减少 Squid 的负载。在访问控制的总体策略上,建议采用“先拒绝后允许”或“先允许后拒绝”的方式,最后一条规则设为默认策略,可以为 http_access allow all 或者 http_access deny all

`

执行访问控制时,Squid 将按照各条规则的顺序依次进行检查,如果找到一条相匹配的规则就不再向后搜索(这点与 iptables 的规则匹配类似)。因此,规则的顺序安排是非常重要的,以下两种默认情况需要我们注意。

  • 没有设置任何规则时:Squid 服务将拒绝客户端的请求。
  • 有规则但找不到相匹配的项: Squid 将采用与最后一条规则相反的权限,即如果最后一条规则是 allow,就拒绝客户端的请求,否则允许该请求。

通常情况下,把最常用到的控制规则放在最前面,以减少 Squid 的负载。在访问控制的总体策略上,建议采用“先拒绝后允许”或“先允许后拒绝”的方式,最后一条规则设为默认策略,可以为 http_access allow all 或者 http_access deny all

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/735786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt实现思维导图功能(五)

前文链接:Qt实现思维导图功能(四) 思维导图纵向分布模式:模式一 百度网盘体验地址: 链接:https://pan.baidu.com/s/1YNSBiFOUwnSSKvHsBvOT3g 提取码:ifyc动态演示效果 静态展示图片 前文BUG维…

Linux 网络IO管理(epoll实现)

文章目录 1、网络IO模型1.1、阻塞IO(blocking IO)1.2、非阻塞IO(non-blocking IO)1.3、多路复用 IO(IO multiplexing)1.4、异步 IO(Asynchronous I/O)1.5、信号驱动 IO(s…

可恶的剪绳子问题

1. 剑指 Offer 14- I. 剪绳子 题目描述:给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最…

3.6.共享内存的学习

目录 前言1. 共享内存2. shared memory案例3. 补充知识总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记。 本次课程学习精简 CUDA 教程-共享…

基于Qt5 实现的简易慕课爬取程序

基于Qt5 实现的简易慕课爬取程序 一、项目概述二、源代码 一、项目概述 名称:MookScrapy 这个项目主要是使用了 Qt 里面的 QNetworkAccessManager 去下载慕课网站的数据 https://coding.imooc.com,也就是这个网站里面的卡片信息。然后做一定的分析和展示…

【架构设计】酒店预订应用的系统设计架构(如 Airbnb、OYO)

Airbnb、Booking.com 和 OYO 等酒店预订应用程序如何提供从酒店列表到预订再到付款的流畅流程?而且都没有一个小故障!在此博客中,您将获得对此的详细解释。由于它们非常庞大,以至于它们需要处理大量的用户流量。所以要管理这些&am…

计算机视觉:卷积核的参数可以通过反向传播学习到吗?

本文重点 在深度学习中,卷积神经网络(Convolutional Neural Networks, CNN)是一种常用的神经网络结构,其中卷积核是CNN的核心组件之一。卷积核是一个小矩阵,用于对输入数据进行卷积操作。卷积操作可以提取输入数据的特征,通过不同的卷积核可以提取不同的特征。 在前面课…

Wireshark TS | 二谈访问网页失败

前言 又一个访问网页失败的案例,该案例来自于 Wireshark sharkfest 2018 - Point And ShootPacket,其中的 Case 2 Cannot see homepage,描述的是来自 OSAKA 的用户抱怨访问一些网站页面不能显示,但是另外一些网站页面可以&#x…

软件测试岗位新标准:ISTQB认证与软件测试工程师职业发展

随着信息技术的飞速发展,软件测试行业也变得越来越重要。软件测试是保证软件质量的关键环节,因此,软件测试工程师的岗位也越来越受到重视。 ISTQB认证成为了衡量软件测试工程师职业能力的标准。 下面领测国际ISTQB考试认证中心就带您了解一下…

depot_tools问题记录 - 执行fetch/gclient命令无响应

文章目录 前言开发环境问题描述问题分析解决方案最后 前言 在研究将Dart dill文件序列化为可读文本时遇到的问题。 开发环境 macOS: 13.4 问题描述 之前使用depot_tools中的fetch/gclient命令还是正常的,今天想实测--no-history参数时突然遇到命令无响应的情况…

Redis 删除 key用 del 和 unlink 有啥区别?

问题 del 和 unlink 有啥区别啊?为什么String类型删除不会做异步删除? 彬彬回答 DEL 和 UNLINK 都是同步的释放 key 对象,区别是怎么释放后面的 value 对象 DEL 每次都是同步释放 value 部分,如果 value 很大,例如一…

Openssh升级方法详解

项目组linux服务器被绿盟扫描出openssh 1.0.2版本有漏洞,需要升级到7.5版本,以下是升级过程: 第一步 安装Telnet服务 先下Openssh软件包 看你需要什么版本http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/ 1.查看当前的ssh服务版本 …

【前端】网页开发精讲与实战 HTML Day 2

🚀Write In Front🚀 📝个人主页:令夏二十三 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:前端 💬总结:希望你看完之后,能对你有…

看完这篇 教你玩转渗透测试靶机Vulnhub——The Planets:Mercury

Vulnhub靶机The Planets:Mercury渗透测试详解 Vulnhub靶机介绍:Vulnhub靶机下载:Vulnhub靶机安装:Vulnhub靶机漏洞详解:①:信息收集:②:漏洞发现:③:SSH登入:…

架构师进阶之路 - 微服务怎么划分

目录 微服务划分目标 业务、技术、团队导向规划服务 领域检查 依赖DAG检查 分布式事务检查 性能分布检查 稳定(易变)性检查 调用链检查 微服务划分目标 我们常说服务的合理划分是微服务成功的重中之重,一个合理的服务划分应该符合一下…

SQL中如何用快照,恢复被误删的数据?

什么是快照 数据库快照是sql server 2005的一个新功能。MSDN上对它的定义是: 数据库快照是数据库(称为“源数据库”)的只读静态视图。在创建时,每个数据库快照在事务上都与源数据库一致。在创建数据库快照时,源数据库…

THREE.JS镜头随鼠标晃动效果

为了让动画更灵活并且简单 借助gsap让其具有更多可能,在未来更容易扩充其他动效 gsap Dom跟随鼠标移动 gsap.quickTo() 首先要监听鼠标移动,并且将移动的值转换到 -1 和 1 之间 方便处理 private mousemove(e: MouseEvent) {const x (e.clientX / inner…

spring10-配置数据元

他的作用是提高我们程序性能的:我们怎么用呢!先创建我们数据源对象:创建初始化对象之后,创建数据源对象之后,会给我们一些初始化资源。 使用完后还给他 ,这是一种环保的思想。 常见的数据源:底…

干货-卷起来,企业级web自动化测试实战落地(二)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 WebDriver的基本使…

毫米波雷达 TI IWR1443 测试官方程序(Out Of Box Demo)

IWR1443 windows 文章目录 1、准备工作1.1、mmWave SDK1.2、Code Composer Studio(CCS)1.3、Uniflash1.4、TI Cloud Agent 2、导入工程3、烧录3.1、先将 IWR1443 调到 Flashing Mode3.2、使用 UniFlash 软件 4、运行GUI4.1、IWR1443 调到 Functional Mo…