4.Squid代理服务器应用

news2024/11/25 8:20:35

文章目录

  • Squid代理服务器应用
    • 代理服务器
      • 代理的工作机制
      • 代理服务器的概念
      • 代理服务器的作用
    • Squid代理服务器
      • 作用
      • Squid代理的类型
    • 部署Squid
      • 安装Squid
      • systemctl创建squid系统运行
      • 构建传统代理服务器
      • 构建透明代理服务器
      • Squid部署反向代理服务器
    • ACL访问控制
    • Sarg图形化日志

Squid代理服务器应用

代理服务器

代理的工作机制

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

代理服务器的概念

  • 代理服务器是一个位于客户端和原始(资源)服务器之间的服务器,为了从原始服务器获得内容,客户端向代理服务器发送一个请求并指定目标原始服务器,然后代理服务器向原始服务器转发请求并将获得的内容返回给客户端。
  • 缓存代理对于Web至关重要,尤其是对于大型的高负载的Web站点。缓存可作为性能优化的一个重要的手段,可以极大地减轻后端服务器的负载。通常对于静态资源,即较少经常更新的资源(图片、css、js等)进行缓存,从而在每次刷新浏览器的时候,不需要重新请求,而是直接从缓存读取,这样就可以减轻服务器的压力。

代理服务器的作用

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

Squid代理服务器

作用

Squid主要提供缓存加速、应用层过滤控制的功能
在这里插入图片描述

Squid代理的类型

  1. 传统代理:适用于Internet,需在客户机指定代理服务器的地址和端口。
  2. 透明代理:客户机不需指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理。
  3. 反向代理:如果Squid反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端:否则反向代理服务器将向后台的WEB服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用

部署Squid

安装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/
ln -s /usr/local/squid/bin/* /usr/local/bin/

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"

systemctl创建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
#查看 Squid 访问日志的新增记录中的缓存命中情况
tail -f /usr/local/squid/var/logs/access.log
        TCP_MEM_HIT/200



##查看 Web 访问日志的新增记录
tail -f /var/log/httpd/access_log
在浏览器输入Web服务器IP地址访问,查看Web服务器访问日志,显示的是由代理服务器替客户机在访问。
<html>
    <head>
        <title>this is a web page</title>
    </head>
    <body>
        <h2>
            zhansan like dancing
        </h2>
    </body>
</html>

构建透明代理服务器

squid作为网关,需要双网卡

###Squid服务器配置

vim /etc/squid.conf
......
http_access allow all
http_access deny all

--60行--修改添加提供内网服务的IP地址,和支持透明代理选项 transparent
http_port 192.168.242.100:3128 transparent


systemctl restart 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.242.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128	
#用于转发http协议


iptables -t nat -I PREROUTING -i ens33 -s 192.168.242.0/24 -p tcp --dport 443 -j REDIRECT --to 3128	
#用于转发https协议


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

Squid部署反向代理服务器

  • 如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;
  • 否则反向代理服务器将向后台的 Web 服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。
  • 工作机制:
    • 缓存网页对象,减少重复请求
    • 将互联网请求轮训或按权重分配到内网Web服务器
    • 代理用户请求,避免用户直接访问Web服务器,提高安全
##squid配置文件配置

vim /etc/squid.conf
......


--60行--修改,插入
http_port 192.168.242.66:80 accel vhost vport

cache_peer 192.168.242.67 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1

cache_peer 192.168.242.68 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2

cache_peer_domain web1 web2 www.ggl.com

#表示对www.ggl.com的请求,squid向192.168.242.67和192.168.242.68的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 :设置别名
##清空防火墙规则
##清空之前的透明模式的iptables规则

iptables -F
iptables -t nat -F

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

systemctl restart squid
##后端节点服务器设置
yum install -y httpd
systemctl start httpd

##节点1:
echo "this is test01" >> /var/www/html/index.html
##节点2:
echo "this is test02" >> /var/www/html/index.html
##客户机的域名映射配置

vim /etc/hosts

192.168.242.66 www.ggl.com
##通过域名或则IP地址访问
##或者在命令行访问

curl 192.168.242.66/index.html
##查看缓存命中情况 
tailf /usr/local/squid/var/logs/access.log

1688451629.033      0 192.168.242.69 TCP_MEM_HIT/200 375 GET http://192.168.242.66/index.html - HIER_NONE/- text/html


##表示访问的是squid服务器中的缓存

ACL访问控制

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

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

vim /etc/squid.conf
......

acl localhost src 192.168.242.10/32 					
#源地址为 192.168.242.66

acl MYLAN src 192.168.242.0/24 192.168.1.0/24	
#客户机网段

acl destinationhost dst 192.168.242.67/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.242.66
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

Sarg图形化日志

##安装图像处理软件包
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

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

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

相关文章

11个每个Web开发人员都应该拥有的VS Code扩展

微信搜索 【大迁世界】, 我会第一时间和你分享前端行业趋势&#xff0c;学习途径等等。 本文 GitHub https://github.com/qq449245884/xiaozhi 已收录&#xff0c;有一线大厂面试完整考点、资料以及我的系列文章。 快来免费体验ChatGpt plus版本的&#xff0c;我们出的钱 体验地…

机器学习算法基础学习 # 集成学习之随机森林

随机森林(Random Forests) 是集成学习算法的一种。集成学习是通过组合多个学习器来完成学习任务。随机森林是结合多颗决策树来对样本进行训练和预测。随机森林通过随机扰动而令所有的树去相关。 随机森林可以使用巨量的预测器&#xff0c;甚至预测器的数量比观察样本的数量还多…

Matlab绘图系列教程-Matlab 34 种绘图函数示例(上)

Matlab绘图系列教程&#xff1a;揭秘高质量科学图表的绘制与优化 文章目录 Matlab绘图系列教程&#xff1a;揭秘高质量科学图表的绘制与优化第一部分&#xff1a;入门指南1.1 简介关于本教程的目的与范围Matlab绘图在科学研究中的重要性 1.2 准备工作安装Matlab及其工具箱 1.3 …

干货 | 石化产品机器学习价格模型开发和SEI石化产品价格分析体系构建

以下内容整理自大数据能力提升项目必修课《大数据系统基础》同学们的期末答辩汇报。 我们的报告将分为六个部分&#xff0c;第一部分是研究背景与内容。受疫情影响以来&#xff0c;石化行业市场日趋饱和&#xff0c;竞争激烈&#xff0c;同时利润也受到压缩&#xff0c;大部分石…

谈个人信息保护

一、互联网生存指南&#xff1a;通过哪些方法来加强个人信息保护&#xff1f; 1.密码管理&#xff1a;选择安全可靠的密码&#xff0c;并避免使用容易猜测的密码。不要在不同的网站和应用程序使用相同的密码&#xff0c;以防止未经授权的访问。 2.双重身份验证&#xff1a;使…

AIMAX集群配置sdfstudio容器记录

AIMAX集群配置sdfstudio容器记录 一、登录二、测试三、通过Filezilla传输数据四、通过第三方私有镜像直接创建环境方式1 从dockerhub中下载方式2 上传github中的dockerfile方式3 上传dockerhub中的第三方镜像1. 在ubuntu在安装docker2. 下载第三方镜像3. 修改hosts4. 下载证书5…

【重拾计划】[NOIP1998 提高组] 车站

今日题目 [NOIP1998 提高组] 车站 题目描述 火车从始发站&#xff08;称为第 1 1 1 站&#xff09;开出&#xff0c;在始发站上车的人数为 a a a&#xff0c;然后到达第 2 2 2 站&#xff0c;在第 2 2 2 站有人上、下车&#xff0c;但上、下车的人数相同&#xff0c;因此…

python字典:揭秘无序元素的奥秘之旅

前言 在编程中&#xff0c;数据的组织和管理是一个关键的方面。对于处理和操作数据&#xff0c;Python 提供了许多强大的数据结构&#xff0c;其中最常用和灵活的之一就是字典(Dictionary)。 无论您是初学者还是有经验的开发者&#xff0c;掌握字典的基本知识是非常重要的。本…

解决PyInstaller打包selenium脚本时弹出driver终端窗口

解决PyInstaller打包selenium脚本时弹出driver终端窗口 找到service.py C:\Users\XXX\AppData\Roaming\Python\Python39\site-packages\selenium\webdriver\common\service.py添加creationflags 在第77行添加: creationflags134217728使用PyInstaller打包 pyinstaller -F -w -…

8.2.3 【Linux】xz, xzcat/xzmore/xzless/xzgrep

8.3 打包指令&#xff1a; tar 8.3.1 tar 其实最简单的使用 tar 就只要记忆下面的方式即可&#xff1a; 压 缩&#xff1a;tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称 查 询&#xff1a;tar -jtv -f filename.tar.bz2 解压缩&#xff1a;tar -jxv -f filename…

Lesson2-1:OpenCV基本操作

图像的基础操作 学习目标 掌握图像的读取和保存方法能够使用OpenCV在图像上绘制几何图形能够访问图像的像素能够获取图像的属性&#xff0c;并进行通道的分离和合并能够实现颜色空间的变换 1 图像的IO操作 这里我们会给大家介绍如何读取图像&#xff0c;如何显示图像和如何…

uniapp-设置全屏

需求&#xff1a;就是想要小程序不受限制&#xff0c;可以把图片或者文字全屏的展示&#xff0c;如下图 vue代码如下&#xff1a; <template><view class"content"><image class"image-bg" src"/static/logo.png" /><imag…

Python GUI编程利器:Tkinker中的微调节器和滑块(6)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日目标 实现下面效果&#xff1a; 微调节器(Spinbox类) 微调节器可以通过箭头调整所需的数值。 创建微调节器对象语法格式…

ChatGPT助力校招----面试问题分享(十)

1 ChatGPT每日一题&#xff1a;阻抗匹配的方法有哪些 问题&#xff1a;阻抗匹配是什么 ChatGPT&#xff1a;阻抗匹配是一种电路设计技术&#xff0c;用于确保电路中各个组件之间的电阻、电感和电容等参数相互匹配&#xff0c;以最大程度地传输信号或功率 当阻抗不匹配时&…

7/2~7/4学习成果总结

这几天初步的了解了一下Java&#xff0c;然后写了几道题&#xff1a; 下面总结一下学Java的时候遇到的一易错的小问题以及总结&#xff1a; 1. java里面只能在一个源文件里有一个public类&#xff0c;但是入口main那个可以理解为public static是一个整体也就是不属于public&a…

『C/C++养成计划』C++中的静态库和动态库|GCC|Makefile|CMake学习

C中的静态库和动态库|GCC|Makefile|CMake学习&#xff01; 文章目录 一. 什么是库二. 静态库1.1. 静态库生成1.2. 静态库制作举例1.2.1 准备测试程序1.2.2 生成静态库 1.3. 静态库的使用 三. 动态库3.1. 为什么需要动态库3.2. 生成动态链接库3.3. 动态库制作举例3.4. 动态库的…

【JUC并发编程】Callable接口创建线程

一、介绍 与继承Thread类和实现Runnable接口两种创建线程方式的区别 ① Callable接口可以有返回值 ② Callable接口可以抛出异常 ③ 执行方法不同&#xff0c;call()方法和run()方法 二、代码演示 继承Thread类和实现Runnable接口的方式创建线程 package callable;import java…

celery Periodic Tasks 周期任务

celery Periodic Tasks 周期任务 https://docs.celeryq.dev/en/latest/userguide/periodic-tasks.html /home/mike/work/celery-5.3.1/examples/periodic-tasks myapp.py """myapp.pyUsage::# The worker service reacts to messages by executing tasks.(w…

pip安装指定包,找不到如何解决?

背景&#xff1a;现如今&#xff0c;在跑神经网络的时候&#xff0c;需要配置一些开源项目从而需要指定一些特定环境是必不可少的一个步骤&#xff0c;但是很多时候使用pip安装包的时候&#xff0c;总是找不到需要的版本。比如&#xff0c;今天需要配置open3d 0.15.1版本的环境…

群晖 nas 升级内存 手记(DS423+)

题外话&#xff1a; 我原来用的是群晖DS218&#xff0c;也用了5年了&#xff0c;今年5月份突然不能开机了&#xff0c;感觉故障不大&#xff0c;群晖官方又不好联系&#xff0c;非常麻烦。只好邮递到北京一家所谓的维修群晖的维修点&#xff0c;他们说维修费最多不超过200元&am…