Squid代理服务器应用(ACL访问控制、Squid日志分析工具Sarg、Squid反向代理)

一、Squid安装介绍

1.1 缓存代理概述

  • Web代理的工作机制

    • 缓存网页对象,减少重复请求
      在这里插入图片描述
  • 它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求

  • 也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如:http://squid.nlanr.net/)并向这个页面发出请求

  • 然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。

squid服务器:CDN
squid与源站服务器之间的协议:BGP

1.2 代理的基本类型

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

1.3 使用代理的好处

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

二、Squid代理服务器实验

环境

【6】 squid代理服务器 14.0.0.66
【7】 web服务器 14.0.0.77
【2】 客户端 传统代理需要在浏览器设置代理(透明代理不需要设置)

安装squid服务

【6】

##编译安装Squid 3.4.6
tar zxvf squid-3.4.6.tar.gz 

cd /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

make && make install

##Squid文件调整
ln -s /usr/local/squid/sbin/* /usr/local/sbin/

useradd -M -s /sbin/nologin squid

chown -R squid.squid /usr/local/squid/var/

vim /etc/squid.conf
http_port 3128               #端口号下面添加内容
cache_effective_user squid      #添加   指定程序用户
cache_effective_group squid     #添加   指定账号基本组


##Squid初始化
squid -k parse   #检查配置文件语法

squid -z     #初始化缓存目录

squid      #启动服务

netstat -natp | grep 3128    #查看端口状态
  
cd /etc/init.d/
vim squid

#!/bin/bash
#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid"      ###定义三个变量:pid文件,保存squid运行的进程号
CONF="/etc/squid.conf"    ###主配置文件
CMD="/usr/local/squid/sbin/squid"      ###启动的命令
 
case "$1" in
  start)
    netstat -natp | grep squid &> /dev/null       ###查看3128端口是否已经开启 
    if [ $? -eq 0 ]
    then
      echo "squid is runnig"
      else
      echo "正在启动 squid..."
      $CMD
    fi
  ;;
  stop)
    $CMD -k kill &> /dev/null
    rm -rf $PID &> /dev/null
  ;;
  ststus)
    [ -f $PID ] &> /dev/null
      if [ $? -eq 0 ]
        then
          netstat -natp | grep squid
        else
          echo "squid is not running"
      fi
  ;;
  restart)
    $0 stop &> /dev/null
    echo "正在关闭 squid..."
      $0 start &> /dev/null
    echo "正在启动 squid..."
  ;;
  reload)
    $CMD -k reconfigure      ###重新加载配置文件
  ;; 
  check)
    $CMD -k parse         ###检查语法
  ;;
  *)
    echo "用法: $0{start|stop|status|reload|check|restart}"
  ;;
esac

chmod +x squid

chkconfig --add squid         ###加入到service管理列表,可以用service squid start 

chkconfig --level 35 squid on        ###开机自启动

搭建传统代理服务器

【6】
vim /etc/squid.conf
http_access allow all      #允许所有终端进行访问源web服务器
http_access deny all      ###下面这条可以注释也可以不注释,读到上一行就不会读这一行
...
http_port 3128
cache_mem 64 MB     ###指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数
reply_body_max_size 10 MB   ###允许用户下载的最大文件大小,以字节为单位。默设置0表示不进行限制
maximum_object_size 4096 KB    ###允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被保存

iptables -F
setenforce 0
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

service squid reload


【7】 web服务器
iptables -F
setenforce 0
yum install httpd -y
systemctl start httpd.service 

在Windows系统中开启浏览器
设置----》高级----》打开代理设置----》点击开启----》地址:squid服务器ip地址 端口:3128
点击保存
地址栏输入Web服务器地址,
查看Web服务器访问日志accrss.log 是代理服务器地址访问
在这里插入图片描述
在这里插入图片描述

cd /var/log/httpd/
cat access_log 
......
14.0.0.66 - - [26/Aug/2020:23:31:16 +0800] "GET /noindex/css/fonts/Bold/OpenSans-Bold.ttf HTTP/1.1" 404 238 "http://14.0.0.77/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363"

在这里插入图片描述

搭建透明代理服务器

在这里插入图片描述

【6】
squid代理服务器设置为双网卡,都改为仅主机模式

cd /etc/sysconfig/network-scripts/

cp -p ifcfg-ens33 ifcfg-ens36
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=192.168.10.1
NETMASK=255.255.255.0

###开启路由转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward=1

sysctl -p        ###生效

service network restart 


vim /etc/squid.conf
http_port 192.168.10.1:3128 transparent

squid -k parse      ###验证语法


###防火墙做端口映射(http\https)
iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT


service squid reload
【7】
##### Web服务器加一条静态路由 ####
route add -net 192.168.10.0/24 gw 14.0.0.66

###客户端
在这里插入图片描述
###浏览器中之前开启的代理服务一定要先关掉!
在这里插入图片描述
在这里插入图片描述

三、Squid中ACL的使用

3.1 ACL访问控制

3.1.1 ACL访问控制方式

  • 根据源地址、目标URL、文件类型等定义列表
acl	列表名称	列表类型	列表内容	
  • 针对已定义的acl列表进行限制
    http_access allow或deny 列表名称

3.1.2 ACL规则优先级

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

3.2 常用的ACl列表类型

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

3.3 ACL列表的应用

3.3.1 最简单的ACL控制

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

[root@localhost ~]# vim /et/squid.conf
...
acl test src 20.0.0.100/32
...
http_access deny test

3.3.2 ACL综合应用

  • 允许多个局域网在工作时间上网
[root@localhost ~]# vim /etc/squid.conf
...
acl test src 20.0.0.200/32
acl MYLAN src 192.168.6.0/24 192.168.1.0/24
acl WORKTIME time MTWHFAC 08:30-17:30
...
http_access allow MYLAN WORKTIME
http_access deny test

MTWHFAC 周一到周日
分隔符为空格

  • 通过黑名单限制目标网站
//创建地址列表文件//
[root@localhost ~]# vim /etc/squid/ipblock.list
20.0.0.200
20.0.0.190
[root@localhost ~]# vim /etc/squid/dmblock.list
.qq.com
.msn.com
[root@localhost ~]# vim /etc/squid.conf
...
acl IPBLOCK dst "/etc/squid/ipblock.list"
acl DMBLOCK dstdomain "/etc/squid/dmblock.list"
...
http_access deny IPBLOCK
http_access deny DMBLOCK

实验

实验环境

【1】14.0.0.11 squid-3.4.6.tar.gz
【3】14.0.0.33 httpd

安装squid服务

【1】
tar zxvf squid-3.4.6.tar.gz 

cd /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

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/

vim /etc/squid.conf
http_port 3128               #端口号下面添加内容
cache_effective_user squid      #添加   指定程序用户
cache_effective_group squid     #添加   指定账号基本组


squid -k parse   #检查配置文件语法

squid -z     #初始化缓存目录

squid      #启动服务

netstat -natp | grep 3128    #查看端口状态
  
cd /etc/init.d/
vim squid

#!/bin/bash
#!/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 runnig"
      else
      echo "正在启动 squid..."
      $CMD
    fi
  ;;
  stop)
    $CMD -k kill &> /dev/null
    rm -rf $PID &> /dev/null
  ;;
  ststus)
    [ -f $PID ] &> /dev/null
      if [ $? -eq 0 ]
        then
          netstat -natp | grep squid
        else
          echo "squid is not running"
      fi
  ;;
  restart)
    $0 stop &> /dev/null
    echo "正在关闭 squid..."
      $0 start &> /dev/null
    echo "正在启动 squid..."
  ;;
  reload)
    $CMD -k reconfigure
  ;;
  check)
    $CMD -k parse
  ;;
  *)
    echo "用法: $0{start|stop|status|reload|check|restart}"
  ;;
esac

chmod +x squid

chkconfig --add squid         ###加入到service管理列表,可以用service squid start 

chkconfig --level 35 squid on        ###开机自启动

传统代理服务器

vim /etc/squid.conf
http_access allow all      #允许所有终端进行访问源web服务器
http_access deny all      ###下面这条可以注释也可以不注释,读到上一行就不会读这一行
...
http_port 3128
cache_mem 64 MB     ###指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数
reply_body_max_size 10 MB   ###允许用户下载的最大文件大小,以字节为单位。默设置0表示不进行限制
maximum_object_size 4096 KB    ###允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被保存

iptables -F
setenforce 0
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

service squid reload

在Windows系统中开启浏览器
设置----》高级----》打开代理设置----》点击开启----》地址:squid服务器ip地址 端口:3128
点击保存
地址栏输入Web服务器(要安装httpd)地址,
查看Web服务器访问日志/var/log/httpd/accrss.log 是代理服务器地址访问:14.0.0.11

在这里插入图片描述

ACL访问控制

最简单的ACL控制
vim /etc/squid.conf
acl hostlocal src 14.0.0.120/32    ##第8行,hostlocal为名称14.0.0.120为客户端win 10的IP地址
...
http_access deny hostlocal        ##第32行,拒绝列表(注意置顶)

service squid reload

在win 10客户端中刷新网页:
访问被拒绝
在这里插入图片描述

通过黑名单限制目标网段
vim /etc/squid.conf
acl hostlocal src "/etc/squid/src.list"     ##第8行
...
http_access deny hostlocal    ##第32行,拒绝列表(注意置顶)

mkdir /etc/squid
cd /etc/squid
vim src.list
14.0.0.120   ##目标web
14.0.0.130
14.0.0.140

service squid reload

在这里插入图片描述

四、Squid日志分析工具Sarg

###拖入软件包sarg-2.3.7.tar.gz

tar zxvf sarg-2.3.7.tar.gz

yum install -y gd gd-devel     ##图像处理

mkdir /usr/local/sarg

cd sarg-2.3.7/

./configure \
--prefix=/usr/local/sarg \
--sysconfdir=/etc/sarg \
--enable-extraprotection

make && make install

cd /etc/sarg/
vim 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

206 exclude_hosts /usr/local/sarg/noreport    #不计入排序的站点列表文件

257 overwrite_report no    #同名日志是否覆盖

289 mail_utility mailq.postfix   #发送邮件报告命令

434 charset 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/      #命令建一个软链接

[root@localhost sarg]# sarg
SARG: 纪录在文件: 462, reading: 100.00%
SARG: 成功的生成报告在 /var/www/html/squid-reports/2020Sep07-2020Sep08
[root@localhost sarg]# ls /var/www/html/squid-reports/
2020Sep07-2020Sep08  images  index.html

yum install httpd -y

systemctl start httpd.service

systemctl stop firewalld

客户端访问14.0.0.11/squid-reports
生成日志记录报告:
在这里插入图片描述
点进去看:
在这里插入图片描述

##周期性计划任务执行每天生成报告crontab
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)

客户端换一个IP地址14.0.0.100,
输入周期性计划任务执行每天生成报告crontab
重新刷新网页
在这里插入图片描述
在这里插入图片描述

五、Squid反向代理

5.1反向代理概述

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

5.2 反向代理网站加速

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

实验

###【3】web01 14.0.0.33
cd /var/www/html/
<h1>this is web01</h1>
###【5】web02 14.0.0.55
iptables -F
setenforce 0
yum install -y httpd
cd /var/www/html/
vim index.html
<h1>this is web02</h1>


vim /etc/squid.conf
#http_port 3128       ###注释掉
http_port 14.0.0.11:80 accel vhost vport
cache_peer 14.0.0.33 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 14.0.0.55 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.yun.com

因为httpd会占用80端口,所以必须关闭squid服务器中的httpd服务
systemctl stop httpd

service squid stop
service squid start

[root@localhost sarg]# netstat -ntap |grep squid
tcp        0      0 14.0.0.11:80            0.0.0.0:*               LISTEN      20708/(squid-1)     

代理服务器端口也要改为80
在这里插入图片描述
这是通过域名访问,不需要配置DNS:
在这里插入图片描述
右击打开方式选择记事本,添加一条记录
在这里插入图片描述
访问www.yun.com
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值