编译安装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子目录下。


3)squid运行命令参数:

squid -a port     制定新的http_port 值,覆盖了配置文件的值。
squid -d level    记录调试日志(cache.log,syslog)信息的等级。

squid  -f file    指定一个配置文件
squid  -k function   只是squid执行不同的管理功能,包括:
   reconfigure,rotate,shutdown,interrupt,kill,debug,parse。
   reconfigure: 重新加载配置squid.conf
   rotate:      滚动日志,包括关闭日志,重命名。
   shutdown:    关闭squid进程的信号
   interrupt:   立刻关闭squid
   kill:       发送kill信号给squid。
   debug:       将squid设置成完全的调试模式。
   check:       简单的检查运行中的squid进程。
   parse:       简单的解析squid.conf文件。


squid -s   激活将日志记录的syslog进程。

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

squid -z   初始化cache,或者交换,目录。首次运行squid是要执行此参数。

squid  -D   禁止启动时验证dns。

squid  -X   强迫完整调试模式。


4)访问控制参数;

基本acl类型

ip地址:
  使用对象:src,dst,myip
  myip类型指Squid的IP地址,它被客户连接,大部分squid安装不使用该类型。
  通常所有的客户连接到同一个IP地址,所以该ACL元素仅仅当系统有多个IP地址时才有用。

  例如:情况下的squid有三个网络接口:一个连接子网1,一个连接子网2,第三个连接到外部因特网。

   acl Eng myip 172.16.1.5
   acl Admin myip 172.16.2.5

  例:acl localnetwork  src 172.16.100.0/24  172.16.103.0/24
             acl bar src  192.168.1.0-192.168.200.0/24
      acl outnetwork    dst  219.143.48.0/24
域名:

  当ACL域名以"."开头,squid将它作为通配符,它匹配在该域的任何主机名,甚至域名自身。
  相反的,如果ACL域名不以"."开头,squid使用精确的字符串比较,主机名同样必须被严格检查

  使用对象:srcdomain,dstdomain,和cache_host_domain

  例:acl a  dstdomain .sohu.com .163.com

用户名:
  使用对象:ident,proxy_auth


正则表达式: 使用对大小写不敏感的参数:-i

  使用对象:

   srcdom_regex,dstdom_regex, url_regex, urlpath_regex, browser,
   referer_regex, ident_regex, proxy_auth_regex, req_mime_type, rep_mime_type


  例:acl Foo url_regex -i ^http://www
      acl badurl1 url_regex -i ^http://www.s

端口号:
  使用对象:port,myport

  例:acl Bar port 1-1024


配置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
如果要设置visible hostname就必须得设置成本机的主机名,用hostname命令可以显示主机名
下面两个选项在透明代理模式下是必须设置成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等系统上。