高效配置Linux代理服务器――Squid_hem的博客-程序员秘密

技术标签: cache  access  代理服务器软件  linux  服务器  internet  

高效配置Linux代理服务器――Squid
2001-05-21 12:43

发布者:Crystal 阅读次数:335 
毛毛

作为一种免费的网络操作系统,Linux越来越受到广大网络爱好者的欢迎,目前Internet上运行的主机有相当一部分采用的就是Linux,而且中国已经把Linux作为政府上网的指定网络操作系统。种种迹象表明,Linux正在逐渐走向成熟。为了解决Internet发展迅速和IP地址资源紧张的矛盾,代理服务器的使用越来越广泛。Squid是一种在Linux系统下使用的比较优秀的代理服务器软件。
编者注:本站点有Squid下载
代理服务
代理服务是指由一台拥有标准IP地址的机器代替若干没有标准IP地址的机器和Internet上的其它主机打交道,提供代理服务的这台机器称为代理服务器。拥有内部地址的机器想连接到Internet上时,先把这个请求发给拥有标准IP地址的代理服务器,由代理服务器把这个请求通过它的标准IP地址发到请求的目的地址。然后目标地址的服务器把返回的结果发回给代理服务器,代理服务器再原封不动的把资料发给内部主机。若干拥有内部地址的机器就组成了内部网,代理服务器的作用就是沟通内部网和Internet,解决内部网访问Internet的问题。这种代理事不可逆的,Internet上的主机不能访问任何一台拥有内部地址的机器,这样又可以保障内部资料的安全性。
代理软件的一个优点是它能够检验除了数据包之外的许多东西。Squid对数据包的有效载荷进行检验,也就是穿越防火墙的数据包中TCP(或者UDP)部分所占地份量。根据数据包报头(数据包中的IP部分)和数据包有效载荷(TCP部分)的信息,代理防火墙能够决定数据包将发往何处,数据包请求什么,以及根据数据包所必须提供的这些信息决定采取什么样的行动。
对于Web用户来说,Squid是一个高性能的代理缓存服务器,可以加快内部网浏览Internet的速度,提高客户机的访问命中率。Squid不仅支持HTTP协议,还支持FTP、gopher、SSL和WAIS等协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
Squid将数据元缓存在内存中,同时也缓存DNS查寻的结果,除此之外,它还支持非模块化的DNS查询,对失败的请求进行消极缓存。Squid支持SSL,支持访问控制。由于使用了ICP,Squid能够实现重叠的代理阵列,从而最大限度的节约带宽。
Squid由一个主要的服务程序Squid,一个DNS查询程序dnsserver,几个重写请求和执行认证的程序,以及几个管理工具组成。当Squid启动以后,它可以派生出指定数目的dnsserver进程,而每一个dnsserver进程都可以执行单独的DNS查询,这样一来就大大减少了服务器等待DNS查询的时间。
Squid的另一个优越性在于它使用访问控制清单(ACL)和访问权限清单(ARL)。访问控制清单和访问权限清单通过阻止特定的网络连接来减少潜在的Internet非法连接,可以使用这些清单来确保内部网的主机无法访问有威胁的或不适宜的站点。
编译安装Squid
squid软件包有两种:一种是RedHat所使用的rpm包,另一种是源代码包。
rpm包的安装:
1.进入/mnt/cdrom/RedHat/RPMS。
2.执行rpm -ivh squid-2.2.STABLE4-8.I386.rpm。
源代码包的安装:
1.从http://www.squid-cache.org下载squid-2.2.STABLE4-src.tar.gz。
2.将该文件拷贝到/usr/local目录。
3.解开该文件tar xvzf squid-2.2.STABLE4-src.tar.gz,在/usr/local目录下生成一个新的目录squid-2.2.STABLE4,为了方便使用mv squid-2.2.STABLE4 squid将目录更名为squid。。
4.进入squid目录。
5.执行./configure,可以用./configure -prefix=/directory/you/want指定安装目录。系统默认安装目录为/usr/local/squid。
6.执行make all。
7.执行make install。
8.安装结束后,Squid的可执行文件在安装目录的bin子目录下,配置文件在etc子目录下。
配置squid
配置文件squid.conf
Squid有一个主要的配置文件squid.conf,位于/etc/squid目录下,用户仅仅需要修改该配置文件即可。
squid.conf配置文件分为13个部分,分别是:
1.NETWORK OPTIONS(有关的网络选项)
2.OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM(作用于邻居选择算法的有关选项)
3.OPTIONS WHICH AFFECT THE CACHE SIZE(定义cache大小选项)
4.LOGFILE PATHNAMES AND CACHE DIRECTORIES(定义日志文件的路径及cache的目录)
5.OPTIONS FOR EXTERNAL SUPPORT PROGRAMS(外部支持程序选项)
6.OPTIONS FOE TUNING THE CACHE(调整cache选项)
7.TIMEOUTS(超时)
8.ACCESS CONTROLS(访问控制)
9.ADMINISTRATIVE PARAMETERS(管理参数)
10.OPTIONS FOR THE CACHE REGISTRATION SERVICE(cache注册服务选项)
11.HTTPD-ACCELERATOE OPTIONS(HTTPD加速选项)
12.MISCELLANEOUS(杂项)
13.DELAY POOL PARAMETERS(延时池选项)
虽然squid的配置文件很庞大,但是用户可以根据自己的实际情况修改相应的选项,并不需要配置所有的选项。下面介绍几个常用的选项。
1.http_port
定义squid监听HTTP客户连接请求的端口。缺省是3128,如果使用HTTPD加速模式则为80。可以指定多个端口,但是所有指定的端口都必须在一条命令行上。
2.cache_mem
指定squid可以使用的内存理想值,建议设为内存的1/3.
3.cache_dir Directory-Name Mbytes Level1 Level2
指定squid用来存储对象的交换空间的大小及其目录结构。可以用下面的公式来估算系统所需要的子目录数目。
已知量:
DS = 可用交换空间总量(单位KB)/ 交换空间数目
OS = 平均每个对象的大小= 20k
NO = 平均每个二级子目录所存储的对象数目 = 256
未知量:
L1 = 一级子目录的数量
L2 = 二级子目录的数量
计算公式:
L1 x L2 = DS / OS / NO
注意这是个不定方程,可以有多个解。
4.maximum_object_size
大于该值得对象将不被存储。如果要提高访问速度,就降低该值;如果想最大限度的节约带宽,降低成本,就增加该值。
5.dns_nameservers
定义Squid进行域名解析时使用的域名服务器。
6.acl
定义访问控制列表。定义语法为:
acl aclname acltype string ...
acl aclname acltype "file" ...
7.http_access
根据某个访问控制列表允许或禁止某一类用户访问。
运行Squid
配置并保存好squid.conf后,就可以启动、停止和重新启动Squid:
/etc/rc.d/init.d/squid start
/etc/rc.d/init.d/squid stop
/etc/rc.d/init.d/squid restart
可以通过ps命令查看Squid服务是否已经正常启动:
ps -A ¦grep squid
如果出现以下信息:
6573 ? 00:00:00 squid
6574 ? 00:00:00 squid
则表明Squid服务已经正常启动。
客户端的配置
将某台终端设置成内部地址,并将该终端的DNS服务器设置为代理服务器的DNS服务,在内部地址和标准地址之间作一个路由。在浏览器里设置代理服务器地址为Squid代理服务器的地址,就可以通过代理服务器上网了。
一个实例
假设有这样的应用环境,网络中有一台拨号服务器为用户提供拨号接入服务,且运行有Squid实现的代理服务器,其IP地址为192.168.2.32。拨号用户得到一个内部IP,地址范围为192.168.2.1-192.168.2.30。
1.配置squid.conf
http_port 80
cache_mem 32 MB
cache_swap_low 90
cache_swap_high 95
maximum_object_size 4096 KB
cache_dir /var/spool/squid 100 16 256
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
cache_dns_program /usr/lib/squid/dnsserver
dns_nameservers 192.168.2.32
unlinkd_program /usr/lib/squid/unlinkd
acl all src 0.0.0.0/0.0.0.0
acl allow_ip src 192.168.2.1/255.255.255.0
acl manager proto cache_object
acl localhost src 192.168.2.32/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80 21 443 563 70 210 1025-65535
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow allow_ip
cache_effective_user squid
cache_effective_group squid
下面两个选项是用来定义squid加速模式的。用virtual来指定为虚拟主机模式。80端口为要加速的请求端口。采用这种模式时,Squid就取消了缓存及ICP功能,假如需要这些功能,必须设置httpd_accel_with_proxy选项。
httpd_accel_host virtual
httpd_accel_port 80
下面两个选项在透明代理模式下是必须设置成on的。在该模式下,Squid既是web请求的加速器,又是缓存代理服务器。
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
设置透明代理时,必须打开包转发功能,还要结合ipchains:
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/ipchains -A input -j ACCEPT -i lo
/sbin/ipchains -A forward -s 192.168.2.1/24 -d 0/0 -j MASQ
2.用户认证设置
默认时,Squid本身不带任何认证程序,但是可以通过外部认证程序来实现用户认证。一般有以下的认证程序:LDAP认证、SMB认证、基于mysql的认证、基于sock5的密码认证和基于Radius的认证。下面介绍常用的ncsa实现的认证,ncsa是Squid源代码包自带的认证程序之一,实现步骤如下:
* 进入/usr/local/squid/auth_modules/NCSA目录,执行:
make
make install
* 编译成功后,会生成ncsa_auth的可执行文件,拷贝生成的可执行文件到/usr/bin目录下。
* 修改squid.conf文件的相关选项。
acl auth_user proxy_auth REQUIRED
http_access allow auth_user
authenticate_program /usr/local/squid/bin/ncsa_auth
/usr/local/squid/etc/passwd
* 利用Apache携带的工具软件htpasswd在/usr/locad/squid/etc下生成密码文件,并添加相应的用户信息。该密码文件每行包含一个用户的信息,即用户名和密码。例如,用htpasswd生成密码文件passwd并添加用户me:
htpasswd -c /usr/local/squid/etc/passwd me
* 重新启动Squid,密码认证生效。
3.客户端的设置
在客户端浏览器的选项中将代理服务器的IP地址设为192.168.2.32,http端口为80。若要设置透明代理,则客户端不需要在浏览器中指定代理服务器,而将网关设为192.168.2.32,并且客户端要配置好DNS。
现在,内部网的主机就可以通过代理访问Internet了。
结束语
Squid与Linux下其它的代理软件如Apache、Socks、TIS FWTK和delegate相比,下载安装简单,配置简单灵活,支持缓存和多种协议。用ipchains+Squid的解决方案,就可以获得通过缓存高性能的同时能够无缝的访问Internet。最后说明一点,squid不仅可用在Linux系统上,还可以用在AIX、Digital Unix、FreeBSD、HP-UX、Irix、NetBSD、Nextstep、SCO和Solaris等系统上。




来源:计算机世界 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hem/article/details/9441

智能推荐

2.测试相关知识_打印日志_文件_打印测试过程日志_一直学习中的小白的博客-程序员秘密

测试相关知识根据测试时是否有源代码:- 黑盒测试: - 白盒测试 根据测试的粒度:- 方法测试: - 单元测试:- 集成测试:- 系统测试: 根据测试的暴力程度: - 压力测试: - 冒烟测试:  monkey工具用于压力测试. 首先 adb shell 进入终端中.然后 #monkey 5000 回车. 手机屏幕就会被狂点5000次.一个比较完整的命令: adb shell monkey -p 

利用N2N 搭建windows 和 windows 的异地组网环境(简称异地 局域网,软件的方式实现)_软件异地组网_诗水人间的博客-程序员秘密

最近想玩一下《文明6》 并且进行联机,文明6支持局域网联机。于是想着如果自己和远在其它城市的朋友一起玩的话就更好了,因为自己有一台公网上的云服务器,于是想到异地组网。其原理就是通过公网服务器 将两台 windows 电脑放入同一个局域网中,局域网采用的是mac地址通信,所以公网服务器就起到了连接客户端和转发mac地址的作用。于是根据网上的资料找到了n2n的方式进行组网。经实验成功了!本教程进行异地组网前提条件:有一台公网服务器做server一、搭建server1、安装n2n 服务端如果是cen

量子计算机 计算混沌,量子计算带来的密码学革命_weixin_39929635的博客-程序员秘密

对于通用量子计算机的全部本领中包含的某些环境,用传统的方法营造它们是难解的,这一事实说明一些纯数学计算类也必定变得易解了。因为如伽利略所说,物理定律是用数学语言表达的,营造一个环境相当于计算一定的数学函数。的确,现在已经发现许多数学任务可以用量子计算高效地完成,而用所有已知的传统方法都是难解的。最引人注目的一个就是对大的自然数进行因数分解。该方法称为肖算法,由贝尔实验室的彼得·肖在1994年发现。...

Linkage mapper 使用小笔记(二)_qingxiaoyiban的博客-程序员秘密

这几天要被这个软件搞废了,之前的廊道构建好好的,只是生态夹点做不出来,现在生态夹点做出来了,廊道又有运行脚本问题了。。。真的麻了咳咳 进入正题生态夹点之前一直报错,上一篇笔记有提到过一开始以为时输入的数据有问题然后我就去问了小酥大佬(感谢大佬!!)大佬发了安装包给我,结果还是有问题,泪目痛定思痛,我在想是不是我的环境有问题于是我将ArcGIS的环境设置——并行处理设置0值,如下图:然后 ,生态夹点就很顺利的运行了!!!!然而,我万万没想到,第一步的网络廊道构建又出现了代码问题,一开始以为

调用百度API批量翻译Json结构文件_可以翻译json数据成英文的api_Miya_Ye的博客-程序员秘密

项目用vue的国际化,之前有写过,一个个翻译比较头大,写了个简单的网页版本的,务必保证左边是json结构,不放心就在https://www.bejson.com/ 这里输入测试下是不是json结构中翻英,结果如下中翻繁体就是调用了下百度的接口,然后拼了下,把html文件贴出来,md5文件可以在http://api.fanyi.baidu.com/api/trans/product/apidoc 这...

View体系与自定义View(一)—— 什么是View_什么是view在系统中起到什么作用_橙子19911016的博客-程序员秘密

1 View和ViewGroupView是Android中所有控件的基类,不管是简单的Button、TextView还是复杂的RelativeLayout和ListView,它们的共同基类都是View。所以说,View是一种界面层的控件的一种抽象,它代表了一个控件。除了View还有ViewGroup,从名字上看,可以翻译成控件组,即一组View。在Android的设计中,ViewGroup也继承了View,这就意味着View本身就可以是单个控件也可以是由多个控件组成的一组控件。public class

随便推点

Re: 琴瑟和鸣--让同一项目在NetBeans和Eclipse平台下和谐相处,协同开发 _wwwghost的博客-程序员秘密

[quote="lighter"]有意思的帖子. 以前用过JBuilder,现在一直在用eclipse,习惯了,快捷键也都比较熟悉了 NetBeans没有用过...[/quote] 在开发SOA的Web Services和BPEL,以及开发JSF 2.0时,使用NetBeans很方便的。...

python3将excel xlsx 转为lua文件_lakemi的博客-程序员秘密

excel表格格式 说明: 1.前三行分别为:字段中文解释、字段名、字段类型 2.程序不用的字段,加”_”前缀,不会生成进lua文件里 3.策划填数值的时候,偶尔会遗漏数据,当存在空值时,依据字段类型,填上默认值。 4.支持一个字段填上多组数据,自定义类型”table”,代表{ {id1,数量},{id2,数量}}, … } excel2lua.py脚本代码# -*- coding: UTF-8 ...

linux 0.11目录,Linux0.11下的内存管理学习笔记(1)_谢漠烟的博客-程序员秘密

阅读赵先生的Linux0.11内核分析有一段时间了,最近决定要分析2.6内核中的内存分配,但发觉基础不足,所以回头把Linux0.11中内存管理的部分又看了一下,写下学习笔记以加强自己的理解.写的不对的地方请大家一定要拍砖指正~ = 3=)/学习的框架如下:1.80386的分段和分页管理2.80386的保护模式3.Linux0.11的初始化,主要分析内存管理和使用部分下面将按Linux的启动过程进...

特征点提取算法 - 01 - 特征的定义基础_Franklin的博客-程序员秘密

前言:特征提取(feature extraction)是计算机视觉和图像处理中的一个概念。它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征。特征提取的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者连续的区域。案:理解特征提取就是获取依据需求,来获取图像的独有特征值。或者,是将具有相同特质的图像分解的模块进行分类和归类。1 基本概念1....

BiSeNetV1 面部分割_HySmiley的博客-程序员秘密

1、论文2、数据集3、优化器4、损失函数5、日志6、评估指标7、结果分析

vue加载三维模型_南念-shmily的博客-程序员秘密

在vue中加载SuperMap iServer中的三维模型创建项目下载SuperMap iClient3D for WebGL产品包引入到项目中创建项目我使用的是Vue CLI3,具体创建不再赘述,网上教程很多下载SuperMap iClient3D for WebGL产品包链接: 官网将包中的Cesium文件夹解压出来,放到项目中public文件夹下引入到项目中在public文件...

推荐文章

热门文章

相关标签