精华内容
下载资源
问答
  • squid代理服务器
    2020-09-06 17:22:58

    squid缓存代理概述

    squid概述

      Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
      由于不同地理位置的客户机请求服务速度不同,使用squid缓存代理可提升响应速度,squid将服务端内容放在自己开辟的缓存空间内,客户在请求服务时,可由相应地域的squid缓存服务器提供相应内容的服务,以弥补地域上的差异。

    squid工作机制

    代理的工作机制

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

    工作机制示意图如下:
    在这里插入图片描述

    squid–ACL访问控制

    ACL访问控制

    ACL访问控制方式

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

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

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

    http_access allow或deny列表名称...
    

    常用的ACL列表类型

    • src→源地址
    • dst→目标地址
    • port →目标地址
    • dstdomain→目标域
    • time→访问时间
    • maxconn →最大并发连接
    • url_regex →目标URL地址
    • Urlpath_regex →整个目标URL路径

    ACL规则优先级

    一个用户访问代理服务器时,Squid会顺序匹配Squid中定义的所有规则列表,一旦匹配成功,立即停止匹配
    所有规则都不匹配时,Squid会使用与最后一条相反的规则

    squid代理服务器配置案例

    案例环境

      本案例使用一台squid代理服务器一台web服务器和一台客户端;

    主机IP系统软件
    squid端ens33:20.0.0.61/24 ens36:192.168.8.10/24centos 7.6squid-3.4.6.tar.gz
    WEB源站ens33:20.0.0.31/24centos 7.6httpd
    客户端192.168.8.30/24(指明网关为squid端的192.168.8.10)windows 10浏览器

    拓扑如下:
    在这里插入图片描述

    传统代理

    配置步骤

      所以设备均可先使用网卡的NAT模式,这样可以下载需要的软件或是环境包
      可以对主机进行改名,好识别
    ---------web源站------------

    [root@web ~]# yum -y install httpd
    
    [root@web ~]# systemctl start httpd
    [root@web ~]# netstat -antp |grep httpd
    

    -------squid服务端------------

    [root@squid ~]# yum -y install gcc gcc-c++
    
    [root@squid ~]#tar zxvf squid-3.4.6.tar.gz
    [root@squid ~]#cd squid-3.4.6/
    [root@squid squid-3.4.6]#./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 \
    --enable-poll \
    --enable-gnuregex
    
    
    [root@squid squid-3.4.6]#make && make install
    [root@squid squid-3.4.6]#ln s /usr/local/squid/sbin/* /usr/local/sbin/
    
    [root@squid squid-3.4.6]#useradd -M -s /sbin/nologin/ squid
    
    [root@squid squid-3.4.6]#chown -R squid.squid /usr/local/squid/var/
    
    [root@squid squid-3.4.6]#vim /etc/squid.conf
    ##找到http_access deny all,在它的上面添加http_access allow all,暂时放通所有
    http_access allow all
    #http_access deny all
    
    http_port 3128
    ##添加以下两条配置
    cache_effective_user squid
    cache_effective_group squid
    ##配置文件中以下配置表示容灾
    coredump_dir /usr/local/squid/var/cache/squid
    保存退出
    
    检查语法
    [root@squid ~]# squid -k parse
    这里会跳出一大堆东西,没报error就行
    
    初始化缓存
    [root@squid ~]# squid -z
    跳出类似以下内容
    [root@squid ~]# 2020/09/06 11:15:15 kid1| Set Current Directory to /usr/local/squid/var/cache/squid
    2020/09/06 11:15:15 kid1| Creating missing swap directories
    2020/09/06 11:15:15 kid1| No cache_dir stores are configured.
    

    启动服务

    [root@squid ~]# squid
    查看进程
    [root@squid ~]#netstat -antp |grep squid
    

    squid启动优化

    [root@squid ~]#cd /etc/init.d/
    [root@squid ~]#vim 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 -antp |grep squid &> /dev/null
           if [ $? -eq 0 ];then
             echo "squid is running..."
           else
             $CMD
           ;;
         stop)
            $CMD -k kill &> /dev/null
            rm -rf $PID &> /dev/null
           ;;
          status)
            [ -f $PID ] &> /dev/null
            if [ $? -eq 0 ];then
              netatat -antp |grep squid
            else
              echo "squid is not running"
           ;;
          restart)
            $0 stop &> /dev/null
            $0 start &> /dev/null
           ;;
           reload)
             $CMD -k reconfigure
           ;;
           check)
              $CMD -k parse
           ;;
           *)
              echo "用法:$0{start|stop|status|restart|reload|check|}"
     esac
    [root@squid ~]#chmod +x /etc/init.d/squid
    [root@squid ~]#chkconfig --add /etc/init.d/squid
    

    --------传统代理服务器配置----------

    [root@squid ~]#vim /etc/squid.conf
    
    http_port 3128
    cache_effective_user squid
    cache_effective_group squid
    cache_mem 64 MB
    reply_body_max_size 10 MB
    maximum_object_size 4096 KB
    
    [root@squid ~]# iptables -F
    [root@squid ~]# iptables -t nat -F
    [root@squid ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
    
    [root@squid ~]#service squid reload
    

    网卡修改
    squid端

    在squid上再插上一张网卡,选择仅主机模式,修改网卡信息为192.168.8.10/24
    

    WEB源站

    保持原来NAT配置即可
    

    客户端

    选择仅主机模式,修改网卡信息192.168.8.30/24,指明网关为192.168.8.10
    

    测试

    客户端windows 在浏览器中找到设置中的高级-系统-打开计算机代理服务器中填入squid服务器ip和端口,各浏览器可能会有略微不同
    用客户端去访问web源站20.0.0.31,后查看web源站/etc/httpd/logs/access_log,看到是squid的20.0.0.61来访问就正确了
    web源站查看日志

    [root@web logs]# cat /etc/httpd/logs/access_log 
    20.0.0.61 - - [06/Sep/2020:12:12:13 +0800] "GET /noindex/css/open-sans.css HTTP/1.1" 200 5081 "http://20.0.0.31/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"
    
    

    透明代理

    配置

    ------------透明代理-------------
    在squid端修改配置文件

    [root@squid ~]#vim /etc/squid.conf
    ##transparent表示透明代理,监听地址192.168.8.10客户端请求是由这个地址过来的
    http_port 192.168.8.10:3128 transparent
    [root@squid ~]#service squid reload
    [root@squid ~]#iptables -F
    [root@squid ~]#iptables -t nat -F
    [root@squid ~]#iptables -t nat -I PREROUTING -i ens36 -s 192.168.8.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
    [root@squid ~]#iptables -t nat -I PREROUTING -i ens36 -s 192.168.8.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
    [root@squid ~]#iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

    iptables规则中的ens36是连接客户端的那张网卡,根据你们自己的设置,地址也是

    测试

    将刚刚改的浏览器代理服务器给关了,清下浏览器的记录,访问20.0.0.31web源站,也是查看日志,要看到源地址是squid即可

    ACL访问控制配置示例

    在squid的传统代理服务的配置上,我们的客户端可以正常访问源站的web服务
    我们在squid的配置文件中添加ACL访问控制规则,限定我们的客户端不可用访问web服务

    [root@squid ~]#vim /etc/squid.conf
    #添加一个ACL规则,规则名为sourcehost,以源主机为限制条件
     acl sourcehost src 192.168.8.30/32
     ...
    # Deny requests to certain unsafe ports
    #调用规则
     http_access deny sourcehost
    [root@squid ~]#service squid reload
    

    测试
    去客户端访问20.0.0.31,访问请求会被拒绝
    在这里插入图片描述
    把上面的配置改回去,到客户端去测试,应该可以访问,我们再做下面这个实验
    换另一种方法将ip等需要限制的信息存在一个文件中,在squid的配置文件中去调用文件即可,
    因为有的时候需要限制的条件很多所以可以卸载文件中

    [root@squid ~]#vim /etc/squid.conf
    #添加ACL规则,规则名为desblock,以目标主机为限制条件
    acl desblock dst "/opt/desblock.list"
    # Deny requests to certain unsafe ports
    #调用规则名
    http_access deny desblock
    
    我们要在/opt/下创建一个文件名为desblock.list,在里面添加内容
    [root@squid ~]#vim  /opt/desblock.list
    20.0.0.31
    
    [root@squid ~]#service squid reload
    

    测试
    去客户端访问,依然是不可以访问的
    在这里插入图片描述

    Sarg日志分析配置示例

    将上面配置的限制客户端访问的语句去掉
    在squid上配置

    [root@squid ~]#yum -y install gcc gcc-c++ gd gd-devel pcre pcre-devle perl per-devel
    [root@squid ~]#mkdir /usr/lcoa/sarg
    [root@squid ~]#tar zxvf sarg-2.3.7.tar.gz
    [root@squid ~]#cd sarg-2.3.7
    [root@squid ~]#./configure \
    --prefix=/usr/local/sarg \
    --sysconfdir=/etc/sarg \
    --enable-extraprotection
    
    [root@squid ~]#make && make install
    
    [root@squid ~]#cd /etc/sarg
    [root@squid ~]#vim sarg.conf
    第七行 指定访问日志文件
    access_log /usr/local/squid/var/logs/access.log
    第25行 网页标题
    title "Squid User Access Reports"
    第120行 报告输出的目录,这个/var/www/html/在yum安装httpd后会生成
    output_dir /var/www/html/squid-reports
    第178行 使用用户名显示
    user_ip no
    第184行 top排序中有连接次数、访问字节、reverse降序排序 升序是normal
    topuser_sort_field connect reverse
    第190行 要注释掉,要不然服务起不来的
    #user_sort_field BYTES reverse
    第206行 不计入排序的站点列表文件
    206 exclude_hosts /usr/local/sarg/noreport
    第257行 同名文件不覆盖
    overwrite_report no
    第289行 发送邮件报告命令
    mail_utility mailx.postfix
    第434行 字符集
    charset UTF-8
    第518行 top排行的星期周期
    weekdays 0-6
    第525行 top排行的时间周期
    hours 0-23
    第633行 网页根目录
     www_document_root /var/www/html
    
    #添加不计入站点统计文件,添加的域名将不被显示在排序中
    [root@squid ~]#touch /usr/local/sarg/noreport
    
    [root@squid ~]#ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
    
    [root@squid ~]#sarg
    #因为我们要查看统计的网页,所以安装一个httpd
    [root@squid ~]#yum -y install httpd
    [root@squid ~]#systemctl start httpd
    
    重新访问过之后可以用以下的命令进行刷新,在统计网页中就可以显示新的统计信息了
    [root@squid ~]#sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/squid-reports/ -z -d $(date -d "1 day ago" +%d%m%Y)-$(date +%d%m%Y)
    

    客户端访问
    http://192.168.8.10/squid-reports
    在这里插入图片描述

    反向代理负载均衡配置示例

    还是接着上面的实验做
    squid服务器配置

    [root@squid ~]#vim /etc/squid.conf
    ##改下监听地址和端口
    http_port 192.168.8.10:80 accel vhost vport
    #加上下面的语句
    cache_peer 20.0.0.31 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
    cache_peer 20.0.0.100 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
    cache_peer_domain web1 web2 www.fen.com
    #squid服务器上用于显示日志统计的网页服务也是用的80 端口,所以先把他停掉
    [root@squid ~]#systemctl stop httpd
    #我在检查squid配置文件语法的时候,显示max_conn有错,所以后面我把它去掉了
    [root@squid ~]#squid -k parse
    [root@squid ~]#service squid reload
    

    web服务器配置

    因为在之前的实验中已经有了一台web服务器,现在我们再加一台
    绑定NAT网卡,yum -y install httpd即可
    分别给两台web服务器填写不同的网页内容以区别
    

    测试
    到客户机上修改host文件 是为了域名解析用的
    修改host文件(C:\Windows\System32\drivers\etc)修改文件属性给USER用户权限即可修改host
    添加内容指明squid服务器ip和域名对应
    192.168.8.10 www.fen.com
    保存退出
    修改浏览器代理服务器端口为80
    去浏览器访问www.fen.com即可,刷新可看到请求两个web网页
    在这里插入图片描述在这里插入图片描述

    更多相关内容
  • 为您提供Squid代理服务器下载,Squid cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web...
  • Squid 代理服务器

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

    目录

    一、squit代理服务器

    1.1代理的工作机制

    1.2 代理服务器的概念及其作用

    1.3 Squid 代理的类型

    二、安装 Squid 服务

    三、构建传统代理服务器

    四、构建透明代理服务器

    五、ACL访问控制

    六、Squid 反向代理

    七、Squid 日志分析

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

    一、squit代理服务器

    1.1代理的工作机制

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

    1.2 代理服务器的概念及其作用

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

    其主要作用有:

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

    1.3 Squid 代理的类型

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

    二、安装 Squid 服务

    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0
    
    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正则表达式
    ----------------------------------------------------------------------------------------------------------
    
    ./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/
    
    useradd -M -s /sbin/nologin squid
    
    chown -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 -natp | 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

     

     

     

     

     

    三、构建传统代理服务器

    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/4
    reply_body_max_size 10 MB			#允许用户下载的最大文件大小,以字节为单位,当下载超过指定大小的Web对象时,浏览器的报错页面中会出现“请求或访问太大”的提示默认设置0表示不进行限制
    maximum_object_size 4096 KB			#允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户
    
    service squid restart
    systemctl restart squid
    
    #生产环境中还需要修改防火墙规则
    iptables -F
    iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
    
    #客户机的代理配置
    打开浏览器,工具-->Internet选项-->连接-->局域网设置-->开启代理服务器(地址:Squid服务器IP地址,端口:3128)
    
    #查看 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服务器访问日志,显示的是由代理服务器替客户机在访问。

    四、构建透明代理服务器

    Squid服务器:双网卡,内网ens33:192.168.80.10  外网ens36:12.0.0.1
    Web 服务器:12.0.0.12
    客户机:192.168.80.100
    
    -----Squid服务器配置-----
    vim /etc/squid.conf
    ......
    http_access allow all
    http_access deny all
    --60行--修改添加提供内网服务的IP地址,和支持透明代理选项 transparent
    http_port 192.168.80.10: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.80.0/24 -p tcp --dport 80 -j REDIRECT --to 3128	#用于转发http协议
    iptables -t nat -I PREROUTING -i ens33 -s 192.168.80.0/24 -p tcp --dport 443 -j REDIRECT --to 3128	#用于转发https协议
    iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
    
    
    -----Web服务器配置-----
    yum install -y httpd
    systemctl start httpd
    
    
    关闭客户机的浏览器之前设置的代理服务器的功能后访问 http://12.0.0.12
    
    #查看 Squid 访问日志的新增记录
    tail -f /usr/local/squid/var/logs/access.log
    1631073624.552      0 192.168.80.200 TCP_MEM_HIT/200 449 GET http://12.0.0.12/ - HIER_NONE/- text/html
    
    #查看 Web 访问日志的新增记录,显示的是由代理服务器的外网口代替客户机在访问

    五、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”为每个星期的英文首字母
    
    
    #启动对象列表管理
    mkdir /etc/squid
    vim /etc/squid/dest.list
    192.168.80.13
    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
    
    浏览器访问Web服务器 http://192.168.80.13 ,显示被访问被拒绝。

    六、Squid 反向代理

    如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的 Web 服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。
    
    工作机制:
    ●缓存网页对象,减少重复请求
    ●将互联网请求轮训或按权重分配到内网Web服务器
    ●代理用户请求,避免用户直接访问Web服务器,提高安全
    
    vim /etc/squid.conf
    ......
    --60行--修改,插入
    http_port 192.168.80.10:80 accel vhost vport
    cache_peer 192.168.80.11 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
    cache_peer 192.168.80.12 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.80.11和192.168.80.12的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
    
    
    #客户机的域名映射配置
    修改 C:\Windows\System32\drivers\etc\hosts 文件
    192.168.80.10 www.kgc.com
    
    浏览器不开启代理访问 http://www.kgc.com
    
    查看缓存命中情况 
    tailf /usr/local/squid/var/logs/access.log
    1631164427.547      0 192.168.80.200 TCP_MEM_HIT/200 381 GET http://www.kgc.com/ - HIER_NONE/- text/html

    七、Squid 日志分析

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

    展开全文
  • 本文主要给大家介绍了关于 linux 搭建squid代理服务器的相关内容,下面话不多说了,来一起看看详细的介绍吧 实验环境: 一台linux搭建Web服务器,充当内网web服务器(同时充当内网客户端) 202.100.10.100 一台linux...
  • Squid代理服务器

    2020-11-07 11:19:36
    Squid cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享...
  • Web缓存代理的工作机制: 缓存...透明代理:客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理。 使用代理的好处:提高Web访问速度,隐藏客户机的真实IP地址。

    1.缓存代理概述

    1.1 Web缓存代理的工作机制

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

    在这里插入图片描述

    1.2 代理的基本类型

    • 传统代理:适用于Internet,需明确指定服务端
    • 透明代理:客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理。

    1.3 使用代理的好处

    • 提高Web访问速度
    • 隐藏客户机的真实IP地址

    2.Squid代理服务器的设置

    2.1 传统代理服务器

    **项目环境:**
    - 一台代理服务器squid:
    IP:192.168.140.20
    - 两台Web站点服务器:
    IP:192.168.140.21
    IP:192.168.140.22
    - 一台客户机:
    IP:192.168.140.14
    

    2.1.1 配置传统代理服务器

    首先导入软件包
    在这里插入图片描述
    (1) 解包,并编译安装

    [root@squid ~]# tar zxvf squid-3.5.23
    [root@squid ~]# cd squid-3.5.23/
    [root@squid squid-3.5.23]# ./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 \
    --enable-underscore \
    --enable-poll \
    --enable-gnuregex
    
    //--enable-linux-netfilter,linux内核通过 netfilter 模块实现网络访问控制功能
    //--enable-linux-tproxy,实现透明代理服务功能
    //--enable-async-io=100,异步传输输入输出数量
    //--enable-err-language="Simplify_Chinese",用中文报错
    //--enable-underscore,允许下划线
    //--enable-poll,协调读写设备个数或读写设备顺序的函数
    //--enable-gnuregex,c/c++常用的正则表达式
    
    [root@squid squid-3.5.23]# make && make install
    [root@squid squid-3.5.23]# cd
    

    (2) 创建squid用户并设置属主与属组

    [root@squid ~]# ln -s /usr/local/squid/sbin/* /usr/sbin/
    [root@squid ~]# sq
    sqlite3  squid    
    [root@squid ~]# useradd -M -s /sbin/nologin squid
    [root@squid ~]# chown -R squid.squid /usr/local/squid/var
    

    (3) 添加指定程序用户和账号基本组

    [root@squid ~]# vi /etc/squid.conf
    ...//省略部分信息
    cache_effective_user squid	//添加指定程序用户
    cache_effective_group squid	//添加指定账号基本组
    coredump_dir /usr/local/squid/var/cache/squid
    

    (4) 检测并启动服务

    [root@squid ~]# squid -k parse		//检查语法
    [root@squid ~]# squid -z		//初始化缓存目录
    Set Current Directory to /usr/local/squid/var/cache/squid
    Creating missing swap directories
    No cache_dir stores are configured.
    [root@squid ~]# squid		//启动服务
    [root@squid ~]# netstat -anpt | grep squid
    tcp6       0      0 :::3128                 :::*                    LISTEN      96132/(squid-1)
    

    (5) 编辑服务脚本

    [root@squid ~]# vi /etc/init.d/squid
    #!/bin/bash
    #chkconfig: 35 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 -anpt | 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 -anpt | grep squid
            else echo "squid is not running"
            fi
    ;;
    restart)
            $0 stop &> /dev/null
            	echo "正在关闭 squid..."
            	echo "关闭成功"
            $0 start &> /dev/null
            	echo "正在启动 squid..."
            	echo "启动成功"
    ;;
    reload)
            $CMD -k reconfigure
    ;;
    check)
            $CMD -k parse
    ;;
    *)
            echo "用法: $0{start|stop|status|restart|reload|check}"
    esac
    
    [root@squid ~]# chmod +x /etc/init.d/squid
    [root@squid ~]# chkconfig --add /etc/init.d/squid
    [root@squid ~]# chkconfig --level 35 squid on
    [root@squid ~]# chkconfig --list
    
    注:该输出结果只显示 SysV 服务,并不包含
    原生 systemd 服务。SysV 配置数据
    可能被原生 systemd 配置覆盖。 
    
          要列出 systemd 服务,请执行 'systemctl list-unit-files'。
          查看在具体 target 启用的服务请执行
          'systemctl list-dependencies [target]'。
    
    netconsole     	0:1:2:3:4:5:6:关
    network        	0:1:2:3:4:5:6:关
    squid          	0:1:2:3:4:5:6:[root@squid ~]# systemctl restart squid
    [root@squid ~]# service squid restart
    正在关闭 squid...
    关闭成功
    正在启动 squid...
    启动成功
    [root@squid ~]# systemctl status squid
    

    在这里插入图片描述
    (6) 设置传统代理服务器

    [root@squid ~]# vi /etc/squid.conf
    ...//省略部分信息
    http_port 3128
    cache_mem 64 MB			
    '//指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好是4的倍数,单位为MB,建议设为物理内存的1/4'
    reply_body_max_size 10 MB	
    '//允许用户下载的最大文件大小,以字节为单位。默认设置0,表示不进行限制'
    maximum_object_size 4096 KB	
    '//允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户'
    
    [root@squid ~]# squid -k parse	'//检测语法'
    [root@squid ~]# systemctl stop squid
    [root@squid ~]# systemctl start squid
    

    2.1.2 关闭防火墙

    发送给所有会话

    [root@squid ~]# systemctl stop firewalld
    [root@squid ~]# setenforce 0
    [root@squid ~]# systemctl disable firewalld
    [root@squid ~]# grep -v "#" /etc/selinux/config
    
    SELINUX=disabled
    SELINUXTYPE=targeted 
    
    

    2.1.3 Web站点的配置

    • 在web1服务器上
    [root@web1 ~]# yum -y install httpd
    [root@web1 ~]# echo "<h1>This is Web1</h1>" > /var/www/html/index.html
    [root@web1 ~]# systemctl start httpd
    [root@web1 ~]# curl http://localhost
    <h1>This is Web1</h1>
    
    • 在Web2服务器上
    [root@web2 ~]# yum -y install httpd
    [root@web2 ~]# echo "<h1>This is Web2</h1>" > /var/www/html/index.html
    [root@web2 ~]# systemctl start httpd
    [root@web2 ~]# curl http://localhost
    <h1>This is Web2</h1>
    

    2.1.4 验证结果

    • 浏览器上未设置代理服务器时

    此时在客户机上访问web地址,在web上查看日志明显,看到均由客户机发起请求

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

    tail -f /var/log/httpd/access_log	'//查看动态日志'
    

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

    • 在客户机浏览器上设置代理服务器
    squid服务器上
    [root@squid ~]# iptables -F
    [root@squid ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
    [root@squid ~]# iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:squid
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination 
    
    (1)在客户机浏览器上,选择首选项进入高级配置,选择网络设置
    
    (2)设置手动配置代理,填写代理服务器的地址及其端口号,并确定修改的配置
    
    (3)然后清空浏览器缓存,访问web站点地址,查看日志
    

    在这里插入图片描述
    在这里插入图片描述
    发现是从squid代理服务器发起的请求

    此时表示传统代理服务器设置成功

    2.2 配置透明代理服务器

    在这里插入图片描述

    **项目环境:**
    - 一台代理服务器squid,双网卡:
    IP:192.168.70.20(VM1)
    IP:192.168.80.21(VM2)
    - 两台Web站点服务器:
    IP:192.168.80.22(VM2)
    IP:192.168.80.23(VM2)
    Web服务器不需要指网关
    - 一台客户机:
    IP:192.168.70.21(VM1)
    客户机需要指网关,指向代理服务器VM1的IP
    

    2.2.1 搭建网络环境

    • 在squid服务器上开启路由,确保客户机能 ping 通Web服务器
    [root@squid ~]# vi /etc/sysctl.conf
    ...
    net.ipv4.ip_forward=1
    [root@squid ~]# sysctl -p
    
    • 在web1和web2上均进行以下配置
    route add -net 192.168.70.0/24 gw 192.168.80.21
    route -n	'//查看路由'
    

    2.2.2 在squid代理服务器上的配置

    • 设置代理IP和端口
    [root@squid ~]# vi /etc/squid.conf
    ...
    http_port 192.168.70.20:3128 transparent
    
    [root@squid ~]# systemctl restart squid
    [root@squid ~]# netstat -anpt | grep squid
    tcp        0      0 192.168.70.20:3128      0.0.0.0:*               LISTEN      98583/(squid-1)  
    
    • 修改添加策略
    [root@squid ~]# iptables -F		'//清空防火墙策略'
    [root@squid ~]# iptables -t nat -I PREROUTING -i ens33 -s 192.168.70.0/24 -p tcp --dport=80 -j REDIRECT --to 3128
    [root@squid ~]# iptables -t nat -I PREROUTING -i ens33 -s 192.168.70.0/24 -p tcp --dport=443 -j REDIRECT --to 3128
    [root@squid ~]# iptables -I INPUT -p tcp --dport=3128 -j ACCEPT
    

    在这里插入图片描述

    • 验证结果

    (1)在客户机浏览器上,选择首选项设置不使用代理,访问web站点服务器

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

    (2)在web站点服务器上,查看日志

    在这里插入图片描述
    在这里插入图片描述
    访问的地址为squid代理服务器的VM1地址

    (3)在squid服务器上,查看日志

    在这里插入图片描述
    此刻表示透明代理服务器设置成功

    3.ACL访问控制

    3.1 常用的ACL列表类型

    • src → 源地址
    • dst → 目标地址
    • port → 端口号
    • dstdomain → 目标域
    • time → 访问时间
    • maxconn → 最大并发连接
    • url_regex → 目标URL地址
    • Urlpath regex → 整个目标URL路径

    3.2 ACL的特点

    • 先定义,再调用
    squid 定义 acl
    acl	列表名称	类型	控制的对象
    
    squid 调用 acl
    http_access allow/deny 列表名称
    

    3.3 Squid中ACL的应用

    • 这里我们可以在之前设置的透明代理上,进行相关验证

    (1) 设置访问控制,拒绝客户机访问

    [root@squid ~]# vi /etc/squid.conf
    ...
    acl client   src 192.168.70.21/32
    http_access deny client
    

    在这里插入图片描述

    (2) 重启服务

    [root@squid ~]# systemctl stop squid
    [root@squid ~]# systemctl start squid
    

    (3) 验证结果

    • 在客户机上访问Web服务器

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

    • 查看日志

    在这里插入图片描述

    4.Squid日志分析工具

    4.1 配置sarg日志

    • 在根目录下导入软件包
      在这里插入图片描述
    • 在联网的环境下
    [root@squid ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
    '//可以从阿里云镜像仓库,Epel 镜像中获取'
    

    在这里插入图片描述

    [root@squid ~]# yum -y install gd gd-devel	'//图像处理'
    

    注意:

    • 若无法安装 gd-deve,需在yum源目录下导入以下配置文件
    • 配置文件从网易开源镜像站获取

    在这里插入图片描述

    • 再重新安装
    [root@squid ~]# yum -y install gd gd-devel
    
    • 创建目录,并解包编译
    [root@squid ~]# mkdir /usr/local/sarg
    [root@squid ~]# tar zxvf sarg-2.3.7.tar.gz
    [root@squid ~]# cd sarg-2.3.7/
    [root@squid sarg-2.3.7]# ./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection
    [root@squid sarg-2.3.7]# make && make install
    [root@squid sarg-2.3.7]# cd
    
    • 配置sarg信息
    [root@squid ~]# vi /etc/sarg/sarg.conf
    ...
    access_log /usr/local/squid/var/logs/access.log		//7,指定访问日志文件
    title "Squid User Access Reports"					//25,网页标题
    output_dir /var/www/html/squid-reports		//120,报告输出目录
    user_ip no									//178,使用用户名 显示
    topuser_sort_field connect reverse			//184,top排序中有连接次数、访问字节、降序排列,升序是normal
    user_sort_field reverse						//190,用户访问记录连接次数、访问字节按降序排序
    exclude_hosts /usr/local/sarg/noreport		//206,不计入排序的站点列表文件
    overwrite_report no			//257,同名日志是否覆盖
    mail_utility mailx.postfix	//289,发送邮件报告命令
    charset UTF-8	//434,使用字符集
    weekdays 0-6	//518,top排行的星期周期
    hours 0-23		//525,top排行的时间周期
    www_document_root /var/www/html		//633,网页根目录
    
    • 生成sarg报告
    [root@squid ~]# touch /usr/local/sarg/noreport
    [root@squid ~]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
    [root@squid ~]# cd /usr/local/squid/var/logs/
    [root@squid logs]# ls -lh
    总用量 44K
    -rw-r-----. 1 squid squid 2.7K 1216 00:18 access.log
    -rw-r-----. 1 squid squid  37K 1216 00:19 cache.log
    [root@squid logs]# cd
    [root@squid ~]# sarg
    SARG: 纪录在文件: 22, reading: 100.00%
    SARG: 成功的生成报告在 /var/www/html/squid-reports/2020Dec15-2020Dec16
    
    • 安装并启动http服务
    [root@squid ~]# yum -y install httpd
    [root@squid ~]# systemctl start httpd.service
    

    4.2 验证结果

    • 在客户机上访问 http://192.168.70.20/squid-reports/

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

    注意:如果客户机无法访问,查看代理服务器的ACL访问控制,是否该IP被禁止

    4.3 周期性计划任务执行

    • 每天凌晨两点生成报告 crontab
    [root@squid ~]# which sarg
    /usr/local/bin/sarg
    [root@squid ~]# crontab -e
    * 2 * * * /usr/local/bin/sarg -l /usr/local/var/logs/access.log -o /var/www/html/squid-reports/-z -d $(date -d "-1 day" +%Y-%m-%d)-$(date +%Y-%m-%d)
    

    5.反向代理

    5.1 概述

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

    5.2 反向代理网站加速

    工作机制

    • 缓存网页对象,减少重复请求;
    • 将互联网请求轮询或按权重分配到内网Web服务器;
    • 代理用户请求,避免用户直接访问Web服务器,提高安全。
      在这里插入图片描述

    5.3 反向代理的应用

    [root@squid ~]# systemctl stop httpd.service	'//因为在squid反向代理中会用到80端口,所以要先停止http服务'
    [root@squid ~]# vi /etc/squid.conf
    http_port 192.168.70.20:80 accel vhost vport
    cache_peer 192.168.80.22 parent 80 0 no-query originserver round-robin max_conn=100 weight=1 name=web1
    cache_peer 192.168.80.23 parent 80 0 no-query originserver round-robin max_conn=100 weight=1 name=web2
    cache_peer_domain web1 web2 www.yun.com		'//添加设置域名访问'
    
    [root@squid ~]# iptables -F		'//清除所有防火墙策略'
    [root@squid ~]# iptables -F -t nat
    [root@squid ~]# iptables -L -t nat     '//查看nat上的所有规则'
    [root@squid ~]# systemctl stop squid
    [root@squid ~]# systemctl start squid
    [root@squid ~]# netstat -anpt | grep squid
    tcp        0      0 192.168.70.20:80        0.0.0.0:*               LISTEN      102906/(squid-1)    
    
    • 在浏览器上访问,并验证
      在这里插入图片描述
      在这里插入图片描述
    展开全文
  • 一.Squid 服务基础 Squid 是 Linux 系 统 中 最 常 用 的 一 款 开 源 代 理 服 务 软 件 ,可以很好地实现 HTTP 和 FTP,以及 DNS 查询...当客户机通过代理来请求 Web 页面时,指定的代理服务器会先检查自己的缓存:

    目录

    一.Squid 服务基础

    (1)代理的工作机制

    (2)代理的基本类型

     二.安装 Squid 服务

     (1)编译安装 Squid

    (2)修改 Squid 的配置文件

    (3)Squid 的运行控制

    (4)创建 Squid 服务脚本

     三.构建传统代理服务器

    四.构建透明代理服务器

    五.ACL访问控制

     六.Squid 日志分析

    七.Squid 反向代理

    八.Squid总结


    一.Squid 服务基础

    Squid 是 Linux 系 统 中 最 常 用 的 一 款 开 源 代 理 服 务 软 件 ,可以很好地实现 HTTP 和 FTP,以及 DNS 查询、SSL 等应 用的缓存代理,功能十分强大。

    官 方 网 站 为: http://www.squid-cache.org/

    ①缓存代理概述

    作为应用层的代理服务软件,Squid 主要提供缓存加速、应用层过滤控制的功能。

    (1)代理的工作机制

    当客户机通过代理来请求 Web 页面时,指定的代理服务器会先检查自己的缓存:

    如果缓存中已经有客户机需要的页面,则直接将缓存中的页面内容反馈给客户机。

    如果缓存中没 有客户机要访问的页面,则由代理服务器向 Internet 发送访问请求,获得返回的 Web 页面 以后,将网页数据保存到缓存中并发送给客户机

    01c89c4dd755de60033568b77ad581b9.png

    HTTP 代理的缓存加速对象主要是文字、图像等静态 Web 元素。使用缓存机制后,当 客户机在不同的时候访问同一 Web 元素,或者不同的客户机访问相同的 Web 元素时,可 以直接从代理服务器的缓存中获得结果。这样就大大减少了向 Internet 提交重复的 Web 请 求的过程,提高了客户机的 Web 访问响应速度。

    由于客户机的 Web 访问请求实际上是由代理服务器来代替完成的,从而可以隐藏用户 的真实 IP 地址,起到一定的保护作用。另一方面,代理服务器担任着类似“经纪人”的角色, 可以针对要访问的目标、客户机的地址、访问的时间段等进行过滤控制。

    (2)代理的基本类型

    根据实现方式不同,代理服务可分为传统代理和透明代理两种常见的代理服务:

    传统代理:也就是普通的代理服务,首先必须在客户机的浏览器、QQ 聊天工具、下载 软件等程序中手动设置代理服务器的地址和端口,然后才能使用代理来访问网络。对于 网页浏览器,访问网站时的域名解析请求也会发给指定的代理服务器。

    透明代理:提供与传统代理相同的功能和服务,其区别在于客户机不需要指定代理服务 器的地址和端口,而是通过默认路由、防火墙策略将 Web 访问重定向,实际仍然交给 代理服务器来处理。重定向的过程对客户机是“透明”的,用户甚至并不知道自己在使用 代理服务,所以称为透明代理。使用透明代理时,网页浏览器访问网站时的域名解析请 求将优先发给 DNS 服务器。

    实际应用中,传统代理多见于 Internet 环境,如为 QQ 程序使用代理可以隐藏本机真实 IP 地址、为下载工具使用多个代理可以规避服务器的并发连接限制。而透明代理多见于局 域网环境,如在 Linux 网关中启用透明代理后,局域网主机无须进行额外设置就可以享受更 好的上网速度。

     二.安装 Squid 服务

    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0
    

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

     (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正则表达式
    #----------------------------------------------------------------
    

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

     watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

    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/ 此目录是用于存放缓存文件
    

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

    (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	#指定缓存文件目录
    

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

    (3)Squid 的运行控制

    • 检查配置文件语法是否正确
    squid -k parse
    

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

    • 启动 Squid,第一次启动squid服务时,会自动初始化缓存目录
    squid -z 					#-z 选项用来初始化缓存目录
    squid						#启动 squid 服务
    
    netstat -anpt | grep "squid"
    

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

    (4)创建 Squid 服务脚本

    2345是默认自启动级别,如是-代表任何级别都不自启动;90是启动优先级,25是停止优先级,优先级范围是0-100,数字越大,优先级越低。

    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
    

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

    chmod +x /etc/init.d/squid
    chkconfig --add squid
    chkconfig --level 35 squid on
    
    #查看squid服务在哪些级别中自启
    chkconfig --list squid
    

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

     三.构建传统代理服务器

    环境配置

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

    Squid-Server (192.168.100.130)

    ①首先先编译安装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
    

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

     watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

    ②生产环境中还需要修改防火墙规则

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

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

    Web1 (192.168.100.132)

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

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

     watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

    客户机(192.168.100.128)

    (1)首先配置客户端IP地址

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

    (2)打开浏览器,配置代理功能
    流程:打开浏览器,设置–>高级设置–>打开代理设置–>–>开启代理服务器(地址:Squid服务器IP地址,端口:3128)

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_9,color_FFFFFF,t_70,g_se,x_16

     watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_9,color_FFFFFF,t_70,g_se,x_16

     watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

    验证结果:Web1 (192.168.100.132)查看squid 访问日志的新增记录

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

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

    客户机(192.168.100.128)在浏览器输入Web服务器IP地址访问,查看Web服务器访问日志,显示的是由代理服务器替客户机在访问。

    http://192.168.100.132

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

    四.构建透明代理服务器

    环境配置

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

    Squid服务器配置(ens33:192.168.100.130 、ens37:12.0.0.1)

    ①关机,添加网卡,注意两个网卡设置在不同的虚拟网卡上

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

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

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

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_15,color_FFFFFF,t_70,g_se,x_16

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_17,color_FFFFFF,t_70,g_se,x_16

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_18,color_FFFFFF,t_70,g_se,x_16

    ③我这里squid服务已安装好了(安装squid服务前要设置好yum云),安装操作按照上面的安装即可,我这里直接修改配置文件了

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

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

     watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

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

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

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

    ⑤修改防火墙规则

    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
    

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

    Web1(192.168.100.132)

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

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

     watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

    客户机测试(192.168.100.128)

    (1)设置ip地址

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_12,color_FFFFFF,t_70,g_se,x_16

    注意:如果使用刚才实验的主机,需要关闭客户机的浏览器设置的代理服务器的功能

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_13,color_FFFFFF,t_70,g_se,x_16

    (2)访问 http://192.168.100.132

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz552h5oeS6KeJcXdx,size_20,color_FFFFFF,t_70,g_se,x_16

    查看 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服务器192.168.100.132
    

    五.ACL访问控制

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

    1.访问控制列表格式

    格式:acl 列表名称 列表类型 列表内容 …

    列表类型定义的列表内容
    src源地址
    dst目标地址
    maxconn最大并发连接
    port目标地址
    dstdomain目标域
    url_regex匹配请求URL的任何部分
    urlpath_regex与url_regex非常相似(不包含传输协议和主机名)
    time访问时间

    例如:

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

    2.实操
    环境配置(直接使用之前实验的实例即可)

    squid服务器 CentOS7.4(64 位) 192.168.80.10 squid-3.5.28.tar.gz nat模式

    web服务器 CentOS7.4(64 位) 192.168.80.20 Apache nat模式

    web服务器 CentOS7.4(64 位) 192.168.80.30 Apache nat模式

    client客户端 CentOS7.4(64 位) 192.168.80.40 —— nat模式

    vim /etc/local.list
    192.168.153.60

     

    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
    

     

     Web1和Web2上安装httpd服务并开启

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

     

    3.Client客户上测试

    ① 设置手动代理服务

     

     访问Web1测试

     访问Web2测试

     六.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)添加不加入站点文件

    ① 优化路径并启动sarg

    touch /usr/local/sarg/noreport
    
    ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
    sarg --help
    
    sarg				#启动一次记录

    浏览器中访问squid服务器测试

     

     (3)添加计划任务,执行每天生成报告

    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
    

    七.Squid 反向代理

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

    工作机制:

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

    环境配置

    服务器类型 系统和IP地址 需要安装的组件 网络模式

    squid服务器 CentOS7.4(64 位) 192.168.80.10 squid-3.5.28.tar.gz nat模式

    web服务器 CentOS7.4(64 位) 192.168.80.20 Apache nat模式

    web服务器 CentOS7.4(64 位) 192.168.80.30 Apache nat模式

    client客户端 Win10 192.168.80.100 —— nat模式

    Squid-Server(192.168.80.10)

    vim /etc/squid.conf
    ......
    #---------60行,修改,插入-------------------------------------------
    http_port 192.168.163.10:80 accel vhost vport
    cache_peer 192.168.163.15 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
    cache_peer 192.168.163.20 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

    2.客户机的域名映射配置

    找到hosts这个文件

     添加自己需要解析的ip

    3.测试反向代理

    ①开启客户机的代理配置

    ②访问squid进行测试反向代理功能

     

     

    八.Squid总结

    1 . Squid作用:

    缓存加速,缓存从后端web服务器获取到的,加速为了客户端访问

    2 . Squid的三种模式:

    ① 传统模式

    需要客户端指向squid代理服务器,客户端能感知到squid代理服务器的存在

    修改的配置文件:squid.conf 设置 3128 端口、缓存和允许下载的大小

    ② 透明代理

    客户端不需要配置,只要直接访问即可,服务端开启路转发,借助了防护墙规则及静态路由的方式,完成透明代理

    修改的配置文件:squid.conf 设置ip和 3128 端口

    需要设置iptables的流量重定向,将指定网卡网段的流量重定向到 3128 端口

    ③ 反向代理

    作为类似于nginx服务器的反向代理功能,但自身不需要一个首页,基于ip:端口。权重的方式完成反向代理

    修改的配置文件:squid.conf 设置端口为 80

    服务端需要开启客户机的代理配置

    3 . 对应Squid自身的管理/功能:

    ① ACL:主要做的是http_access(基于http协议,access访问)的允许和拒绝管理

    使用 acl 配置项定义需要控制的条件;

    通过 http_access 配置项对已定义的列表做“允许”或“拒 绝”访问的控制。

    ② Sarg:日志分析功能,可以以天的方式指定将access_log中的内容输出到一个web页面中(借助了httpd)展示出来。

    借助SARG日志分析工具实现;

    编写脚本并加入计划性任务可实现每日自动生成报告。

    展开全文
  • 透明代理:客户机不需指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理 (二)使用代理的好处 提高Web访问速度 隐藏客户机的真实IP地址 二、实验:使用Squid实现传统...
  •  Squid是Linux下一个缓存Internet数据的代理服务器软件,其接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户想要下载一个主页时,可以向Squid发出一个申请,要Squid代替其进行下载,然后Squid...
  • 本文介绍Linux下非常著名、常用的Squid代理服务器的使用,并着重讲述如何使用其提供的访问控制策略,来保证代理服务器的合法使用。
  • squid代理服务器应用

    2021-11-09 08:57:17
    一、squid代理服务器 1、代理的工作机制 2、代理的类型 二、部署Squid服务 1、安装软件 2、修改Squid的配置文件 3、编写Squid服务脚本 三、搭建传统代理服务器 1、服务器需求 2、搭建传统代理 四、搭建...
  • squid 代理服务器

    2019-11-21 15:51:53
    squid代理服务器(包括正向代理服务器、反向代理服务器(cdn加速) squid调度器:负载均衡(缓解企业服务器的压力)) 1.什么是squid代理服务器? Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS...
  • 一、squid的简单介绍 1.1、squid的概念 squid是一种用来缓存Internet数据的软件。接受来自人们需要下载的目标(object)的请求并适当的处理这些请求。也就是说,如果一个人想...1.2、squid代理的作用 通过缓存的方式
  • 文章目录一:squid代理服务器概述1.1:squid简介1.2:squid代理请求流程1.3:squid代理服务类型二:部署环境实验操作2.1:环境案例2.2:安装squid服务2.3:传统代理模式(正向)2.4:透明模式2.5:ACL访问控制2.6:...
  • 通过架设专门的WWW(FTP)代理来满足用户的主要需求,通过架设socks5代理来满足用户的其他需求。 一、对使用者的分析 现有网络情况: 我校校园网通过光缆已将31座建筑物连通,光缆总长度约15Km,绝大多数楼中实现结构...
  • 万字长文带你了解最常用的开源 Squid 代理服务器

    千次阅读 多人点赞 2020-03-01 21:04:00
    Squid:是一个高性能的代理缓存服务器Squid 支持 FTP、gopher、HTTPS 和 HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求,作为应用层的代理服务软件,...
  • Squid代理服务器应用(服务搭建详细步骤讲解) 文章目录一、代理的工作机制二、Squid 代理的类型三、Squid部署(一)、安装 Squid 服务(二)、构建传统代理服务器(三)、构建透明代理服务器1、网址设置2、Squid...
  • CentOS下搭建Squid代理服务器

    千次阅读 2019-09-25 16:57:21
    “量子扰动超导探测器。战争期间用它搜索潜艇,寻找敌人的赛伯武器系统.” “哦?海军的玩意儿?打仗的时候用过?这么说,乌贼能读出你大脑芯片上储存的...‍‍“squid”一般是指“量子扰动超导探测器(当然今天要讲的...
  • Centos7搭建Squid代理服务器 1.无需验证版----http 1.1 安装 yum install squid 1.2 修改配置文件 打开文件: vim /etc/squid/squid.conf 修改 http_access allow all 为 http_access deny all [外链图片转存失败...
  • 网络管理与维护 实验报告(九):squid代理服务器.doc
  • Squid代理服务器应用

    2021-08-01 22:14:53
    文章目录一、Squid代理服务器概述1.1web代理的工作机制1.2代理的基本类型1.3使用haproxy代理的优点二、搭建部署Squid代理服务器2.1编译安装Squid 一、Squid代理服务器概述 Squid主要提供缓存加速、应用层过滤控制...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,487
精华内容 12,594
关键字:

squid代理服务器