其他分享
首页 > 其他分享> > squid 缓存服务器

squid 缓存服务器

作者:互联网

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