利用SQUID做透明代理实现内网访问Internet
在真实世界中我们常常会去帮人家办一些事情,例如帮人家交电费什么的,在这种情况下你不是电表的主人,而是代办者(代理者)的身份。在网络世界中Proxy就是相当于那个帮人家交电费的人了,当我们发出连接请求的时候,就会通过Proxy去帮我们直接与目标服务器沟通,帮我们取得资料。通常我们所说的高速缓存代理,就是以空间换时间。本文主要介绍了代理服务器的概念、作用、产生的原因以用工作原理。介绍了如何在Linux2.4内核环境下应用iptables NAT和squid实现透明代理的方法。结果表明,该方法实现了利用squid做透明代理实现内网访问Internet,从而解决了IP地址紧缺、网络速度慢、客户端设置代理服务器麻烦等问题。
一 概述
Linux是一套免费使用和自由传播的类Unix操作系统,它主要用于基于Intel x86系列CPU的计算机上。这个系统是由全世界各地的成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品。Linux的出现,最早开始于一位名叫Linus Torvalds的计算机业余爱好者,当时他是芬兰赫尔辛基大学的学生。他的目的是想设计一个代替Minix(是由一位名叫Andrew Tannebaum的计算机教授编写的一个操作系统示教程序)的操作系统,这个操作系统可用于386、486或奔腾处理器的个人计算机上,并且具有Unix操作系统的全部功能,因而开始了Linux雏形的设计。
Linux以它的高效性和灵活性著称。它能够在PC计算机上实现全部的Unix特性,具有多任务、多用户的能力。Linux是在GNU公共许可权限下免费获得的,是一个符合POSIX标准的操作系统。Linux操作系统软件包不仅包括完整的Linux操作系统,而且还包括了文本编辑器、高级语言编译器等应用软件。它还包括带有多个窗口管理器的X-Windows图形用户界面,如同我们使用Windows NT一样,允许我们使用窗口、图标和菜单对系统进行操作。
代理服务器(Proxy)是网络信息的中转站,比方说HTTP代理服务器。我们使用网络浏览器直接链接其他Internet站点并取得网络信息时,需送出Request信号来得到回答,然后对方再把信息传送回来。代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web 服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你。而且大部分代理服务器都具有缓冲功能,就好像一个大Cache,它不断将新取得的数据包存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。除此之外还有SOCKS代理服务器,其原理大同小异。用户机通过Proxy Server上网的步骤如下:
(1)用户机端向Server发出请求。
(2)Server收到请求后比较判断Cache中时候存在用户机想要的资料,如果没有则向远程Server发送数据请求。
(3)将请求回来的资料先存放到Cache中,再将资料传送给用户端。
(4)当用户端发出的请求中所需要的资料在Cache中有,则将Cache中的资料直接传送给client端。
虽然当第一访问这向Proxy请求的数据Cache中没有时,Proxy抓取数据后会先保存在Cache中,这样访问速度变慢了,可是第二个访问者以及后来的访问者需要该资料的时候,proxy都不要想远程服务器请求,直接将cache中的资料发送给后来的请求者就行了,这样就减少了连接远程服务器的流量,另外由于proxy是在本地的,所以传输速度也更快。
二 代理服务器的产生
随着因特网技术的迅速发展,越来越多的计算机连入了因特网。它促进了信息产业的发展,并改变了人们的生活、学习和工作方式,对很多人来说,因特网已成为不可缺少的工具。而随着因特网的发展也产生了诸如IP地址耗尽、网络资源争用和网络安全等问题。代理服务器就是为了解决这些问题而产生的一种有效的网络安全产品。
如果一个单位有几百台微机连网,在上网访问时,将出现网络资源争用和增加上网费用的问题。一台主机访问了某个站点而另一台主机又访问同一个站点,如果是同时访问将出现网络资源争用的问题,如果是相继访问将出现增加本单位网络费用的问题。
本单位或本单位的各部门的网络均有安全性要求高的数据,而因特网上经常会有一些不安全的行为出现。如果每台主机都直接连到因特网上,势必会对内部网(Intranet)的安全造成严重的危害。因此,使网络安全运行是网络发展的前提条件,也是人们日益关注的热点。
如何快速地访问Internet站点,并提高网络的安全性,这已成为当今的热门话题。新一代的代理服务器使我们美梦成真。代理服务器(Proxy Server)可以缓解或解决上述问题,是因特网共享解决方案(Interne t Sharing Solution)的关键。
代理服务器软件安装在网络节点上,利用其高速缓存(Cache),可以极大地、极有效地缓存因特网上的资源。当内部网的一个客户机访问了因特网上的某一站点后,代理服务器便将访问过的内容存入它的高速缓存(Cache)中,如果内部网的其他客户机再访问同一个站点时,代理服务器便将它缓存中的内容传输给该客户机,这样就能使客户机共享任何一个客户机所访问过的资源,这样就可以大大地提高访问网站的速度和效率,尤其是对那些冗长、庞大的内容,更可起到立杆见影、事半功倍的作用;同时减少网络传输流量,提高网络传输速度,节约访问时间,降低访问费用。
三 代理服务器
3.1什么是代理服务器
代理服务器(Proxy Server)是指代理服务的双宿主主机,是个人网络和Internet服务商之间的中间代理机构,它负责转发合法的网络信息,对转发进行控制和登记。代理服务器作为连接Internet(广域网)与Intranet(局域网)的桥梁
3.2代理服务器的功能
(1) 共享网络
最常见的可能是用代理服务器共享上网,很多人不知不觉中就在用,比如通过sygate,wingate,isa,ccproxy,NT系统自带的网络共享等,可以提供企业级的文件缓存、复制和地址过滤等服务,充分利用局域网出口的有限带宽,加快内网用户的访问速度,可以解决仅仅有一条线路一个IP,IP资源不足,带局域网很多用户上网的功能,同时可以做为一个防火墙,隔离内网与外网,并且能提供监控网络和记录传输信息的功能,加强了局域网的安全性,又便于对上网用户进行管理。
(2)访问代理
加快访问网站速度,在网络出现拥挤或故障时,可通过代理服务器访问目的网站。比如A要访问C网站,但A到C网络出现问题,可以通过绕道,假设B 是代理服务器,A可通过B, 再由B到C。大家还记得前几个月,有段时间网络不正常,基本访问不了外国网站,如GOOGLE,YAHOO,甚至连CCF都访问不了,心里很着急。结果通过一个代理服务器,发现都可以访问,速度还不错,在这样的情况下,代理服务器就可以发挥很大的作用了。还有一类代理服务器备份有相当数量的缓存文件,如果我们当前所访问的数据在代理服务器的缓存文件中,则可直接读取,而无需再连接到远端Web服务器。这样,加快了访问速度。
(3) 防止攻击
隐藏自己的真实地址信息,还可隐藏自己的IP,防止被黑客攻击。通过分析指定IP地址,可以查询到网络用户的目前所在地。例如,大家在一些论坛上看到,论坛中明确标出了发帖用户目前所在地,这就是根据论坛会员登录时的IP地址解析的。还有平日里我们最为常用的显IP版QQ,在“发送消息”窗口中,可以查看对方的IP及解析出的地理位置。而当我们使用相应协议的代理服务器后,就可以达到隐藏自己当前所在地地址的目的了。
(4) 突破限制
代理服务器还可以突破网络限制。比如局域网对上网用户的端口,目的网站,协议,游戏,即时通讯软件等的限制,都可以突破这些限制,可参见我这篇帖子,如何突破局域网对上网用户的一些限制不再重复。举个例子:GOOGLE我们都喜欢用,其实GOOGLE有一个功能就有点类似于代理服务器的功能,就是网页快照,现在网站经常发生变动,地址或者网站关了,网站服务器发生故障了,或者已经更新了,但我们仍然要查以前非常有用的资料,网页快照就排上用场了,Google 以其复杂而全自动的搜索方法排除了任何人为因素对搜索结果的影响,保证了网页排名的客观公正,Google 可以方便、诚实、客观地帮您在网上找到有价值的资料。GOOGLE有一个海量的数据库,如果找不到服务器,Google 储存的网页快照也可救急。虽然网页快照中的信息可能不是最新的,但在网页快照中查找资料要比在实际网页中快得多,这时可以通过加密代理访问Google,再访问其网页快照来救急。
(5)掩藏身份
代理服务器知识是黑客基本功,黑客的很多活动都是通过代理服务器,比如扫描、刺探,对局域网内机器进行渗透,黑客一般攻击的时候都是中转了很多级跳板,才攻击目标机器。隐藏了身份,保证了自己的安全。
(6)提高速度
提高下载速度,突破下载限制。比如有的网站提供的下载资源,做了一IP一线程的限制,这时候可以用影音传送带,设置多线程,为每个线程设置一个代理。对于限制一个IP的情况很好突破,只要用不同的代理服务器,就可同时下载多个资源,适用于从WEB和FTP 上下载的情况。不过如果是论坛里面的资源,每个用户一个账号,并且限制一账号一IP,代理服务器就突破不了。还有一种情况,比如我们这里,电信的用户上不了联通的电影网站,联通的用户上不了的电信电影网站,这种情况只要电信的找一个联通地代理,IP地址属联通就行。联通找一个电信代理。就可以去电影网站下载其电影。教育网还可以通过代理服务器可使无出国权限或无访问某IP段权限的计算机访问相关资源。
3.3代理服务器的工作原理
(2)代理服务器联系客户机请求的服务器,缓存客户访问内容
(3)客户机访问代理服务器的缓存
3.4 代理服务器的分类
(1)正向代理: 正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性(由mod_cache提供)减少网络使用率。使用ProxyRequests指令即可激活正向代理。因为正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。
(2)透明代理:透明代理技术中的透明是指客户端感觉不到代理的存在,不需要在浏览器中设置任何代理,客户只需要设置缺省网关,客户的访问外部网络的数据包被发送到缺省网关,而这时缺省网关运行有一个代理服务器,数据实际上被被重定向到代理服务器的代理端口(如8080),即由本地代理服务器向外请求所需 数据然后拷贝给客户端。理论上透明代理可以对任何协议通用。
(3)反向代理: 反向代理正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的名字空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。另外,还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。
3.5 squid简介
(1)Squid是一个高性能的代理缓存服务器,它支持FTP和HTTP协议
(2)Squid支持SSL,支持访问控制
(3)Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户请求
(4)Squid代理服务器可以分为:普通代理服务器、透明代理服务器、反向代理服务器
(5) Squid可用在很多操作系统中,如AIX, Digital Unix, FreeBSD, HP-UX, Irix, Linux,NetBSD, Nextstep, SCO, Solaris,OS/2等,也有不少人在其他操作系统中重新编译过Squid。
(6) Squid对硬件的要求是内存一定要大,不应小于128M,硬盘转速越快越好,最好使用服务7专用SCSI硬盘,处理器要求不高,400MH以上既可。
四iptables与nat
4.1 iptables 简介
(1)netfilter
netfilter/iptables IP 信息包过滤系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。这些规则存储在专用的信息包过滤表中,而这些表集成在Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。
虽然netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和iptables 组成。
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
(2)iptables
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它。
a.建立规则和链
通过向防火墙提供有关对来自某个源、到某个目的地或具有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。通过使用netfilter/iptables 系统提供的特殊命令iptables ,建立这些规则,并将其添加到内核空间的特定信息包过滤表内的链中。关于添加/除去/编辑规则的命令的一般语法如下:
$ iptables [-t table] command [match] [target]
b.表(table)
[-t table] 选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。有三种可用的表选项:filter 、nat 和mangle 。该选项不是必需的,如果未指定,则filter 用作缺省表。
filter 表用于一般的信息包过滤,它包含INPUT 、OUTPUT 和FORWARD 链。nat 表用于要转发的信息包,它包含PREROUTING 、OUTPUT 和POSTROUTING 链。如果信息包及其头内进行了任何更改,则使用mangle 表。该表包含一些规则来标记用于高级路由的信息包,该表包含PREROUTING 和OUTPUT 链。
注:PREROUTING 链由指定信息包一到达防火墙就改变它们的规则所组成,而POSTROUTING 链由指定正当信息包打算离开防火墙时改变它们的规则所组成。
4.2 Netfilter/iptables系统功能
Nefilter/iptables已经完全代替了ipchains,其中主要原因就在于Nefilter/iptables添加了许多新的功能.Nefilter/iptables的主要功能如下:
(1) 具有连接跟踪功能
(2) 增强了日志功能.
(3) 支持网络地址转换功能.
(4) 具有自动碎片重装功能.支持大量增强型补丁包.
正因为Nefilter/iptables的这些功能,所以Nefilter/iptables常被用户用于建立支持状态检测的包过滤防火墙,还可以利用NAT透明代理和共享上网.
4.3 Netfilter/iptables的优点
netfilter/iptables 的最大优点是它可以配置有状态的防火墙,这是ipfwadm 和ipchains 等以前的工具都无法提供的一种重要功能。有状态的防火墙能够指定并记住为发送或接收信息包所建立的连接的状态。防火墙可以从信息包的连接跟踪状态获得该信息。在决定新的信息包过滤时,防火墙所使用的这些状态信息可以增加其效率和速度。这里有四种有效状态,名称分别为ESTABLISHED 、INVALID 、NEW 和RELATED 。
状态ESTABLISHED 指出该信息包属于已建立的连接,该连接一直用于发送和接收信息包并且完全有效。INVALID 状态指出该信息包与任何已知的流或连接都不相关联,它可能包含错误的数据或头。状态NEW 意味着该信息包已经或将启动新的连接,或者它与尚未用于发送和接收信息包的连接相关联。最后,RELATED 表示该信息包正在启动新连接,以及它与已建立的连接相关联。
netfilter/iptables 的另一个重要优点是,它使用户可以完全控制防火墙配置和信息包过滤。您可以定制自己的规则来满足您的特定需求,从而只允许您想要的网络流量进入系统。
另外,netfilter/iptables 是免费的,这对于那些想要节省费用的人来说十分理想,它可以代替昂贵的防火墙解决方案。
4.4 什么是私有地址
私有地址(Private address)属于非注册地址,专门为组织机构内部(如局域网内)使用。
以下表列出留用的内部寻址地址:
私有IP地址的范围 | |
私有IP地址的范围 | 子网掩码 |
10.0.0.0-10.255.255.255 | 255.0.0.0 |
172.16.0.0-172.31.255.255 | 255.255.0.0 |
192.168.0.0-192.168.255.255 | 255.255.255.0 |
4.5 什么是NAT
NAT——网络地址转换,是通过将专用网络地址(如企业内部网Intranet)转换为公用地址(如互联网Internet),从而对外隐藏了内部管理的IP 地址。这样,通过在内部使用非注册的IP 地址,并将它们转换为一小部分外部注册的IP 地址,从而减少了IP 地址注册的费用以及节省了目前越来越缺乏的地址空间(即IPV4)。同时,这也隐藏了内部网络结构,从而降低了内部网络受到攻击的风险。
4.6 NAT工作原理
- 内部地址翻译(Translation inside local addresses):
这是比较通用的一种方法,将内部IP一对一的翻译成外部地址。
在内部主机连接到外部网络时,当第一个数据包到达NAT路由器时,router检查它的NAT表
因为是NAT是静态配置的,故可以查询出来(simply entry),然后router将数据包的内部局部IP(源地址)更换成内部全局地址,再转发出去。外部主机接受到数据包用接受到的内部全局地址来响应,NAT接受到外部回来的数据包,再根据NAT表把地址翻译成内部局部IP,转发过去。
- 内部全局地址复用(overloading inside glogal addresses)
使用地址和端口pair将多个内部地址影射到比较少的外部地址。这也是所谓的PAT。和内部地
翻译一样,NAT router同样也负责查表和翻译内部IP地址,唯一的区别就是由于使用了overloading,router将复用同样的内部全局IP地址,并存储足够的信息以区分它和其他地址,这样查询出来的是extended entry。NAT router和外部主机的通讯采用翻译过的内部全局地址,故同一般的通信没有差别,router到内部主机通讯时,同样要查NAT表。
(3)TCP负载重分配(TCP load distributing)和以上两种操作不同,这是NAT由外到内的翻译,所 以那种以为WEB server一定要放置到
4.7 NAT功能
NAT(网络地址转换)提供了局域网共享上网的简单方案,内部网络用户连接互联网时,NAT将用的
内部IP地址转换成一个外部公共IP地址,反之,数据从外部返回时,NAT反向将目标地址替换成初始的
内部用户的地址。实际上NAT隐藏了内部IP地址,构成了一个天然的防火墙。
4.8 NAT类型
NAT有三种类型:静态NAT(Static NAT)、动态地址NAT(Pooled NAT)、网络地址端口转换NAPT(Port
-Level NAT)。
静态NAT设置起来最为简单和最容易实现的一种,内部网络中的每个主机都被永久映射成外部网络
中的某个合法的地址。而动态地址NAT则是在外部网络中定义了一系列的合法地址,采用动态分配的方法映射到内部网络。NAPT则是把内部地址映射到外部网络的一个IP地址的不同端口上。根据不同的需要,三种NAT方案各有利弊。
动态地址NAT只是转换IP地址,它为每一个内部的IP地址分配一个临时的外部IP地址,主要应用
于拨号,对于频繁的远程联接也可以采用动态NAT。当远程用户联接上之后,动态地址NAT就会分配给
他一个IP地址,用户断开时,这个IP地址就会被释放而留待以后使用。
网络地址端口转换NAPT(Network Address Port Translation)是人们比较熟悉的一种转换方
NAPT普遍应用于接入设备中,它可以将中小型的网络隐藏在一个合法的IP地址后面。NAPT与 动态地
址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT
设备选定的TCP端口号。
在Internet 中使用NAPT时,所有不同的信息流看起来好像来源于同一个IP地址。这个优点在小
型办公室内非常实用,通过从ISP处申请的一个IP地址,将多个连接通过NAPT接入Internet。实际
上,许多SOHO远程访问设备支持基于PPP的动态IP地址。这样,ISP甚至不需要支持NAPT,就可以
做到多个 内部IP地址共用一个外部IP地址上Internet,虽然这样会导致信道的一定拥塞,但考虑到
节省的ISP上网费用和易管理的特点,用NAPT还是很值得的。
五 基于squid透明代理在企业中的应用
前面论述了代理,iptables,squid以及NAT技术,下面将在一个真实的环境中论述基于squid透明代理实现内网访问Internet.下图是一个理想的squid透明代理网络拓朴结构。
透明代理是NAT和代理的完美结合,这所以称为透明,是因为在这种工作方式下用户感觉不到代理服务器的存在,不需要在浏览器或其他客户端工具中作任何设置,客户机只需要将默认网关设置为LINUX服务器的IP即可.当客户机访问INTERNET,请求数据包经过LINUX服务器转发INUX服务器上的IPTABLES将客户机的HTTP请求重定向到SQUID代理服务器,由代理服务器代替客户机访问外部信息资源,再将获取的数据传回客户机。
5.1 配置网络接口
给squid服务分配两块网卡一个是公网eth0一个是内网eth1,由于条件所限本实验全用私有地址进行实验,用一台windows xp充当局域网中需上网的机器并以C类私有地址0网段与10网段,配置eth0充当公网能连接Internet进行通信,配置eth1地址不能与外网进行通信.
注:本设计基于在Linux 2.4内核下安装配置squid服务器(本文以Red Hat Linux 9.0为例)
1、设置eth0
(1)#netconfig
如下图(1)(2)
图(1)
图(2)
(2)启动eth0
2、设置eth1
(1)进入/etc/sysconfig/network-scripts并查看
(2)拷贝ifcfg-eth0重新命名为ifcfg-eth1并用vi修改保存
#vi ifcfg-eth1
说明:把接口改为eth1 ip地址为私有地址并不能与外界通信,本文用C类的私有地址10网段
192.168.10.25 子网掩码 255.255.255.0
(3)重新启动网卡
3、查看两块网卡的IP地址
注:eth0 eth1配置成功5.2 配置iptables
1、启动路由
2、起动iptables
3、清空Iptables所有表中规则并查看nat表
4、添加iptables访问规则
说明:(1)在NAT表的POSTROUTING链加目标动作SNAT,当内部192.168.10.0/24网段的PC 机与外界通信
将IP伪装成192.168.0.25与外界进行通信
(2)在NAT表的PREROUTING链加目标动作REDIRECT,将入站的数据包进行重定向,本条规则是将80
号端口重定向成3128
5、保存并查看iptables中的nat表中规则
注:规则添加成功
5.3安装squid
1、RPM包安装squid
(1)查看是否已经安装了squid
(2)RPM方法安装squid
5.4 配置squid
需要修改squid主配置文件/etc/squid/squid.conf
(1)/etc/squid/squid.conf主配置文件添加以下内容
说明:a.设squid的HTTP监听端口为3128目的是把目标端口为80重定向到3128端口
b.根据服务器配置以及需要来配置指定缓冲内存大小及设置绶存位置大小存储内型
c.让代理服务器的缓存功能正确工作,必须将httpd_accel_uses_host_header选项设为on。
(2)启动squid
(3)检查squid启动端口
5.5 测试
1、配置要进行与外界通信的PC机IP
- 在网上邻居右击——属性——本地连接右击——属性——选择INTERNET协议(TCP/IP)——属性
如下图:
(2)在常规选项占击使用下面的IP地址和使用下面的DNS服务器地址中添加地址——确定
如下图:
说明:此处配IP必须要与上面所配的eth1是同一网段,网关要指向eth1的IP ,首选DNS服务器配置要与squid的DNS地址相同
如下图:
总结
通过以上的论述,系统的分析了如何基于squid透明代理实现内网访问外网。从中看出SQUID透明代理配置简单,客户机设置简单不需要在浏览器中设置任何代理,具有安全性,它可以很好的保护内部主机免受外部主机的攻击并具有完整的日志,性能方面它可以提供高速缓存功能并且成本底等,更能体现它的是它可以解IP地址紧缺问题,在企业中可以很好的为企业解决租约IP问题,为企业带来经济效益,随着技术的不断发展与成熟将会有更多的人员通过它来实现访问INTERNET为更多的人带来方便。
安徽新华电脑学校专业职业规划师为你提供更多帮助【在线咨询】