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卡的地址为自
动获得
而且要将地址的获得方式改为自动获得
(如果在setup下的添加硬件设备不显示,你可以在虚拟机的添加删除设备中额外添加设备)
然后重启网络服务(虚拟机下最好重启系统才行),
注意,此时为了保证我们的通信,我们做为服务器的虚拟机的两块网卡,内卡为仅主机模式,外卡为桥接。地址如上图所示
挂载光驱安装squid服务
[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(可见),设置这样一个主机名并不一定是用于解析的,它只是在产
生的错误信息要返回时能够显示一个主机名
sqiud实现cache有两种方式,内存和硬盘,但很明显。内存缓存的速度要快于硬盘,如实现在内存开
辟缓存空间cache_mem
硬盘缓存配置,如69行,表示ufs文件格式,目录路径,空间大小,一级目录个数,每个二级子目录
个数(100MB大小,16个一级目录,256个二级目录)
但在此时单单开启硬盘缓存是会有报错的,需要额外配置内存缓存
配置内容如下:
在刚开始时缓存目录是空的,第一次启动时会首先初始化目录,创建内容
[root@bogon ~]# ll /var/spool/squid/
total 0
[root@bogon ~]# service squid start
init_cache_dir /var/spool/squid... Starting squid: . [ OK ]
目录情况与上面说述相同,0f表示16,ff表示256(16进制)
查看服务的进程端口,并保证正常启动
[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类网段的任何主机都是应该过不了代理服务器的
然后重启服务器
[root@bogon ~]# vim /etc/squid/squid.conf
[root@bogon ~]# service squid restart
Stopping squid: ................ [ OK ]
Starting squid: . [ OK ]
此时我们可以找一台主机进行测试,因为使用代理服务器,我们的所有请求都会发向他,所以没必要
设置dns ,并且可以在有关的日志目录中查看具体信息,注意此时如果我们使用虚拟机的话,在这我们应该将虚拟机的网卡连接方式选择为仅主机模式,将网关指向192.168.2.199
然后修改浏览器的上网设置,将其改为局域网代理,如图
并且,我们可以在服务器端开启日志,进行监测服务
接下利用浏览器进行上网测试
如上图红线内所示,显示了服务器端的拒绝信息,并且日志中也有关于拒绝信息的反馈
我们重新将关键字下的控制字段改为我们测试主机所在的网段,再进行测试,应该是允许通过
实际测试
查看服务器日志中的反馈信息,显示了我们的刷新信息,其中的MISS信息是因为我们刚开测试,服务器的缓存还没有关于网址的信息记录,所以会显示MISS,但在以后的使用中这种信息将逐步减少,而HIT信息将逐步增多