推荐linux的Squid代理服务器的架设 精品.docx
《推荐linux的Squid代理服务器的架设 精品.docx》由会员分享,可在线阅读,更多相关《推荐linux的Squid代理服务器的架设 精品.docx(15页珍藏版)》请在冰豆网上搜索。
![推荐linux的Squid代理服务器的架设 精品.docx](https://file1.bdocx.com/fileroot1/2023-1/30/c4ea6009-bb20-4bfb-aea6-8504adac9798/c4ea6009-bb20-4bfb-aea6-8504adac97981.gif)
推荐linux的Squid代理服务器的架设精品
1引言
1.1课程设计的背景
LINUX是这几年一款异军突起的操作系统,以其公开的源代码、强大稳定的网络功能和大量的免费资源受到业界的普遍赞扬。
简单的说,linux就是一套免费使用和自由传播的类UNIX操作系统,它主要用于基于Intelx86系列CPU的计算机上。
Linux系统是由世界各地成千上万的程序员设计和实现的,其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的UNIX兼容产品。
其中完善的内置网络是Linux的一大特点。
Linux在通信和网络功能方面优于其他操作系统。
Linux为用户提供了完善的、强大的网络功能。
Linux免费提供了大量支持Internet的软件,Internet是在UNIX领域中建立并繁荣起来的。
随着我国计算机网络和信息化的发展,个人操作系统和网络操作系统的选择也越来越受到人们的关注。
人们一直追求把性能最好、安全性最高、价格最便宜的操作系统安装到自己的计算机上,因此,Linux成了流行的操作系统。
在互联网上,当客户端向服务器端请求数据时,服务器将随即给客户端传送所需的数据,这些服务器可能是远程服务器,数据传输也就需要很长的时间,如果请求此数据的用户很多,就好造成网络堵塞。
代理服务器就是为了更好地改善互联网数据传输率而产生的,它不仅可以代理客户服务器端的请求,也可以代理服务器响应客户端所需要的数据。
1.2课程设计的意义
随着Internet的迅速发展,宽带网络的接入增多,Internet用户的数量也迅速膨胀,网络管理员通常面临着IP地址缺乏、用户访问计费问题,以及内部网络安全问题等一系列问题,代理服务器是解决这些问题的有效方法之一[1]。
通过代理服务器访问Internet,可以节省IP地址、在内部网络和外部网络之间构筑起防火墙、通过缓存区的使用降低网络通信费用、控制访问权限和统计信息流量等。
本课程设计的意义就在于通过对squid代理服务器的构建与配置实现以上功能。
1.3课程设计的目的
本课程设计的目的主要有:
熟悉Linux、代理服务器及squid代理服务器的相关概念及原理;熟悉并掌握squid代理服务器安装、启停及基本配置具体方法;进行squid代理服务器高级配置,实现squid代理服务器的透明代理、用户身份认证、控制用户访问权限等功能。
1.4Linux简介
Linux是包含内核、系统工具、完整的开发环境和应用的Unix类操作系统。
这个系统是由世界各地的成千上万的程序员设计和实现的。
其目的是为了建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品[1]。
由于Linux内核及多数应用程序都基于GPL(GUN通用公共许可协议),且具有结构清晰、功能简捷等特点,Linux逐渐成为一个稳定可靠、功能完善的操作系统。
Linux之所以受到广大计算机爱好者的喜爱,主要原因有两个[1]:
一是它属于自由软件,用户不用支付任何费用就可以获得它和它的源代码,并且可以根据自己的需要对它进行必要的修改,无偿对它使用,无约束地继续传播。
另一个原因是,它具有Unix的全部功能,任何使用Unix操作系统或想要学习Unix操作系统的人都可以从Linux中获益。
1.5代理服务器的作用及工作原理
代理服务器是目前网络中常见的服务器之一,它可以提供文件缓存、复制和地址过滤等服务[1],充分利用有限的出口带宽,加快内部主机的访问速度,也可以解决多用户需要同时访问外网但公有IP地址不足的问题。
同时可以作为一个防火墙,隔离内网与外网,并且能提供监控网络和记录传输信息的功能,加强局域网的安全性等。
它的主要作用有以下几点:
(1)共享网络;
(2)加快访问速度,节约通信带宽;
(3)防止内部主机受到攻击;
(4)限制用户访问,完善网络管理。
代理服务器是建立在TCP/IP协议应用层上的一种服务软件,是以HTTP协议为基础的。
工作过程简单来说分为4步[2]:
客户端向服务器发送的请求到达代理服务器;代理服务器把请求转发给客户端真正需要联系的服务器;服务器向代理服务器返回响应;代理服务器把响应返回给客户端。
下面我们以一个内网客户端通过代理服务器访问Internet上的远程Web服务器的过程为例,来较为深入地了解代理服务器的工作原理,如图1.1所示。
图1.1Squid代理服务器工作原理
启动代理服务器,此时代理服务器主进程会一直监听某个绑定的端口,同时会初始化代理服务器缓存。
客户端向代理服务器发出访问Web服务器资源的请求。
当代理服务器主进程监听到客户端发来了请求,便会创建一个子进程应对客户端发来的请求;而主进程继续进行监听工作。
已创建的代理服务器子进程与客户端建立连接,读取客户请求并对客户请求进行解析,然后依照在代理服务器上预设的访问规则列表,检验当前接收到的请求;如果请求满足规则约束,则可以在代理服务器缓存中查找是否存在所需要的信息。
子进程开始查询缓存,根据查询结果做出不同处理[3]。
一种情况是在缓存中命中客户端请求的信息,并且该信息没有过期,则将信息直接传送给客户端,依据具体的缓存更新算法更新代理服务器缓存。
另一种情况是缓存中命中客户端请求的信息,并且该信息已经过期,则该子进程代理客户端向目标Web服务器发出请求。
目标Web服务器响应代理服务器子进程发来的请求,同时代理服务器子进程依据具体的缓存更新算法更新代理服务器缓存。
代理服务器子进程将目标Web服务器回应的信息转送给客户端。
代理服务器子进程处理完客户端的代理服务后,进程自动终止,所有相关资源(各种连接)全部释放。
其他客户端的请求过程同上。
1.6Squid代理服务器简介
Squid是针对Web客户机的高性能代理缓冲服务器,其作用是加快Internet的访问速度,同时为Web服务器提供安全机制。
它能够实现响应Web客户机请求缓冲的代理缓冲器,Web页的副本保存在Squid缓冲器中,请求到来时,Squid首先检查缓冲器是否存在当前Web页的副本,如果存在,则从当前缓冲器而不是初始点返回副本。
目前,Squid可以代理HTTP、FTP、GOPHER、SSL和WAIS等协议,该软件的替换算法将自动替换缓冲器中的旧对象。
Squid代理服务器的一般工作模式如下[4]:
(1)当Squid服务器没有数据时,会先向友邻的Squid服务器请求数据。
如果友邻也没有数据,就直接向上级请求数据;
(2)Squid服务器向上级请求数据,然后等待上级给出数据。
如果上级有数据,则给出数据;如果没有数据,则上级到Internet中查找;
(3)如果没有上级时,Squid服务器自己到Internet中查找;
(4)如果这三者都找不到数据,则向客户端报告无法取到数据。
一般来说,可以把网络上一层的Squid服务器设成友邻。
Squid代理服务器有很多高级的功能[4],如作为Web服务器的高速缓存、二级代理服务器、防火墙以及设定过滤规则等,本次课程设计主要就后面几个功能做出分析[4]。
2Linux下Squid代理服务器的安装与配置
2.1Squid代理服务器的安装
首先要查询是否安装了Squid代理服务器,默认情况下RedHatEnterpriseLinux安装程序会将Squid服务器安装在系统上,可使用下面的命令检查系统是否已经安装了Squid或查看已经安装了何种版本的Squid服务器。
在Linux的终端下输入以下命令:
rpm–qa|grepsquid
命令执行结果如下:
出现以上结果表示Squid服务器已安装,它的版本是2.5.STABLE1-2。
如果系统未安装Squid,就应将RedHatEnterpriseLinux第二张安装盘放入光驱,挂载光驱后再光盘的RedHat/RPMS目录下找到Squid的RPM安装文件,使用安装命令进行安装。
Squid程序将安装在/user/sbin目录中,而配置文件squid.conf则安装在/etc/squid目录下。
2.2Squid代理服务器的基本配置
Squid的主配置文件是/etc/squid/squid.conf,包括了全部的Squid配置选项和注释。
由于该文件内容较多,不利于查看和编辑,可以将其复制出一个副本,然后删除/etc/squid/squid.conf配置文件的原有内容,并加上以下最基本的Squid配置就可以启动了,其主要配置内容如下[5]:
http_port192.168.1.101:
8080
#这一句是用于设置Squid监听的IP地址和端口号,是为了告诉SquidServer在哪个IP地址的哪个端口侦听来自客户机的HTTP请求。
cache_mem300MB
#这一句是用于设置内存缓冲的大小,是用于Squid存放一些最常用的缓存。
cache_dirufs/var/spool/squid409616256
#这一句是用于设置硬盘缓冲的大小,其目的在于加快查找缓存文件的时间。
上面命令选项的意思是:
硬盘缓冲区的目录是/home/squid/cache,缓冲的存储类型为ufs,缓存空间的大小为4096,硬盘缓冲区的目录下有16个一级子目录,每一级子目录下有256个二级子目录。
cache_effective_usersquid
#这一句是用于设定使用缓存的有效用户。
cache_effective_groupsquid
#这一句是用于设定使用缓存的有效用户组。
dns_nameservers202.103.96.112
#这一句是用于定义DNS服务器地址。
cache_access_log/var/log/squid/access.log
#这一句是用于设置访问日志文件,该日志文件记录了用户访问Internet的详细信息,通过访问日志文件可以查看每台客户机上网记录。
cache_log/var/log/squid/cache.log
#这一句是用于设置缓存日志文件。
cache_store_log/var/log/squid/store.log
#这一句是用于设置网页缓存日志文件。
visible_hostname192.168.1.101
#这一句是用于设置运行squid主机的名称,当访问发生错误时,该选项的值会显示在错误提示网页中,以上IP为主机IP
cache_mgr905538359@qq
#这一句是用于设置管理员的E-mail地址,当访问发生错误时,该选项的值会显示在错误提示网页中。
aclallsrc0.0.0.0/0.0.0.0
#这一句是用于设置访问控制列表。
http_accessallowall
#这一句是用于设置允许或拒绝某个访问控制列表的HTTP请求。
2.3初始化Squid
(1)初始化硬盘cache目录
成功安装并配置好Squid服务器后,为了能够使Squid在硬盘中缓冲终端客户访问目标服务器的内容,在初次运行Squid之前,或者修改了cache_dir设置后,我们都必须初始化硬盘cache目录]。
命令格式如下:
[root@localhostroot]#/usr/local/squid/sbin/squid-z
该命令在每个cache_dir下面创建了所需的子目录。
你不必担心Squid会破坏当前cache目录。
命令执行完后,查看目录"/usr/local/squid/var/cache"的内容时,可以看到Squid已经根据配置文件的定义建立了目录结构。
在该阶段属主和许可权是通常遇到的问题。
Squid在特定的用户ID下运行,这在squid.conf文件里的参数cache_effective_user中指定。
用户ID必须对每个参数cache_dir目录有读和写权限;否则,你将看到如下信息。
CreatingSwapDirectories
FATAL:
Failedtomakeswapdirectory/usr/local/squid/var/cache/(13)Permissiondenied
在这样的情形下,应该确认"/usr/local/squid/var/cache"目录的所有资料必须都可以被squid.conf给定的用户ID进行写访问。
cache目录初始化工作可能花费一些时间,这取决于cache目录的大小和数量,以及磁盘驱动器的速度。
(2)在终端窗口中测试Squid
当成功初始化了cache目录后,就可以在终端窗口里运行Squid了,将日志记录重定向到标准错误。
这样,我们就能轻易地定位任何错误或问题,并且确认Squid是否成功启动。
使用-N选项来保持Squid在前台运行,-d1选项在标准错误里显示1级别的调试信息。
[root@localhostroot]#/usr/local/squid/sbin/squid-N-d1
命令执行完后,查看目录/var/spool/squid的内容时,可以看到Squid已经根据配置文件的定义建立了目录结构,如图2.1所示。
图2.1硬盘缓冲区的目录结构
2.4启动和停止Squid代理服务器
(1)启动代理服务器
在正常情况下,我们通常将Squid以后台进程的方式运行(不出现在终端窗口里)。
最容易的方法是执行如下命令:
[root@localhostroot]#/etc/init.d/squidstart
命令执行后出现Startingsquid绿色OK提示,则表示启动代理服务成功。
(2)停止代理服务器
我们可以使用squid-kinterrupt命令,立即关闭Squid代理服务器,不用等待完成活动请求。
命令如下:
[root@localhostroot]#/etc/init.d/squidstop
命令执行后出现Stoppingsquid绿色OK提示,则表示停止代理服务成功。
当然这不是唯一的停止Squid代理服务器的方法,其他还有最安全地停止Squid代理服务器的squid-kshutdown命令方法以及运用kill命令强行停止代理服务器的方法。
(3)重新启动代理服务器
重新启动Squid代理服务器的命令如下:
[root@localhostroot]#/etc/init.d/squidrestart
命令执行后出现如图2.2所示的信息,则表示重新启动代理服务成果。
图2.2重启代理服务
(4)自动启动代理服务器
如果需要让代理服务随系统启动而自动加载,可以在终端执行“ntsysv”命令启动服务配置程序,找到“Squid”服务,在其前面加上星号,然后选择“确定”即可,如图2.3所示。
图2.3自动启动代理服务配置
当然,自动启动代理服务也不仅仅只有这一种方法。
还可以通过修改“/etc/rc.local”脚本来配置。
这是一个简单的shell脚本,在每次系统启动时以root运行。
使用该脚本来启动Squid非常容易,增加如下一行命令:
/usr/local/squid/sbin/squid-s
当然安装位置可能不同,还有你可能要使用其他命令行选项,但不要在这里使用-N选项。
在某些情况下可能没有使用cache_effective_user参数,此时我们可以尝试使用su来让Squid以非root用户运行。
2.5Squid代理服务器的客户端配置
在客户端设置代理服务器很简单,主要是在浏览器中设置,分为两种[6]:
在WindowsXP的IE浏览器中设置和在Linux自带的Mozilla浏览器中设置。
(1)在IE浏览器中设置
在IE浏览器的菜单中选择“工具”菜单中的“Internet选项”子菜单,单击“连接”标签,打开“连接”选项卡,在该选项卡中,单击“局域网设置”按钮,在打开的对话框中输入Squid代理服务器的IP地址和端口号即可上网,如图2.4所示。
图2.4IE浏览器中代理服务器的设置
(2)在Mozilla浏览器中设置
首先打开Mozilla浏览器,选择“编辑”菜单中的“首选项”子菜单命令,打开“首选项”对话框。
在该对话框的左边,有很多设置选项供选择。
单击“高级”类别中的“代理”选项,会弹出代理服务器的配置对话框,选择“手工配置代理”单选按钮,然后在“HTTP代理”文本框中输入代理的IP地址,这里输入192.168.1.101,在“端口”文本框中输入端口号,这里输入8080。
最后单击“确定”按钮即可。
如图2.5所示。
图2.5Mozilla浏览器中代理服务器的设置
3Squid代理服务器的高级配置
3.1透明代理的实现
透明代理就是客户机无需设置浏览器代理配置的情况下通过Squid代理服务器上网[7],只需将客户机的默认网关设置为Linux服务器与内网相连的网络接口的IP地址即可。
当内网用户的客户机访问Internet外网时,请求数据包经过Linux服务器转发时,Linux服务器上的iptables将客户机的HTTP请求重定向到Squid服务器,有代理服务器代替客户机访问外部信息资源,再将获取的数据传回客户机[7]。
配置了透明代理后,客户端用户用浏览器上网时,感觉就像直接上网一样,而实际上却是通过代理服务器浏览网页,从而大大方便了系统管理员日常管理工作,透明代理是NAT和代理的完美结合。
在Linux平台下我们使用iptables+Squid来实现透明代理和网络地址转换。
(1)配置Squid
在"/etc/squid/squid.conf"文件中需修改的参数如下:
httpd_port192.168.1.101:
8080
#Squid监听HTTP客户端端口
#以下为缓存设置
cache_mem300MB
cache_swap_low90
cache_swap_high95
cache_dirufs/cache/squid409616256
#以下为缓存日志
cache_access_log/var/log/squid/access.log
cache_log/var/log/squid/cache.log
cache_store_log/var/log/squid/store.log
#以下为透明代理
httpd_accel_hostvirtual
#这一句是为了指定当前采用虚拟主机模式。
httpd_accel_port80
#这一句是为了指定需要加速的请求端口。
httpd_accel_with_proxyon
#这一句是为了说明Squid服务器既是Web请求的加速器,又是缓存代理服务器。
httpd_accel_uses_host_headeron
#参数httpd_accel_uses_host_header设置为on后,在透明代理模式下,代理服务器的缓存功能才能正确工作,这时Squid会把存储的对象加上主机名作为索引。
#以下为代理权限
http_accessallowall
(2)配置iptables
iptables在此所起的主要作用是端口重定向,执行如下的命令将所有进入eth0网络接口80端口的Web服务的请求直接转发到8080端口,交由Squid代理处理,命令如下所示:
[root@localhostroot]#iptables-tnat-APREROUTING-ieth0-ptcp-mtcp--dport80–j
REDIRECT--to-ports8080
[root@localhostroot]#iptables-tnat-APOSTROUTING-oeth0-jMASQUERADE
在内网的客户端设置网关的DNS服务器IP后就可以再客户端直接上网了。
3.2用户身份认证
身份认证是实现网络通信安全的重要机制之一。
在安全的网络通信中,涉及的通信各方必须通过某种形式的身份验证机制来证明他们的身份,验证用户的身份与所宣称的是否一致,然后才能实现对于不同用户的访问控制和记录。
用户身份认证作为保护网络系统资源的第一道防线,在任何公共服务中都是必要的组成部分。
Squid代理服务也同样需要搭配满足需求的用户身份认证机制,保证合法终端客户以合法的权限访问网络系统资源。
在默认情况下,Squid服务本身不包括任何身份认证程序,但我们可以通过绑定外部用户认证程序的方式实现Squid服务本身的用户身份认证[7]。
一般有NCSA认证、PAM认证、LDAP认证、SMB认证和SASL认证等认证程序。
这些外部认证程序存放在/usr/lib/squid/目录下。
(1)配置squid.conf文件
虽然Squid代理服务器可以绑定前述的多种用户认证方式,但最为常用的认证方式还是NCSA。
下面是在Squid主配置文件"/usr/local/squid/etc/squid.conf"中实现NCSA认证方式绑定配置的重要部分。
#该选项指出了认证方式(basic)、需要的程序(ncsa_auth)和对应的密码文件(password)
auth_parambasicprogram/usr/lib/squid/ncsa_auth/etc/squid/passwd
#指定认证程序的进程数
auth_parambasicchildren5
#浏览器显示输入用户名/密码对话框时的领域内容
auth_parambasicrealmExample’sSquidproxy-caching
#基本的认证有效时间
auth_parambasiccredentialsttl2hours
#普通用户需要通过认证才能访问Internet
aclauth_userproxy_authREQUIRED
http_accessallowauth_user
(2)建立账号文件
为了建立供用户认证使用的账号文件,可以利用Apache的htpasswd程序生成账号文件,放置在"/usr/local/squid/etc/passwd"路径下。
该账号文件每行包含一个用户账号信息,即用户名和经过加密后的密码。
[root@localhost~]#htpasswd-c/etc/squid/passwdhuanglixian
命令执行后即建立了一个用户,之后访问网站时要通过用户和口令进行访问。
4Squid代理服务器的测试
4.1用户认证测试
根据之前配置的通过代理服务器的用户身份认证进行测试。
打开Linux下的Mozilla浏览器,访问,出现用户认证提示界面,当然如果打开IE浏览器访问也是一样的,因为前面已经配置了IE浏览器的代理服务。
其结果分别如图4.1和4.2所示。
图4.1Mozilla浏览器用户认证提示界面
图4.2IE浏览器用户认证提示界面
当输入正确用户名和密码时网站就访问成功。
如果用户名和密码不正确,则出现“CaheAccessDenied”的错误信息,Mozilla浏览器和IE浏览器认证错误分别如图4.3和4.4所示。
图4.3Mozilla浏览器用户认证错误界面
图4.4IE浏览器用户认证错误界面
4.2禁止用户访问某网站配置测试
打开squid.conf配置文件,在该文件中配置禁止用户访问某网站的命令,如下所示:
aclcenterdstdomainbaidu
http_accessdenycenter
修改完配置文件后使用命令“/etc/rc.d/init.d/squidreload”使配置生效。
根据上面配置的禁止用户访问baidu网站,打开浏览器,对该网站进行访问,出现“Therequeste