14proxy server的应用1.docx
《14proxy server的应用1.docx》由会员分享,可在线阅读,更多相关《14proxy server的应用1.docx(32页珍藏版)》请在冰豆网上搜索。
14proxyserver的应用1
课程名称
更安全的LINUX网络
教学对象
网络工程师专业
教材
更安全的LINUX网络
授课内容
防火墙的基本概念
课时
3(40-42)
教学目的
与要求
•了解术语:
什么是代理服务器
•熟悉代理服务器能够支持的通信协议
•掌握代理服务器的分类
•学会安装代理服务器
重点、难点
•掌握安装代理服务器
•以squid构建缓存代理服务器
课型
教学方法
教学过程
设计
(包括讲授知识、演示内容及案例、提问及学生演示内容)
第六章ProxyServer的应用
课程回顾
SNAT、DNAT分别表示什么,有哪些典型应用?
通过提问的方式回顾上次课的内容,根据学员的回答情况进行点评和总结
部分答案提示:
SNAT:
修改数据包源地址,典型应用——实现局域网用户共享单个公网IP地址接入Internet
DNAT:
修改数据包目标地址、目标端口,典型应用——在Internet中发布局域网内的应用服务器(如网站、邮件等)
前面的话
Proxy这个名词在网络安全的领域里似乎已渐渐被淡忘了,只要一提到网络安全,第一个被联想到的几乎都是“防火墙”,但你可能不知道,在早期有不少企业以Proxy来维护其企业网络安全,而现今由于防火墙技术不断发展,且价格不再像以往那么“昂贵”,因此,防火墙几乎已成为企业网络的安全中心,但事实上,Proxy在现今的企业网络中还是有其存在的价值及意义,当然,这些优点绝非防火墙所能办到的,本章将为大家介绍Proxy在企业中所扮演的重要角色。
6.1什么是ProxyServer
在没有Proxy的环境下Client及Server是直接连接的。
因此,不管是Client或Server都有可能遭受对方恶意的攻击,如果在有Proxy的环境下就如图所示,Client及Server被Proxy隔离在两侧,因此,Client端并无法直接连接到Server端,在这样的环境下,如果Client端需要访问Server端的资源,就必须借助ProxyServer的帮忙才有可能访问到Server上的资源。
例如,
Client端通过eth0告诉ProxyServer其所需要的网页是什么①,
这时ProxyServer由ethl向真正的WebServer提出Client端刚才所提出的请求②,
接着Server端响应Proxy所提出的请求③,
当ProxyServer收到这些信息后,再将这些信息交还给Client④
这样即完成Client端的一个服务请求动作。
看完上述例子,我们有问题?
这个例子让我们思考一个问题,如果ProxyServer不支持HTTP通信协议,那么Client端是否能看到网页?
答案当然是不行的。
例如,我们在两个只懂中文的人之间找了一个美国人来当传讯者,你觉得结果会怎样?
因此,使用Proxy之前请记得,只有ProxyServer能够支持的通信协议才能在ProxyServer下正常工作。
另一个ProxyServer很重要的特点是,我们都知道如果要以Linux主机来担任Router角色,就一定要把ip_forward的功能开启,否则lP封包就无法从一个接口被转送到另一个接口。
但是开启ip_forward功能之后,我们所需要面对的就是安全方面的问题了,因为Cracker可以利用LinuxRouter将攻击封包转送到真正的Server上,但请仔细思考我们的环境,我们是否需要开启ProxyServer上的ip_forward功能?
其实在ProxyServer的环境并不需要开启ip_forward机制,因为Proxy是一个DaemonProcess.而这个DaemonProcess同时服务在eth0及ethl两块网卡上,当Client端从eth0界面送入请求时,Proxy这个DaemonProcess再由ethl接口对WebServer提出服务请求。
因此,只要ProxyServer(ProxyDaemonProcess)本身没有安全上的漏洞,那么放置在ProxyServer后方的Client或Server基本上都可拥有一个很安全的执行环境。
6.2ProxyServer能够支持的通信协议
以本节中所要介绍的以SquidProxy为例,其能够支持通信协议的就只有HTTP、HTTPS、FTP、GOPHER及WAIS这5种,因为时代的变迁。
GOPHER及WAIS目前已经很少有人使用了,现在就只剩下HTTP、HTTPS及FTP这3种协议较为常用。
因此,千万要记住刚才我们特别提醒的:
只有ProxyServer能够支持的通信协议才能在ProxyServer下正常工作,所以我们在规划ProxyServer时一定要把通信协议考虑进来。
6.3ProxyServer的分类
ProxyServer的主要功能就是“代理”,我们可以借助Proxy来达到“屏蔽”的目的,这样即可提供Client或Server一个安全的服务执行环境,另外,ProxyServer在应用上因为保护“对象”的不同,大致上可分为CacheProxy及ReverseProxy两种,以下就让我们来看看什么是CacheProxy及ReverseProxy。
缓存代理概述
6.3.1什么是CacheProxy
以图为例来说明CacheProxy存在的重要性,ProxyServer就无须再到WebServer上重新取得网页数据,这样不但可以加速客户端的网页浏览,又可以有效节省企业的外网带宽。
我们假设企业内有10部WindowsXP的客户端,如果这10个客户端都要连到因特网来进行套件更新,那么,相同的一份更新数据将会被重复下载10次,这样不但浪费企业的外网带宽,又很没效率;但这样的问题在有ProxyServer的环境下将不再会发生。
首先,我们假设ProxyServer的Cache内空无一物,当Client-3对CacheProxy提出服务请求时①,
由于CacheProxy的Cache内容空无一物,因此,ProxyServer会对WebServer提出刚才Client-3所提出的请求②,
接着WebServer把ProxyServer所需要的I捌页内容传递给ProxyServer③,
在ProxyServer收到这个网页数据后,随即将网页数据存一份到ProxyServer上的Cache空间内④,
并将取得的网页数据传递一份给Client-3⑤,这样Client-3即可得到其所需要的网页内容;
假设这时Client-l也对ProxyServer提出与Client-3相同灼请求内容⑥,
由于Proxy刚才已经把网页内容存一份到Cache中,ProxyServer就会从Cache内将Client-1所需要的数据接直f专递给Client-1⑦,
因此,ProxyServer就无须再到WebServer上重新取得网页数据,这样不但可以加速客户端的网页浏览,又可以有效节省企业的外网带宽。
本图中,由于ProxyServer是放置在Gateway的位置上,在这个结构下的客户端除了HTTP、HTTPS及FTP之外,就无法再使用因特网上的其他服务了。
或许你会有疑问,真的会有人把ProxyServer放在Gateway的位置上吗?
其实在早期防火墙机制还不是很完善的年代里,ProxyServer大概就是如此这般的应用,不过,近年来因为防火墙机制越来越完善,且价格不断下降,因此,ProxyServer的应用架构大多已改成如上图所示,也就是说,以防火墙来保护企业内部网络,而Proxy就只拿来当做Cache使用。
6.3.2什么是ReverseProxy
反向代理技术在提高网站访问速度,增强网站可用性、安全性方面有很好的用途,目前有许多反向代理软件,比较有名的有Nginx和Squid。
Nginx是由IgorSysoev为俄罗斯访问量第二的Rambler.ru站点开发的,是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Squid是由美国政府大力资助的一项研究计划,其目的为解决网络带宽不足的问题,支持HTTP,HTTPS,FTP等多种协议,是现在Unix系统上使用、最多功能也最完整的一套软体。
ProxyServer除了可以用米保护客户端之外(如CacheProxy),其实ProxyServer也可以用来保护Server端,这个机制我们称为ReverseProxy。
6.3.2什么是ReverseProxy
以图为例来解说ReverseProxy的运行原理,首先我们把企业真正的WebServer放置在企业的内部网络中,并且在DMZ的区段中放置ReverseProxy,并且在DNSServer中把www记录指向ReverseProxy所在的lP,这样一来,任何要浏览这家企业网站的服务请求都会送给ReverseProxy,
接着,ReverseProxy会帮客户端到真正的WebServer上②
取回其所需要的网页内容③,
最后ReverseProxy再把取得的网页数据传递给客户端④,
这样客户端即可得到其所需的网页内容,同时ReverseProxy也可以拥有Cache能力,客户端所需要的网页在ReverseProxy的Cache内已经存在时,ReverseProxy就会直接从Cache中供应给客户端,而无须再对WebServer提出服务请求,所以ReverseProxy也有着降低WebServerLoading的功效。
从以上的流程中可以发现,客户端并不会知道自己所访问的是一台ReverseProxy,而且就算客户端知道自己是通过ReverseProxy的代理才能访问到WebServer,客户端还是无法得知真正WebServer所在的位置,因此,Cracker并无法直接攻击到企业真正的WebServer,如果你所服务的企业是使用MSIIS为其WebServer,那么建议你,可以在IIS之前放置一台ReverseProxy,这样即可大大提升IISWebServer的可靠度。
6.4poxyserver的硬件需求
相较于Netfilter来说,ProxyServer的硬件可就马虎不得了,因为ProxyServer必须处理客户端所下载回来的网页数据,而且ProxyServer还可能被用来过滤客户端所访问的URL,再加上ProxyServer的网络流量通常都非常大,因此,在硬件的要求上会比较严格一点,以下就让我们来看看ProxyServer在各硬件上的要求。
·处理器(CPU):
虽然ProxyServer需要执行一些运算的动作,但ProxyServer性能的好坏与CPU并没有太大的关联,但也无须太刻意去寻找很旧的硬件,若以一个拥有500人的企业为例.如果单就任务,那么使用P42.0就已经足够了只执行Proxy的
·内存(Memory):
由于ProxyServer的Cache管理机制是将所有的Cache放置于硬盘中,而SquidProxy的创造者考虑到硬盘访问速度不够快,因此,将硬盘中“点击率”较高的Cache复制一份到内存之中,这样当客户端需要Cache数据时,即可从内存中快速提供给客户端。
因此内存的大小是严重影响ProxyServer性能的重要指标,至于内存该装多少,并没有标准答案,通常我们建议是“越大越好”。
·硬盘(HardDisk):
在前面的解说中我们了解了SquidProxyCache的管理方式,虽然Cache会额外被复制一份到内存中,但如果客户端数量庞大或是内存空间不够大,那么当客户端需要这些Cache数据时,还是得到服务器区访问资源,硬盘是影响ProxyServer性能的指标之一。
以硬盘本身的性能来讨论SCSI接口的硬盘绝对是百选,如果是叟应用在学校(大专院校),我们比较建议将SCSI组合成RAID5或RAID10;如果只是运用在一般的中小企业,如500人的企业,那么使用单块的SCSI硬盘就已足够了。
如服务于某一拥有200多个客户端的公司,当时在ProxyServer上所安装的只是一块20GB的IDE硬盘,感觉一点也不慢;如果你有预算上的考虑,不妨先试着用IDE或SATA的硬盘,如果真的不符合需求,再选择SCSI的硬盘也不迟。
·网卡:
因为ProxyServer昀网络流量很大,因此,选用一块稳定度高且性能好的网卡绝对是有必要的,虽然市场上可以选用的网卡品牌众多,但我们还是建议选用3COM的网卡,如果没有3COM,至少也要选用Intel的网卡,至于其他品牌的网卡产品,就不建议使用了。
6.5安装SquidProxy
安装软件SquidProxy
Centos找到RPM套件管理系统
rpm-ivhsquid-2.6.STABLE6-3.e15.i386.rpm
/etc/squid/squid.conf
注意:
LINUX9在第一张光盘
Squid基本配置
squid软件包
软件包名:
squid-2.6.STABLE6-3.el5
服务名:
squid
主程序:
/usr/sbin/squid
配置目录:
/etc/squid/
主配置文件:
/etc/squid/squid.conf
默认监听端口:
TCP3128
默认访问日志文件:
/var/log/squid/access.log
讲解Centos5自带的代理服务软件包squid的相关内容
接下来介绍主配置文件squid.conf中的常用配置项
需要修改squid.conf配置文件之前,提醒学员先作好备份(squid提供了一个默认配置squid.conf.default,也可以用作备份)
配置squid实现基本的代理功能
普通代理服务的典型应用环境
下面通过普通代理服务器的配置实例来讲解squid的基本应用过程
首先讲解案例的应用环境,包括代理服务器所处的位置、局域网段地址、外部网络环境等,主要实现几个简单需求:
为局域网用户(192.168.1.0/24)访问Internet网站提供缓存加速
6.6以Squid构建CacheProxy
在本节中,我们将以Squid来构建CacheProxy,我们以图为例来说明CacheProxy的设置方式。
首先假设ProxyServer的外网接口为eth0,并且其lP地址为10.0.1.200,此外,ProxyServer对内的接口为ethl,并且其IP地址为192.168.0.1,而企业内部的网段假设为192.168.0.0/24;
由于SquidProxy的参数众多,因此,我们将设置的参数分成两阶段来讨论,分别为“CacheProxy的基本设置”及“CacheProxy的高级设置”。
6.6.1CacheProxy的基本设置
如果我们的目的只是要让CacheProxy动起来,其实并不需要做什么复杂的设定,只需要把服务的Port编号、Cache空间,以及简单的连接访问控制设置好就可以了,关于这些参数的设置分别如下。
1.指定SquidProxy的服务Prot编号
“http_port3128:
定义squid监听HTTP客户请求的端口。
例:
http_port8080
2.设定CacheDisk的大小
cache_dir:
定义squid用于存储对象的交换空间的大小及其目录结构。
CacheDisk的结构:
SquidProxy的Cache存储结构如所示,在Cache的目录下,我们可以看见许多的目录,这些称为Ll的目录,在L1的目录底下,可以看见其他的目录,是称为L2的目录,最后在L2目录下又看见许多文件,这就是SquidProxy所存储下来的Cache.
cache_dir参数计算,cache_dir的参数共可分为5个字段,其意义分别如下:
Cache_dirufs/var/spool/squid10016256
ufs:
为指定Squid存储Cache的方式,其可分为ufs、aufs、diskd等,单就以性能来考虑,ufs会是比较好的选择,因为ufs与其他方式比较起来,ufs在各种不同的环境下,其性能及稳定度会是比较好的。
/var/spool/squid:
Cache文件所存储的路径,Squid的内定值为/var/spool/squid,不过,这并不足一个很好的建议值,如果可以的话,尽量让Cache存储于独立的Partition上,这样可以增加SquidProxy读取Cache的速度。
此外,Squid的建议,一个Cache存储空间最好不要超过3GB,但若所需的Cache空间大于3GB,我们可以在squid.conf设置文件中同时加入多行的cache_dir参数,然后指向不同Partition。
Cache_dirufs/var/spool/squid10016256
100:
指定单一Cache空间的存储上限,定义缓存空间总量,其单位为MB
16、256:
16、256为L1及L2的目录数量
注意:
如果想要让SquidProxy的性能再好一些,那么这两个数值最好是经计算而来,其计算公式如下:
L1*L2=Cache总容量(KB)/第二层目录下文件总数/平均每个文件的大小(KB)
假设Cache总容量为9GB,因为9GB已经超过Squid组织的建议值,因此,我们将其划分为3个3GB的Partition,接着,由于Squid组织建议“第二层目录下文件总数”最好不要超过256个,因此,我们就定为256,另外,假设Cache下来文件的平均大小为20KB,这20KB是一个经验值,你也可以假设为30KB、40KB都可以,而之所以定为20KB,是因为一般网页的HTML文件、图片等其平均值约为20KB。
有了这些数值之后,我们就可以套用以下公式:
L1*L2=Cache总容量(KB)/第二层目录下文件总数/每个文件的大小(KB)
L1*L2=3000000KB/256/20KB
L1*L2=585.9375
16*37=592略大于586
以以上的计算公式可以发现,其中Ll×L2=585.9375,而Ll及L2并没有标准的答案,不过根据Squid的建议是“尽量让两个数值”较为接近,因此,这里选定了16×37=592略大于586,最后我们可以把cache_dir的参数设定如下:
Cache_dirufs/cache-130001637
Cache_dirufs/cache-230001637
cache_dirufs/cache-330001637
3.设定CacheMemory的大小
SquidProxy会将所有Cache数据存放于CacheDisk中,但是会将被使用率较高的Cache复制到内存中。
设定一个适当的CacheMemory空间将有助于提升SquidProxy的性能。
CacheMemory的大小可以借助cache_mem参数来指定,至于值的大小通常会设定为物理内存的1/2,但如果ProxyServer主机是专门用来执行CacheProxy的任务,我们可以试着再把值调大到物理内存的2/3也还算合理
4.连接访问控制
默认情况
“本机”的应用程序通过其连上因特网,所以对来自其他主机的请求会一律拒绝
SquidProxy为了避免一些不必要的困扰,因此,在预设的情况下只允许“本机”的应用程序通过其连上因特网,所以对来自其他主机的请求会一律拒绝,
我们以图来解释这个问题。
首先看到①的部分,在预设情况下,如果我们在SquidProxyServer上启动Firefox浏览器,并将(Fireox的ProxyServer设定值指向“本机(127.0.0.1)"的Port3128.那么将可以顺利通过SquidCacheProxyServer来连接因特网。
接着来看②的部分,如果我们是在Client-A主机上将浏览器的ProxyServer设定值指向SquidCacheProxyServer,那么浏览器将无法通过SquidCacheProxyServer来连上因特网。
若要了解以上问题的成因,我们得从Squid的设定文件来讨论。
2394行:
来自于“任何地方”的客户端都称为all。
2396行:
来自于“127.0.0.1’’这个lP的客户端称为localhost。
2526行:
只有“localhost"这台主机可以通过Proxy来连上因特网。
2527行:
只要是“all"这些主机都不能通过Proxy来连上因特网。
以下所列为squid.conf预设的文件内容,我们列出影响这些行为的关键4行,其意义分别如下。
2394行:
aclallsrc0.0.0.0/0.0.0.0
2396行:
acllocalhostsrc127.0.0.1/255.255.255.255
2526行:
http_accessallowlocalhost
2527行:
http_accessdenyall
在了解了以上意义之后,接着我们来看SquidProxy的连接机制是如何进行的。
在阅有先后差异的,也就是说,SquidProxy在看这个设定文件时,其匹配的原则
是“优先匹配”,例如,当127.0.0.1主机提出服务请求时,SquidProxy即会以由上往下的方向来匹配,当SquidProxy匹配到第2396行时,SquidProxy就会把这个请求定义为localhost,接着匹配到第2526行时,就开放这个客户端可以连到因特网,当然底下的2527行就不会被SquidProxy考虑在内了;
但如果提出服务请求的客户端不是127.0.0.1时,就会在第2394行被定义为all,而all并无法满足2526行的条件,因此,匹配的动作将继续进行到第2527行,但2527行的限制是说:
“只要是all的客户端,就拒绝其所有的访问行为”。
在看完以上说明之后,相信你对于SquidProxy的连接访问控制应有了初步的认识。
接着,我们再将这些参数整理如下,并做最后的说明。
参数整理如下:
73http_port8080
738cachemem512MB
993cache_dirufs/cache30001637
2524acluuusrc192.168.0.0/24
2525http_accessallowuuu
2526http_accessallowlocalhost
2527http_accessdenyall
Squid控制方式
Servicesquidstart|stop|restart|reload|status|
73行:
指定http_port为80800
·738行:
指定cache_mem为512MB,如果你的测试主机没有足够的内存,可以试着将值调整小一点,毕竟只是做实验而已。
·993行:
指定cache_dir的路径为/cache目录,因此,请切割一个分区来作为存放Cache之用,但请务必记得将cache目录的权限设定为“rwxr-x---squidsquid”,若是你的硬盘没有足够的空间也没有关系,就使用预设的/var/spool/squid目录来做实验即可,但是Cache的空间请务必大于cache_mem的空间。
·2524行:
这一行为新加入的,