Linux平台下squid代理服务器的实现


实验环境:CentOS 5.4

         VMwareworkstation 10


代理服务器(Proxy Server)是一种重要的服务器安全功能,它的工作主要在开放系统互联模型的会话层,从而起到防火墙的作用。代理服务器大多被用来连接INTERNET和INTRANET(局域网)


代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。代理服务器就好象一个大的Cache,这样就能显著提高浏览速度和效率。更重要的是:Proxy Server(代理服务器)是Internet链路级网关所提供的一种重要的安全功能,它的工作主要在开放系统互联(OSI)模型的会话层。主要的功能有:

突破自身IP访问限制,访问国外站点。教育网、过去的169网等网络用户可以通过代理访问国外网站。

访问一些单位或团体内部资源,如某大学FTP(前提是该代理地址在该资源 的允许访问范围之内),使用教育网内地址段免费代理服务器,就可以用于对教育网开放的各类FTP下载上传,以及各类资料查询共享等服务。

突破中国电信的IP封锁:中国电信用户有很多网站是被限制访问的,这种限制是人为的,不同Serve对地址的封锁是不同的。所以不能访问时可以换一个国外的代理服务器试试。

提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时, 则直接由缓冲区中取出信息,传给用户,以提高访问速度。

隐藏真实IP:上网者也可以通过这种方法隐藏自己的IP,免受***


具体实现步骤:


我们以一台虚拟机来担当代理服务器,并安装两块网卡,一个lan卡,一个wan卡,wan卡的地址为自

动获得

Linux平台下代理服务器的实现(squid)_第1张图片

而且要将地址的获得方式改为自动获得

Linux平台下代理服务器的实现(squid)_第2张图片

(如果在setup下的添加硬件设备不显示,你可以在虚拟机的添加删除设备中额外添加设备)


然后重启网络服务(虚拟机下最好重启系统才行),


Linux平台下代理服务器的实现(squid)_第3张图片


注意,此时为了保证我们的通信,我们做为服务器的虚拟机的两块网卡,内卡为仅主机模式,外卡为桥接。地址如上图所示


挂载光驱安装squid服务

wKioL1L2BmrTNtqxAABU4C-2zJI629.jpg

[root@bogon ~]# mount /dev/cdrom /media/cdrom

mount: block device /dev/sr0 is write-protected, mounting read-only

[root@bogon ~]# yum --disablerepo=\* --enablerepo=c6-media install squid


在安装完成之后可以用  rpm -qa squid指令查看安装路径并产看具体配置文件(/etc/squid/squid.conf)



测试配置文件的正确性


[root@bogon ~]# squid -k parse

2014/02/08 00:05:12| Processing Configuration File: /etc/squid/squid.conf (depth 0)

2014/02/08 00:05:12| Initializing https proxy context

[root@bogon ~]# route -n

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

192.168.2.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0

192.168.1.0     0.0.0.0         255.255.255.0   U     1      0        0 eth1

0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth1



在没有网关的情况下squid是启动不了的,同样的在有网关但连接不到Internet的情况下也启动不了

,这是squid代理的特点


还要设置一个visible_hostname(可见),设置这样一个主机名并不一定是用于解析的,它只是在产

生的错误信息要返回时能够显示一个主机名


wKioL1L2BmuwOvYoAAAaRWhwNlg077.jpg


sqiud实现cache有两种方式,内存和硬盘,但很明显。内存缓存的速度要快于硬盘,如实现在内存开

辟缓存空间cache_mem

硬盘缓存配置,如69行,表示ufs文件格式,目录路径,空间大小,一级目录个数,每个二级子目录

个数(100MB大小,16个一级目录,256个二级目录)


wKiom1L2BpCjU34yAAArdBlK5Bs151.jpg


但在此时单单开启硬盘缓存是会有报错的,需要额外配置内存缓存


wKioL1L2Bm3AME6GAABS5TBPXcY566.jpg

配置内容如下:

wKiom1L2BpGRjO6PAAAQpEpcuTs833.jpg


在刚开始时缓存目录是空的,第一次启动时会首先初始化目录,创建内容

[root@bogon ~]# ll /var/spool/squid/

total 0

[root@bogon ~]# service squid start

init_cache_dir /var/spool/squid... Starting squid: .       [  OK  ]


Linux平台下代理服务器的实现(squid)_第4张图片


目录情况与上面说述相同,0f表示16,ff表示256(16进制)

wKioL1L2BnDC3MnYAAApqObli-s205.jpg

查看服务的进程端口,并保证正常启动


[root@bogon ~]# netstat -tupln |grep squid

tcp        0      0 :::3128                     :::*                        LISTEN  


  4113/(squid)        

udp        0      0 0.0.0.0:39865               0.0.0.0:*                            


  4113/(squid)        

udp        0      0 :::43561                    :::*                                


  4113/(squid)  


接下来编辑,squid的具体配置文件,如图,我们将acl关键字下定义的localnet 类型改为如图所示的匹配到24位掩码策略,这时,如果我们在C类网段的任何主机都是应该过不了代理服务器的


wKiom1L2BpWgs9hzAABBKu3BcHc824.jpg



wKioL1L2BnGy_MRRAAApyfZ84Uw778.jpg

然后重启服务器


[root@bogon ~]# vim /etc/squid/squid.conf

[root@bogon ~]# service squid restart

Stopping squid: ................                           [  OK  ]

Starting squid: .                                          [  OK  ]


此时我们可以找一台主机进行测试,因为使用代理服务器,我们的所有请求都会发向他,所以没必要

设置dns ,并且可以在有关的日志目录中查看具体信息,注意此时如果我们使用虚拟机的话,在这我们应该将虚拟机的网卡连接方式选择为仅主机模式,将网关指向192.168.2.199


Linux平台下代理服务器的实现(squid)_第5张图片


然后修改浏览器的上网设置,将其改为局域网代理,如图

Linux平台下代理服务器的实现(squid)_第6张图片


并且,我们可以在服务器端开启日志,进行监测服务

wKiom1L2Bpbg6OBIAAAwb6EOxU4705.jpg

接下利用浏览器进行上网测试


Linux平台下代理服务器的实现(squid)_第7张图片


如上图红线内所示,显示了服务器端的拒绝信息,并且日志中也有关于拒绝信息的反馈


Linux平台下代理服务器的实现(squid)_第8张图片


我们重新将关键字下的控制字段改为我们测试主机所在的网段,再进行测试,应该是允许通过

wKiom1L2BpvivLVMAABINAWF2FY515.jpg


实际测试



Linux平台下代理服务器的实现(squid)_第9张图片


查看服务器日志中的反馈信息,显示了我们的刷新信息,其中的MISS信息是因为我们刚开测试,服务器的缓存还没有关于网址的信息记录,所以会显示MISS,但在以后的使用中这种信息将逐步减少,而HIT信息将逐步增多


Linux平台下代理服务器的实现(squid)_第10张图片