ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

squid 缓存服务器

2021-09-14 22:03:17  阅读:353  来源: 互联网

标签:web 缓存 squid sarg 192.168 acl 代理服务器 服务器


Squid 代理服务器

目录

一 缓存代理概述

1.1 web 代理的工作机制

  • 缓存网页对象,减少重复请求
  • 代替客户机向网站请求数据,从而可以隐藏用户的真实ip地址。
  • 将获得的网页数据(静态web元素)保存到缓存中并发送个客户机,以便下次请求

img



1.2 代理服务器的概念

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


1.3 代理服务器的作用

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

1.4 squid 代理的类型

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

img


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

img


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

img



二: 安装squid

2.1 将软件包传到 /opt/目录下

#上传软件包 squid-3.5.28.tar.gz  到 /opt 目录中
[root@host103 opt]# ls squid-3.5.28.tar.gz
squid-3.5.28.tar.gz


#关闭防火墙和selinux
systemctl stop firewalld  
systemctl disable firewalld
setenforce 0

2.2 编译安装squid

#下载必要的编译安装工具,解压软件
yum  -y install gcc gcc-c++ make
tar zxf squid-3.5.28.tar.gz  -C /opt/
cd /opt/squid-3.5.28/



./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 

# -j 4 ,4核编译更快。如果没有这么多核型,可以修改 -j 选项,或者省略使用单核
make -j 4 && make install 

#将安装目录的sbin目录下的文件做软连接到 /usr/local/sbin目录下
ln  -s /usr/local/squid/sbin/* /usr/local/sbin/

#创建程序启动用户squid 
useradd -M -s /sbin/nologin  squid 

#递归修改,将/usr/local/squid/var目录及目录下所有文件属主和属组谁修改为squid
#让squid拥有写入的权限
chown -R squid:squid /usr/local/squid/var/

image-20210908204602136

image-20210908205827989

image-20210908210300578



2.3 修改squid 的配置文件

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

 56//  http_access allow all  #允许任意客户机使用代理服务(控制规则是自上而下)
 57//  #http_access deny all  #注释
 
 60//   http_port 3128  #代理服务器监听端口(默认3128)

 61// cache_effective_user squid     #指定程序用户
 62// cache_effective_group squid    #指定账号基本组
 
 67// coredump_dir /usr/local/squid/var/cache/squid  #指定缓存文件目录

image-20210908211804199

image-20210908212243338



2.4 squid 的运行控制

2.4.1 检查配置文件语法是否正确

squid -k parse

image-20210908212933504


2.4.2 启动squid

启动squid 时,第一次启动squid服务,会自动初始化缓存目录

#初始化缓存目录
squid -z

#启动服务
squid
#查看 3128 端口是否启用
netstat -natp | grep "squid"

image-20210908213249672

image-20210908213347554



2.5 创建 squid 服务脚本

#在 /etc/init.d/目录下配置 squid 服务脚本
cd /etc/init.d/

vim squid
#服务脚本如下
#!/bin/bash
#chkconfig: 2345 90 25 #设置2345级别自启动。
#90代表启动优先级,25代表停止优先级。范围是0-100,数字越大,优先级越低
PID="/usr/local/squid/var/run/squid.pid"   #指定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


#为脚本文件添加可执行权限
chmod +x /etc/init.d/squid  
#将服务添加到系统管理中
chkconfig  --add squid
#设置35级别启动(已经在脚本文件中设置,可以省略)
chkconfig  --level 35 squid on
#查看启动级别
chkconfig  --list squid

image-20210908214409204


2.6 实验检测服务脚本

#使用service 命令管理服务
[root@host103 init.d]# service squid stop       #停止squid服务
[root@host103 init.d]# service  squid status     #查看服务状态
squid is not running
[root@host103 init.d]# netstat -natp | grep "squid"  #3128端口未启用
[root@host103 init.d]# 

#使用systemctl 命令管理服务
[root@host103 init.d]# systemctl start squid       #使用systemctl 命令启动服务
[root@host103 init.d]# systemctl status  squid     #查看squid 服务状态
 
[root@host103 init.d]# netstat -natp | grep "squid"   #查看到3128端口启用
tcp6       0      0 :::3128                 :::*                    LISTEN      60090/(squid-1) 

image-20210908215057751

image-20210908215218316



三: 构建传统代理服务器

代理服务器IP: 192.168.23.103

web 服务器ip: 192.168.23.104

客户端ip: 192.168.23.13

3.1 修改配置文件/etc/squid.conf

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

64// cache_mem 1024  MB #指定缓存空间内存大小,最好是4的倍数,为物理内存的1/4
65 
66 
67// reply_body_max_size 100 MB  #允许用户下载的最大文件大小,单位是字节
68 
69 #允许保存到缓存空间的最大文件大小,以kb为单位。超过限制则直接发给用户
70// maximum_object_size 40960 KB  



#重启squid服务
systemctl  restart squid

image-20210908220256654



3.2 修改iptables 防火墙规则

#清空规则
iptables -F
#在INPUT 链添加规则,允许tcp 目标端口是 3128 的数据通过
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
#查看规则
iptables -nL

image-20210908221554940



3.3 在web服务器,启动web服务

#下载httpd
yum -y install httpd
#启动httpd服务
systemctl start httpd
#查看80端口
netstat -natp | grep :80

#上传图片到 /var/www/html 目录下
[root@host104 html]# ls
girl.jpg

image-20210908221946515



3.4  客户机启动代理,然后服务器动态跟踪squid 和 web 访问日志 

3.4.1 客户端浏览器添加代理设置,然后访问web网站

火狐浏览器设置代理:

打开菜单--->首选项---->高级--->网络---连接设置--->手动配置代理---->输入代理服务器ip和端口----->确定

访问 http://192.168.23.103/girl.jpg


image-20210908224748567

image-20210908224508956

image-20210908224659357

image-20210908230117138



3.4.2 动态跟踪squid和web的访问日志

tail -f /usr/local/squid/var/logs/access.log
tail -f /var/log/httpd/access_log

image-20210908230515912

image-20210908230812858



四 : 构建透明代理服务器

代理服务器双网卡,内网:ens33:192.168.23.103 , 外网:ens36:12.0.0.1

web 服务器:12.0.0.12

客户机:192.168.23.13

4.1  squid 代理服务器设置

4.1.1 配置网卡

 cd   /etc/sysconfig/network-scripts/
 vim  ifcfg-ens33
......... 
IPADDR=192.168.23.103
NETMASK=255.255.255.0 
#注释网关和dns 设置
#GATEWAY=192.168.23.2
#DNS1=192.168.23.2    


cp ifcfg-ens33  ifcfg-ens36
vim  ifcfg-ens36
.....
NAME=ens36   #修改网卡名

#UUID=51234825-6c2e-47a5-a8e8-956782b900d8   #删除或者注释UUID
DEVICE=ens36          #需改设备名
ONBOOT=yes
IPADDR=12.0.0.1
NETMASK=255.255.255.0
#注释网关和DNS
#GATEWAY=192.168.23.2
#DNS1=192.168.23.2


systemctl restart network
ifconfig

image-20210908235007802



4.1.2 修改配置文件

#其他配置保持不变,将60 行的监听端口设置修改
vim /etc/squid.conf
 。。。。。。
60// http_port 192.168.23.103:3128 transparent


#重启服务
systemctl restart squid

image-20210908233838729



4.1.3 开启路由转发和防火墙端口转发

#开启路由转发
[root@host103 ~]# echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
[root@host103 ~]# sysctl -p
net.ipv4.ip_forward = 1


#修改防火墙规则
iptables -t nat -I PREROUTING  -i ens33 -s 192.168.23.0/24   \
-p tcp --dport 80 -j REDIRECT  --to 3128

iptables -t nat -I PREROUTING  -i ens33 -s 192.168.23.0/24 \
-p tcp --dport 443 -j REDIRECT  --to 3128

image-20210908235644130



4.2 web 服务器配置

#web 服务器修改网卡ip 为 12.0.0.12
vim /etc/sysconfig/network-scripts/ifcfg-ens33
......
IPADDR=12.0.0.12
NETMASK=255.255.255.0
#设置网关指向12.0.0.1,因为暂时用不到dns,将其注释
GATEWAY=12.0.0.1
#DNS1=192.168.23.2


#重启网卡
systemctl restart network

ifconfig ens33

image-20210909000317809



4.3 客户机配置

客户机配置网关指向 192.168.23.103

image-20210909000739135



4.4 客户端访问测试,代理服务器和web服务器动态追踪各自的访问日志

客户端浏览器清除缓存

清除浏览器之前设置的代理服务器功能后,访问http://12.0.0.12/girl.jpg

#清空代理服务器访问日志,动态追踪
> /usr/local/squid/var/logs/access.log 
tail -f /usr/local/squid/var/logs/access.log

#清空web访问日志,动态追踪
 > /var/log/httpd/access_log 
 tail -f /var/log/httpd/access_log 


#可以看到,客户端不用再浏览器设置代理服务器,可以直接使用代理服务器的代理上网

image-20210909001846405

image-20210909001940808



五 ACL 访问控制

5.1 ACL 访问控制方式与常用的ACL列表类型

5.1.1 ACL 访问控制方式

  1. 根据源地址,目标URL,文件类型等定义列表

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


  2. 针对已定义的acl 列表进行限制

    http_access allow或者deny 列表名称.....


5.1.2 常用的acl列表类型

acl 列表类型 释义
src 源地址
dst 目标地址
port 目标端口
dstdomain 目标域
time 访问时间
url_regex 目标URL地址
urlpath_regex 整个目标url路径


5.2 acl规则优先级

一个用户访问代理服务器时,squid 会顺序匹配squid 中定义的所有规则列表。一旦匹配成功,立即停止匹配。

所有规则都不匹配时,squid会使用与最后一条相反的规则



5.3 配置acl访问控制列表

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

  1. 使用acl配置项定义需要控制的条件
  2. 通过http_access 配置项对已定义的列表做“允许",或"拒绝" 访问的控制

5.3.1 定义acl访问控制列表

格式:

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

eg:

acl localnet src  192.168.23.13/32      #源地址为192.168.23.13/32
acl mylan    src  192.168.23.0/24       #定义客户机网段
acl destinationhost   dst  192.168.23.103、32   #目标地址为192.168.23.103
acl  MX maxconn 20                     #最大并发连接20
acl PORT  port 21                      #目标端口21
acl  DBLOCK  dstdomin   .sina.com      #目标域,匹配域内所有站点
acl   BURL  url_regex -i ^rtsp://   ^emule://   #以rtsp://,emule:// 开头的目标URL地址。-i不区分大小写
acl   PURL  urlpath_regex  -i \.mp3$  \.mp4$  #以.mp3,.mp4结尾的url路径
acl    worktime time MTWHD 8:30-17:30   #时间以周一至周五 8:30-17:30 


5.3.2 启动对象管理

mkdir /etc/squid 
vim /etc/squid/dest.list     #将acl 策略写入到一个单独的文件中
192.168.23.13
192.168.23.0/24


vim /etc/squid.conf
......
#格式一
#直接调用配置文件中定义的acl列表,拒绝或者允许
http_access deny或(allow)  destinationhost  

#格式二
acl  destination det "/etc/squid/dest.list"  #调用指定文件中的列表内容
http_access  deny或(allow)   destinationghost 

5.3.3 示例

vim /etc/squid.conf
.....
acl localhost  src 192.168.23.13/32  #配置acl列表,源地址是192.168.23.13/32
http_access deny localhost   #acl列表localhost定义的所有主机禁止访问


systemctl restart squid

image-20210912092317759



将配置文件中的禁止访问改为允许

</font size=2>

vim /etc/squid.conf
.....
acl localhost  src 192.168.23.13/32  #配置acl列表,源地址是192.168.23.13/32
http_access allow  localhost   #acl列表localhost定义的所有主机允许访问


systemctl restart squid

image-20210912092552758



 六 squid 日志分析

6.1 安装图像处理软件包 sarg

[root@host103 opt]# ls sarg-2.3.7.tar.gz 
sarg-2.3.7.tar.gz

yum -y install pcre-devel gd gd-devel   #如果无法下载,可能是因为做了代理服务器,关闭了网关
mkdir /usr/local/sarg
tar zxvf /opt/sarg-2.3.7.tar.gz  -C /opt/


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

make  && make install


6.2 修改sarg的配置文件

 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          
 #top 排序中,指定连接次数采用降序排列(reverse降序,normal是升序)
184// topuser_sort_field connect reverse  
#对于用户访问记录,连接次数降序排列
190// user_sort_field connect reverse
#指定不计入排序的站点列表文件。该文件需要手动创建,否则报错
206// exclude_hosts /usr/local/sarg/noreport
#同名同日期日志是否覆盖(no,不覆盖)
257// overwrite_report no
#发送邮件报告命令
289 mail_utility  mailq.postfix
#指定字符集编码
434 charset UTF-8
#top 排行的星期周期
518 weekdays 0-6
#top 排行的时间周期
525 hours 0-23
#指定网页根目录
www_document_root /var/www/html

6.3创建不计入统计的站点的文件

#创建不记入统计的站点的文件
touch /usr/local/sarg/noreport
#将sarg 命令设置软连接到 /usr/local/bin目录下,可以随时直接使用sarg命令
ln -s /usr/local/sarg/bin/sarg  /usr/local/bin/
#查看sarg命令帮助信息
sarg --help

6.4 运行sarg生成记录,并查看网页

yum -y install httpd
systemctl start httpd

sarg  #生成一次报告

firefox http://192.168.23.103/sarg

image-20210912103336739

image-20210912103525433



 6.5 设置计划任务,每天生成报告

vim /usr/local/sarg/report.sh
#!/bin/bash
#This is used for squid  report 

#Get current date
TODAY=$(date +%d/%m/%Y)

#Get yesterday
YESTERDAY=$(date -d "1 days ago" +%d/%m/%Y)

#-l 选项指定squid日志文件路径
#-o 指定网页报告文件输出路径
#-z  处理信息
#-d  指定日期范围
/usr/local/sarg/bin/sarg -l /usr/local/squid/var/logs/access.log \
 -o /var/www/html/sarg -z -d $YESTERDAY-$TODAY  &> /dev/null

#将30天以前的报告文件删除
find /var/www/html/sarg -type d -a -name "20*" \
 -a  -mtime +30  | xargs rm -rf  & >/dev/null

:wq
-------------------------------
#为脚本文件添加执行权限
chmod +x  /usr/local/sarg/report.sh
#将脚本添加到contab计划任务中,每天0点0分执行
crontab -e
0 0 * * * /usr/local/sarg/report.sh


七 squid 反向代理

7.1 squid 反向代理概述

概述:

如果Squid反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;

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


工作机制:

• 缓存网页对象,减少重复请求

• 将互联网请求轮询或按权重分配到内网web服务器
• 代理用户请求,避免用户直接访问Web服务器,提高安全

7.2 配置squid 反向代理服务器配置

7.2.1 拓扑

squid 代理服务器: 192.168.23.103

web1 服务器:192.168.23.13

web2 服务器:192.168.23.12

客户端:192.168.23.104



7.2.2 修改代理服务器的配置文件

http_port 192.168.23.103:80 accel vhost vport
cache_peer 192.168.23.12parent 80 0 no-query originserver \
round-robin max_conn=30 weight=1 name=web1

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

#对www.mynet.com的请求,squid代理服务器向web1和web2的80端口发出请求
cache_peer_domain web1 web2 www.mynet.com

http_port 80 accel vhost vport
#squid从一个缓存变成了一个Web服务器反向代理加速模式,这个时候squid在80端口监听请求,同时和webserver的请求端口(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:设置别名

7.2.3 代理服务器清空多余环境

#清空透明模式时配置的iptable规则
iptables -F
iptables -t nat -F


#停止httpd服务,防止httpd的80端口和squid的监听端口冲突
systemctl stop httpd

#重启squid服务
systemctl restart squid


7.3 后端节点服务器配置

#两台web 服务器
yum -y install httpd
systemctl start httpd

#web 192.168.23.11
echo "This is web1" >> /var/www/html/index.html
#web 192.168.23.12
echo "this is web2" >>  /var/www/html/index.html

7.4 客户端访问

# 配置host或者 DNS银蛇。 将 域名和代理服务器地址映射
echo "192.168.23.103  www.mynet.com"

#配置浏览器的代理设置。代理服务器地址192.168.23.103,端口80
#浏览器访问 www.mynet.com

image-20210912115028216

image-20210912115338143

image-20210912115254788

标签:web,缓存,squid,sarg,192.168,acl,代理服务器,服务器
来源: https://www.cnblogs.com/zhijiyiyu/p/15260606.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有