Squid 代理服务
1:正向代理模式 :分为标准和透明
正向代理模式:实现多个用户通过一个IP地址上网(比如说我们的路由器),ACL访问控制(比如说限制某个人不能上某些网站等)
2:反向代理模式
配置Squid服务程序
先安装我们的Squid服务
Squid服务程序的配置步骤虽然十分简单,但依然需要为大家交代一下实验所需的设备以及相应的设置。首先需要准备两台虚拟机,一台用作Squid服务器,另外一台用作Squid客户端,后者无论是Windows系统还是Linux系统皆可(本实验中使用的是Windows 7操作系统)。为了能够相互通信,需要将这两台虚拟机都设置为仅主机模式(Hostonly),然后关闭其中一台虚拟机的电源,在添加一块新的网卡后开启电源,如图
所以下我们实验的模式,是就是我们其中一台服务器安装两个网卡,一个局域网一个外网,另一台只安装一个局域网,仅主机模式,然后这样我们就可以通过局域网两台计算机互相通讯,而且又可以通过有外网服务器进行上网,要是我们只有局域网的服务器也可以上网,那么就一定是另一台服务器帮我们转发了。那么这就是Squid代理的功劳。
Squid服务器和客户端的操作系统和IP地址信息
主机名称 | 操作系统 | IP地址 |
Squid服务器 | RHEL 7 | 外网卡:桥接DHCP模式 内网卡:192.168.10.10 |
Squid客户端 | Windows 7 | 192.168.10.20 |
安后我们把那块外网网卡添加出来,你可以选择一种你喜欢的方式。
别忘了重启网卡,我们马上就可以上网了。
我们可以看到我们有两块网卡了,第二块就是对外的桥接网卡。
我们可以各种测试通不通。顺便开一下另一台客户端(windows和Linux都行),然后测试一下局域网通不通
然后我们关闭防火墙规则,并且保存他,这一步必须做,不然一会会访问不到。
然后我们重启squid服务并添加启动项。
与之前配置过的服务程序大致类似,Squid服务程序的配置文件也是存放在/etc目录下一个以服务名称命名的目录中。表16-2罗列了一些常用的Squid服务程序配置参数,大家可以预先浏览一下。
常用的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服务程序软件包在正确安装并启动后,默认就已经可以为用户提供标准正向代理模式服务了,而不再需要单独修改配置文件或者进行其他操作。接下来在运行Linux客户端。(确认客户端有局域网)
然后我们先试一下能不能用浏览器访问外网。
看来我们是想多了,下面就开始我们的表演,设置一下。我们以火狐为例
然后选择Edit,然后选最后一个高级选项
然后我们保存,刷新一下网页。马上就可以上网了。
这个就叫标准正向代理(windows7的话浏览器自己找一下)
算了,给你们看一下吧。
然后我们进入到squid服务的配置文件看一下吧。
大概是59行,这个3128熟悉不,没错就是我们配置网页时候得端口号,我们也可以修改他。
然胡重启squid服务
我们发现立刻就被禁用了。我们再配置一下。
我们发现立刻就可以了。
我们在编辑完httpd服务程序的配置文件并重启服务程序后,被系统提示报错。尽管现在重启Squid服务程序后系统没有报错,但是用户还不能使用代理服务。SElinux安全子系统认为Squid服务程序使用3128端口号是理所当然的,因此在默认策略规则中也是允许的,但是现在Squid服务程序却尝试使用新的10000端口号,而该端口原本并不属于Squid服务程序应该使用的系统资源,因此还需要手动把新的端口号添加到Squid服务程序在SElinux域的允许列表中。
[root@linuxprobe ~]# semanage port -l | grep squid_port_t
squid_port_t tcp 3128, 3401, 4827
squid_port_t udp 3401, 4827
[root@linuxprobe ~]# semanage port -a -t squid_port_t -p tcp 10000
[root@linuxprobe ~]# semanage port -l | grep squid_port_t
squid_port_t tcp 10000, 3128, 3401, 4827
squid_port_t udp 3401, 4827
透明正向代理
正向代理服务一般是针对企业内部的所有员工设置的,鉴于每位员工所掌握的计算机知识不尽相同,如果您所在的公司不是IT行业的公司,想教会大家如何使用代理服务也不是一件容易的事情。再者,无论是什么行业的公司,公司领导都希望能采取某些措施限制员工在公司内的上网行为,这时就需要用到透明的正向代理模式了。
“透明”二字指的是让用户在没有感知的情况下使用代理服务,这样的好处是一方面不需要用户手动配置代理服务器的信息,进而降低了代理服务的使用门槛;另一方面也可以更隐秘地监督员工的上网行为。
在透明代理模式中,用户无须在浏览器或其他软件中配置代理服务器地址、端口号等信息,而是由DHCP服务器将网络配置信息分配给客户端主机。这样只要用户打开浏览器便会自动使用代理服务了。如果大家此时并没有配置DHCP服务器,可以像如图所示来手动配置客户端主机的网卡参数。
为了我们实验的真实,我们给他设置回去,现在是没有设置标准正向代理,然后我们就要是用的高透明正向代理模式了。就是不用用户去配置什么,有时候用户基本是不想自己去配置这些东西的,亲身体验。所以我们就要想办法了,不能一个一个去配置吧。但是我们要设置一下这个客户端网卡的,把网关指向到我们的服务器。然后DNS指向到一个外网的DNS,其实这个我们也不用我们的用户来配的,因为我们可以通过我们之前学的DHCP服务直接为我们的用户去分配一下信息
那么我们的用户省事了,那么我们就需要做点什么了,总有个人需要站出来的不是么。
然后我们再配置一下我们的squid配置文件
我们先把端口号改回去,然后后面加上transpqrent,是转发的意思。
然后我们找到62行,把他开启了,这代表就是一个缓存目录的意思,待会我们就会有很多很多/var/spool/squid这样的缓存目录生成出来,就是当我们有第一个用户访问百度的时候,就会在我们服务器内部里面保存www.baidu.com这个网页的内容,当有第二个人访问同一个网站的时候,那么就会直接将我们服务器的这个信息传送给我们的客户端,目的呢就是加快了网站的二次相应速度。
我们看一下我们在客户端现在是ping不通百度的。
既然要让用户在无需过多配置系统的情况下就能使用代理服务,作为运维人员就必须提前将网络配置信息与数据转发功能配置好。前面已经配置好的网络参数,接下来要使用SNAT技术完成数据的转发,让客户端主机将数据交给Squid代理服务器,再由后者转发到外网中。简单来说,就是让Squid服务器作为一个中间人,实现内网客户端主机与外部网络之间的数据传输。
由于当前还没有部署SNAT功能,因此当前内网中的客户端主机是不能访问外网的
我们先清空一下防火墙。
如果我们选择firewall做的话直接
我们说过它里面有一个伪装技术,我们只需要点一下那个√,就OK了,我们ping一下。(都是在服务器上做的步骤,都说了不想让客户操作,应该明白吧)
我们会发现在客户端立刻就会ping通百度,但是这样是不是太简单了,没意思。我们还是给他关上用iptables试一下吧。
要想让内网中的客户端主机能够访问外网,客户端主机首先要能获取到DNS地址解析服务的数据,这样才能在互联网中找到对应网站的IP地址。下面通过iptables命令实现DNS地址解析服务53端口的数据转发功能,并且允许Squid服务器转发IPv4数据包。sysctl -p命令的作用是让转发参数立即生效:
先介绍一下这个命令的作用,定义为这是一个SNAT的模式,叫做源地址转换协议,(53端口号的udp服务其实就是指的是DNS服务可以去网上查一下,就像ftp是21端口号,ssh服务是22端口号一样,我们的网站是80端口号),就是指的所有用户查询DNS服务的话就可以直接吧信息交由我们eno33554992对外网卡来处理,这个网卡一定要以你的实际为准,别抄这里的。MASQUERADE是伪装的意思,他就是会自动获取你最新的IP地址(比如说我们每次重启路由器都会获取一个新的地址,不信你自己试试)。
下面我们编辑这个文件,添加一个参数
net.ipv4.ip_forward他值得就是我们IPV4的网络支持我们ipv4的转发,我们写上1。这样就可以经过我们的路由器转发我们DNS的信息了。
这样做好了我们再在客户端ping一下我们的百度。
那肯定是ping不同的。但是的话我们已经可以做DNS的解析了,看111.13.100.92
不信我们用nslookup看一下。
对吧。
然后我们进入到服务端把刚才配置的squid服务先给他关闭起来。这里有一个小BUG,就是我们先要把这个squid服务给他关闭起来,然后我们才可以使用到squid。
这里-k是对我们代理模式进行一个初始化工作,
然后我们再用一个squid -z进行初始化缓存目录。
在配置妥当并重启Squid服务程序且系统没有提示报错信息后,接下来就可以完成SNAT数据转发功能了。它的原理其实很简单,就是使用iptables防火墙管理命令把所有客户端主机对网站80端口的请求转发至Squid服务器本地的3128端口上。SNAT数据转发功能的具体配置参数如下。
一定要注意画红的地方,是你本机的,网卡名称是你桥接外网的网卡名称,IP是桥接外网分配给你的IP,不要照抄。然后我们说一下这些参数的作用。
第一个是nat -A PREROUTING还是一个SNAT技术,所有来自于我们用户的网站的请求都会被定义在3128端口号上面,也就是说所有向我们这个网关发送的80端口号网站的请求都会被转移到3128端口号上面。3128端口号他就是squid服务。
下面是说我们所有来自于192.168.10.0/24这个网段的用户的所有的请求都会通过我们对外的网卡转发出去。
我们可以看到他可以通了,也就是可以上网了。
------------------------------------------------------------------------------------------------------------------
到这里我们有人可能会想,到底是不是squid服务的作用这个实验到底生没生效,那么我们在squid服务上做一些限制,如果我们能限制我们的用户的话,说明他就是通过我们的squid服务了。那我们接下来看ACL访问控制。
ACL访问控制
说如果我们不太喜欢一个人,不想让他上网怎么办呢,我们看一下效果。
我们编辑一下我们squid服务主配置文件。
只允许IP地址为192.168.10.20的客户端使用服务器上的Squid服务程序提供的代理服务,禁止其余所有的主机代理请求。
下面的配置文件依然是Squid服务程序的配置文件,但是需要留心配置参数的填写位置。如果写的太靠前,则有些Squid服务程序自身的语句都没有加载完,也会导致策略无效。当然也不用太靠后,大约在26~32行的位置就可以,而且采用分行填写的方式也便于日后的修改。
26行我们定义一个别名,当我们再看到这个client的时候,就是看到了192.168.10.20
31行下面写上我们的规则就是http_access我们的网站请求,如果说我们的用户名称他叫做client(192.168.10.20)的时候我们就允许,32行是说,如果不是的话我们就禁止全部。
重启一下squid服务
当我们没有换IP的时候是可以访问的,(原来的IP就是192.168.10.20)。
我们现在把他换成192.168.10.30再看。
我们发现他还是可以,但是我们其中的一个时候就报错了。
是这样的,这个功能他是有局限性的,它是不能够限制加密网站的,如果这个网站不是加密的话就会限制掉,加密的话就无法限制。
禁止所有客户端访问网址中包含linux关键词的网站
Squid服务程序的这种ACL功能模式是比较粗犷暴力的,客户端访问的任何网址中只要包含了某个关键词就会被立即禁止访问,但是这并不影响访问其他网站。
继续编辑我们配置文件
其中-i参数就是限制一个关键词的意思,我们定义一个haha的别名,然后限制关坚持linux,见到haha就等于是linux,然后我们下面限制别名。
我们看一下有liinux的就不行,但是前面是https就不行。不受限制的。其他的只要有linux的就会被限制。
没有linux的就可以。
禁止所有客户端访问某个特定的网站。
由于我们禁止所有客户端访问网址中包含linux关键词的网站,这将造成一大批网站被误封,从而影响同事们的正常工作。其实通过禁止客户端访问某个特定的网址,也就避免了误封的行为。下面按照如下所示的参数配置Squid服务程序并重启,然后进行测试,其测试结果如图
继续编辑我们配置文件
还是定义一个deny_url别名,然后禁止网站www.linuxcool.com
重启服务,然后试一下。
我们看开始是可以的,
然后我们重启一下再试,
就被禁止了。
禁止员工在企业网内部下载带有某些后缀的文件
在企业网络中,总会有一小部分人利用企业网络的高速带宽私自下载资源(比如游戏安装文件、电影文件等),从而对其他同事的工作效率造成影响。通过禁止所有用户访问.rar或.avi等后缀文件的请求,可以防止他们继续下载资源,让他们知难而退。下面按照如下所示的参数配置Squid服务程序并重启,然后进行测试,其测试结果如图
如果这些员工是使用迅雷等P2P下载软件来下载资源的话,就只能使用专业级的应用防火墙来禁止了。
还是先编辑我们的主配置文件。
定义一个badfile别名,然后-i禁止mp3和rar格式文件下载,我们使用\.给他转译,$符是后缀的意思。
然后我们重新启动两边squid服务,这可能是一个bug吧,很烦。
首先我们看一下原网站是可以访问的。
然后我们随便加一个东西,出现这个没找到,但是说明还能访问。
但是当我们后面加上rar的时候,就直接报错被禁止了。
squid反向代理
网站页面是由静态资源和动态资源一起组成的,其中静态资源包括网站架构CSS文件、大量的图片、视频等数据,这些数据相对于动态资源来说更加稳定,一般不会经常发生改变。但是,随着建站技术的更新换代,外加人们不断提升的审美能力,这些静态资源占据的网站空间越来越多。如果能够把这些静态资源从网站页面中抽离出去,然后在全国各地部署静态资源的缓存节点,这样不仅可以提升用户访问网站的速度,而且网站源服务器也会因为这些缓存节点的存在而降低负载。
反向代理是Squid服务程序的一种重要模式,其原理是把一部分原本向网站源服务器发起的用户请求交给Squid服务器缓存节点来处理。但是这种技术的弊端也很明显,如果有心怀不轨之徒将自己的域名和服务器反向代理到某个知名的网站上面,从理论上来讲,当用户访问到这个域名时,也会看到与那个知名网站一样的内容(有些诈骗网站就是这样骗取用户信任的)。因此,当前许多网站都默认禁止了反向代理功能。开启了CDN(内容分发网络)服务的网站也可以避免这种窃取行为。
网站=动态资源+静态资源
动态资源=数据库、脚本
静态资源=html,图片,视频,php静态文件等。
我们还原一下虚拟机重新安装squid服务,避免实验之间的冲突。
当前许多网站都默认禁止了反向代理功能。开启了CDN(内容分发网络)服务的网站也可以避免这种窃取行为.
现在告诉大家怎么找没有限制的网站,就是我们先找到他的域名然后ping一下
如果你能用这个IP也能给他访问到的话,说明这个网站就没有做限制的,这很不安全。
下面我们开始实验这个技术,
首先我们给虚拟机网卡调成桥接模式。技术需要
编辑网卡,我们给他调成DHCP
把原来配置的移除了
然后重启网卡。
然后我们评一下百度网址。
可以,那么好,我们开始配置squid服务的配置文件。
因为正向和反向代理是不能同时使用的,所以我们把他删掉然后写我们的反向代理。然后59行IP是我们桥接模式分配给我们地址,别抄这里的,ifconfig自己看一下。然后80端口号,vhost值得是我们自己是一个虚拟主机。
然后我们定义一下我们缓存服务器的地址就写我们刚才看到的那个。58.247.138.211,然后parent是一个父类地址,我们对他进行一个缓存,他的端口号是80,他是一台原始服务器。
然后重启服务。
我们会发现,他们原网站IP也可以访问,我们本地可以用访问这个网址。