squid代理配置与应用

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

     Squid是一个很好的代理软件,与NAT是不同的技术,具有很强的控制力度,是应用层的,能基于应用层参数【协议】、网络层参数【地址】、传输层参数【协议 端口号等】进行控制,唯一的缺点是支持的应用少。

代理服务器的工作流程简单解析

第一步。客户端想服务器发送的请求到达代理服务器

第二步。代理服务器把请求转发给客户端真正需要连系的服务器。

第三步。服务器想代理服务器返回请求。

第四步。代理服务器把响应返回给客户端。

代理服务器的分类

(1) 正向代理服务器

   标准代理服务器是常被用于缓存静态的网页,它的使用要在客户端的浏览器中进行代理设置,而且客户端要知道代理的存在.   

(2) 透明代理服务器

   透明代理服务器一般为内网的计算机提供外网的访问服务不需要客户端做任何测试,当客户端的数据包到达出口路由器时,可以被路由器重定向到本地代理服务器的代理商端口,然后由本地代理服务器对数据进行处理

(3) 反向代理服务器

   反向代理服务器又称为 WEB 加速服务器,它位于 WEB 服务器的前端,充当 WEB 服务器的内容缓存器。

一、
正向代理 

实验拓扑图:

实验环境:Vmware redhat 5.4,客户机windos xp;

实验步骤:

1.首先根据实验拓扑示意图,正确规划ip

2首先安装好,squid包,yum install squid -y

3.squid相关的目录

   /etc/squid/   主目录

   /etc/rc.d/init.d/squid/ 表示squid是独立的守护进程

   /etc/pam.d/squid/   支持pam模块

   /etc/httpd/conf.d/squid.conf与apache的代理相关的配置

   /etc/suquid/squid.conf  主配置文档

   /etc/suquid/squid.conf.default  主配置文档的样例文档,一旦squid.conf文件遇到了无法更改错误时,可以将这个文档复制一份为squid.conf继续做相关的修改与配置

4./etc/squid/squid.conf的常用配置项

   http_port ip:3128

   cache_mem  64MB  不允许超过物理内存的1/3

   maximum_object_size 4096KB

   reply_body_max_size  10240000 allow  all

   access_log /var/log/squid/access.log

   visible_hostname  ip或自定义名称  [前端不要留有空格]

   cache_dir ufs /var/spool/squid/ 100(为缓存目录分配的磁盘空间MB)  16(缓存空间一级子目录) 256(缓存空间二级子目录个数)

注:上面各项可以在主配置文档中搜索查找,并查看其各项的详细解释

5.正向代理配置,应对/etc/squid/squid.conf做如下修改

  http_port 192.168.142.20:3128

  visible_hostname 192.168.142.20  (也可以不是ip地址)

6.简单修改后,启动squid服务,会发现有一个初始化的过程,

7.内网测试机正确设置ip后,不用给其配置网关;

8.并修改内网测试机的IE选项,添加代理服务器相关设置;

9.哈哈,设置好,就来测试一下吧,你会发现并不能正常打开网页,提示如下;

10.简单,因为squid默认是拒绝所有的,可以添加一条acl规则,允许192.168.142.5可以访问;

   #vim  /etc/squid/squid.conf下添加一个acl规则,

    acl goodip src 192.168.142.5/32

    http_access allow goodip

11,哈哈,修改后,发现可以正常访问了,

好了,正向代理配置好了,现在我们在此基础来实现一些的访问控制

   acl   badurl url_regex -i  org  #过渡域名中含有org的字段

   acl   nourl dstdomain .baidu.com #禁止访问域名.baidu.com的所有站点

   acl   worktime time MTWHF 08:00-18:00 #禁止工作时间访问网络

   acl   nojpg  urlpath_regex -i \.jpg$    #过滤掉.jpg的图片

   alcl  badip  src  192.168.142.6-192.168.142.10/32 #禁止142.6-142.10内网的ip访问网络

#以下是使各规则生效

  http_access  deny  worktime   

  http_access  deny  badurl

  http_access  deny  nojpg

  http_access  deny  nourl

  http_access  deny  badip

  http_access  allow all

哈哈,设置好了,自己测试一下。^_^,从上来的规则可以看出,squid的控制能力很强,遍布网络层、传输层、应用层,

二、反向代理

实验要求:

         1、以192.168.3.0网段模拟外网,实现对内网(192.168.142.2)web服务器的发布,即通过外网ip 192.168.3.1来访问内网web服务器。

实验拓扑图:

实验环境:Vmware redhat 5.4,客户机windos xp;

实验步骤:

上述拓扑图,某公司内网用一台web服务器,要求internet的用户通过访问本公司的合法ip即192.168.3.1的80端口即可访问内网的web服务器。

1.根据实验拓扑正确规划ip,并设置其各自处于的vnet;

2.修改/etc/squid/squid.conf文档,添加修改如下内容;

   http_port 192.168.3.1:80 vhost 

   cache_peer  192.168.142.2      parent     80    0  proxy-only

   http_access allow all 

3.客户机机测试,

三、透明代理

实验要求:

         内网用户(192.168.142.5)以squid代理服务器作为默认网关,实现对模拟外网abc.com(192.168.3.100)web服务器及dns的正常使用。

实验拓扑图:

实验环境:Vmware redhat 5.4,客户机windos xp;

实验步骤:

1.正确配置ip,搭建web,dns服务器,域名为abc.com

   squid eth0 192.168.142.2/24 

             eth1 192.168.3.1/24

web服务器网卡配置

2.使squid支持数据包转发

   #vim /etc/sysctl.conf

   net.ipv4.ip_forward = 1

执行sysctl  -p 使设置生效

3.实现dns解析通过

#iptables -t nat -A POSTROUTING -s 192.168.142.0/24 -p udp --dport 53 -j SNAT --to  192.168.3.1

3.编辑/etc/squid/squid.conf

   http_port 192.168.142.2:3128  transparent   

   http_access allow all

4.路由前对端口的重定向

  #iptables -t nat -A PREROUTING  -p tcp --dport 80 -j  REDIRECT  --to-port 3128

5.启动squid服务后,正确测试客户机ip

6.测试如下如下

7.测试正常,实验结束。