• Squid是Linux系统中常用的一款开源代理服务软件官方网站http://www.squid-cache.org , 可以很好的实现http、ftp、dns查询,以及ssl等应用的缓存代理。

一、Squid服务概述

缓存代理概述

1、代理的工作机制

  • 当客户机通过代理来请求web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要访问的页面,则直接将缓存中的页面反馈给请求的客户端。如果缓存中没有,则由代理服务器向web服务器发起访问请求,当获得返回的web页面后,缓存服务器首先将数据保存到自己本身的缓存中,然后再发送给客户端。
  • 代理服务器的缓存机制如图所示:

  • HTTP代理的缓存加速对象主要是文字、图像等静态web元素。

2、代理类型

正向代理:
①传统代理,在所用软件中设置代理服务器地址及端口。
②透明代理,通过默认路由或者服务器iptables设置将请求交给代理服务器,实现用户无感知代理。

  • 正向代理常常存在于企业内部,当企业采用正向代理可实现如下优点:
  • 1)由于客户端的访问请求由代理服务器未完成访问,一定程度上起到保护作用。
  • 2)针对于企业内部多台机器访问相同web页面等,提升网络访问速度,减少公司网络拥堵。
  • 3)可控的内部网络访问控制,可以针对要访问的目标、客户机地址、访问时间段等进行过滤控制。

反向代理:
存在于企业服务提供端,实现将客户端请求接收分发给后面的web服务器群集

  • squid反向代理存在于服务提供端,可实现如下优点:
  • 1)加速客户端来访网站的访问速度。
  • 2)可将不同的URL请求分发到后台不同的web服务器上,实现负载均衡。
  • 3)同时互联网上的客户端只能访问到代理服务器的地址,并不知道后面web服务器真实地址,加强了安全功能。

Squid代理服务器安装

  • squid代理缓存服务器安装方式有多种,可以选择去官网选择最新版本软件包,自行解压手动编译安装,也可选择yum直接安装。
  • 本文选择安装方式为yum自动安装方式,并进行后续实验。

yum install squid -y

  • 注,此处代理服务器中防火墙策略不用关闭,需要通过规则链实现访问。

二、构建传统代理

实验环境

服务器 操作系统 IP地址 使用软件
squid代理服务器 centos7.3 192.168.144.136 squid
web服务器 centos7.3 192.168.144.116 http
client windows7 192.168.144.117 IE浏览器

实验拓扑展示

传统代理设置过程

1、设置配置文件

vim /etc/squid/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为单位,超过大小限制的文件将不被缓存,而是直接转发给用户

  • 清空防火墙规则,添加filter表规则连,允许3128端口通过

iptables -F
setenforce 0
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
systemctl restart squid.service

2、客户端访问设置

  • 客户端访问时只需要设置代理服务器的IP地址即可,然后直接访问web服务器地址即可。实验模拟的情况下,客户端与web服务器本身处于同一网段,因此直接访问web服务器也能访问,那么如何区分是否是通过代理服务器访问的还是客户端本身去访问的,需要通过查看web服务器的日志判断。

3、web服务器端检测是否为代理服务器访问

vim /var/log/httpd/access_log

  • 当查看到如下图所示,即访问原地址是代理服务器地址,即表示代理服务器设置成功。

三、ACL访问控制

  • squid提供了强大的代理控制机制,通过合理设置ACL(访问控制列表)并进行限制,可以针对源地址、目标地址、访问的URL路径。

  • 注,本实验ACL访问控制建立在传统正向代理服务器中。

控制方式

  • squid配置文件中,一使用acl配置项定义需要控制的条件;
  • 二:通过http_access配置项对已定义的列表做“允许”或者“拒绝”实现访问控制。

常用的访问控制类型

如图:

1、基于源地址src的访问控制

vim /etc/squid.conf

acl localnet1 src 192.168.100.100/24   //设置原地址访问控制ACL策略名称为localnet1,设置地址为客户端地址
acl localnet1 src 192.168.175.0/24     //禁止源地址目标段访问,切记,此处需要添加子网掩码的位数
...
http_access deny localnet1         //设置策略为拒绝通过
  • 重启服务

service squid restart

  • 客户端访问验证效果则访问禁止。

如图

2、基于访问目标地址的访问控制

vim /etc/squid.conf

acl destionhost dst 192.168.100.130/32   //访问目标地址策略
...
http_access deny destionhost         //设置策略为拒绝通过
  • 重启服务

service squid restart

  • 客户端访问验证效果则访问禁止。

3、基于最大连接数的访问控制

vim /etc/squid.conf

acl MC20 maxconn 20   //最大链接数策略
...
http_access deny MC20         //设置策略为拒绝通过
  • 重启服务

service squid restart

4、基于URL的访问控制

vim /etc/squid.conf

acl BURL url_regex -i ^rtsp:// ^emule://   //以rtsp等开头的URL
acl PURL urlpath_regex -i \.mp3$ \.mp4$ \.rmvb$   //以mp3等为结尾的URL
...
http_access deny BURL         //设置策略为拒绝通过
http_access deny PURL         //设置策略为拒绝通过
  • 重启服务

service squid restart

5、基于时间段的访问控制

vim /etc/squid.conf

acl work time MTWHF 08:30-17:30   //时间段访问控制策略
...
http_access deny work         //设置策略为拒绝通过
  • 重启服务

service squid restart

创建独立访问控制列表文件

  • 假如说针对某一些或者某一批量的进行访问控制,每条都写入配置文件中,这样会针对以后的修改以及查询都不方便,因此我们需要在配置文件中声明,可创建独立的配置访问控制配置文件。
  • 下面以访问目标地址为例,创建独立配置文件进行访问控制。

vim /etc/squid/dest.list

192.168.100.100
192.168.100.110
192.168.100.120
192.168.100.130   //添加目标IP
  • 创建完成独立文件后,需要在squid配置文件中声明。
  • 此处需要注意,不论是修改主配置文件还是修改独立配置文件,想让修改后的服务生效,必须要重启squid服务。

vim /etc/squid.conf

acl destination dst "/etc/squid/dest.list"   //设置为dst目标地址访问控制,取名destination

...
http_access deny destination   //拒绝列表(注意置顶)

service squid restart

  • 重启服务后,再用客户端访问会发现想要访问目标网址的服务器被拒绝。

四、squid日志分析

  • squid日志分析为了帮助管理员更加直观与方便管理服务器,可以通过日志分析进行处理。
  • 由于日志分析是在web页面中以图形化界面显示,因此需要打开squid代理服务器的httpd服务。
  • 注意,此处日志分析建立在传统正向代理服务当中。

1、日志分析软件环境包安装

yum install gd gd-devel
mkidr /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

cd /etc/sarg/

vim sarg.conf

  • 在sarg的配置文件中找到如下部分,按照实际情况按如下方式修改,并打开相应功能
access_log /usr/local/squid/var/logs/access.log    //指定访问日志文件

title "Squid User Access Reports"      //网页标题

output_dir /var/www/html/squid-reports    //报告输出目录

user_ip no          //使用用户名显示

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

topuser_sort_field connect reverse   //top排序中有连接次数、访问字节、降序排列 升序是normal

user_sort_field reverse    //用户访问记录 连接次数、访问字节按降序排序

overwrite_report no   //同名日志是否覆盖

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

charset UTF-8   //使用字符集

weekdays 0-6   //top排行的星期周期

hours 0-23   //top排行的时间周期

www_document_root /var/www/html  //网页根目录
  • 创建不计入站点文件,添加的域名将不被显示在排序中

touch /usr/local/sarg/noreport
yum install httpd -y
systemctl start httpd.service

  • 日志分析安装完成后,使用客户端网址访问http://192.168.100.110/squid-reports
  • 出现如下图所示,即日志分析完成。