squid服务

一、Squid代理服务器概述

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

1、代理的工作机制

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

2、Squid代理的类型

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

二、安装Squid服务

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

 
 

    1、编译安装Squid

    yum -y install gcc gcc-c++ make
    cd /opt
    tar zxvf squid-3.5.28.tar.gz
    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
    make && make install
    #--------模块解释--------------------------------------------------
    --prefix=/usr/local/squid                  #指定安装目录路径
    --sysconfdir=/etc                          #指定配置文件路径
    --enable-arp-acl                           #MAC地址管控,防止客户端使用ip欺骗
    --enable-linux-netfilter                   #使用内核过滤
    --enable-linux-tproxy                      #支持透明模式
    --enable-async-io=100                      #异步1o,提升存储性能
    --enable-err-language="Simplify_Chinese"   #错误信息的显示语言
    --enable-underscore                        #允许URL中有下划线
    --disable-poll \                           #关闭默认使用的poll 模式
    --enable-epoll \                           #开启epoll模式,提升性能
    --enable-gnuregex                          #使用GNU正则表达式
    #----------------------------------------------------------------
    
     
     
      ln -s /usr/local/squid/sbin/* /usr/local/sbin/
      
      useradd -M -s /sbin/nologin squid
      
      chown -R squid:squid /usr/local/squid/var/
      #/usr/local/squid/var/ 此目录是用于存放缓存文件
      
       
       

        在这里插入图片描述

        3、Squid的运行控制

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


          在这里插入图片描述

          4、创建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
            #查看squid服务在哪些级别中自启
            chkconfig --list squid
            
             
             

              在这里插入图片描述

              三、构建传统代理服务器

              环境配置

              主机操作系统IP地址软件、安装包、工具
              Squid-ServerCentOS7192.168.100.10squid-3.5.28.tar.gz
              Web-ServerCentOS7192.168.100.20httpd
              客户机Windows 10192.168.100.100

              Squid-server (192.168.100.10)

              1、编译安装squid,然后修改配置文件

              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
              reply_body_max_size 10 MB
              maximum_object_size 4096 KB
              #---------添加内容解释------------------------------------------
              cache_mem 64 MB				 #指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
              reply_body_max_size 10 MB	 #允许用户下载的最大文件大小,以字节为单位,当下载超过指定大小的Web对象时,浏览器的报错页面中会出现“请求或访问太大”的提示默认设置0表示不进行限制
              maximum_object_size 4096 KB	 #允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户
              #-------------------------------------------------------------------
              service squid restart
              #或systemctl restart squid
              
               
               

                在这里插入图片描述

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

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

                  在这里插入图片描述

                  Web (192.168.100.20)

                  systemctl stop firewalld.service
                  setenforce 0
                  yum -y install httpd
                  systemctl start httpd
                  netstat -natp | grep 80
                  
                   
                   

                    在这里插入图片描述

                    客户机 (192.168.100.100)
                    打开浏览器,配置代理功能

                    • 打开浏览器,设置→高级→打开代理设置→使用代理服务器→开启代理服务器(地址:Squid服务器IP地址,端口:3128)

                    在这里插入图片描述

                    Web (192.168.100.20)

                    • 查看web访问日志的新增记录
                    tail -f /var/log/httpd/access_log
                    
                     
                     

                      在这里插入图片描述

                      客户机 (192.168.100.100)

                      • 在浏览器输入web服务器IP地址访问,查看web服务器的访问日志,显示的是由代理服务器替客户机在访问
                      http://192.168.100.20
                      
                       
                       

                        在这里插入图片描述

                        四、构建透明代理服务器

                        环境配置

                        主机操作系统IP地址服务、安装包、工具
                        Squid-ServerCentOS7ens33:192.168.100.10、ens37:12.0.0.1squid-3.5.28.tar.gz
                        Web1CentOS712.0.0.12httpd
                        客户端Windows192.168.100.100

                        Squid服务器配置(ens33:192.168.100.10/ens37:12.0.0.1)

                        1、关机,添加网卡

                        在这里插入图片描述

                        2、然后将双网卡配置好对应的IP地址和子网掩码

                        cd /etc/sysconfig/network-scripts/
                        vim ifcfg-ens33
                        IPADDR=192.168.100.10
                        NETMASK=255.255.255.0
                        cp ifcfg-ens33 ifcfg-ens36
                        vim ifcfg-ens36
                        IPADDR=12.0.0.1
                        NETMASK=255.255.255.0
                        systemctl restart network
                        ifconfig 
                        
                         
                         

                          在这里插入图片描述

                          在这里插入图片描述

                          3、安装squid服务、修改配置文件

                          • 安装操作看前面的即可
                          vim /etc/squid.conf
                          ......
                          http_access allow all
                          http_access deny all
                          #------60行修改添加提供内网服务的IP地址,和支持透明代理选项 transparent
                          http_port 192.168.100.10:3128 transparent
                          systemctl restart squid
                          netstat -natp | grep 3128
                          
                           
                           

                            在这里插入图片描述
                            在这里插入图片描述

                            4、修改防火墙规则

                            #开启路由转发,实现本机中不同网段的地址转发
                            echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
                            sysctl -p
                            span class="token comment">#修改防火墙规则
                            iptables -F
                            iptables -t nat -F
                            iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
                            iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
                            iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
                            
                             
                             

                              在这里插入图片描述

                              Web1(12.0.0.12)

                              systemctl stop firewalld.service
                              setenforce 0
                              vim /etc/sysconfig/network-scripts/ifcfg-ens33
                              systemctl restart network
                              ifconfig
                              yum -y install httpd       
                              systemctl restart httpd
                              netstat -antp | grep 80
                              
                               
                               

                                在这里插入图片描述
                                在这里插入图片描述

                                客户机测试(192.168.100.100)
                                在这里插入图片描述

                                关闭浏览器设置的代理服务器的功能

                                • 访问http://12.0.0.12
                                  在这里插入图片描述

                                查看Squid访问日志的新增记录

                                tail -f /usr/local/squid/var/logs/access.log
                                #Squid代理服务器上的日志可以检测到客户机IP以及访问的目标网站IP
                                
                                 
                                 

                                  在这里插入图片描述

                                  查看Web访问日志的新增记录,显示的是由代理服务器的外网口代替客户机在访问

                                  tail -f /var/log/httpd/access_log
                                  #日志内容来看是代理服务器外网口12.0.0.1访问web服务器12.0.0.12
                                  
                                   
                                   

                                    在这里插入图片描述

                                    五、ACL访问控制

                                    vim /etc/squid.conf
                                    ......
                                    acl localhost src 192.168.100.10/32     #源地址为 192.168.100.10
                                    acl MYLAN src 192.168.100.0/24          #客户机网段
                                    acl destionhost dst 192.168.100.20/32   #目标地址为 192.168.100.20
                                    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”为每个星期的英文首字母
                                    
                                     
                                     

                                      Squid-Server (192.168.100.10)

                                      vim /etc/local.list
                                      192.168.100.10
                                      
                                       
                                       

                                        在这里插入图片描述

                                        vim /etc/squid.conf
                                        ......
                                        acl localhosttest src  "/etc/local.list"			#调用指定文件中的列表内容
                                        ......
                                        http_access deny localhosttest				        #注意,如果是拒绝列表,需要放在http_access allow all前面
                                        systemctl restart squid
                                        netstat -natp |grep squid
                                        #或netstat -natp |grep 3128
                                        
                                         
                                         

                                          在这里插入图片描述
                                          在这里插入图片描述
                                          在这里插入图片描述

                                          浏览器(192.168.100.100)访问Web服务器http://12.0.0.12
                                          在这里插入图片描述

                                          • 若是修改主机的IP地址则不会被拒绝访问

                                          六、Squid日志分析

                                          1、安装图像处理软件包

                                          • 出现报错,将网卡配置文件中的dns和网关修改回原样
                                          • 安装在线源
                                          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 --enable-extraprotection
                                          make && make install
                                          #---------./configure中模块解释---------------------------------------
                                          --prefix=/usr/local/sarg 
                                          --sysconfdir=/etc/sarg   #配置文件目录,默认是/usr/local/etc
                                          --enable-extraprotection #额外安全防护
                                          #------------------------------------------------------------------
                                          
                                           
                                           

                                            在这里插入图片描述
                                            在这里插入图片描述

                                            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/squid-reports				#报告输出目录
                                            #---------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						#指定网页根目录
                                            
                                             
                                             

                                              在这里插入图片描述

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

                                              touch /usr/local/sarg/noreport        #创建不计入站点文件
                                              ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
                                              sarg --help                           #查看命令帮助
                                              sarg                                  #启动一次记录
                                              
                                               
                                               

                                                在这里插入图片描述

                                                3、验证

                                                • 此时在squid服务器上安装httpd服务,其他客户端机器无法访问测试的页面
                                                yum install -y httpd
                                                systemctl start httpd
                                                
                                                 
                                                 
                                                  • 浏览器访问http://192.168.100.10/squid-reports,查看sarg报告网页
                                                    在这里插入图片描述

                                                  4、添加计划任务,执行每天生成报告

                                                  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/squid-reports -z -d $YESTERDAY-$TODAY &> /dev/null
                                                  exit 0
                                                  chmod +x /usr/local/sarg/report.sh
                                                  #加入周期性计划
                                                  crontab -e
                                                  0 0 * * * /usr/local/sarg/report.sh
                                                  
                                                   
                                                   

                                                    在这里插入图片描述

                                                    七、反向代理

                                                    环境配置

                                                    主机操作系统IP地址软件、安装包、工具
                                                    Squid-ServerCentOS7192.168.100.10squid-3.5.28.tar.gz
                                                    Web1-ServerCentOS7192.168.100.20httpd
                                                    Web2-ServerCentOS7192.168.100.30httpd
                                                    客户机Windows10192.168.100.100

                                                    Squid-server (192.168.100.10)

                                                    vim /etc/squid.conf
                                                    ......
                                                    #---------60行,修改,插入-------------------------------------------
                                                    http_port 192.168.100.10:80 accel vhost vport
                                                    cache_peer 192.168.100.20 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
                                                    cache_peer 192.168.100.30 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
                                                    cache_peer_domain web1 web2 www.test.com
                                                    systemctl stop httpd
                                                    systemctl restart squid
                                                    #---------解释-----------------------------------------------------
                                                    http_port 80 accel vhost vport 
                                                    #squid从一个缓存变成了一个Web服务器使用加速模式,这个时候squid在80端口监听请求,同时和web server的请求端口(vhost vport)绑定,这个时候请求到了squid,squid是不用转发请求的,而是直接要么从缓存中拿数据要么向绑定的端口直接请求数据。
                                                    accel:反向代理加速模式
                                                    vhost:支持域名或主机名来表示代理节点
                                                    vport:支持ip和端口来表示代理节点
                                                    parent:代表为父节点
                                                    80:HTTP_PORT
                                                    0:ICP_PORT
                                                    no-query:不做查询操作,直接获取数据
                                                    originserver:指定是源服务器
                                                    round-robin:指定 squid 通过轮询方式将请求分发到其中一台父节点
                                                    max_conn:指定最大连接数
                                                    weight:指定权重
                                                    name:设置别名
                                                    
                                                     
                                                     

                                                      在这里插入图片描述
                                                      在这里插入图片描述

                                                      Web1、Web2

                                                      systemctl stop firewalld.service 
                                                      setenforce 0
                                                      yum install -y httpd
                                                      systemctl start httpd
                                                      
                                                       
                                                       

                                                        在这里插入图片描述

                                                        #Web1
                                                        echo "<h1>this is web1</h1>" >> /var/www/html/index.html
                                                        #Web2
                                                        echo "<h1>this is web2</h1>" >> /var/www/html/index.html
                                                        
                                                         
                                                         

                                                          在这里插入图片描述
                                                          在这里插入图片描述
                                                          客户机(192.168.100.100)
                                                          1、修改客户端的域名映射
                                                          修改hosts文件权限

                                                          • 文件位置:C盘/windows/System32/drivers/etc/hosts
                                                          • 右击hosts文件,属性–>安全–>编辑–>组或用户名中的(Users)–>选择允许权限–>确定
                                                            在这里插入图片描述
                                                            在这里插入图片描述
                                                            2、客户机的代理配置
                                                            在这里插入图片描述
                                                            3、浏览器访问http://www.test.com
                                                            在这里插入图片描述
                                                          评论 1
                                                          添加红包

                                                          请填写红包祝福语或标题

                                                          红包个数最小为10个

                                                          红包金额最低5元

                                                          当前余额3.43前往充值 >
                                                          需支付:10.00
                                                          成就一亿技术人!
                                                          领取后你会自动成为博主和红包主的粉丝 规则
                                                          hope_wisdom
                                                          发出的红包
                                                          实付
                                                          使用余额支付
                                                          点击重新获取
                                                          扫码支付
                                                          钱包余额 0

                                                          抵扣说明:

                                                          1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
                                                          2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

                                                          余额充值