您的位置:首页 > 运维架构 > 反向代理

Squid传统代理、透明代理应用

2013-08-15 23:58 666 查看
Squid传统代理、透明代理应用 之前我们已经对Squid代理服务器/article/4239287.html有了初步的了解,那么接下来我们就传统代理服务器及透明代理服务器的构建及ACL访问控制使用进行简单的描述,希望对大家有帮助。
透明模式的特点就是对用户是透明的(Transparent),即用户意识不到防火墙的存在。要想实现透明模式,防火墙必须在没有IP地址的情况下工作,不需要对其设置IP地址,用户也不知道防火墙的IP地址。
透明模式的防火墙就好象是一台网桥(非透明的防火墙好象一台路由器),网络设备(包括主机、路由器、工作站等)和所有计算机的设置(包括IP地址和网关)无须改变,同时解析所有通过它的数据包,既增加了网络的安全性,又降低了用户管理的复杂程度。



防火墙使用透明代理技术,这些代理服务对用户也是透明的,用户意识不到防火墙的存在,便可完成内外网络的通讯。当内部用户需要使用透明代理访问外部资源时,用户不需要进行设置,代理服务器会建立透明的通道,让用户直接与外界通信,这样极大地方便了用户的使用。
一般使用代理服务器时,每个用户需要在客户端程序中指明要使用代理,自行设置Proxy参数(如在浏览器中有专门的设置来指明HTTP或FTP等的代理)。而透明代理服务,用户不需要任何设置就可以使用代理服务器,简化了网络的设置过程。
透明代理与透明模式都可以简化防火墙的设置,提高系统安全性。但两者之间也有本质的区别:工作于透明模式的防火墙使用了透明代理的技术,但透明代理并不是透明模式的全部,防火墙在非透明模式中也可以使用透明代理。
那么下边我们就通过示例让大家明白透明代理、传统代理及ACL控制的效果:



实验环境(略加修改,因为当测试网站在同一网段就没有必要验证了):
地址规划:
Squid 代理:
eth0:192.168.10.1
eth1:173.16.16.173
测试网站:173.16.16.2
客户机:192.168.10.10
实验描述:
在squid主机上,构建squid为客户机访问各种网站提供代理服务;
在客户机上,指定squid作为web访问代理,以隐藏自己的真实IP地址。
实验步骤:
1:squid服务器的配置:
因代理服务的主配置文件大多是注释行,需简化配置文件:
过滤前先进行备份—数据至上:
[root@squid ~]# mv /etc/squid/squid.conf /etc/squid/squid.conf.bak



执行过滤操作:
[root@squid ~]# grep -v "^#" /etc/squid/squid.conf.bak | grep -v "^$" > /etc/squid/squid.conf



在主配置文件/etc/squid/squid.conf中,添加配置项
http_port 3128 ###指定代理服务监听的端口,默认为3128
cache_mem 64 MB ###指定缓存所使用的内存空间的大小
maximum_object_size 4096 KB ###保存到缓存空间的最大对象(文件)大小
reply_body_max_size 10240000 allow all ###允许用户下载的最大文件大小,其中all为默认的访问控制列表名
cache_dir ufs /var/spool/squid 100 16 256 ###指定缓存数据所存放的目录,容量,子目录个数;其中100为容量100M;16为一级子目录;256为二级子目录
access_log/var/log/squid/access.log squid ###指定代理服务的日志文件位置及记录格式(squid)
visible_hostname localhost ###指定代理服务器本机的主机名
dns_testname www.sohu.com ###执行DNS解析,确保squid服务器自身的DNS查询功能正常,只要成功解析出一个域名,则不再测试后边的其他域名
http_access allow all ###放在http_access deny all之前



2:在Squid服务器上配置防火墙策略,允许3128端口访问外网的WEB服务器
iptables -I(大写i) INPUT -p tcp --dport 3128 -j ACCEPT



3:初始化并启动服务(2种方法)
a:squid -z ###初始化缓存目录
squid -D ###启动squid 服务
b:service squid start ###初始化并启动服务



修改squid.conf配置文件后,需要重新加载方可生效。
执行“ service squid reload ”或者“ squid -k reconfigure”重新加载。
4:确认squid服务处于正常监听状态:



5:客户机程序的代理配置:
在IE浏览器的—右击属性—连接—局域网设置—代理服务器—填写IP地址和端口号—IP地址为局域网内网的网关地址;端口号为—3128:



Linux客户机命令行使用代理服务器,elinks网页浏览器、wget下载工具为例:






注意:在外网服务器173.16.16.2上必须安装WEB服务器并启动服务
6:验证传统代理的使用:
在192.168.10.10客户机上通过浏览器访问http://173.16.16.2



a:查看squid访问日志的新增记录:
在squid代理服务器中,通过跟踪squid服务的访问日志文件,我们会发现客户机192.168.10.10访问网站服务器173.16.16.2。



b:查看web访问日志的新增记录:
在被访问的web服务器中,通过跟踪httpd服务的访问日志文件,会发现来自代理服务器173.16.16.173的访问记录。这说明当客户机使用代理后,web服务器并不知道客户机的真实IP地址,因为实际是由代理服务器在代替访问。



当从客户机再次访问同一web页面时,squid访问日志中会增加新的记录,但web访问日志中的记录不会有变化,除非页面变更、或执行强制刷新等操作。

当客户机重复访问同一静态页面时,实际上是由代理服务器通过缓存提供的。

透明代理:
透明代理提供的服务功能与传统代理一致,但“透明”的实现依赖于默认路由和防火墙的重定向策略,更适用于局域网主机服务,而不适合为internet中的客户机提供服务。



实验描述:
在Linux网关上构建squid为客户机访问Internet提供代理服务;
在所有的局域网客户机上,只需正确设置IP地址、默认网关,不需要手动指定代理服务器的地址、端口等信息。
实验步骤:
1:配置Squid支持透明代理。
在主配置文件中/etc/squid/squid.conf中添加一项
http_port 局域网IP地址:3128 transparent 或 http_port 3128 transparent






2:设置iptables防火墙的重定向策略(如果防火墙开启,需先保存并关闭,然后新建如下规则):
正确设置防火墙策略,将局域网主机访问internet的数据包转交给Squid进行处理,这里需要用到iptables的REDIRECT(重定向)策略,其作用是实现本机端口的重新定向,将访问网站协议HTTP、HTTPS的外发数据包转交给本机的Squid服务的3128端口

注解:

REDIRECT是一种数据包控制类型,只能在nat表的PREROUTING或OUTPUT链以及被其调用的链中使用,通过“--to-ports端口号”的形式来指定映射的目标端口。

eg:将来自局域网段192.168.10.0/24且访问HTTP、HTTPS等协议的数据包,转交给运行在本机3128端口上的Squid服务处理。
[root@squid ~]# iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport --dports 80,443 -s 192.168.10.0/24 -j REDIRECT --to-ports 3128



或者:
[root@squid ~]# iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport --dports 80 -s 192.168.10.0/24 -j REDIRECT --to-ports 3128
[root@squid ~]# iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport --dports 443 -s 192.168.10.0/24 -j REDIRECT --to-ports 3128



3:验证透明代理的使用:
Windows客户机IE如果有手动指定的代理服务器设置则去除;



Linux客户机如果有则在命令行界面通过unset 命令清除HTTP_PROXY、HTTPS_PROXY等变量。



在客户机192.168.10.10中通过浏览器访问目标网站http://173.16.16.2,然后观察Squid代理服务器、web服务器的访问日志,验证透明代理是否生效。



Squid代理服务器的日志记录:



透明代理下的web服务器的访问日志:




三:配置ACL访问规则:
1.定义ACL列表
格式: acl 列表名 列表类型 列表内容....
常用的acl列表类型 :

src192.168.10.1
192.168.10.0/24
192.168.10.0-192.168.20.0/24
源IP地址、网段、IP地址范围
dstwww.51cto.com
目标IP地址、网段、主机名
port804432021
目标端口
dstdomain.msn.com.163.com
目标域,匹配域内所有站点
timeMTWHF 8:00-18:00
12:00-16:00
AS
使用代理服务的时间段
字母表示各天的英文缩写
周六-周日
maxconn30
最大并发连接
url_regexurl_regex -i^rtsp://
url_regex -i^emule://
目标URL地址,i表示忽略大小写
urlpath_regexUrlpath_regex -i sex adult
Urlpath_regex -i \.mp3$
整个目标资源的URL路径
i 表示忽略大小写
2. 针对已定义的acl列表进行限制:
格式: http_access allow或deny 列表名称 ...
eg:http_access allow mylan worktime
3.添加一条ACL规则
acl tupian urlpath_regex -i\.gif$
http_access deny tupian
当访问WEB服务器时,页面上的图片将不显示
acl all src 0.0.0.0/0.0.0.0 ###任意客户机地址
acl localhost src 127.0.0.1/255.255.255.255 ###源地址为127.0.0.1
acl MYLAN src 192.168.10.0/24 192.168.100.0/24
acl MC20 maxconn 20 ###最大并发连接为20
acl BlackURL url_regex-i^rtsp://^emule:// ###以rtsp://等开头的URL
acl MEDIAFILE urlpath_regex -i \.mp3$ \.mp4$ \.rmvb$ ###以.mp3、.mp4、rmvb结尾的URL路径
acl WORKTIME time MTWHF08:30-20:00 ###时间为周一至周五08:30-20:00
http_access deny MYLAN MEDIAFILE ###禁止客户机下载MP3、MP4等文件
http_access deny MYLAN MC20 ###客户机的并发连接超过20时将被阻止
http_access deny MYLAN WORKTIME ###允许客户机在工作时间上网
http_access deny all ###默认禁止所有客户机使用代理
执行访问控制时,Squid将按照各条规则的顺序依次进行检查,如果找到一条相匹配的规则就不再向后搜索。

没有设置任何规则时,Squid服务将拒绝客户端的请

有规则但找不到相匹配的项,Squid将采用与最后一条规则相反的权限,即如果最后一条规则是allow,就拒绝客户端的请求,否则允许该请求。

通常情况下,把最常用到的控制规则放在最前面,以减少Squid的负载。

在访问控制的总体策略上,建议采用“先拒绝后允许”或“先允许后拒绝”的方式,最后一条规则设为默认策略。

在acl列表前添加“!”表示取反条件。

基本示例:
aa:下班时间不允许登录服务器:



修改服务器时间:



客户机验证:



bb:客户机浏览网页不允许显示图片






整个介绍及使用完成,更多功能及作用需要大家去扩展!
Stay Hungry Stay Foolish !
本文出自 “听闻” 博客,请务必保留此出处http://wenzhongxiang.blog.51cto.com/6370734/1274670
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: