Squid代理服务器应用

目录

一、概述

1.代理的工作机制

2.代理服务器的概念

3.作用

4.Squid代理类型

二、安装 Squid 服务

1.编译安装 Squid

2.修改 Squid 的配置文件

3. Squid 的运行控制

4.Squid 服务自动化管理

4.1编写 squid 服务脚本

4.2加入系统服务

三、构建传统代理服务器

1.修改配置文件

2.修改防火墙规则

3.配置web服务器

4.验证

四、构建透明代理服务器

1.Squid服务器配置

1.1修改squid配置文件

1.2开启路由转发,实现本机中不同网段的地址转发

1.3修改防火墙规则

2.Web服务器配置

五、ACL访问控制

1.定义访问控制列表

2.启动对象列表管理

3.验证

六、Squid 日志分析

1.安装图像处理软件包

2.修改配置文件

3.添加不计入站点文件,添加的域名将不被显示在排序中

4.验证

 5.添加计划任务,执行每天生成报告

七、Squid 反向代理

1.概述

2. 配置squid反向代理

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

4.后端节点服务器设置

5.验证


一、概述

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

1.代理的工作机制

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

2.代理服务器的概念

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

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

3.作用

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

4.Squid代理类型

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

二、安装 Squid 服务

1.编译安装 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正则表达式make && make installln -s /usr/local/squid/sbin/* /usr/local/sbin/useradd -M -s /sbin/nologin squidchown -R squid:squid /usr/local/squid/var/		#此目录用于存放缓存文件

2.修改 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		#指定缓存文件目录

3. Squid 的运行控制

#检查配置文件语法是否正确
squid -k parse#启动 Squid,第一次启动 Squid 服务时,会自动初始化缓存目录
squid -z 					#-z 选项用来初始化缓存目录
squid						#启动 squid 服务netstat -anpt | grep "squid"

4.Squid 服务自动化管理

4.1编写 squid 服务脚本

vim /etc/init.d/squid
#!/bin/bash
#chkconfig: 2345 90 25
#2345是默认自启动级别,如是-代表任何级别都不自启动;90是启动优先级,25是停止优先级,优先级范围是0-100,数字越大,优先级越低。
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"case "$1" instart)netstat -natp | grep squid &> /dev/nullif [ $? -eq 0 ]thenecho "squid is running"elseecho "正在启动 squid..."$CMDfi;;stop)$CMD -k kill &> /dev/nullrm -rf $PID &> /dev/null;;status)[ -f $PID ] &> /dev/nullif [ $? -eq 0 ]thennetstat -natp | grep squidelseecho "squid is not running"fi;;restart)$0 stop &> /dev/nullecho "正在关闭 squid..."$0 start &> /dev/nullecho "正在启动 squid...";;reload)$CMD -k reconfigure;;check)$CMD -k parse;;*)echo "用法:$0{start|stop|status|reload|check|restart}";;
esac

4.2加入系统服务

chmod +x /etc/init.d/squid
chkconfig --add squid
chkconfig --level 35 squid on

三、构建传统代理服务器

代理服务器:192.168.88.90

客户机:192.168.88.80

web服务器:192.168.88.70

1.修改配置文件

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

2.修改防火墙规则

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

3.配置web服务器

vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1yum install nginx -y cd /usr/share/nginx/html
echo '<h1>hello world</h1>' > test.htmlsystemctl start nginx

4.验证

#客户机的代理配置
在虚拟机打开火狐浏览器,打开菜单-->首选项-->网络设置-->-->开启代理服务器
(地址:Squid服务器IP地址,端口:3128)#查看 Squid 访问日志的新增记录中的缓存命中情况
tail -f /usr/local/squid/var/logs/access.log
#squid 没有请求资源的cache拷贝
TCP_MISS  
#squid发现请求资源貌似为陈旧的拷贝,并发送确认请求到原始服务器。原始服务器发送304(未改动)响应,指示squid的拷贝仍是最新的
TCP_REFERSH_HIT (squid3.0改为TCP_REFRESH_UNMODIFIED)#查看 Web 访问日志的新增记录
tail -f /var/log/nginx/access_log

四、构建透明代理服务器

Squid服务器:双网卡,内网ens33:192.168.88.90  外网ens35:12.0.0.1
Web 服务器:ip:12.0.0.12、网关:12.0.0.1
客户机:ip:192.168.88.80、网关:192.168.88.90

1.Squid服务器配置

1.1修改squid配置文件

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

1.2开启路由转发,实现本机中不同网段的地址转发

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

1.3修改防火墙规则

iptables -F
iptables -t nat -F
#用于转发http协议
iptables -t nat -I PREROUTING -i ens33 -s 192.168.88.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128	
#用于转发https协议
iptables -t nat -I PREROUTING -i ens33 -s 192.168.88.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

2.Web服务器配置

关闭客户机的浏览器之前设置的代理服务器的功能后访问 http://12.0.0.12#查看 Squid 访问日志的新增记录
tail -f /usr/local/squid/var/logs/access.log#查看 Web 访问日志的新增记录,显示的是由代理服务器的外网口代替客户机在访问
tail -f /var/log/nginx/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”为每个星期的英文首字母

2.启动对象列表管理

mkdir /etc/squid
vim /etc/squid/dest.list
12.0.0.12vim /etc/squid.confacl destinationhost dst "/etc/squid/dest.list"			#调用指定文件中的列表内容
#acl destinationhost dst 12.0.0.12 
#acl destinationhost src 192.168.88.80
#dst:指定目的地址
#src:指定源地址http_access deny(或allow) destinationhost				#注意,如果是拒绝列表,需要放在http_access allow all前面systemctl restart squid

3.验证

浏览器访问Web服务器 http://12.0.0.12/test.html,显示被访问被拒绝。

六、Squid 日志分析

sarg(Squid Analysis Report Generator),是一款 squid 日志分析工具,采用 HTML 格式,详细列出每一位用户访问 Internet 的站点信息、时间占用信息、排名、连接次数、访问量等。

1.安装图像处理软件包

yum install -y pcre-devel gd gd-develmkdir /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							#额外安全防护

2.修改配置文件

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						#指定网页根目录

3.添加不计入站点文件,添加的域名将不被显示在排序中

touch /usr/local/sarg/noreportln -s /usr/local/sarg/bin/sarg /usr/local/bin/

4.验证

yum install httpd -y
systemctl start httpd#运行
sarg				#启动一次记录浏览器访问 http://192.168.80.10/sarg ,查看sarg报告网页。

 5.添加计划任务,执行每天生成报告

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 0chmod +x /usr/local/sarg/report.shcrontab -e
0 0 * * * /usr/local/sarg/report.sh

七、Squid 反向代理

1.概述

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

工作机制:

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

2. 配置squid反向代理

vim /etc/squid.conf
......
--60行--修改,插入
http_port 192.168.88.90:80 accel vhost vport
cache_peer 192.168.88.70 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 192.168.88.80 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.88.70和192.168.88.80的80端口发出请求#squid从一个缓存变成了一个Web服务器反向代理加速模式,这个时候squid在80端口监听请求,
#同时和web server的请求端口(vhost vport)绑定,这个时候请求到了squid,squid是不用转发请求的,
#而是直接要么从缓存中拿数据要么向绑定的端口直接请求数据。
http_port 80 accel vhost vport 
accel :反向代理加速模式
vhost :支持域名或主机名来表示代理节点
vport :支持IP和端口来表示代理节点parent :代表为父节点,上下关系,非平级关系
80 :代理内部web服务器的80端口
0 :没有使用icp(电信运营商),表示就一台squid服务器
no-query :不做查询操作,直接获取数据
originserver :指定是源服务器
round-robin :指定 squid 通过轮询方式将请求分发到其中一台父节点
max_conn :指定最大连接数
weight : 指定权重
name :设置别名

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

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

4.后端节点服务器设置

yum install -y httpd
systemctl start httpd#节点1:
echo "this is web01" >> /var/www/html/test.html
#节点2:
echo "this is web02" >> /var/www/html/test.html

5.验证

vim /etc/hosts
添加
192.168.88.90 www.kgc.com浏览器不开启代理访问 http://www.kgc.com/test.html查看缓存命中情况 
tailf /usr/local/squid/var/logs/access.log

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

迈瑞BC系列出图汇总

迈瑞的几个仪器出图需要画图&#xff0c;搞的很费劲&#xff0c;没办法&#xff0c;厂商自己不改&#xff0c;明明有图发Base64串的&#xff0c;就非两个图要自己画&#xff0c;画的方法又描述不清。每个LIS厂商都要浪费很多时间&#xff0c;没什么必要浪费在这种没意义的事情上…

对于大连企业而言如何提升网站的曝光率

对于大连企业而言&#xff0c;提升网站的曝光率是非常重要的&#xff0c;可以通过以下几种方式来实现&#xff1a; 1. 优化网站结构和内容&#xff1a;确保网站的结构清晰&#xff0c;布局合理&#xff0c;并且内容丰富、有吸引力。网站的页面加载速度也要快&#xff0c;以提升…

windows 如何ping ip 加端口号

先在系统中找到 勾选上 和平时的pingip命令不一样了 现在是telnet ip 端口号 先看一组无法ping通端口号的案例 若telnet 127.0.0.1 6379 跳转至一个空白界面 代表ping此ip的端口号成功

JMeter安装RabbitMQ测试插件

目录 前言&#xff1a; 具体实现步骤&#xff1a; 1、ant环境搭建 2、AMQP源码下载 3、拷贝JMeter_core.jar包到JMeter-Rabbit-AMQP插件根目录下 4、修改AMQP插件的配置文件 5、打包 6、RabbitMQ客户端插件下载 7、完成以上&#xff0c;重启JMeter创建线程组就可以看到…

Python 数据类型转换

文章目录 每日一句正能量前言隐式类型转换实例实例 显式类型转换实例实例实例实例 每日一句正能量 在人生的道路上&#xff0c;即使一切都失去了&#xff0c;只要一息尚存&#xff0c;你就没有丝毫理由绝望。因为失去的一切&#xff0c;又可能在新的层次上复得。 前言 有时候&…

Unity与Android交互(4)——接入SDK

【前言】 unity接入Android SDK有两种方式&#xff0c;一种是把Unity的工程导出google project的形式进行接入&#xff0c;另一种是通过把Android的工程做成Plugins的形式进行接入。我们接入SDK基本都是将SDK作为插件的形式接入的。 对我们接入SDK的人来说&#xff0c;SDK也是…

谷歌浏览器Crx插件库-https://crxdl.com/

地址&#xff1a;https://crxdl.com/ postman插件&#xff1a;talend json插件库&#xff1a;csdn插件 抓取视频&#xff1a;猫抓

科技富豪抑郁了

原美团二当家王慧文据说抑郁了 什么能解决抑郁问题&#xff1f; 趣讲大白话&#xff1a;科技富豪也抑郁 【趣讲信息科技216期】 **************************** 王富豪创立光年之外AI公司2个月就休息了 知识解决不了抑郁问题 抑郁是现代社会一个常见的症状 是压力所带来的综合症…

MySql入门操作

一.前节回顾 1.web项目环境配置 2.通用增删改&#xff0c;通用查询方法 3.前台&#xff0c;后台代码显示效果 所有你都理解了吗&#xff1f; 二.Mysql数据库介绍 1.什么是MySQL&#xff1f; MySQL是一种开源的关系型数据库管理系统。它是目前最流行和广泛使用的数据库之一&…

如何禁用usb接口 禁用usb端口的九种方法

USB&#xff08;通用串行总线&#xff09;接口是一种常见的连接设备和计算机的方式。然而&#xff0c;有时候我们可能需要禁用USB接口&#xff0c;以保护电脑上重要数据的安全性或限制用户的访问权限。本文将介绍几种禁用USB接口的方法&#xff0c;包括硬件方法、软件方法、物理…

什么是内存溢出,什么是内存泄漏?

文章目录 一、什么是内存溢出&#xff1f;二、什么是内存泄漏&#xff1f;三、如何避免&#xff1f; 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、什么是内存溢出&#xff1f; 假设我们 JVM 中可用的内存空间只剩下 3M&#xff0c;但是我们要创…

测试员眼中的____是____

- 1 - 测试员眼中的开发是淘气的孩子 只有靠哄、豁、骗 才能让其完成“作业” - 2 - 测试员眼中的产品经理是女票 不管大小事&#xff0c;只要意见有出入 都得与其商量&#xff0c;才能最终拍板 - 3 - 测试员眼中的UI是艺术家 每天都操着画板&#xff08;苹果显示器&#xff…