Squid可以实现正向代理、反向代理、透明代理三种服务器

  Squid可以通过ACL访问控制访问控制来限制用户的访问时间、访问站点等,从而控制网络访问,通过缓存可以提高访问速度;可以阻止特定的网络连接来减少一些非法连接,阻止内部主机访问非法站点或不适宜的站点,从而提高网络安全。当用户请求到达时,首先到达squid服务器,squid会查看访问控制列表中的访问规则,如果符合规则,squid会去缓存中查找数据,缓存中如果没有用户请求的数据,squid会根据用户请求去后端获取网页数据,然后将数据发送给用户,同时会在自己的缓存中保存一份,当下次别的用户请求这一数据时,squid直接将缓存中的数据发送给客户端,从而提高访问速度。Squid还可以缓存DNS查询结果,支持非模块化的DNS查询,对失败的请求进行消极缓存。

  squid在作为缓存服务器时,是从磁盘上读取缓存数据,和vanish相比,速度有些慢,因为vanish的缓存数据是从内存中读取的。但是vanish一旦崩溃,重启后存储在内存中数据会丢失,而squid不会有此问题。

Squid代理服务器

一、Squid代理服务器的示意图和工作原理:

Squid代理服务基础篇_缓存代理

代理服务的工作原理:

当客户端AWEB服务提出请求,此时的请求会首先发送到代理服务器。

代理服务收客户端A的请求后,会检测缓存中是否存有客户端所需要的数据

如果代理服务没有客户端A所请求的数据,它将会向web服务器提交请求。

④WEB服务器响应请求的数据

代理服务器从服务器端获得数据后,会保存至本地的缓存,以备以后查询使用。

代理服务器向客户端A转发从web服务请求的数据

客户端B访问web服务器,向代理服务器发出请求。

代理服务器查找缓存记录,确认已经存在web服务器的相关数据,同时将请求和服务器web服务端对比,将动态更新的记录带回缓存服务器。

代理服务器,将web请求的动态更新和本机存储的缓存回应个B客户端(这里并是直接不与web服务器通,缓存只是些静态的东西),从而达到节约网络流量和提高访问速度

的目的。


二、Squid代理服务器网络拓扑图

Squid代理服务基础篇_squid透明代理_02

三、Squid服务端安装和部署

 1.查看服务是否安装suqid服务

   root@nfs-clienttest]# rpm -qa |grep squid

 2.如果没有安装,进行光盘挂载rpm包安装或者yum 安装

   [root@nfs-clienttest]# mount -t iso9660 /dev/cdrom /mnt

    mount: block device/dev/cdrom is write-protected, mounting read-only  # 光盘挂载成功

   [root@nfs-clienttest]# cd /mnt/CentOS/                       # 进入挂载目录,进行rpm安装

   [root@nfs-clientCentOS]# rpm -ivh squid-2.6.STABLE21-6.el5.i386.rpm

    warning:squid-2.6.STABLE21-6.el5.i386.rpm: Header V3 DSA signature: NOKEY, key         IDe8562897

    Preparing...               ########################################### [100%]

      1:squid                  ###########################################[100%]

    [root@nfs-clientCentOS]# rpm -qa |grep squid                      # rpm安装squid成功

    squid-2.6.STABLE21-6.el5

3.修改/etc/squid.conf配置文件

 [root@nfs-server~]# vi /etc/squid/squid.conf

  http_port192.168.1.1:3128                    # squid设置端口号,监听http请求

  cache_mem 64MB                               # 需要使用多少内存来作为高速缓存

  cache_log  /var/log/squid/cache.log          # 设置缓存的日志

  cache_access_log  /var/log/squid/access.log  # 设置访问日志文件

  visible_hostname192.168.1.1                  # 设置squid可见主机名

  acl all src0.0.0.0/0.0.0.0                   # 设置访问控制列表

  http_access allowall

4.初始化系统的缓存

 [root@ nfs-server]#squid –z                # 初始化缓存

5.squid服务与停止

 [root@nfs-server~]# service squid start

 [root@nfs-server~]# service squid stop


四、Squid客户端和web服务端的配置

1.web服务端配置说明

  安装一个apache服务可以执行rpm包安装,或者执行yum安装,启动httpd服务,apache服务同一网段的电脑,能够打开ie能够出现下图:

Squid代理服务基础篇_squid代理服务器_03


2.客户端设置

网上邻居 / 属性A客户端的ip地址设置为:192.168.1.2/25,无网关

网上邻居 / 属性B客户端的ip地址设置为:192.168.1.3/25,无网关

客户端IE设置:代理服务器的地址为配置文件中的http _port的地址和端口

Squid代理服务基础篇_squid_04

在客户端打开浏览器能够正常访问到200.0.0.1的界面

Squid代理服务基础篇_squid透明代理_05

测试客户端和WEB端服务器通信:

Squid代理服务基础篇_反向代理_06

注意:说明代理服务器成功了。

squid服务器常用检测命令

用  

作    

-a

squid –a port

覆盖squid.conf配置文件中http_port的值,如果有多个端口,默认覆盖第一个

-d

squid –d level

squid 将它的调试信息写到标准错误(假如配置了,就是cache.log syslog)。level参数指定了显示在标准错误里的消息的最大等级。在多数情况下,d1 工作良好

-f

squid -f file

指定另一个配置文件

-h


显示用法

-k

squid -k  function

指示squid 执行不同的管理功能。

-u

squid  -u port

指定另一个ICP 端口号,覆盖掉squid.conf 文件里的icp_port

-s

squid  -s

激活将日志记录到syslog 进程。

-z

squid  -z

初始化cache,或者交换,目录。在首次运行squid,或者增加新的cache 目录时,你必须使用该选项。

-C

squid  -C

阻止安装某些信号句柄,它们捕获特定的致命信号例如SIGBUS SIGSEGV。正常的,这些信号被squid 捕获,以便它能干净的关闭。然而,捕获这些信号可能让以后调试问题困难。使用该选项,致命的信号导致它们的默认动作,通常是coredump

-D

squid  -D

禁止初始化DNS 测试。正常情况下,squid 直到验证它的DNS 可用才能启动。该选项阻止了这样的检测。你也能在squid.conf 文件里改变或删除dns_testnames 选项。

-F

squid  -F

squid 拒绝所有的请求,直到它重新建立起存储元数据。假如你的系统很忙,该选项可以减短重建存储元数据的时间。然而,如果你的cache 很大,重建过程可能会花费很长的时间。

-N

squid  -N

阻止squid 变成后台服务进程。

-R

squid  -R

阻止squid 在绑定HTTP 端口之前使用SO_REUSEADDR 选项。

-V

squid  -V

激活虚拟主机加速模式。类似于squid.conf 文件里的httpd_accel_host virtual 指令。

-X

squid  -X

强迫完整调试模式,如你在squid.conf 文件里指定debug_options ALL,9 一样。

-Y

squid  -Y

在重建存储元数据时,返回ICP_MISS_NOFETCH  代替ICP_MISS.忙碌的父cache 在重建时,该选项可以导致最少的负载。

备注:-k function  指示squid 执行不同的管理功能。

功能参数是下列之一:reconfigurerotateshutdowninterruptkilldebugcheckor parse

+ reconfigure 导致运行中的squid 重新读取配置文件。

+ rotate导致squid 滚动它的日志,这包括了关闭日志,重命名,和再次打开它们。

+ shutdown 发送关闭squid 进程的信号。

+ interrupt 立刻关闭squid,不必等待活动会话完成。

+ kill 发送KILL 信号给squid,这是关闭squid 的最后保证。

+ debug squid 设置成完全的调试模式,假如你的cache 很忙,它能迅速的用完你的磁盘空间。

+ check 简单的检查运行中的squid进程,返回的值显示squid 是否在运行。

+ 最后,parse 简单的解析squid.conf文件,如果配置文件包含错误,进程返回非零值。


透明代理服务器

一、透明代理概述

通常使用代理,大家都是在浏览器里面的代理选项中填入代理信息,开启代理功能。而透明代理则是在网关通过把客户端的请求重定向到代理服务器的代理端口,让客户端感觉不到代理的存在,当然,客户端也就无须任何代理设置。


二、透明代理的网络拓扑图

Squid代理服务基础篇_squid代理服务器_07

三、透明代理服务器的工作原理

客户端A发送数据httpd请求web:200.0.0.2:80 到客户端指定的网关192.168.1.1代理服务器的eth0端口

代理服务器收到客户端A发送请求的数据包惊进行判断和检查,发现目的ip和目的端口不是本机(默认代理服务器没有开启路由功能):如果没有做iptables转发,那么将直接丢弃客户端A发送过来的数据包。如果有做iptables 转发,那么将从代理服务器指定的端口(默认3128端口)进行重定向转发。

代理服务器通过Eth1端口,进行和200.0.0.2:80端口进行通信。

注意:这个地方要了解iptablesprerouting路由表,实现这个功能实际上是在代理服务器进行路由转发之前;介于数据联络层和网络层直接判断数据包是否是发给自己是,把这个请求直接通过代理服务器的某个端口,将数据转发出去,就能实现透明代理。


四、透明代理服务器的安装与部署

  1.安装步骤见普通代理服务的安装部署

  2.修改squid配置文件

    http_port192.168.1.1:3128 tarnsparent#  红色部分是支持透明代理

  3.启动squid服务器或者加载配置文件

    [root@nfs-server ~]#squid -k reconfig

  4.启用iptables服务

   [root@nfs-server~]# service iptables start   # 启动iptables服务

   [root@nfs-server~]# iptables -t nat -I PREROUTING -i eth0 -s 192.168.1.0/24 -p tcp --dport 80-j REDIRECT --to 3128

   #添加iptables规则,把内部的http请求重定向到3128端口

5.客户端设置和测试

将客户端的网关指向192.168.1.1

打开浏览器:200.0.0.2测试

Squid代理服务基础篇_squid透明代理_08

服务端网页内容设置:

Squid代理服务基础篇_squid代理服务器_09


反向代理服务器

一、反向代理服务拓扑图


Squid代理服务基础篇_squid代理服务器_10

二、反向代理工作原理

与普通的代理服务器原理差不多,只是外网的环境和私网的环境调换了位置。它是通过公网访问私网,在这我们也另有一个概念“服务器发布”。值得注意的是在我们访问webwww.abc.com的时候,输入的地址必须是合法的公网ip地址,才能进行访问。


三、安装与部署

  1.安装同上普通代理服务器

  2.修改squid.conf配置文件

   [root@nfs-server~]# vi /etc/squid/squid.conf

   http_port200.0.0.1:80 vhost # squid 监听的端口,vhost 表示支持虚拟主机方式

   visible_hostname200.0.0.1

   acl all src0.0.0.0/0.0.0.0

   http_access allowall

   cache_peer  192.168.1.100   parent 80 0 originserver

   #从客户端发送过来的请求,则squidserver 192.168.1.100的端口80发送请求

   3.客户端打开浏览器测试

Squid代理服务基础篇_squid代理服务器_11