squid代理服务应用

news2024/11/26 12:41:48

squid代理服务器

代理的工作机制:

代理服务器的概念及其作用:

其主要作用有:

 Squid 代理的类型:

安装 Squid 服务

编译安装 Squid

修改 Squid 的配置文件

 Squid 的运行控制

 创建 Squid 服务脚本

 构建传统代理服务器

 生产环境中还需要修改防火墙规则

客户机的代理配置

 构建透明代理服务器

 Squid服务器配置

验证 

ACL访问控制

Squid 日志分析 

Squid 反向代理

工作机制

修改squid代理服务器配置

设置两个web服务端

 修改squid代理服务器配置文件

 清空之前透明模式配置的 iptables 规则

 客户机的域名映射配置

查看缓存命中情况 


squid代理服务器

Squid 主要提供缓存加速、应用层过滤控制的功能。

代理的工作机制:

1.代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址。
2.将获得的网页数据(静态 Web 元素)保存到缓存中并发送给客户机,以便下次请求相同的数据时快速响应。
 

代理服务器的概念及其作用:

代理服务器是一个位于客户端和原始(资源)服务器之间的服务器,为了从原始服务器取得内容,客户端向代理服务器发送一个请求并指定目标原始服务器,然后代理服务器向原始服务器转交请求并将获得的内容返回给客户端。

缓存代理对于Web至关重要,尤其对于大型高负载Web站点。缓存可作为性能优化的一个重要手段,可以极大减轻后端服务器的负载。通常对于静态资源,即较少经常更新的资源,如图片,css或js等进行缓存,从而在每次刷新浏览器的时候,不用重新请求,而是从缓存里面读取,这样就可以减轻服务器的压力。

其主要作用有:

资源获取:代替客户端实现从原始服务器的资源获取;
加速访问:代理服务器可能离原始服务器更近,从而起到一定的加速作用;
缓存作用:代理服务器保存从原始服务器所获取的资源,从而实现客户端快速的获取;
隐藏真实地址:代理服务器代替客户端去获取原始服务器资源,从而隐藏客户端真实信息。
 

 Squid 代理的类型:

传统代理:适用于Internet 正向代理,需在客户机指定代理服务器的地址和端口。

透明代理:客户机不需指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理。

反向代理:如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的 WEB 服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。

安装 Squid 服务

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

编译安装 Squid

yum -y install gcc gcc-c++ make
tar zxvf squid-3.5.28.tar.gz -C /opt/
cd /opt/squid-3.5.28

./configure --prefix=/usr/local/squid \				#指定安装目录路径
--sysconfdir=/etc \									#指定配置文件路径
--enable-arp-acl \									#MAC地址管控,防止客户端使用IP欺骗
--enable-linux-netfilter \							#使用内核过滤
--enable-linux-tproxy \								#支持透明模式
--enable-async-io=100 \								#异步IO,提升存储性能
--enable-err-language="Simplify_Chinese" \			#错误信息的显示语言
--enable-underscore \								#允许URL中有下划线
--disable-poll \									#关闭默认使用 poll 模式
--enable-epoll \									#开启epoll模式提升性能
--enable-gnuregex									#使用GNU正则表达式
----------------------------------------------------------------------------------------------------------

./configure --prefix=/usr/local/squid \
--sysconfdir=/etc \
--enable-arp-acl \
--enable-linux-netfilter \
--enable-linux-tproxy \
--enable-async-io=100 \
--enable-err-language="Simplify_Chinese" \
--enable-underscore \
--disable-poll \
--enable-epoll \
--enable-gnuregex

make && make install

ln -s /usr/local/squid/sbin/* /usr/local/sbin/

useradd -M -s /sbin/nologin squid

chown -R squid:squid /usr/local/squid/var/		#此目录用于存放缓存文件

修改 Squid 的配置文件

vim /etc/squid.conf
......
--56行--插入
http_access allow all				#放在 http_access deny all 之前,允许任意客户机使用代理服务,控制规则自上而下匹配
http_access deny all
http_port 3128						#用来指定代理服务监听的地址和端口(默认的端口号为 3128)
--61行--插入
cache_effective_user squid			#添加,指定程序用户,用来设置初始化、运行时缓存的账号,否则启动不成功
cache_effective_group squid			#添加,指定账号基本组

coredump_dir /usr/local/squid/var/cache/squid		#指定缓存文件目录

 Squid 的运行控制

#检查配置文件语法是否正确
squid -k parse

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

netstat -anpt | grep "squid"

 创建 Squid 服务脚本

vim /etc/init.d/squid
#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"

case "$1" in
   start)
     netstat -natp | grep squid &> /dev/null
     if [ $? -eq 0 ]
     then
       echo "squid is running"
     else
       echo "正在启动 squid..."
       $CMD
     fi
   ;;
   stop)
     $CMD -k kill &> /dev/null
     rm -rf $PID &> /dev/null
   ;;
   status)
     [ -f $PID ] &> /dev/null
        if [ $? -eq 0 ]
          then
            netstat -natp | grep squid
          else
            echo "squid is not running"
        fi
   ;;
   restart)
      $0 stop &> /dev/null
      echo "正在关闭 squid..."
      $0 start &> /dev/null
      echo "正在启动 squid..."
   ;;
   reload)
      $CMD -k reconfigure
   ;;
   check)
      $CMD -k parse
   ;;
   *)
      echo "用法:$0{start|stop|status|reload|check|restart}"
   ;;
esac




#2345是默认自启动级别,如是-代表任何级别都不自启动;90是启动优先级,25是停止优先级,优先级范围是0-100,数字越大,优先级越低。
chmod +x /etc/init.d/squid
chkconfig --add squid
chkconfig --level 35 squid on

 构建传统代理服务器

vim /etc/squid.conf
......
http_access allow all
http_access deny all
http_port 3128
cache_effective_user squid
cache_effective_group squid
--63行--插入
cache_mem 64 MB				#指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,一般设为物理内存的1/3
cache_swap_high 95			#cache目录使用量大于95%时,开始清理旧的cache
cache_swap_low 90			#cache目录清理到90%时停止

reply_body_max_size 100 MB			#允许用户下载的最大文件大小,以字节为单位,当下载超过指定大小的Web对象时,浏览器的报错页面中会出现“请求或访问太大”的提示默认设置0表示不进行限制
maximum_object_size 512000 KB		#设置squid磁盘缓存最大文件,以KB为单位,超过的文件不保存到硬盘,而是直接转发给用户
maximum_object_size_in_memory 512 KB	#设置squid内存缓存最大文件,超过的文件不保存到内存
minimum_object_size 0 KB			设置squid磁盘缓存最小文件


service squid restart
systemctl restart squid

 生产环境中还需要修改防火墙规则

iptables -F
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

客户机的代理配置

打开浏览器,工具-->Internet选项-->连接-->局域网设置-->开启代理服务器(地址:Squid服务器IP地址,端口:3128)

 构建透明代理服务器

Squid服务器:双网卡,内网ens33:192.168.47.60  外网ens36:12.0.0.30
Web 服务器:12.0.0.100
客户机:192.168.47.100

 Squid服务器配置

#开启路由转发,实现本机中不同网段的地址转发
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p


#修改防火墙规则
iptables -F
iptables -t nat -F
iptables -t nat -I PREROUTING -i ens33 -s 192.168.80.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128	#用于转发http协议
iptables -t nat -I PREROUTING -i ens33 -s 192.168.80.0/24 -p tcp --dport 443 -j REDIRECT --to 3128	#用于转发https协议
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT


vim /etc/squid.conf
......
http_access allow all
http_access deny all
--60行--修改添加提供内网服务的IP地址,和支持透明代理选项 transparent
http_port 192.168.47.60:3128 transparent

验证 

关闭客户机的浏览器之前设置的代理服务器的功能后访问 http://12.0.0.100/test.html

#查看 Squid 访问日志的新增记录
tail -f /usr/local/squid/var/logs/access.log
1631073624.552      0 192.168.80.200 TCP_MEM_HIT/200 449 GET http://12.0.0.12/ - HIER_NONE/- text/html

#查看 Web 访问日志的新增记录,显示的是由代理服务器的外网口代替客户机在访问
tail -f /var/log/httpd/access_log

  

ACL访问控制

在配置文件 squid.conf 中,ACL 访问控制通过以下两个步骤来实现:
(1)使用 acl 配置项定义需要控制的条件;
(2)通过 http_access 配置项对已定义的列表做“允许”或“拒绝”访问的控制。

1.定义访问控制列表
格式:
acl 列表名称 列表类型 列表内容 …

vim /etc/squid.conf
......
acl localhost src 192.168.80.10/32 					#源地址为 192.168.80.10
acl MYLAN src 192.168.80.0/24 192.168.1.0/24		#客户机网段
acl destinationhost dst 192.168.80.13/32			#目标地址为 192.168.80.13
acl MC20 maxconn 20									#最大并发连接 20
acl PORT port 21									#目标端口 21
acl DMBLOCK dstdomain .qq.com						#目标域,匹配域内所有站点
acl BURL url_regex -i ^rtsp:// ^emule://			#以 rtsp://、emule:// 开头的目标 URL地址,-i表示忽略大小写
acl PURL urlpath_regex -i \.mp3$ \.mp4$ \.rmvb$		#以 .mp3、.mp4、.rmvb 结尾的目标 URL 路径
acl WORKTIME time MTWHF 08:30-17:30					#时间为周一至周五 8:30~17:30,“MTWHF”为每个星期的英文首字母


#启动对象列表管理
mkdir /etc/squid
vim /etc/squid/dest.list
192.168.80.13
192.168.1.0/24

vim /etc/squid.conf
......
acl destinationhost dst "/etc/squid/dest.list"			#调用指定文件中的列表内容
......
http_access deny(或allow) destinationhost				#注意,如果是拒绝列表,需要放在http_access allow all前面


systemctl restart squid

浏览器访问Web服务器 http://192.168.80.13 ,显示被访问被拒绝。

Squid 日志分析 

#安装图像处理软件包
yum install -y pcre-devel gd gd-devel

mkdir /usr/local/sarg
tar zxvf sarg-2.3.7.tar.gz -C /opt/

cd /opt/sarg-2.3.7
./configure --prefix=/usr/local/sarg \
--sysconfdir=/etc/sarg \							#配置文件目录,默认是/usr/local/etc
--enable-extraprotection							#额外安全防护

----------------------------------------------------------------------------------------------------------
./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection
make && make install

vim /etc/sarg/sarg.conf
--7行--取消注释
access_log /usr/local/squid/var/logs/access.log		#指定访问日志文件
--25行--取消注释
title "Squid User Access Reports"					#网页标题
--120行--取消注释,修改
output_dir /var/www/html/sarg						#报告输出目录
--178行--取消注释
user_ip no											#使用用户名显示
--184行--取消注释,修改
topuser_sort_field connect reverse					#top排序中,指定连接次数采用降序排列,升序是normal
--190行--取消注释,修改
user_sort_field connect reverse						#对于用户访问记录,连接次数按降序排序
--206行--取消注释,修改
exclude_hosts /usr/local/sarg/noreport				#指定不计入排序的站点列表的文件
--257行--取消注释
overwrite_report no									#同名同日期的日志是否覆盖
--289行--取消注释,修改
mail_utility mailq.postfix							#发送邮件报告命令
--434行--取消注释,修改
charset UTF-8										#指定字符集UTF-8
--518行--取消注释
weekdays 0-6										#top排行的星期周期
--525行--取消注释
hours 0-23											#top排行的时间周期
--633行--取消注释
www_document_root /var/www/html						#指定网页根目录


#添加不计入站点文件,添加的域名将不被显示在排序中
touch /usr/local/sarg/noreport

ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
sarg --help

#验证
yum install httpd -y
systemctl start httpd

#运行
sarg				#启动一次记录


浏览器访问 http://192.168.80.10/sarg ,查看sarg报告网页。

#添加计划任务,执行每天生成报告
vim /usr/local/sarg/report.sh
#/bin/bash
#Get current date
TODAY=$(date +%d/%m/%Y)
#Get one week ago today
YESTERDAY=$(date -d "1 day ago" +%d/%m/%Y)
/usr/local/sarg/bin/sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/sarg -z -d $YESTERDAY-$TODAY &> /dev/null
find ./ -type d -a -name "$(env LANG=en_US.UTF-8 date -d "30 day ago" +%Y%b%d)-$(env LANG=en_US.UTF-8 date -d "29 day ago" +%Y%b%d)" | xargs rm -rf
exit 0


chmod +x /usr/local/sarg/report.sh

crontab -e
0 0 * * * /usr/local/sarg/report.sh

Squid 反向代理

如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的 Web 服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。

工作机制

●缓存网页对象,减少重复请求
●将互联网请求轮训或按权重分配到内网Web服务器
●代理用户请求,避免用户直接访问Web服务器,提高安全

修改squid代理服务器配置

vim /etc/squid.conf
......
--60行--修改,插入
http_port 192.168.80.10:80 accel vhost vport
cache_peer 192.168.80.11 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 192.168.80.12 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.kgc.com
#表示对www.kgc.com的请求,squid向192.168.80.11和192.168.80.12的80端口发出请求

----------------------------------------------------------------------------------------------------------
http_port 80 accel vhost vport #squid从一个缓存变成了一个Web服务器反向代理加速模式,这个时候squid在80端口监听请求,同时和web server的请求端口(vhost vport)绑定,这个时候请求到了squid,squid是不用转发请求的,而是直接要么从缓存中拿数据要么向绑定的端口直接请求数据。
accel :反向代理加速模式
vhost :支持域名或主机名来表示代理节点
vport :支持IP和端口来表示代理节点

parent :代表为父节点,上下关系,非平级关系
80 :代理内部web服务器的80端口
0 :没有使用icp(电信运营商),表示就一台squid服务器
no-query :不做查询操作,直接获取数据
originserver :指定是源服务器
round-robin :指定 squid 通过轮询方式将请求分发到其中一台父节点
max_conn :指定最大连接数
weight : 指定权重
name :设置别名

设置两个web服务端

web1 :192.168.47.10

web2 192.168.47.30

squid代理服务器:192.168.47.60

 

 

 修改squid代理服务器配置文件

 清空之前透明模式配置的 iptables 规则

iptables -F
iptables -t nat -F

systemctl stop httpd       #防止 httpd 服务使用的 80 端口号和 squid 反向代理配置的监听端口冲突
systemctl restart squid

 客户机的域名映射配置

修改 C:\Windows\System32\drivers\etc\hosts 文件
192.168.47.60 www.zzb.com

浏览器不开启代理访问 http://www.zzb.com

查看缓存命中情况 

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

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

相关文章

红黑树:变色旋转规则化抽象逻辑分析

文章目录 一.红黑树的定义红黑树平衡性论证 二.红黑树的节点插入插入新节点后最小违规子结构(抽象分析)最小违规子结构一号的规则化算法分析最小违规子结构二号的规则化算法分析 三.红黑树类代码托管四.红黑树与AVL树的对比 旷世奇才发明的数据结构 一.红黑树的定义 红黑树的节…

【C语言初阶(10)】函数练习题

文章目录 1. 判断素数2. 判断闰年3. 函数实现二分查找4. 记录函数调用次数 1. 判断素数 题目内容 写一个函数可以判断一个数是不是素数。 素数 素数也叫做质数,一个只能被 1 和它本身整除的数字称之为素数。 例如:7 这个数字只能被 1 和 它本身&#x…

赛效:怎么将PPT转为PDF

1:在电脑网页上打开云组件,点击“PPT转换”菜单里的“PPT转PDF”。 2:点击“选择文件”可以将本地PPT文件添加上去。 3:文件添加成功后,点击下方的“开始转换”按钮。 4:文件转换成功后,在预览页…

vue动态修改浏览器标题和logo

问题描述 需要将一个系统,更改一下标题、logo,然后部署成另一个系统,由于不想单独拉出一套代码(单独拉出来后维护成本增加),所以想要动态改变系统标题和图标 解决方案 将项目制造一个入口可以修改项目的…

20230703 -- scRNAseq from gastric cancer

文章标题:《Single-cell atlas of lineage states, tumor microenvironment and subtypespecific expression programs in gastric cancer》 DOI: 10.1158/2159-8290.CD-21-0683 数据集组织形式快照: step1 利用Seurat包整合数据 #! conda env R4libra…

Hombrew中AdoptOpenJDK已废弃更换Eclipse Temurin安装最新版JDK,并实现不同JDK版本之间切换

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…

Python基础 —— 运算符

每天提升一 。。。。。。 〇、概述 Python 中有很多运算符,大体分为 算数运算符、赋值远算符、比较运算符、逻辑运算符。通过这些运算符能够更好地完成一些列的数据运算。 一、算数运算符 1. 算数运算符 算数运算符 主要用于 数值类型(整型、浮点型…

TCP三次和四次握手:

内容来自思学堂: TCP三次握手:确保双方都在线上 TCP四次握手:处理客户端要断开连接的需求

JavaWeb学习路线(11)—— Maven延伸

一、分模块设计 (一)概念: 将项目按功能拆分出若干个子模块。 (二)作用: 方便项目管理维护、扩展,也方便模块间相互调用,资源共享。 (三)具体实现 1、抽取…

深度学习项目实战二: LetNet5网络结构搭建

深度学习项目实战二: LetNet5网络结构搭建 文章目录 深度学习项目实战二: LetNet5网络结构搭建@[TOC](文章目录)一、卷积基本运算公式二、LetNet5网络1. 网络结构![在这里插入图片描述](https://img-blog.csdnimg.cn/0008fe6e5886414eac09eed49556ad99.png)2. 导入相关包3. 代码…

Apikit 自学日记:流程用例

添加普通用例 进入自动化测试用例管理页面,点击 添加用例 按钮,在弹窗中输入用例名称等信息,然后点击确定即可。 发起用例测试 创建好测试用例之后,点击 执行测试 按钮即可运行测试,系统会自动按顺序执行测试流程里的…

汽车下半年行情启动?概念全线爆发

2023年上半年,车市整体的基调是打价格战和加速“内卷”,在资本市场,汽车产业链相关概念股的表现整体也是不温不火。然而,下半年刚开始,汽车产业链股集体高调反弹。 7月4日,A股市场涨幅居前的概念板块几乎全…

MapstructPlus的快速集成

https://www.mapstruct.plus/https://www.mapstruct.plus/ # 博主技术栈如下 springboot:2.4.5 lombok:1.8.20 mapstruct-plus:1.3.4 knife4j:4.0.0目录 一、添加依赖(谨防依赖冲突) 二、如果依赖下不下来,要在maven的setting文件中加入腾讯…

NSS [SWPUCTF 2021 新生赛]no_wakeup

NSS [SWPUCTF 2021 新生赛]no_wakeup 先看题目&#xff0c;反序列化&#xff0c;绕过weakup。 exp&#xff1a; <?php class HaHaHa{public $admin;public $passwd;public function __construct(){$this->admin "admin";$this->passwd "wllm";…

【Python爬虫开发实战②】使用urllib以及jsonpath爬取即将上映电影信息

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;python网络爬虫从基础到实战 欢迎订阅&#xff01;后面的内容会越来越有意思~ &#x1f4a1;往期推荐&#xff1a; ⭐️首先&#xff0c;我们前面讲了多篇基础内容&…

【JUC并发编程】集合类安全问题

一、并发下&#xff0c;ArrayList类是不安全的 代码演示package CollectionSafe;import java.util.ArrayList; import java.util.List; import java.util.UUID;/*** author swaggyhang* create 2023-07-02 17:26*/ public class Test01 {public static void main(String[] arg…

ubuntu下 C/C++程序读取设置环境变量

设置环境变量很简单比如&#xff1a; export QMCY_LOCAL_PORT8888 追加的话 export QMCY_LOCAL_PORT$QMCY_LOCAL_PORT:8000 可以通过echo回显 读取的话 main函数多加一个env参数 一个字符串数组 然后遍历这个数组 即可 使用的时候 如下&#xff1a; bool QMCY_APP::Init(s…

【若依框架学习】day1-启动项目

若依开源框架&#xff0c;前后端分离项目&#xff0c;地址&#xff1a;http://doc.ruoyi.vip/ruoyi-vue/ 先配置环境 JDK1.8&#xff0c; MySQL5.7 &#xff0c;Maven3.6&#xff0c;redis、nginx(可以不配)、 node 具体见&#xff1a;https://ygstriver.blog.csdn.net/articl…

day28-JSP

0目录 JSP 1.为什么使用JSP 2.B/S和C/S的区别 3.URL 4.Tomcat 5.JSP实战综合项目 1.为什么使用JSP 1.1 JSP定义&#xff1a; &#xff08;1&#xff09;是一种动态网页技术 &#xff08;2&#xff09;Java Server Pages&#xff08;Java服务器端页面技术&#xff09; 1.2 …

docker进阶

Docker网络 [rootecs-56325218 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 2c63c1a8145c bridge bridge local 70d3439bbb55 host host local ffc74cf89143 none null local[rootecs-56325218 ~]# docker network cre…