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

Written by

in

文章目录
  • 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) 在客户机访问,日志报告网页 日志分割后
    • 一: ACL访问控制
      • 1.1: ACL访问控制概述
      • 1.2: ACL访问控制实验
    • 二: Squid日志分析
    • 三: 反向代理
      • 3.1: 反向代理详解
      • 3.2: 实验分析以及结构图
      • 3.3: 具体操作分析

    • 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.解压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

    • 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

    • 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页面时不会在反向代理服务器缓存的

    • 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

    • 配置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
      已经轮询代理

    评论

    发表回复

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

    站内搜索