一、代理缓存服务器


1.分类

  • 正向代理:部署在企业内部,实现企业内部客户端访问公网加速(ACL、缓存)

传统代理:需在客户端指向正向代理服务器的IP及端口,方可正常使用

透明代理:将正向代理服务器作为网关,客户端只需指明网关地址即可

  • 反向代理:部署在企业内部,实现公网客户端访问内部服务器加速

2.缓存方式

  • 硬盘:速度慢、缓存时间长

  • 内存:速度快、重启后缓存丢失

二、Squid


  • Squid是应用层的代理服务软件,Squid主要提供缓存加速、应用层过滤控制的功能
  • Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
  • Squid是一种用来缓冲Internet数据的软件。它接受来自人们需要下载的目标(object)的请求并适当地处理这些请求。也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器并向这个页面发出请求。然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。当前的Squid可以处理HTTP,FTP,GOPHER,SSL和WAIS等协议。但它不能处理如POP,NNTP,RealAudio以及其它类型的东西。
  • Squid可运行在大多数Unix和OS/2版本的系统之上,已知的可工作的有:Windows,AIX,Digital Unix,FreeBSD,HP-UX,Irix,Linux,NetBSD,Nextstep,SCO,Solaris

1.Squid代理的工作机制

第一种情况:Squid服务器中有缓存

  • 当客户机通过代理来请求Web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要的页面,则直接将缓存中的页面内容反馈给客户机;

第二种情况:Squid服务器中没有缓存

  • 如果缓存中没有客户机要访问的页面,则由代理服务器向Internet发送访问请求,当获得返回的Web页面以后,将网页数据保存到缓存中并发送给客户机
  • HTTP代理的缓存加速对象主要是文字、图像等静态Web元素。使用缓存机制后,当客户机在不同的时候访问同一Web元素,或者不同的客户机访问相同的Web元素时,可以直接从代理服务器的缓存中获得结果。这样就大大减少了向Internet提交重复的Web请求的过程,提高了客户机的Web访问响应速度
  • 由于客户机的Web访问请求实际上是由代理服务器来代替完成的,从而可以隐藏用户的真实IP地址,起到一定的保护作用。另一方面,代理服务器担任着类似“经纪人”的角色,所以有机会针对要访问的目标、客户机的地址、访问的时间段等进行过滤控制

2.代理的基本类型

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

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

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

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

三、部署squid正向代理(传统代理)


环境准备

两台,一台linu作为squid代理及网关(两块网卡,第一块vmnet1、第二块桥接),另一台windows客户端(vmnet1)

部署gateway

1.IP配置

vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.1
NETMASK=255.255.255.0
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1
vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=dhcp
/etc/init.d/network restart

2.开启路由功能

vim /etc/sysctl.confnet.ipv4.ip_forward = 1
sysctl -p
iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 192.168.13.206

部署squid

1.编译安装Squid

配置Squid的编译选项时,将安装目录设为/usr/local/squid,其他具体选项根据实际需求来定,配置前可参考“./configure --help”给出的说明

tar -zxvf squid-3.4.6.tar.gz -C /usr/src/
cd /usr/src/squid-3.4.6/
./configure --prefix=/usr/local/squid --sysconfdir=/etc/ --enable-linux-netfilter --enable-arp-acl --enable-linux-tproxy --enable-async-io=100 --enable-err-language="Simplify_Chinese" --enable-underscore --enable-poll

选项详解
--prefix=/usr/local/squid #安装目录
--sysconfdir=/etc/ #单独将配置文件修改到其他目录
--enable-arp-acl #可以在规则中设置直接通过客户端MAC进行管理,防止客户端使用IP欺骗
--enable-linux-netfilter #使用内核过滤
--enable-linux-tproxy #支持透明模式
--enable-async-io=值 #异步I/O,提升存储性能
--enable-err-language="Simplify_Chinese" #错误信息的显示语言
--enable-underscore #允许URL中有下划线
--enable-poll #使用Poll()模式,提升性能
--enable-gnuregex #使用GNU正则表达式--enable-gnuregex

make && make install
echo "PATH=$PATH:/usr/local/squid/sbin" >>/etc/profile && source /etc/profile
useradd -M -s /sbin/nologin squid
chown -R squid:squid /usr/local/squid/var/

2.更改配置

vim /etc/squid.conf56 http_access allow all           #允许所有访问61 cache_effective_user squid          #指定运行用户62 cache_effective_group squid         #指定运行组63 visible_hostname xueluo.org         #指定当前主机名65 cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256   #启用缓存68 #coredump_dir /usr/local/squid/var/cache/squid      #注释改行
squid -k parse  #检测配置文件(/etc/squid.conf)是否有问题
squid -z        #创建缓存目录

3.启动服务

vim /etc/init.d/squid
#!/bin/bash
#\ chkconfig: 2345 90 25
#\ config: /etc/squid.conf
#\ pidfile: /usr/local/squid/var/run/squid.pid
#\ Description: Squid - Internet Object Cache
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" instart)netstat -utpln | grep squid &>/dev/nullif [ $? -eq 0 ]thenecho "Squid is running"else$CMDfi;;stop)$CMD -k kill &>/dev/nullrm -rf $PID &>/dev/null;;status)[ -f $PID ] &>/dev/nullif [ $? -eq 0 ]thennetstat -utpln | grep squidelseecho "Squid is not running"fi;;restart)$0 stop &>/dev/nullecho "正在关闭Squid..."$0 start &>/dev/nullecho "正在启动Squid...";;reload)$CMD -k reconfigure;;check)$CMD -k parse;;*)echo "用法:{ start | stop | restart | reload | check | status}";;
esac
chmod +x /etc/init.d/squid
chkconfig --add squid
/etc/init.d/squid start
netstat -utpln | grep 3128

4.验证

IE-->代理服务器(192.168.1.1 3128) --> 119.75.213.61

tail -f /usr/local/squid/var/logs/access.log    //查看代理访问日志

四、部署squid正向代理(透明代理)


环境准备

两台,一台linu作为squid代理及网关(两块网卡,第一块vmnet1、第二块桥接),另一台windows客户端(vmnet1)

部署gateway

1.IP配置

vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.1
NETMASK=255.255.255.0
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1
vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=dhcp
/etc/init.d/network restart

2.开启路由功能

vim /etc/sysctl.confnet.ipv4.ip_forward = 1
sysctl -p
iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 192.168.13.206

部署squid

1.编译安装Squid

配置Squid的编译选项时,将安装目录设为/usr/local/squid,其他具体选项根据实际需求来定,配置前可参考“./configure --help”给出的说明

tar -zxvf squid-3.4.6.tar.gz -C /usr/src/
cd /usr/src/squid-3.4.6/
./configure --prefix=/usr/local/squid --sysconfdir=/etc/ --enable-linux-netfilter --enable-arp-acl --enable-linux-tproxy --enable-async-io=100 --enable-err-language="Simplify_Chinese" --enable-underscore --enable-poll

选项详解
--prefix=/usr/local/squid #安装目录
--sysconfdir=/etc/ #单独将配置文件修改到其他目录
--enable-arp-acl #可以在规则中设置直接通过客户端MAC进行管理,防止客户端使用IP欺骗
--enable-linux-netfilter #使用内核过滤
--enable-linux-tproxy #支持透明模式
--enable-async-io=值 #异步I/O,提升存储性能
--enable-err-language="Simplify_Chinese" #错误信息的显示语言
--enable-underscore #允许URL中有下划线
--enable-poll #使用Poll()模式,提升性能
--enable-gnuregex #使用GNU正则表达式--enable-gnuregex

make && make install
echo "PATH=$PATH:/usr/local/squid/bin:/usr/local/squid/sbin" >>/etc/profile
source /etc/profile
useradd -M -s /sbin/nologin squid
chown -R squid:squid /usr/local/squid/var/

2.更改配置

vim /etc/squid.conf56 http_access allow all           #允许所有访问60 http_port 192.168.1.1:3128 transparent61 cache_effective_user squid          #指定运行用户62 cache_effective_group squid         #指定运行组63 visible_hostname xueluo.org         #指定当前主机名65 cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256   #启用缓存68 #coredump_dir /usr/local/squid/var/cache/squid      #注释改行
iptables -t nat -I PREROUTING -i eth0 -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
squid -k parse  #检测配置文件(/etc/squid.conf)是否有问题
squid -z        #创建缓存目录

3.启动服务

vim /etc/init.d/squid
#!/bin/bash
#\ chkconfig: 2345 90 25
#\ config: /etc/squid.conf
#\ pidfile: /usr/local/squid/var/run/squid.pid
#\ Description: Squid - Internet Object Cache
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" instart)netstat -utpln | grep squid &>/dev/nullif [ $? -eq 0 ]thenecho "Squid is running"else$CMDfi;;stop)$CMD -k kill &>/dev/nullrm -rf $PID &>/dev/null;;status)[ -f $PID ] &>/dev/nullif [ $? -eq 0 ]thennetstat -utpln | grep squidelseecho "Squid is not running"fi;;restart)$0 stop &>/dev/nullecho "正在关闭Squid..."$0 start &>/dev/nullecho "正在启动Squid...";;reload)$CMD -k reconfigure;;check)$CMD -k parse;;*)echo "用法:{ start | stop | restart | reload | check | status}";;
esac
chmod +x /etc/init.d/squid
chkconfig --add squid
/etc/init.d/squid start
netstat -utpln | grep 3128

4.测试

IE --> 119.75.213.61

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

五、Squid的ACL


  • Squid提供了强大的代理控制机制,通过合理设置ACL(Access Control List,访问控制列表)并进行限制,可以针对源地址、目标地址、访问的URL路径、访问的时间等各种条件进行过滤

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

1.定义访问控制列表

每一行acl配置可以定义一条访问控制列表,格式如下所示

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

  • 其中,“列表名称”由管理员自行指定,用来识别控制条件;“控制类型”必须使用Squid预定义的值,对应着不同类别的控制条件;“列表内容”是要控制的具体对象,不同类型的列表所对应的内容也不一样,可以有多个值(以空格分割,为“或”的关系)

  • 通过上述格式可以发现,定义访问控制列表时,关键在于选择“列表类型”并设置具体的条件对象。Squid预定义类型有很多种,常用的包括源地址、目标地址、访问时间、访问端口等
列表类型 列表内容示例 含义/用途
src 192.168.1.168192.1681.0/24192.168.1.0-192.168.3.0/24 源IP地址、网段、IP地址范围
dst 216.163.137.361.135.167.0/24www.playboy.com 目标IP地址、网段、主机名
port 80 443 8080 20 21 目标端口
dstdomain .qq.com .msn.com 目标域,匹配域内所有站点
time MTWHF 8:30-17:3012:00-13:00AS 字母表示一星期天中各天的缩写M--MondayT--TuesdayW--WednesdatH--ThursdayF--FridatA--SaturdatS--Sunday
maxconn 20 每个客户机的并发连接数
url_regex url_regex -i ^rtsp://url_regex -i ^emule:// 目标资源的URL地址,-i表示忽略大小写
urlpath_regex urlpath_regex -i sex adulturlpath_regex -i .mp3$ 目标资源的整个URL路径,-i表示忽略大小写
  • 在定义访问控制列表时,应结合当前网络环境正确分析用户的访问需求,准确定义使用代理服务的控制条件。例如,针对不同的客户机地址,需要限制访问的目标网站、特定的时间段......,分别定义列表

[root@localhost ~]# vim /etc/squid.conf

......

acl localhost src 127.0.0.1/255.255.255.255 //源地址为127.0.0.1

acl MYLAN src 192.168.1.0/24 192.168.4.0/24 //客户机网段

acl to_localhost dst 127.0.0.0/8 //目标地址为127.0.0.0/8网段

acl MC20 maxconn 20 //最大并发连接20

acl BlankURL url_regex -i ^rtsp:// ^emule:// //以rtsp://等开头的URL

acl MEDIAFILE urlpath_regex -i .mp3& .mp4& .rmvb& //以.mp3、.mp4等结尾的URL路径

acl WORKTIME time MTWHF 08:30-17:30 //时间为周一至周五08:30-17:30

  • 当需要限制的同一类对象较多时,可以使用独立的文件来存放,在acl配置行的列表内容处指定对应的文件位置即可。例如,若要针对目标地址建立黑名单文件,可以参考一下操作

[root@localhost ~]# mkdir /etc/squid

[root@localhost ~]# cd /etc/squid/

[root@localhost squid]# vim ipblock.list //建立目标IP地址名单

61.135.167.36

125.39.127.25

60.28.14.0/24

[root@localhost squid]# vim dmblock.list //建立目标域地址名单

.qq.com

.msn.com

.live.com

.verycd.com

[root@localhost ~]# vim /etc/squid.conf

......

acl IPBLOCK dst "/etc/squid/ipblock.list" //调用指定文件中的列表内容

acl DMBLOCK dstdomain "/etc/squid/dmblock.list"

2.设置访问权限

定义好各种访问控制列表以后,需要使用http_access配置项来进行控制。必须注意的是,http_access配置行必须放在对应的acl配置行之后。每一行http_access配置确定一条访问控制规则。格式如下所示

http_access allow或deny 列表名 ......

在每一条http_accsess规则中,可以同时包含多个访问控制列表名,各个列表之间以空格分隔,为“与”的关系,表示必须满足所有访问控制列表对应的条件才会进行限制。需要使用取反条件时,可以在访问控制列表前添加“!”符号

[root@localhost ~]# vim /etc/squid.conf

......

http_access deny MYLAN MEDIAFILE //禁止客户机下载MP3、MP4等文件

http_access deny MYLAN IPBLOCK //禁止客户机访问黑名单中的IP地址

http_access deny MYLAN DMBLOCK //禁止客户机访问黑名单中的网站域

http_access deny MYLAN MC20 //客户机的并发连接超过20时将被阻止

http_access allow MYLAN WORKTIME //允许客户机在工作时间上网

http_access deny all //默认禁止所有客户机使用代理

  • 执行访问控制时,Squid将按照各条规则的顺序依次进行检查,如果找到一条相匹配的规则就不再向后搜索(这点与iptables的规则匹配类似)。因此,规则的顺序安排是非常重要的,以下两种默认情况需要我们注意

  • 没有设置任何规则时:Squid服务将拒绝客户端的请求

  • 有规则但找不到相匹配的项:Squid将采用最后一条规则相反的权限,即如果最后一条规则时allow,就拒绝客户机的请求,否则允许该请求

  • 通常清空下,把最常用的控制规则放在最前面,以减少Squid的负载。在访问控制的总体策略上,建议采用“先拒绝后允许”或“先允许后拒绝”的方式,最后一条规则设为默认策略,设置“http_access allow all”或者“http_access deny all”

3.验证访问控制效果

  • 关于Squid服务的访问控制效果,无外乎两种情况:一种是能够正常访问,另一种时禁止访问。当客户机的代理访问请求被Squid服务被拒绝时,在浏览器中会看到ERROR报错页面,具体内容会根据限制条件不同有些细小差别

六、squid的日志分析


1.安装GD库,安装sarg

yum -y install gd httpd
yum -y localinstall gd-devel-2.0.35-11.el6.x86_64.rpm
mkdir /var/log/sarg
tar zxvf /root/sarg-2.3.7.tar.gz
cd sarg-2.3.7
./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection
//--enable-extraprotection添加额外的安全保护
make && make install

2.配置

vim /etc/sarg/sarg.confaccess_log /usr/local/squid/var/logs/access.log       //第7行title "Squid user Access reports"                 //第25行output_dir /var/www/html/sarg/                //第120行overwrite_report no                       //第257行mail_utility mailx                        //第289行topsites_num 100                      //第294行max_elapsed 28800000                      //第324行charset UTF-8                         //第434行topuser_sort_field connect reverse bytes reverse      //第184行 user_sort_field connect reverse BYTES reverse         //第190行resolve_ip no                         //第153行user_ip no                            //第178行weekdays 0-6                          //第518行hours 0-8,9-12,13-23                      //第523行

3.运行

echo "PATH=$PATH:/usr/local/sarg/bin" >>/etc/profile
sarg                //执行启动记录一次
/etc/init.d/httpd  start
chkconfig httpd on

4.计划任务

crontab -e0 0 * * *  /usr/local/sarg/bin/sarg

转载于:https://blog.51cto.com/13770206/2163491

Squid代理缓存服务器相关推荐

  1. 代理缓存服务器squid

    链接 :[Linux通过squid配置代理上网] https://help.aliyun.com/knowledge_detail/41342.html?spm=5176.7841507.2.4.nS ...

  2. squid 3 反向代理 缓存服务器 安装配置精华指南 by lbj

    squid-3.0.STABLE21 安装配置 by lbj 作用:作为反向代理/缓存服务器 系统:redhat linux 企业版 5.4 linux 要有gcc编译器,使用squid-3.0.ST ...

  3. 代理缓存服务器知识点整理

    [代理缓存服务器知识点整理] 一.http相关 1.正常http请求跟代理http请求的区别 常规的http请求头部:GET /index.html HTTP/1.1 Host:www.xuxiong ...

  4. ROS 软路由配合squid WEB缓存服务器中实现行为管理

    公司使用的ROS 软路由 和Cisco 交换机,划分的Vlan网络,路由器是ROS,在部署行为管理时,只能用端口镜像,但效果,表现比较一般,不能过滤内容,且公司终端数据比较多,网络出口压力日渐增大,需 ...

  5. nginx反向代理缓存服务器构建

    博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 代理服务可简单的分为正向代理和反向代理: ...

  6. 【推荐】如何用 Nginx 构建反向代理缓存服务器?

    作者:一盏烛光,贤牛特邀工程师. 防伪码:曾经沧海难为水,除却巫山不是云. 代理服务可简单的分为正向代理和反向代理: 正向代理: 用于代理内部网络对 Internet 的连接请求(如×××/NAT), ...

  7. NGINX做反向代理缓存服务器原理

    代理服务可以简单的分为正向代理和反向代理 正向代理: 用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标web服务器的HTTP请求先发送到 ...

  8. Linux实战教学笔记42:squid代理与缓存实践(一)

    第1章 Squid介绍 1.1 缓存服务器介绍 缓存服务器(英文意思cache server),即用来存储(介质为内存及硬盘)用户访问的网页,图片,文件等等信息的专用服务器.这种服务器不仅可以使用户可 ...

  9. Squid代理服务器配置/二级代理

    Squid全名Squid Cache(官网:http://www.squid-cache.org/),一个高性能的代理缓存服务器.主要支持FTP.HTTPS和HTTP协议.Squid用途广泛,可以作为 ...

最新文章

  1. Mysql sq优化(二)
  2. 普大喜奔:沁恒单片机免费样品申请开始啦!
  3. 一个关于HashCode 的追问!
  4. C语言 一维数组 练习
  5. 数据链路层、交换机内容整合
  6. python百钱买百鸡-百钱买百鸡的Python实现
  7. 谷歌否认街景服务侵犯隐私
  8. SpringCloudBus(了解)
  9. 未来我们需要一辆什么样的智能汽车?
  10. 谈谈对象和XML文件的转换
  11. Atitit httpclient feign使用总结RestTemplate Httpclient重要的功能 重试与超时 1.RedirectExec执行器的默认策略是,在接收到重定向错误码3
  12. 企业应如何改善设备功率因数,有效规避罚款
  13. 浏览器transform介绍
  14. UMLChina公众号文章精选(20220619更新精选)
  15. dexpathlist.java_java.lang.ClassNotFoundException: Didn't find class xxx on path: DexPathList
  16. JAVA生成高强度密码(包含随机数字+随机英文大小写)
  17. 2021-09-15如何把一个字符串的大小写取反(大写变小写小写变大写),例如 ’AbC‘ 变成 ‘aBc‘
  18. 什么办法能让鹅长头包 鹅什么药头上头瘤长得快
  19. 监管之外,加密货币在日本大行其道的其他原因
  20. Median Pyramid Hard题解

热门文章

  1. PointPillars 工程复现
  2. 扫描中国智慧城市:平安给出智慧方法论
  3. python partition函数_Python partition()函数的使用方法
  4. 降噪蓝牙耳机排名前十名,音质好、降噪明显的降噪耳机评测分享
  5. NokiaLogo Mobile版,仅供试用
  6. 开始学习c语言喽!!!
  7. SSM毕设项目大学校园宿舍零食便利店8o8u4(java+VUE+Mybatis+Maven+Mysql)
  8. 浅谈POE供电系统中PSE两种供电方式——终端跨度、中间跨度
  9. 华为matebook14s上手体验
  10. DDD(领域驱动设计)总结