章节概述:

本章节从代理缓存服务的工作原理开始讲起,让读者能够清晰理解正向代理(普通模式、透明模式)与反向代理的作用。

正确的使用Squid服务程序部署代理缓存服务可以有效提升访问静态资源的效率,降低原服务器的负载。

不仅如此,还为读者们添加了对指定IP地址、网页关键词、网址与文件后缀的ACL访问限制功能的实验,真的很实用哦~

16.1 代理缓存服务

Squid服务程序是一款在类Unix系统中最为流行的高性能代理服务软件,通常会被当作网站的前置缓存服务,用于替代用户向网站服务器请求页面数据并进行缓存,通俗来讲,Squid服务程序会接收用户的请求,然后自动去下载指定数据(如网页)并存储在服务器内,当以后的用户再来请求相同数据时,则直接将刚刚储存在服务器本地的数据交给用户,减少了用户的等待时间。
Squid服务程序配置起来相对简单,效率高、支持如HTTP、FTP、SSL等多种协议的数据缓存,还支持基于ACL访问控制列表和ARL访问权限列表功能的内容过滤与权限管理功能,禁止用户访问存在威胁或不适宜的网站资源,保证内网安全的同时还整体的提高了客户机的访问速度,帮助节省网络带宽,尤其适合安装在内存大、硬盘转速快的服务器上。

从作用上分为正向代理和反向代理:
正向代理让用户可以通过Squid服务程序获取网站页面等数据,具体工作形式又分为标准代理模式与透明代理模式。
标准正向代理模式:

将网站的数据缓存在服务器本地,提高数据资源被再次访问时的效率,但用户必需在上网时指定代理服务器的IP地址与端口号,否则将不使用Squid服务。

透明正向代理模式:

功能作用与标准正向代理模式完全相同,但用户不需要指定代理服务器的IP地址与端口号,所以这种代理服务对于用户来讲是完全透明的。

反向代理则是为了降低网站服务器负载而设计的,反向代理服务器负责回应用户对原始网站服务器的静态页面请求,即如果反向代理服务器中正巧有用户要访问的静态资源则直接将缓存的内容发送给用户,减少了对原始服务器的部分数据资源请求。

所以对于正向代理一般用于企业的局域网内,让员工通过Squid服务程序来代理上网,不但能节省网络带宽资源还能限制访问的页面,而反向代理则大多搭建在网站架构中,用于缓存网站的静态数据(如图片、HTML静态网页、JS、CSS框架文件等)。

16.2 配置Squid服务程序

本小节将为大家演示如何部署Squid服务的正向代理与反向代理,首先我们需要再添加一块网卡设备(桥接模式):

按照下面的表单配置IP地址:

编辑
主机名称 操作系统 IP地址
服务端 红帽RHEL7操作系统 外网卡:桥接DHCP模式
内网卡:192.168.10.10
用户端 微软Windows7操作系统 192.168.10.20

测试是否能够访问互联网:

[root@linuxprobe Desktop]# ping www.linuxprobe.com
PING www.linuxprobe.com (162.159.211.33) 56(84) bytes of data.
64 bytes from 162.159.211.33: icmp_seq=1 ttl=45 time=166 ms
64 bytes from 162.159.211.33: icmp_seq=2 ttl=45 time=168 ms
64 bytes from 162.159.211.33: icmp_seq=3 ttl=45 time=167 ms
64 bytes from 162.159.211.33: icmp_seq=4 ttl=45 time=166 ms
^C
--- www.linuxprobe.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 166.361/167.039/168.109/0.836 ms

安装squid服务程序:

[root@linuxprobe ~]# yum install squid
Loaded plugins: langpacks, product-id, subscription-manager
………………省略部分安装过程………………
Installing:
squid x86_64 7:3.3.8-11.el7 rhel7 2.6 M
Installing for dependencies:
libecap x86_64 0.2.0-8.el7 rhel7 20 k
perl-Compress-Raw-Bzip2 x86_64 2.061-3.el7 rhel7 32 k
perl-Compress-Raw-Zlib x86_64 1:2.061-4.el7 rhel7 57 k
perl-DBI x86_64 1.627-4.el7 rhel7 802 k
perl-Data-Dumper x86_64 2.145-3.el7 rhel7 47 k
perl-Digest noarch 1.17-245.el7 rhel7 23 k
perl-Digest-MD5 x86_64 2.52-3.el7 rhel7 30 k
perl-IO-Compress noarch 2.061-2.el7 rhel7 260 k
perl-Net-Daemon noarch 0.48-5.el7 rhel7 51 k
perl-PlRPC noarch 0.2020-14.el7 rhel7 36 k
………………省略部分安装过程………………
Complete!

先别着急配置哦!我们先来了解下squid服务程序的主要文件吧:

编辑
主服务程序 /usr/sbin/squid
配置文件目录 /etc/squid
主配置文件 /etc/squid/squid.conf
访问日志文件 /var/log/squid/access.log
缓存日志文件 /var/log/squid/cache.log

而squid服务程序中常用的参数有:

编辑
参数 作用
http_port 3128 监听的端口号。
cache_mem 64M 内存缓冲区的大小。
cache_dir ufs /var/spool/squid 2000 16 256 硬盘缓冲区的大小。
cache_effective_user squid 设置缓存的有效用户。
cache_effective_group squid 设置缓存的有效用户组。
dns_nameservers IP地址 一般不设置,用服务器默认的DNS地址。
cache_access_log /var/log/squid/access.log 访问日志文件的保存路径。
cache_log /var/log/squid/cache.log 缓存日志文件的保存路径。
visible_hostname linuxprobe.com 设置Squid服务主机的名称。
   

启动squid服务程序并加入到开机启动项:

[root@linuxprobe ~]# systemctl restart squid
[root@linuxprobe ~]# systemctl enable squid
ln -s '/usr/lib/systemd/system/squid.service' '/etc/systemd/system/multi-user.target.wants/squid.service'
16.2.1 标准正向代理

当Squid服务程序顺利启动后,默认即可使用标准正向代理模式啦,在Windows7系统中打开浏览器后依次点击:

在网络选项中点击“连接”→“局域网设置”:

填写Squid服务器的IP地址与端口号

尝试访问网站:

Squid服务程序默认会占用3128、3401与4827端口,我们也可以将端口号修改为其他的哦, 编辑配置文件(修改第59行):

[root@linuxprobe ~]# vim /etc/squid/squid.conf
http_port 10000

使用setsebool命令来限制squid服务只能使用自定义的端口号:

[root@linuxprobe ~]# setsebool -P squid_connect_any 0

查看当前SElinux允许的服务端口:

[root@linuxprobe ~]#  semanage port -l | grep -w -i squid_port_t
squid_port_t tcp 3128, 3401, 4827
squid_port_t udp 3401, 4827

添加SELinux对10000端口的允许策略:

[root@linuxprobe ~]# semanage port -a -t squid_port_t -p tcp 10000
[root@linuxprobe ~]# semanage port -l | grep -w -i squid_port_t
squid_port_t tcp 10000, 3128, 3401, 4827
squid_port_t udp 3401, 4827

重启squid服务程序后即可生效:

[root@linuxprobe ~]# systemctl restart squid

出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。

16.2.2 透明正向代理

如果要想实现透明正向代理,则必需将用户的网关IP指向Squid服务器,而此后便无需再修改浏览器选项:

尝试访问网站失败:

在命令提示符中ping下域名:

C:\Users\linuxprobe>ping www.linuxprobe.com
Ping 请求找不到主机 www.linuxprobe.com。请检查该名称,然后重试。

原来Squid服务程序是不支持DNS解析代理的,这个就需要配置SNAT啦。如果忘记SNAT技术了,没关系,回去再看下防火墙的章节吧,-o 参数后面写外网出口的网卡名称:

[root@linuxprobe ~]# iptables -t nat -A POSTROUTING -p udp --dport 53 -o eno33554968 -j MASQUERADE

开启Ipv4的转发策略:

[root@linuxprobe ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@linuxprobe ~]# sysctl -p
net.ipv4.ip_forward = 1

再次尝试Ping下网站域名:

C:\Users\linuxprobe>ping www.linuxprobe.com
正在 Ping www.linuxprobe.com [116.31.127.233] 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。
116.31.127.233 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),

不错哦~现在DNS已经能够正常工作啦,来配置透明正向代理吧,编辑配置文件:

[root@linuxprobe ~]# vim /etc/squid/squid.conf
//在第59行后面添加参数transparent
http_port 3128 transparent

判断配置文件是否有错误(会有很多输出值):

[root@linuxprobe ~]# squid -k parse

重新启动squid服务程序:

[root@linuxprobe ~]# systemctl restart squid

将用户对80端口的请求转发至3128端口:

[root@linuxprobe ~]# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
[root@linuxprobe ~]# iptables -t nat -R PREROUTING 1 -i eno33554968 -p tcp --dport 80 -j REDIRECT --to-port 3128

快去客户机尝试访问网站吧:

16.2.2 反向代理

反向代理的作用是将网站中的静态资源本地化,也就是将一部分本应该由原始服务器处理的请求交给Squid缓存服务处理。

编辑Squid服务程序的配置文件(正向代理与反向代理不能同时使用,请还原您前面修改过的参数):

[root@linuxprobe ~]# vim /etc/squid/squid.conf
//第59行,修改格式为:http_port Squid服务器地址:监听端口号 vhost
http_port 192.168.10.10:80 vhost
//第60行,添加格式为:cache_peer 原网站服务器地址 parent 服务器端口号 0 originserver
cache_peer 106.184.1.125 parent 80 0 originserver

然后使用客户机去访问网站:

因为《Linux就该这么学》的网站框架使用了动态资源,所以现在看起来会有些乱乱的。

16.3 ACL访问控制

Squid服务的ACL访问控制是非常有用的功能,可以根据特定条件来进行数据缓存或限制用户的访问,ACL元素的定义语法为:

acl aclname acltype string
acl aclname acltype "file"

src定义来源地址(即用户的客户机IP地址):

acl aclname src ip-address/netmask
acl aclname src addr1-addr2/netmask

dst定义目标地址(即用户请求的网站IP地址):

acl aclname dst ip-address/netmask

port用于指定访问端口:

acl aclname port 80 1024
acl aclname port 0-1024

url_regex用于限制网址中的关键词:

acl aclname url_regex [-i] pattern

proto用于定义要代理的协议:

acl aclname proto HTTP FTP

method用于指定请求的方法:

acl aclname method GET POST

访问控制列表由多个规则条目组成的,根据指定的条件来允许或限制访问请求,匹配顺序会由上至下,一旦匹配则立即结束,通常会在控制列表的最下面写上“deny all”或者“allow all”来避免安全隐患。
仅允许192.168.10.20的主机使用本地Squid服务,拒绝其余主机:

acl client src 192.168.10.20
http_access allow client
http_access deny all


拒绝客户机使用代理服务器访问带有关键词“linux”的网站:

acl deny_keyword url_regex -i linux
http_access deny deny_keyword


拒绝客户机使用代理服务器访问《Linux就该这么学》的网站:

acl deny_url url_regex http://www.linuxprobe.com
http_access deny deny_url


禁止客户机使用代理服务器下载以mp3与rar为后缀的文件:

acl badfile urlpath_regex -i \.mp3$ \.rar$
http_access deny badfile

第16章 使用Squid部署代理缓存服务的更多相关文章

  1. Linux基础学习-使用Squid部署代理缓存服务

    使用Squid部署代理缓存服务 Squid是Linux系统中最为流行的一款高性能代理服务软件,通常作为Web网站的前置缓存服务,能够代替用户向网站服务器请求页面数据并进行缓存.Squid服务配置简单. ...

  2. 《Linux就该这么学》培训笔记_ch16_使用Squid部署代理缓存服务

    <Linux就该这么学>培训笔记_ch16_使用Squid部署代理缓存服务 文章最后会post上书本的笔记照片. 文章主要内容: 代理缓存服务 配置Squid服务程序 正向代理 标准正向代 ...

  3. 虚拟机中Linux环境下使用Squid部署代理缓存服务(及透明传输)

    小知识: 正确的使用Squid服务程序部署代理缓存服务可以有效提升访问静态资源的效率,降低原服务器的负载. 不仅如此,还为读者们添加了对指定IP地址.网页关键词.网址与文件后缀的ACL访问限制功能的实 ...

  4. 使用Squid部署代理缓存服务(标准正向、透明正反向代理)

    正向代理让用户可以通过Squid服务程序获取网站页面等数据,具体工作形式又分为标准代理模式与透明代理模式.标准正向代理模式: 将网站的数据缓存在服务器本地,提高数据资源被再次访问时的效率,但用户必需在 ...

  5. 代理缓存服务之Squid

    代理缓存服务 Squid是linux系统中最为流行的一款高性能代理服务软件,通常用作Web网站的前置缓存服务,能够代替用户向网站服务器请求页面数据并进行缓存. 简单来说,Squid服务程序会按照收到的 ...

  6. squid代理缓存服务

    man.linuxde.net 1.squid是Linux系统中的代理缓存服务,通常用作WEB网站的前置缓存服务,能够代替用户向网站服务器请求页面数据并进行缓存. 2.squid服务特点:配置简单.效 ...

  7. Linux下squid代理缓存服务环境部署

    代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息. Squid是一个缓存Internet 数据的软件,其接收用户的下载申请,并自动处理所下载的数据.当一个用户想要下载 ...

  8. Linux 笔记 - 第十九章 配置 Squid 正向代理和反向代理服务

    一.简介 Squid 是一个高性能的代理缓存服务器,对应中文的乌贼,鱿鱼的意思.Squid 支持 FTP,gopher 和 HTTP 协议.和一般的代理缓存软件不同,Squid 用一个单独的,非模块化 ...

  9. 12、Nginx代理缓存服务

    通常情况下缓存是用来减少后端压力, 将压力尽可能的往前推, 减少后端压力,提高网站并发延时 1.缓存常见类型 服务端缓存 代理缓存, 获取服务端内容进行缓存 客户端浏览器缓存 Nginx代理缓存原理 ...

随机推荐

  1. WCF Data Service 使用小结 (一)—— 了解OData协议

    最近做了一个小项目,其中用到了 WCF Data Service,之前是叫 ADO.NET Data Service 的.关于WCF Data Service,博客园里的介绍并不多,但它确实是个很好的 ...

  2. Java并发编程-ReentrantLock

    代码示例: Lock lock = new ReentrantLock(); lock.lock(); try { // update object state } finally { lock.un ...

  3. solr导入mysql数据库

    感谢ITeye的博主viskyzz分享的经验,笔者基本参考ta的方法.然而,解决中间出现的问题时也融入了自己的经验. 查看ta的原文请戳: http://tbwuming.iteye.com/blog ...

  4. JavaScript事件冒泡简介及应用

    一.什么是事件冒泡 在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事 件处理程序或者事件返回true,那么这个 ...

  5. hdu3613 扩展KMP

    #include<stdio.h> #include<string.h> #define maxn 501000 char s[maxn],t[maxn]; int next[ ...

  6. BZOJ-3212 Pku3468 A Simple Problem with Integers 裸线段树区间维护查询

    3212: Pku3468 A Simple Problem with Integers Time Limit: 1 Sec Memory Limit: 128 MB Submit: 1278 Sol ...

  7. POJ2392Space Elevator(贪心+背包)

    Space Elevator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9970   Accepted: 4738 De ...

  8. ASP.NET MVC ActionFilterAttribute的执行顺序

    http://diaosbook.com/Post/2014/6/3/execution-order-of-actionfilter-aspnet-mvc ASP.NET MVC里面我们要自定义Act ...

  9. Python socket编程之一:

    soket 编程步骤 # -*- coding: utf-8 -*- ################################################################# ...

  10. safeNet

    把那4个dll丢到C:\Windows\SysWOW64里去重启IIS,再测试