缓存加速—–Squid-访问控制列表日志分析反向代理

文章目录

  • 一: ACL访问控制
    • 1.1: ACL访问控制概述
    • 1.2: ACL访问控制实验
  • 二: Squid日志分析
  • 三: 反向代理
    • 3.1: 反向代理详解
    • 3.2: 实验分析以及结构图
    • 3.3: 具体操作分析

一: ACL访问控制

1.1: ACL访问控制概述

  • ACL访问控制方式
    根据源地址、目标URL、文件类型等定义列表

    acl 列表名称 列表类型列表内容...
    
  • 针对已定义的acl列表进行限制

    http_access allow或deny 列表名称...
    
  • ACL规则优先级
    一个用户访问代理服务器时,Squid会顺序匹配Squid中定义的所有规则列表,一旦匹配成功,立即停止匹配
    所有规则都不匹配时,Squid会使用与最后一条相反的规则

  • 常用的ACL列表类型

    src --> 源地址
    dst --> 目标地址
    port端口
    odstdomain -->目标域
    time -->访问时间
    maxconn -->最大并发连接
    url_regex -->目标URL地址
    Urlpath_regex -->整个目标URL路径
    
  • 最简单的ACL控制

    禁止任何客户机使用此代理服务

    [root@localhost~]# viletclsquid.conf
    acl all src 0.0.0.0/0.0.0.0
    http_access deny all
    定义一条名为all的列表,匹配来自任意
    源地址的代理访问;然后拒绝此列表
    
  • ACL综合应用1
    允许多个局域网段在工作时间上网

    [root@localhost~]# vi letclsquid.conf
    ......
    acl all src 0.0.0.0/0.0.0.0
    acl MYLAN src 192.168.1.0/24 192.168.4.0/24
    acl WORKTIMEtime MTWHF 08:30-17:30
    http_access allow MYLAN WORKTIME
    http_access deny all
    

1.2: ACL访问控制实验

  • 做传统代理,也可以基于透明代理)

    1.解压squid软件包
    monut.cifs //192.168.1.150/qq-Download /mnt
    cd /mnt
    tar xzvf squid-3.4.6.tar.gz -C /opt
    2.安装相关软件包
    yum install gcc gcc-c++ make -y
    3.配置服务模块,编译安装
    cd /opt/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-gnuregexmake && make install
    4.创建软链接,优化服务控制方式
    ln -s /usr/local/squid/sbin/squid /usr/local/sbin/
    5.创建squid用户
    useradd -M -s /sbin/nologin squid
    6.修改squid中的var的属性
    chown -R squid.squid /usr/local/squid/var/
    7.编辑squid的配置文件
    vim /etc/squid.conf55 # And finally deny all other access to this proxy56 http_access allow all57 http_access deny all        //允许所有用户访问58 59 # Squid normally listens to port 312860 http_port 3128   61 cache_mem 64 MB  //指定缓存功能所使用的内存空间大小62 reply_body_max_size 10 MB    //允许用户下载的最大文件大小63 maximum_object_size 4096 KB    //允许保存到缓存空间的最大对象大小64 cache_effective_user squid    //添加指定程序用户65 cache_effective_group squid    //添加指定账户基本组66 67 # Uncomment and adjust the following to add a disk cache directory.68 #cache_dir ufs /usr/local/squid/var/cache/squid 100 16 2568.编辑防火墙规则
    iptables -F    //清除所有规则
    iptables -I INPUT -p tcp --dport 3128 -j ACCEPT //允许目标端口3128做转发9.检查语法并且开启服务
    squid -k parse    //检查配置文件语法
    squid -z          //初始化缓存目录
    squid             //启动服务
    [root@squid ~]# netstat -natp | grep squid
    tcp6       0      0 :::3128                 :::*                    LISTEN      36414/squid-1)     
    [root@squid ~]# 10.编辑脚本,优化服务控制方式(service 工具)
    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/nullif [ $? -eq 0 ]thenecho "squid is running"elseecho "正在启动 squid...."echo "成功启动"$CMDfi;;
    stop)$CMD -k kill &> /dev/nullrm -rf $PID &> /dev/null;;
    status)[ -f $PID ] &> /dev/nullif [ $? -eq 0 ]thennetstat -natp | grep squidelseecho "squid is not running"fi;;
    restart)$0 stop &> /dev/nullecho "正在关闭 squid..."echo "关闭成功"$0 start &> /dev/nullecho "正在启动 squid..."echo "启动成功";;
    reload)$CMD -k reconfigure;;
    check)$CMD -k parse;;*)echo "用法:$0{start|stop|status|reload|check|restart}";;
    esacchmod +x /etc/init.d/squid   //添加服务执行权限 
    chkconfig --add squid    //添加到service的服务列表
    chkconfig --level 35 squid on    //开机自启
    [root@localhost ~]# service squid restart
    正在关闭 squid...
    关闭成功
    正在启动 squid...
    启动成功
    
  • 修改squid配置文件

    禁止源地址访问

    [root@squid ~]# vim /etc/squid.conf
    ...
    # should be allowed
    acl netlocal src 192.168.100.30  '添加ACL规则'
    ...
    # Deny requests to certain unsafe ports
    http_access deny netlocal   '拒绝netlocal列表访问'
    [root@squid ~]# service squid reload  '重新加载如无'
  • mark

  • mark

  • 禁止访问目的地址

    [root@squid ~]# mkdir /etc/squid
    [root@squid ~]# vim /etc/squid/denyip.list  '创建文件'
    192.168.100.150   '添加目的地址,web服务器的地址'
    [root@squid ~]# vim /etc/squid.conf
    # should be allowed
    acl destionhost dst "/etc/squid/denyip.list" '添加绝对路径'# Deny requests to certain unsafe ports
    http_access deny destionhost  '添加规则'
    [root@squid ~]# service squid reload

    mark

    取消调用

    mark

    mark

    取消调用后可以访问web

二: Squid日志分析

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

  • 在squid代理服务器上配置sarg服务

    1.安装必要软件包
    yum install -y gd gd-devel2.解压软件包
    tar xzvf sarg-2.3.7.tar.gz -C /opt3.安装功能模块,编译安装
    mkdir /usr/local/sarg   //创建安装目录
    cd /opt/sarg-2.3.7
    ./configure \
    --prefix=/usr/local/sarg \
    --sysconfdir=/etc/sarg \             //配置文件存放位置
    --enable-extraprotection             //额外的安全防护
    make && make install 4.编辑sarg的配置文件
    [root@squid ~]# 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排序中有连接次数、访问字节、降序排列 降序为reverse,升序为normal
    206	exclude_hosts /usr/local/sarg/noreport    //不计入排序的站点列表文件,需要创建
    257	overwrite_report no    //不覆盖同名日志
    289	mail_utility mailq.postfix    //发送邮件报告,命令
    434	charset UTF-8    //开启字符集
    517	weekdays 0-6    //按星期周期排序
    525	hours 0-23    //按小时周期排序
    633 www_document_root /var/www/html    //网页根目录5.添加不计入站点文件,添加的域名将不被显示在排序中
    touch /usr/local/sarg/noreport6.创建软链接,优化服务控制方式
    ln -s /usr/local/sarg/bin/sarg /usr/local/bin7.安装http服务
    yum install httpd -y8.开启日志分析服务
    [root@squid ~]# sarg
    SARG: 纪录在文件: 17, reading: 100.00%
    SARG: 成功的生成报告在 /var/www/html/squid-reports/2020Feb03-2020Feb04
    [root@squid ~]# 9.开启httpd服务,关闭防火墙
    [root@squid ~]# systemctl stop firewalld
    [root@squid ~]# setenforce 0
    [root@squid ~]# systemctl start httpd
    [root@squid ~]# netstat -natp | grep 80
    tcp6       0      0 :::80                   :::*                    LISTEN      1631/httpd  
  • 计划性任务的sarg的日志分析

    sarg命令常用选项:
    -l 指定输入日志来源
    -o 指定输出目录
    -z 处理信息
    -d 指定日期
  • 执行周期性计划任务,每天生成报告

    [root@squid squid-reports]# 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)
    
  • 在客户机访问,日志报告网页

    mark

    mark

    日志分割后

    mark

三: 反向代理

3.1: 反向代理详解

  • squid作为代理服务软件,其主要功能是使用代理上网可以节约紧缺的IP地址资源,而且可以阻断外部主机对内部主机的访问,有一定的安全性,但是如果想让互联上的主机访问内部网的主机资源(例如:web站点),又想使内部主机免受外部网主机攻击,一般的代理服务是不能实现的这就需要反向代理来实现

  • 什么是反向代理呢?其实,反向代理也就是通常所说的web服务器加速,它是一种通过在繁忙的WEB服务器和internet之间增加一个高速的web缓冲服务器(即:web反向代理服务器)来降低实际的web服务器的负载

  • mark

  • 下面将对几种典型的代理服务作一个简单的比较。在网络上常见的代理服务器有三种:

1. 标准的代理缓冲服务器(传统代理)

一个标准的代理缓冲服务被用于缓存静态的网页(例如:html文件和图片文件等)到本地网络上的一台主机上(即代理服务器)。当被缓存的页面被第二次访问的时候,浏览器将直接从本地代理服务器那里获取请求数据而不再向原web站点请求数据。这样就节省了宝贵的网络带宽,而且提高了访问速度。但是,要想实现这种方式,必须在每一个内部主机的浏览器上明确指明代理服务器的IP地址和端口号。客户端上网时,每次都把请求送给代理服务器处理,代理服务器根据请求确定是否连接到远程web服务器获取数据。如果在本地缓冲区有目标文件,则直接将文件传给用户即可。如果没有的话则先取回文件,先在本地保存一份缓冲,然后将文件发给客户端浏览器。

2. 透明代理缓冲服务器

透明代理缓冲服务和标准代理服务器的功能完全相同。但是,代理操作对客户端的浏览器是透明的(即不需指明代理服务器的IP和端口)。透明代理服务器阻断网络通信,并且过滤出访问外部的HTTP(80端口)流量。如果客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,如果在本地没有缓冲则向远程web服务器发出请求,其余操作和标准的代理服务器完全相同。对于Linux操作系统来说,透明代理使用Iptables或者Ipchains实现。因为不需要对浏览器作任何设置,所以,透明代理对于ISP(Internet服务器提供商)特别有用。

3. 反向代理缓冲服务器

反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始WEB服务器的负载。反向代理服务器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载。它位于本地WEB服务器和Internet之间,处理所有对WEB服务器的请求,阻止了WEB服务器和Internet的直接通信。如果互联网用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发送给用户。这种方式通过降低了向WEB服务器的请求数从而降低了WEB服务器的负载。

  • 反向代理工作原理
  • 当用户浏览器发出一个HTTP请求时,通过域名解析将请求定向到反向代理服务器(如果要实现多个WEB服务器的反向代理,需要将多个WEB服务器的域名都指向反向代理服务器)。由反向代理服务器处理器请求。反向代理一般只缓存可缓冲的数据(比如html网页和图片等),而一些CGI脚本程序或者ASP之类的程序不缓存。它根据从WEB服务器返回的HTTP头标记来缓冲静态页面。有四个最重要HTTP头标记:

Last-Modified: 告诉反向代理页面什么时间被修改

Expires: 告诉反向代理页面什么时间应该从缓冲区中删除

Cache-Control: 告诉反向代理页面是否应该被缓冲

Pragma: 告诉反向代理页面是否应该被缓冲.

例如:在默认情况下,ASP页面返回” Cache-control: private.” ,所以ASP页面时不会在反向代理服务器缓存的

3.2: 实验分析以及结构图

  • mark

  • 类型 IP地址 系统 软件包
    squid代理服务器 ens33:192.168.100.140/24 centos7 squid-3.4.6.tar.gz
    web服务器1 192.168.100.150/24 centos7
    web服务器2 192.168.100.160/24 centos7
    客户机 192.168.100.10/24 centos7

3.3: 具体操作分析

  • 配置squid代理服务器

    [root@squid squid-reports]# vim /etc/squid.conf
    http_port 192.168.100.140:80 accel vhost vport	'//监控本机80端口'
    cache_peer 192.168.100.150 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1	'//节点服务器1最大访问30,权重1,别名web1'
    cache_peer 192.168.100.160 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2	'//节点服务器2最大访问30,权重1,别名web2'
    cache_peer_domain web1 web2 www.yun.com  '//访问www.yun.com匹配web1,web2节点'
    [root@squid squid-reports]# service squid restart	'//重启服务'
    正在关闭 squid...
    正在启动 squid...
    [root@squid squid-reports]# netstat -ntap |grep 80	'//查看80端口是否被squid使用'
    tcp        0      0 192.168.100.140:80       0.0.0.0:*               LISTEN      5197/squid-1) 
    //这里如果httpd的80端口在使用,把httpd停掉,这里用不掉,要先空闲80端口
    
  • 配置web服务器两个节点相同

    [root@web1 ~]# cd /var/www/html
    [root@web1 html]# vim index.html	'//修改首页内容'
    <h1>this is  web01!</h1>
    '//web2服务器设置'
    [root@web2 ~]# yum install httpd -y	'//安装httpd服务'
    [root@web2 ~]# vim /var/www/html/index.html	'//修改首页内容'
    <h1>this is web02 web!</h1>                        //另外一台Web修改为web01
    systemctl stop firewalld.service	
    setenforce 0
    systemctl start httpd
    

    客户机环境

    mark

    mark

  • 测试访问

    mark

    mark
    已经轮询代理

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注