Squid 缓存服务器

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【考研思维题】【哈希表 || 什么时候用哈希表呢?快速查询的时候】【我们一起60天准备考研算法面试(大全)-第九天 9/60】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

ModaHub魔搭社区:向量数据库Zilliz Cloud删除 Entity和删除 Collection教程

目录 删除单个 Entity 批量删除 Entity 开始前 操作步骤 使用限制 Entity 是指存储在 Zilliz Cloud 集群中的数据实体,包含用于处理、搜索和查询的数据。如果您不再需要某个 Entity,可以执行相关操作将其删除。 本文介绍如何从 Collection 中删除单个或多个 Entity。 …

网络数据包的监听与分析——IP数据报文分析

1. 抓包工具下载 x下面是一个IP数据报的抓包软件——IPtool的蓝奏云下载链接 https://wwix.lanzoue.com/iaGpy11klpnc 2. iptool使用 下载解压之后,右击以管理员身份运行,打开该exe文件即可 然后点击绿色运行就开始捕包了 随便点一个包进去进行分析就可…

JAVA-MAVEN初学者教程(配置、pom.xml、依赖管理等)

目录 认识MAVEN安装&配置MAVENwindows安装MAVENMAVEN的配置本地仓库 localRepository镜像 mirrors代理仓库 respositories代理 proxies IDEA配置MAVEN(一个module) MAVEN生命周期install下载包 模块的pom.xml坐标gav打包方式 package属性值 properti…

web 前端 Day 4

盒子模型 <style>div {width: 300px;height: 300px;background-color: pink;padding-left: 4px; 左侧内边距border: 3px solid red;margin: 50px;}</style> padding 内边距 </head> ​ <body> ​<div>cfdaffshydghjgdjdnjjjjjjjjjjjjjjj&l…

Spark学习--3、WordCount案例、RDD序列化、RDD依赖关系、RDD持久化

1、WordCount案例实操 导入项目依赖 <dependencies><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.12</artifactId><version>3.3.0</version></dependency> </dependencies>1.1 本…

2023年java还是golang还是c#?

前言 我们可以先来看一下这三门语言各自的优劣 学习曲线&#xff1a;如果你是初学者或对编程相对陌生&#xff0c;Java可能是一个较好的选择。它有广泛的学习资源和社区支持&#xff0c;易于上手。Go也有简单易学的特点&#xff0c;但由于相对较年轻&#xff0c;相关的学习资…

Linux驱动进阶(一)——设备驱动中的并发控制

文章目录 前言并发与竞争原子变量操作原子变量操作原子整型操作原子位操作 自旋锁自旋锁概述自旋锁的使用自旋锁的使用注意事项 信号量信号量概述信号量的实现信号量的使用自旋锁与信号量的对比 完成量完成量概述完成量的实现完成量的使用 小结 前言 现代操作系统有三大特征&a…

frp内网穿透

frp内网穿透 一.frp的作用和原理图 1.首先frp分客户端和服务端&#xff0c;frp客户端和服务端在同一个局域网。 2.frp服务端拥有公网ip与互联网连通。 frp的作用&#xff1a; 通过一台公司拥有外网ip的服务器做为frp服务端&#xff0c;通过请求转发的形式&#xff0c;转发到公…

Qt,day4

闹钟 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);this->setWindowTitle("闹钟");this->setWindowIcon(QIcon("D:\\HQYJRJ\\QT\\day1\\…

二十三种设计模式第十六篇--观察者模式

观察者模式是一种行为型设计模式&#xff0c;它建立了一种对象间的一对多依赖关系&#xff0c;使得当一个对象的状态发生变化时&#xff0c;所有依赖于它的对象都会得到通知并自动更新。这种模式可以实现对象间的松耦合通信&#xff0c;提高系统的可扩展性和灵活性。 观察者模…

TCP连接管理(三次握手,四次挥手)

目录 一、回顾一下TCP包头二、连接的建立——“三次握手”三、连接的建立——“四次挥手”保活计时器 一、回顾一下TCP包头 源端口号&#xff08;Source Port&#xff09;&#xff1a;16 位字段&#xff0c;表示发送方的端口号。 目的端口号&#xff08;Destination Port&…

FTP服务器

文章目录 FTP服务器FTP的数据传输原理FTP的功能简介不同等级的用户身份命令记录与日志文件记录限制用户活动的目录 FTP的工作流程与使用到的端口FTP主动式连接FTP被动式连接 vsftpd服务器基础设置为什么使用vsftpd所需要的软件以及软件结构vsftpd.conf 配置值说明与服务器环境比…

Leetcode---352周赛

周赛题目 2760. 最长奇偶子数组 2761. 和等于目标值的质数对 2762. 不间断子数组 2763. 所有子数组中不平衡数字之和 一、最长奇偶子数组 这题的数据范围允许用暴力来做&#xff0c;只要我们分别枚举左端点left和右端点right&#xff0c;然后看区间[left,right]是否符合题目条…

vue3 报错解决:找不到模块‘xxx.vue’或其相应的类型声明。(Vue 3 can not find module)

src下面建立一个xx.d.ts的文件 declare module *.vue {import { ComponentOptions } from vueconst componentOptions: ComponentOptionsexport default componentOptions }

数据结构错题集 第七章 查找

7.2 124 等比 1(1-2^h)/(1-2) 2^h - 1 查找失败的最小次数相等吗&#xff1f; 13.A D 推一下公式 &#xff08;M1&#xff09;/2 平均查找长度 17.有序 就可二分查找 记住向下取整就是往右 13题就是个例子 向上取整就是往左 7.3 A错 不会分裂 不是平衡树 12。 C 黑高…

Tomcat、Maven以及Servlet的基本使用

Tomcat什么是TomcatTomcat的目录结构启动Tomcat MavenMaven依赖管理流程配置镜像源 Servlet主要工作实现Servlet添加依赖实现打包分析 配置插件 Tomcat 什么是Tomcat Tomcat 是一个 HTTP 服务器。前面我们已经学习了 HTTP 协议, 知道了 HTTP 协议就是 HTTP 客户端和 HTTP 服务…

Android性能优化(bin启动优化)

我们平时会在android里面写个bin程序来干点活&#xff0c;但是有时候我们会发现很奇怪的现象&#xff0c;我明明很早就启动这个bin了&#xff0c;但是过了很久bin程序的main函数才被调用~。这个是为啥呢&#xff1f;主要有2个原因&#xff1a; 一.bin程序依赖的so库太多&#…

Python:使用prometheus-client提交数据到实现prometheus+ grafana数据监控

相关资料 prometheus文档&#xff1a;https://prometheus.io/grafana文档&#xff1a;https://grafana.com/grafana github: https://github.com/grafana/grafanaPyhton客户端https://pypi.org/project/prometheus-client/ 目录 1、使用Python提供数据源2、启动 prometheus3、…

zabbix 监控 windows 系统、java应用、SNMP

Zabbix 监控 Windows 系统 1、下载 Windows 客户端 Zabbix agent 2 2、安装客户端&#xff0c;配置 3.在服务端 Web 页面添加主机&#xff0c;关联模板 Zabbix 监控 java 应用 1、客户端开启 java jmxremote 远程监控功能 1.1配置 java jmxremote 远程监控功能 1.2启动…