一学就会的Squid三种代理模式(正向、反向、透明)

Squid服务器简介

Squid服务器是基于Linux平台的代理服务器,简单易学,且服务器运行稳定高效,是一款优秀的开源软件。本文深入浅出,介绍Squid的三种工作模式,带大家一起感受下Squid的魅力。重点讲解Squid的三种工作方式:正向代理、透明代理、反向代理,以及它们之间的区别。本文没有涉及到繁杂的Squid访问控制列表,适合新手学习,以后有机会再给大家介绍Squid的高级应用,这篇文章权当抛砖引玉吧!

名词解释

正向代理:客户端主机本身不能上网,通过Squid服务器,可以实现上网,这是Squid服务器最基本的代理方式。客户端在上网时,需要修改浏览器的属性,在“代理服务器”处填写Squid服务器的IP地址和服务端口(默认3128),就可以了透明代理:同样,客户都安本身也不能上网,也是通过Squid服务器代理上网,但和正向代理的区别是,客户端不需要额外设置,不需要修改浏览器属性,只要指定Squid服务器为“网关”就可以了,用户在上网过程中感觉不到通过Squid服务器的存在,“透明”一词形象的表述了这种代理方式。如果你有路由交换的知识,那更好理解了,Squid相当于一台网关路由器。反向代理:该代理方式和前面种方式有区别,强调的是外网访问内网,该方式描述了局域网内部有一台服务器(例如web服务器),且不具备上网能力,通过Squid反向代理,外网用户就把Squid服务器当作要访问的内网服务器,通过访问Squid,可以访问到局域网内部的指定服务器。

实验环境(正向代理和透明代理,这两种方式强调内网访问外网,所以实验环境相同)

Windows2008:网站(IIS-web)、60.60.60.60CentOS7:代理服务器(squid)、192.168.0.1(内网接口)、60.0.0.1(外网接口)Windows7:客户端、192.168.0.200

图1 Squid正向代理和透明代理

图1描述了网络拓扑图,可以看到内网主机需要通过代理服务器才能访问外网,正向代理和透明代理实验环境相同,都用这张图。

正向代理配置过程

图2 Squid服务器IP地址配置情况

图2描述了Squid服务器的IP地址,需要在该主机上添加双网卡,并设置相应IP,其中192.168.0.1作为内网地址,连接内网客户端,60.0.0.1作为外网地址,连接外网服务器。

安装squid指令:yum -y install squid

图3 squid.conf文件

图3描述了Squid服务器的主配置文件,/etc/squid/squid.conf,这里我只修改了一个地方,http_access deny all改为http_access allow all,基于安全原因,Squid代理服务器默认不代理任何客户端,通过以上语句的修改,Squid可以代理所有客户端。

图4 客户端IP地址配置

图4描述了windows7客户端的IP设置情况,注意,windows7本身是不具备上网权限的,我们如何在模拟环境下实现?只需要设置一个IP,并且不加网关就可以了!这里的理解很关键,不添加网关,表明该客户端是无法访问其它网段的,在实际环境中,就表示不能上网,我们只需要保证它有一个IP,并且能够访问到Squid服务器的内网端口就可以了,该主机上网的方式是通过代理服务器实现的。

图5 配置客户端浏览器属性

图5描述了客户端浏览器的配置过程,本案例以IE浏览器为例,指定代理服务器的内网地址(注意必须是内网地址,因为只有这个地址才能被客户端访问到),以及端口(Squid默认的伺服端口是tcp3128)。

图6 访问效果图

透明代理配置过程

图7 squid.conf

图7中,修改http_port 3128,在后面添加“transparent”,开启Squid的透明代理模式

图8 ipables链配置

图8描述了iptables链的配置,这个是透明模式最重要的步骤,配置中,我清空了所有iptables链,添加了一条nat链,将局域网客户端请求80端口的数据包重新定向到3128端口,ens33是内网接口,这个口会接收到内网用户的上网请求(这里我默认上网行为就是访问网站,所以所有的行为目的端口默认定义为tcp80端口);ens36是外网接口,将所有来自局域网内部的数据包(源地址为192.168.0.0/24网段),向外网发送,并隐藏源ip地址(这里可以理解为内网地址是不能上网的,因为是私有地址,所以在出口处,需要把内网地址隐藏,并替换为公网IP)。

图9 客户端IP地址配置

图9是客户端的地址信息,注意和正向代理的区别,这里需要添加网关!表示当客户端需要上网时,数据包先发给网关,网关就是Squid服务器的内网接口IP,由Squid服务器处理上网请求。

图10 访问效果图

反向代理配置过程

实验环境

Windows2008:内网网站(IIS-web)、172.20.60.23CentOS7:代理服务器(squid)、172.20.60.24(内网接口)、172.20.30.24(外网接口);DNS服务器(bind)Windows7:外网客户端、172.20.30.23

图11 Squid反向代理

图11描述了Squid服务器反向代理的过程,外网用户直接访问Squid服务器,由Squid服务器代理,最终访问到web服务器。

图12 squid.conf

图12 squid.conf中描述了反向代理配置,其中cache_peer参数指定了内网服务器的IP(172.16.20.23)和访问名(name=nvsc);cache_peer_domain指定了访问该内网服务器的域名(www.nvsc.com),这里客户端是通过域名访问的,所以我还额外配置了DNS服务器。

图13 named.conf

图14 named.rfc

图15 正向文件和反向文件

图13、图14、图15描述了DNS服务器的配置过程,用的是CentOS下的Bind软件,强调客户端通过www.nvsc.com,可以访问到Squid服务器的公网ip:172.20.30.23,限于篇幅,Bind的设置不详细说明了。

图16 重启squid服务

图17 重启named服务

图16、图17描述了在配置完squid和bind之后,将两个服务重启,使其生效,状态都显示active(running)表示配置成功。

图18 内网web服务器地址

图18描述内网web服务器的地址,web服务器的搭建过程略

图19 外网客户端地址

图19描述外网客户端的IP地址,注意这里添加了DNS(该地址是Squid服务器的公网接口IP,模拟环境中,我把DNS和Squid做在同一台主机上了),需要通过域名访问服务器。

图20 访问效果图

图20描述外网用户通过域名访问Squid代理服务器,Squid代理服务器通过反向代理功能,使外网客户端成功访问到内网的web服务器。

总结

本案例中,将Squid三种常见的代理方式做了一一罗列,帮助初学者快速掌握Squid代理服务器的搭建,关于Squid其它部分的知识点,比如访问控制列表的使用,缓存的设置,绑定证书,将在后续文章中再给大家做详细介绍。