重量级代理缓存服务器squid

Squid简介:

Squidcache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理上网。Squid主要设计用于在Linux一类系统运行。

正向代理:局域网访问外网

1、snat模式

网络层次:网络层

如果局域网的用户访问外网走snat模式,同一个数据包,改变数据包头部的来源地址,再把数据包发到internet

安全控制:基于网络层传输层

网络层安全:来源地址目标地址

传输层安全:协议:tcpudp端口号:来源端口、目标端口标志位:synackfinrst

2、代理服务器模式

不改变数据包头信息,把数据包代理给internet的服务器

网络层次:应用层

基于应用层的过滤:微软开发的软件防火墙ISAinternetsecurityaccelerate

Linux系统的squid服务器

安全控制:网络层传输层应用层

网络层安全:来源地址目标地址

传输层安全:协议:tcpudp端口号:来源端口、目标端口标志位:synackfinrst

应用层安全:协议:httpftppopsmtpp2p内容过滤url过滤、域名过滤

代理服务器的缺陷:基于少量的应用协议,支持的应用少。

反向代理:internet用户访问局域网服务器

Squid做反向代理服务器,把用户的请求转发到后方的真实的服务器,可以做到负载均衡的效果。

squid正向代理拓扑图:

重量级代理缓存服务器squid_代理缓存

Squid的应用
一:实现正向代理

二:安全控制

三:透明代理

四:反向代理

一:实现正向代理

准备工作:

1、设置内网接口eth0接口,和外网接口eth1ip地址

重量级代理缓存服务器squid_透明代理_02

重量级代理缓存服务器squid_代理缓存_03

安装squid服务器的rpm

rpm-ivhsquid-2.6.STABLE21-3.el5.i386.rpm

打开squid的配置文件

919http_port3128

2994visible_hostname192.168.2.100#当访问出错时,squid将会返回一个出错页面,这个出错页面是由192,168.2.100(这里可以是任意名称)提示产生的。

启动squid服务

重量级代理缓存服务器squid_代理缓存_04

切换到/var/spool/squid目录将会看到16个一级子目录

重量级代理缓存服务器squid_透明代理_05

每一个子目录下面将会形成256个二级子目录,切换到00目录下

重量级代理缓存服务器squid_反向代理 安全控制_06

做简单的测试:内网访问外网

设置局域网中的一台主机的浏览器属性--连接--局域网设置--代理服务器,添加代理服务器的ip地址和端口

重量级代理缓存服务器squid_正向代理_07

访问失败得到一个出错页面是由192.168.2.100产生的

重量级代理缓存服务器squid_正向代理_08

重量级代理缓存服务器squid_代理缓存_09

因为squid的默认策略是除了他自己可以访问外网外,其他拒绝所有

打开squid的配置文件,定义允许内网用户上网的元素,添加策略

重量级代理缓存服务器squid_透明代理_10

重启squid服务

打开浏览器再次测试上网成功

重量级代理缓存服务器squid_代理缓存_11

第一次访问页面返回类型是TCP_MISS,说明还没有被缓存

重量级代理缓存服务器squid_反向代理 安全控制_12

再次访问将是:TCP_IMS_HIT说明数据已经被缓存,是从squid的缓存目录中得到的数据

重量级代理缓存服务器squid_代理缓存_13

二:安全控制

1,拒绝192.168.2.200这台主机上网,定义策略,创建访问控制列表。

aclbadpcsrc192.168.2.200/255.255.255.255

http_accessallowlocalhost

http_accessdenybadpc

http_accessallowall

测试访问http://www.sina.com,将不能访问到出现错误。

重量级代理缓存服务器squid_代理缓存_14

2,控制一个地址段,拒绝192.168.2.200-192.168.2.210这台主机上网,定义策略,创建访问控制列表。

重量级代理缓存服务器squid_代理缓存_15

测试访问http://www.sina.com,将不能访问到出现错误

重量级代理缓存服务器squid_代理缓存_16

换一个地址比如说192.168.2.220,测试一下,就可以上网了

重量级代理缓存服务器squid_透明代理_17

3,定义基于时间控制的策略,初试时间要小于结束时间,被拒绝的主机上班时间不能上网,下班可以

aclworktimetime06:00-20:00

http_accessdenybadpcworktime

Ip地址改为192.168.2.200,现在的时间为

root@localhost~]#date102509252013

FriOct2509:25:00PDT2013

上班时间

测试访问http://www.sina.com,将是拒绝的

重量级代理缓存服务器squid_透明代理_18

修改时间为下班时间再次访问

[root@localhost~]#date102521252013

FriOct2521:25:00PDT2013

重量级代理缓存服务器squid_代理缓存_19

用!取反也可以

http_accessallowlocalhost

http_accessallowbadpc!worktime

http_accessdenyall

下班时间允许访问

重量级代理缓存服务器squid_正向代理_20

4,基于URL的安全控制,定义访问策略元素,基于url的控制元素是url_regex

aclbadsiteurl_regex-ihttp://www.sina.com.cn

http_accessdenybadsite

http_accessallowall

http_accessdenyall

访问新浪网测试,被拒绝

重量级代理缓存服务器squid_反向代理 安全控制_21

结合通配符*号使用,在url中任何以.sina.com.cn为结尾的网站都是被拒绝的

aclbadsiteurl_regex-ihttp://.*.sina.com.cn

http_accessdenybadsite

http_accessallowall

http_accessdenyall

重量级代理缓存服务器squid_透明代理_22

5,基于url的控制,任何中间出现.sina,两边是任意字符的网站都是被拒绝的

aclbadsiteurl_regex-ihttp://.*.sina.*

http_accessdenybadsite

http_accessallowall

http_accessdenyall

重量级代理缓存服务器squid_透明代理_23

重量级代理缓存服务器squid_正向代理_24

6,基于网页内容图片的过滤,策略元素类型是urlpath_regex

aclbadcontenturlpath_regex-i\.jpg$

aclbadcontenturlpath_regex-i\.png$

aclbadcontenturlpath_regex-i\.gif$

http_accessdenybadcontent

重量级代理缓存服务器squid_透明代理_25

7、基于域名的控制,策略元素类型是dstdomian,禁止发往sina.com.cnbaidu.com这两个域的任何主机的任何请求。
aclsinadstdomain.sina.com.cn

aclbaidudstdomain.baidu.com

http_accessdenysina

http_accessdenybaidu

http_accessallowall

http_accessdenyall

重量级代理缓存服务器squid_正向代理_26

重量级代理缓存服务器squid_反向代理 安全控制_27

三:squid做透明代理

透明代理的原理:

当内网的用户,不知道代理服务器的代理端口和ip地址时,要想上网就不能走正向代理。

用户的网管指向代理服务器的内卡地址192.168.2.100,当发送一个数据包到达代理服务器的内卡地址时,在系统内部,代理服务器会把原数据包端口80替换为代理服务器的端口3128端口,然后数据包到达代理服务器,代理服务器有缓存就直接发给用户,如果没有,把数据包发往外网,端口的替换需要靠iptablesnat表的PREROTING链路由判断之前来实现的。

但是,代理服务器的代理功能有限仅限于httpftp等协议,而数据包头部的目标ip地址的解析需要靠dns协议,dns是不能被代理服务器代理的,所以nds的解析需要靠SNAT技术,而snat的实现,需要linux的软件防火墙netfilteriptables架构。

要做nat转换,打开linux的数据包转发功能/etc/sysctl.conf

net.ipv4.ip_forward=1

Sant的实现是靠iptables框架中的nat表中的POSTROUTING

iptables-tnat-APOSTROUTING-s192.168.2.0/24-pudp--dport53-oeth1-jSNAT--to192.168.1.4

端口实现是重定向靠iptablesnat表的路由判断之前PREROUTING

[root@localhost~]#iptables-tnat-APREROUTING-s192.168.2.0/24-ptcp--dport80-jREDIRECT--to-port3128

告诉squid要实现透明代理打开配置文件

931http_port3128transparent

打开内网用户在浏览器取消代理功能,测试dns请求,以及上网

重量级代理缓存服务器squid_正向代理_28

重量级代理缓存服务器squid_正向代理_29

四:squid反向代理服务器

反向代理服务器的原理:

反向代理服务器的工作原理是DNAT技术,外网用户访问内网中的服务器时,用户访问的代理服务器的外卡接口地址,代理服务器把请求转发给后方内网真是的服务器。

Squid做反向代理服务器的拓扑图:

重量级代理缓存服务器squid_透明代理_30

Squid做反向代理服务器实现后方web服务器的访问

1,定义虚拟主机代理地址和端口

http_port192.168.1.4:80vhost

2,设置反向代理功能

1196cache_peer192.168.2.210parent800originserver

注释:cache_peer指的是后方真是web服务器

Parent指的是代理服务器的类型,代理服务器与后方真是服务器之间的关系

80指的是代理端口

0指的是后方服务器的任意端口

Originserver指的是原始服务器,也就是代理服务器

测试一下访问http://192.168.1.4/index.html

重量级代理缓存服务器squid_代理缓存_31