会不会有那么一天,生活可以简单到每天清早踏上一辆载着鲜花的脚踏车,微笑着穿过窄窄的街巷,为爱花的人送去芬芳,为需要知识的你送去帮助。
简介
本章将学习Squid代理服务器的构建与控制。Squid是Linux系统中最常用的一款开源代理服务软件(官方网站为http://www.squid-cache.org),可以很好地实现HTTP和FTP,以及DNS查询,SSL等应用的缓存代理,功能十分强大。
本章重点
构建透明代理服务器
Squid服务的访问控制策略
理论讲解
一,Squid服务基础
本节将介绍缓存代理的工作机制、类型,以及Squid服务的安装和运行控制、主配置文件。
缓存代理概述
作为应用层的代理服务软件,Squid 主要提供缓存加速、应用层过滤控制的功能。
1.代理的工作机制
当客户机通过代理来请求Web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要的页面,则直接将缓存中的页面内容反馈给客户机;如果缓存中没有客户机要访问的页面,则由代理服务器向Internet发送访问请求,获得返回的Web页面以后,将网页数据保存到缓存中并发送给客户机,如图所示
HTTP代理的缓存加速对象主要是文字.图像等静态Web元素。使用缓存机制后,当客户机在不同的时候访问同一Web元素,或者不同的客户机访问相同的Web元素时,可以直接从代理服务器的缓存中获得结果。这样就大大减少了向Internet提交重复的Web请求的过程,提高了客户机的Web访问响应速度。
由于客户机的Web访问请求实际上是由代理服务器来代替完成的,从而可以隐藏用户的真实IP地址,起到一定的保护作用。另一方面,代理服务器担任着类似经纪人”的角色,可以针对要访问的目标、客户机的地址、访问的时间段等进行过滤控制。
2.代理的基本类型
根据实现方式不同,代理服务可分为传统代理和透明代理两种常见的代理服务。
传统代理:也就是普通的代理服务。首先必须在客户机的浏览器、QQ聊天工具、下载软件等程序中手动设置代理服务器的地址和端口,然后才能使用代理来访问网络。对于网页浏览器,访问网站时的域名解析请求也会发给指定的代理服务器。
透明代理:提供与传统代理相同的功能和服务,其区别在于客户机不需要指定代理服务器的地址和端口,而是通过默认路由防火墙策略将Web访问重定向,实际仍然交给代理服务器来处理。重定向的过程对客户机来说是“透明”的.用户甚至并不知道自己在使用代理服务,所以称为透明代理。使用透明代理时,网页浏览器访问网站时的域名解析请求将优先发给DNS服务器。
实际应用中,传统代理多见于nternet环境,如为QQ程序使用代理可以隐藏本机真实IP地址,为下载工具使用多个代理可以规避服务器的并发连接限制。而透明代理多见于局域网环境,如在Linux网关中启用透明代理后,局域网主机无须进行额外设置就可以享受更好的上网速度。
二,安装及运行控制
下面以squid-3.4.6版为例。介绍其安装和运行控制。
1.编译安装Squid
配置Squid的编译选项时,将安装目录设为/usr/local/squid,其他具体选项根据实际需要来定,配置前可参考/configure--help”给出的说明。
使用源代码方式安装的服务通常要使用linux.iso光盘,以后就不在为大家次次说明。
上述选项含义如下。
--prefix=/usr/local/squid:安装目录。
--sysconfdir=/etc:单独将配置文件修改到其他目录。
--enable-linux-netfilter:使用内核过滤。
--enable-async-io=值:异步/O,提升存储性能,相当于“--enablepthreads--enable-storeio=ufs,aufs--with-pthreads--with-aufs-thread=值”。
--enable-default-err-language=Simplify_Chinese:错误信息的显示语言。
--disable-poll 与 --enable-epoll:关闭默认使用poll 模式,开启epoll模式提升性能。
--enable-gnuregex:使用GNU正则表达式。
安装完后,
创建链接文件
创建用户和组
2.Squid的配置文件
Squid 服务的配置文件位于/etc/squid.conf,充分了解配置行的作用将有助于管理员根据实际情况灵活配置代理服务。
默认情况下,配置文件中不包括cache_effective_user 与cache_effective_group 配置项,需要手动添加。
3.Squid的运行控制
1)检查配置文件语法是否正确
2)启动、停止Squid
第一次启动Squid服务时,会自动初始化缓存目录。在没有可用的Soquid服务脚本的情况下,也可以直接调用Squid程序来启动服务,这时需要先进行初始化。
初始化缓存目录:
启动squid服务:
关闭squid服务:
确认Squid服务处于正常监听状态
三,构建代理服务器
本节主要从三个方面来学习Squid服务的构建和使用,分别为传统代理,透明代理和ACL访问控制。传统代理的实现最为简单,透明代理还需要结合默认路由,防火墙策略等一起来完成,ACL列表主要用来针对客户机的Web访问过程进行过滤控制。
传统代理
使用传统代理的特点在于,客户机的相关程序(如IE浏览器、QQ聊天软件)必须指定代理服务器的地址、端口等基本信息。下面通过一个简单的应用案例来学习传统代理的配置和使用方法。
基于Intermet网络环境案例的主要需求描述如下。
在Linux主机B上,构建Squid为客户机访问各种网站提供代理服务,但禁止通过代理下载超过10VMB大小的文件。
在客户机C上,指定主机B作为Web访问代理,以隐藏自己的真实IP地址。
针对上述实验环境,主机B作为代理服务器,必须正确构建Squid 服务,并允许客户机使用代理;主机C作为客户机,需要为浏览器等程序指定所使用的代理服务器地址,端口号等信息,主机A作为测试网站,需要启用htod服务。
实验环境: 三台虚拟机分别为CentOS01 ,CentOS02,CentOS03
IP 地址分别为:192.168.100.10 192.168.100.20 192.168.100.30
扮演角色分别为:客户端 squid代理服务器 Apache主机
1)Squid服务器的配置
配置Squid 实现传统代理服务时,需要注意添加http_access allow all 访问策略,以便允许任意客户机使用代理服务。除此以外,为了限制下载的文件大小,还需要设置 reply_body_max_size项,其他各种参数均可保持默认。
(1)修改squid.conf配置文件。
(2)重载squid服务。
修改squid.conf 配置文件以后,需要重新启动服务方可生效。
1.客户机的代理配置
在Edge浏览器中,选择“设置”一“高级”一“打开代理设置”,打开“设置”窗口,在“手动设置代理”选项组中单击“使用代理服务器”选项下面的开关项,并添加代理服务器地址与端口,单击“保存”按钮即可生效。
如图:
若要在Linux客户机的命令行界面中使用代理服务器(如elinks网页浏览器,wget下载工具)。
必须通过环境变量来指定代理服务器的地址、端口等信息。
HTTP_PROXY=http://172.16.16.22:3128//为使用HTTP协议指定代理HTTES_PROXY=http://172.16.16.22:3128//为使用HTTPS协议指定代理FTP_PROXY=http://172.16.16.22:3128//为使用FTP协议指定代理NO_PROXY=192.168.100.1,192.168.100.2 //对两个局域网段不使用代理
在客户端安装elinks浏览器
在CentOS03安装httpd服务
修改网站默认页面为 Hello Linux Hello Squid
启动服务并设置为开机自启
测试是否能够访问
2.代理服务的验证方法
在客户机192.168.100.10中通过浏览器访问目标网站http://192.168.100.30然后观察Squid代理服务器、Web服务器的访问日志,以验证代理服务是否发挥作用。
使用客户机访问http
1)查看Squid访问日志的新增记录
在Squid代理服务器中,通过跟踪Squid服务的访问日志文件,应该能够发现客户机192.168.100.10访问网站服务器192.168.100.30的记录。
2)查看Web访问日志的新增记录
在被访问的Web服务器中,通过跟踪httpd服务的访问日志文件,应该能够发现来自代理服务器172.16.16.22的访问记录。这说明当客户机使用代理以后,Web服务器并不知道客户机的真实IP地址,因为实际上是由代理服务器替它在访问。
当从客户机再次访问同一Web页面时,Squid访问日志中会增加新的记录,但Web访问日志中的记录不会有变化(除非页面变更或执行强制刷新等操作)。这说明当客户机重复访问同一静态页面时,实际上是由代理服务器通过缓存提供的。
透明代理
透明代理提供的服务功能与传统代理是一致的,但是其“透明”的实现依赖于默认路由和防火墙的重定向策略,因此更适用于为局域网主机服务,而不适合为nternet中的客户机提供服务。下面也通过一个简单的应用案例来学习透明代理的配置和使用。
基于局域网主机通过Linux网关访问Intermet的环境,如图所示,案例的主要需求描述如下:
在Linux网关上,构建Squid为客户机访问Internet 提供代理服务。
在所有的局域网客户机上,只需正确设置IP地址、默认网关,不需要手动指定代理服务器的地址、端口等信息。
针对上述实验环境,透明代理的关键在于Linux网关服务器,而对于客户机仅需正确设置网络地址、默认网关,而并不需要指定代理服务器(若指定了反而易出错)。
1) 配置Squid支持透明代理
Squid 服务的默认配置并不支持透明代理,因此需要调整相关设置。对于2.6以上版本的Squid服务,只要在http_port配置行加上一个transparent”(透明)选项,就可以支持透明代理了。
配置代理服务器支持路由功能
2)安装iptables防火墙
透明代理中的Squid服务实际上是构建在Linux网关主机上的,因此只需正确设置防火墙策略,就可以将局域网主机访问Internet的数据包转交给Squid 进行处理。
清除防火墙规则
查看防火墙规则
保存防火墙跪着
查看防火墙
3)centos02添加一块网卡做为网关使用
配置第二块网卡ip为192.168.200.254
重启网卡
查看IP
4)Centos03网卡模式改为VMnet3
修改IP为192168.200.10,并设置网关为192.168.200.10
重启网卡
5)配置Centos01的网关为192.168.100.20
重启网卡
6)删除Cetos01的环境信息
7)关闭浏览器的代理设置,具体参考上述
验证透明代理的使用
为了验证透明代理的效果,如果存在手动指定的代理服务器设置应在客户机中将其去除。例如,在Edge或其他浏览器的连接设置中不要勾选使用代理服务器;在Linux客户机的命令行界面中,可以通过Unset 命令清除HTTP_PROXY、HTTPS_PROXY 等变量。无论是illdous客户机还是linux客户机,网关都应设为Squid代理服务器的地址。
Linux测试:
Windows测试:
Windows测试需要制定网关为代理服务器192.168.100.20
测试
三,ACL访问控制
Squid 提供了强大的代理控制机制,通过合理设置ACL(Access Control List,访问控制列表)并进行限制,可以针对源地址、目标地址、访问的URL路径、访问的时间等各种条件进行过滤。
在配置文件squid.conf中,ACL访问控制通过以下两个步骤来实现:
其一,使用acl配置项定义需要控制的条件;
其二,通过http_access配置项对已定义的列表做“允许“或“拒绝”访问的控制。
1.定义访问控制列表
每行acl配置可以定义一条访问控制列表,格式如下所示。
acl 列表名称 列表类型 列表内容
其中,“列表名称”由管理员自行指定,用来识别控制条件;列表类型”必须使用Squid 预定义的值,对应不同类别的控制条件;列表内容”是要控制的具体对象,不同类型的列表所对应的内容也不一样,可以有多个值(以空格分隔,为“或”的关系)。
通过上述格式可以发现,定义访问控制列表时,关键在于选择“列表类型”并设置具体的条件对象。Squid预定义的列表类型有很多种,常用的包括源地址、目标地址、访问时间、访问端口等,如表所示。
在定义访问控制列表时,应结合当前网络环境正确分析用户的访问需求,准确定义使用代理服务的控制条件。例如,针对不同的客户机地址、需要限制访问的目标网站、特定的时间段……分别定义列表。
当需要限制的同一类对象较多时,可以使用独立的文件来存放,在acl配置行的列表内容处指定对应的文件位置即可。例如,若要针对目标地址建立黑名单文件,可以参考以下操作。
2.设置访问权限
定义好各种访问控制列表以后,需要使用httpd_access配置项来进行控制。必须注意的是,http_access配置行必须放在对应的acl配置行之后,每行http_access配置确定一条访问控制规则,格式如下所示。
http_access allow 或deny 列表名……
在每条http_access规则中,可以同时包含多个访问控制列表名,各个列表之间以空格分隔,为
“与”的关系,表示必须满足所有访问控制列表对应的条件才会进行限制。需要使用取反条件时,可以在访问控制列表前添加!”符号。
执行访问控制时,Squid将按照各条规则的顺序依次进行检查,如果找到一条相匹配的规则就不再向后搜索(这点与ptebles的规则匹配类似)。因此,规则的顺序安排是非常重要的,以下两种默认情况需要我们注意。
没有设置任何规则时:Squid服务将拒绝客户端的请求。
有规则但找不到相匹配的项:Squid将采用与最后一条规则相反的动作,即如果最后一条规则是allow,就拒绝客户端的请求,否则允许该请求。
通常情况下,把最常用到的控制规则放在最前面,以减少Squid的负载。在访问控制的总体策略上,建议采用“先拒绝后允许”或“先允许后拒绝”的方式,最后一条规则设为默认策略,设为“http_access allow all"或者“htp_access deny all"。
3.验证访问控制效果
关于Squid服务的访问控制效果,无外乎两种情况:一种是能够正常访问,另一种是禁止访问。
当客户机的代理访问请求被Squid服务拒绝时,在浏览器中会看到ERROR报错页面,具体内容会根据限制条件不同有些细小差别。
故事很短,道理很长,学无止境,不忘初心,砥砺前行
微信搜索 “徐阿马” 关注公众号,期待你的关注!