目录
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其它部分的知识点,比如访问控制列表的使用,缓存的设置,绑定证书,将在后续文章中再给大家做详细介绍。