Squid简介:
Squidcache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理上网。Squid主要设计用于在Linux一类系统运行。
正向代理:局域网访问外网
1、snat模式
网络层次:网络层
如果局域网的用户访问外网走snat模式,同一个数据包,改变数据包头部的来源地址,再把数据包发到internet。
安全控制:基于网络层传输层
网络层安全:来源地址目标地址
传输层安全:协议:tcp、udp端口号:来源端口、目标端口标志位:syn、ack、finrst
2、代理服务器模式
不改变数据包头信息,把数据包代理给internet的服务器
网络层次:应用层
基于应用层的过滤:微软开发的软件防火墙ISAinternetsecurityaccelerate
Linux系统的squid服务器
安全控制:网络层传输层应用层
网络层安全:来源地址目标地址
传输层安全:协议:tcp、udp端口号:来源端口、目标端口标志位:syn、ack、finrst
应用层安全:协议:http、ftp、pop、smtp、p2p内容过滤url过滤、域名过滤
代理服务器的缺陷:基于少量的应用协议,支持的应用少。
反向代理:internet用户访问局域网服务器
Squid做反向代理服务器,把用户的请求转发到后方的真实的服务器,可以做到负载均衡的效果。
squid正向代理拓扑图:
Squid的应用 一:实现正向代理
二:安全控制
三:透明代理
四:反向代理
一:实现正向代理
准备工作:
1、设置内网接口eth0接口,和外网接口eth1的ip地址
安装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服务
切换到/var/spool/squid目录将会看到16个一级子目录
每一个子目录下面将会形成256个二级子目录,切换到00目录下
做简单的测试:内网访问外网
设置局域网中的一台主机的浏览器属性--连接--局域网设置--代理服务器,添加代理服务器的ip地址和端口
访问失败得到一个出错页面是由192.168.2.100产生的
因为squid的默认策略是除了他自己可以访问外网外,其他拒绝所有
打开squid的配置文件,定义允许内网用户上网的元素,添加策略
重启squid服务
打开浏览器再次测试上网成功
第一次访问页面返回类型是TCP_MISS,说明还没有被缓存
再次访问将是:TCP_IMS_HIT说明数据已经被缓存,是从squid的缓存目录中得到的数据
二:安全控制
1,拒绝192.168.2.200这台主机上网,定义策略,创建访问控制列表。
aclbadpcsrc192.168.2.200/255.255.255.255
http_accessallowlocalhost
http_accessdenybadpc
http_accessallowall
测试访问http://www.sina.com,将不能访问到出现错误。
2,控制一个地址段,拒绝192.168.2.200-192.168.2.210这台主机上网,定义策略,创建访问控制列表。
测试访问http://www.sina.com,将不能访问到出现错误
换一个地址比如说192.168.2.220,测试一下,就可以上网了
3,定义基于时间控制的策略,初试时间要小于结束时间,被拒绝的主机上班时间不能上网,下班可以
aclworktimetime06:00-20:00
http_accessdenybadpcworktime
Ip地址改为192.168.2.200,现在的时间为
root@localhost~]#date102509252013
FriOct2509:25:00PDT2013
上班时间
测试访问http://www.sina.com,将是拒绝的
修改时间为下班时间再次访问
[root@localhost~]#date102521252013
FriOct2521:25:00PDT2013
用!取反也可以
http_accessallowlocalhost
http_accessallowbadpc!worktime
http_accessdenyall
下班时间允许访问
4,基于URL的安全控制,定义访问策略元素,基于url的控制元素是url_regex。
aclbadsiteurl_regex-ihttp://www.sina.com.cn
http_accessdenybadsite
http_accessallowall
http_accessdenyall
访问新浪网测试,被拒绝
结合通配符*号使用,在url中任何以.sina.com.cn为结尾的网站都是被拒绝的
aclbadsiteurl_regex-ihttp://.*.sina.com.cn
http_accessdenybadsite
http_accessallowall
http_accessdenyall
5,基于url的控制,任何中间出现.sina,两边是任意字符的网站都是被拒绝的
aclbadsiteurl_regex-ihttp://.*.sina.*
http_accessdenybadsite
http_accessallowall
http_accessdenyall
6,基于网页内容图片的过滤,策略元素类型是urlpath_regex,
aclbadcontenturlpath_regex-i.jpg$
aclbadcontenturlpath_regex-i.png$
aclbadcontenturlpath_regex-i.gif$
http_accessdenybadcontent
7、基于域名的控制,策略元素类型是dstdomian,禁止发往sina.com.cn与baidu.com这两个域的任何主机的任何请求。 aclsinadstdomain.sina.com.cn
aclbaidudstdomain.baidu.com
http_accessdenysina
http_accessdenybaidu
http_accessallowall
http_accessdenyall
三:squid做透明代理
透明代理的原理:
当内网的用户,不知道代理服务器的代理端口和ip地址时,要想上网就不能走正向代理。
用户的网管指向代理服务器的内卡地址192.168.2.100,当发送一个数据包到达代理服务器的内卡地址时,在系统内部,代理服务器会把原数据包端口80替换为代理服务器的端口3128端口,然后数据包到达代理服务器,代理服务器有缓存就直接发给用户,如果没有,把数据包发往外网,端口的替换需要靠iptables的nat表的PREROTING链路由判断之前来实现的。
但是,代理服务器的代理功能有限仅限于httpftp等协议,而数据包头部的目标ip地址的解析需要靠dns协议,dns是不能被代理服务器代理的,所以nds的解析需要靠SNAT技术,而snat的实现,需要linux的软件防火墙netfilter的iptables架构。
要做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
端口实现是重定向靠iptables的nat表的路由判断之前PREROUTING链
[root@localhost~]#iptables-tnat-APREROUTING-s192.168.2.0/24-ptcp--dport80-jREDIRECT--to-port3128
告诉squid要实现透明代理打开配置文件
931http_port3128transparent
打开内网用户在浏览器取消代理功能,测试dns请求,以及上网
四:squid做反向代理服务器
反向代理服务器的原理:
反向代理服务器的工作原理是DNAT技术,外网用户访问内网中的服务器时,用户访问的代理服务器的外卡接口地址,代理服务器把请求转发给后方内网真是的服务器。
Squid做反向代理服务器的拓扑图:
Squid做反向代理服务器实现后方web服务器的访问
1,定义虚拟主机代理地址和端口
http_port192.168.1.4:80vhost
2,设置反向代理功能
1196行cache_peer192.168.2.210parent800originserver
注释:cache_peer指的是后方真是web服务器
Parent指的是代理服务器的类型,代理服务器与后方真是服务器之间的关系
80指的是代理端口
0指的是后方服务器的任意端口
Originserver指的是原始服务器,也就是代理服务器
测试一下访问http://192.168.1.4/index.html