Squid的安装和配置

1. 安装Squid

tar zxvf squid-2.6.STABLE10.tar.gz

#解压包

cd squid-2.6.STABLE10

 

./configure --prefix=/usr/local/squid--enable-gnuregex --enable-async-io=160 --enable-kill-parent-hack--enable-snmp --disable-ident-lookups --enable-cache-digests --enable-ssl--enable-delay-pools --enable-underscore --enable-err-language=Simplify_Chinese--enable-default-err-languages=Simplify_Chinese --with-maxfd=16384

 

#--enable-gnuregex

强制使用GNU正则表达式

 

#---enable-async-io[=N_THREADS]

      等同于:

             --with-aufs-threads=N_THREADS
                      指定aufs存储机制使用的线程数量
                     

--with-pthreads
         该选项导致编译过程链接到你系统中的P线程库

 

--enable-storeio=ufs,aufs
         指定存储类型

 

                     #--enable-kill-parent-hack
                           
关机时杀死父进程
                    

                     #--enable-snmp

                            开启snmp
           

                     #--disable-ident-lookups

ident是一个简单的协议,允许服务器利用客户端的特殊TCP连接来发现用户名。假如你使用该选项,编译器将把执行这些查询的代码排除出去

                     #--enable-cache-digests

开启cache消化功能,Cache消化是ICP的另一个替代,但有着截然不同的特性
采用这步导致在运行squid时发生2件事:

1)Squid cache产生它自己内容的摘要。邻居cache如果也配置了使用cache摘要(在squid作出转发决定前,它会等待所有的ICP响应抵达。squid的cache摘要提供了类似的功能,但没有每个请求的网络延时),那可能就会请求这个摘要。

2)Squid请求每个邻居的cache摘要。

                     #--enable-ssl

                            开启ssl 功能(使用OpenSSL),仅工作在web加速器中用以加速请求

                     #--enable-delay-pools

                            开启squid延时池功能
                           

                     #--enable-underscore

允许解析的URL中出现下划线,因为默认squid会认为带下划线的URL地址是非法的,并拒绝访问该地址
                           

                     #--enable-err-language=Simplify_Chinese

                     #--enable-default-err-languages=Simplify_Chinese

                            指定出错是显示的错误页面为简体中文
                           

                     #--with-maxfd=16384

                            增大squid文件描述符到16384

 

                    

#make && make install

编译并安装

 

2.Squid的配置

配置文件为/usr/local/squid/etc/squid.conf,如下是对配置参数的详细解释:

 

http_port 119.167.207.253:80 transparent

#使用此IP,并使用透明模式

icp_port 0

#多台Squid集群才会用到,仅是负责与邻近Proxy互相沟通彼此的快取资料库的功能,与实际的用户要求无关,设置为0,表示关闭此功能

hierarchy_stoplist cgi-bin ?

#如果在URL中出现以下的字样,则本机proxy不会向parent或者sibling做查询,而是直接处理.(预设值为cgi-bin?)

 

acl QUERY urlpath_regex cgi-bin \? \.aspx \.ashx \.asmx

cache deny QUERY

#设置不想缓存的目录或者文件类型

 

acl apache rep_header Server ^Apache

broken_vary_encoding allow apache

#配置squid正确的缓存Apache输出的压缩内容

 

cache_mem 512 MB

#额外使用的内存量,来缓存热门内容,可根据你的系统内存设定,这里设置了512M

cache_swap_low 90

#最低交换空间缓存百分比

cache_swap_high 95

#最高交换空间缓存百分比,当使用交换空间量超过95%就开始删除旧的缓存

maximum_object_size 8192 KB

#单个文件最大缓存大小,超过这个大小将不缓存

maximum_object_size_in_memory 1024 KB

#在内存中单个文件最大缓存大小,超过这个大小将不缓存到内存中

cache_dir ufs /usr/local/squid/var/cache_eth0 4096 16 256

#依次设置磁盘缓存的存储机制和目录,大小,一二级目录的个数设置,这里磁盘缓存大小是4096M

 

access_log /usr/local/squid/logs/access_eth0.log common

#设置客户端请求的日志文件路径及格式

cache_log /usr/local/squid/var/logs/cache_eth0.log

#设置squid自身的运行日志文件路径

cache_store_log none

#纪录哪些cache资料被移除,或存放多久,这里设置为none,表示关闭此功能

emulate_httpd_log on

#access_log日志格式分为普通格式和原始格式,普通格式就如同大部分HTTP服务器(如Apache)的日志格式一样,它包含的信息少于Squid的原始格式。然而,假如运行Squid在代理人模式下,你可能想要普通日志文件格式。普通格式或许也对你现有的日志文件分析工具有用。使用该指令来激活普通格式

 

pid_filename /usr/local/squid/var/logs/squid_eth0.pid

hosts_file /etc/hosts

#设置PID文件和hosts文件

 

refresh_pattern -i pay 5 20% 10 reload-into-imsoverride-lastmod

#refresh_pattern指令间接的控制磁盘缓存。它帮助squid决定,是否某个给定请求是cache命中,或作为cache丢失对待。

#-i 表示使它们大小写不敏感

#pay 表示目录

#5 表示该目录的响应驻留在cache里的时间没有超过5分钟,那么它不会过期

#20% 表示该目录的响应在squidcache缓存的时间大于(原始数据进入squid的缓存的时间-原始web数据所规定的Last-Modified时间)*20%,则过期

#10 表示该目录的响应驻留在cache里的时间高于10分钟,那么它必须被刷新

#reload-into-ims 表示squid在确认请求里,以no-cache指令传送一个请求

#override-lastmod 表示squid在检查LM-factor百分比(20%)之前先检查min

 

acl denyurl url_regex favicon\.ico

http_access deny denyurl

#解决访问favicon.ico文件

 

half_closed_clients off

#表示一旦从客户端返回“no more data to read”的信息,squid就立即关闭该连接

 

acl SSL_ports port 443

acl Safe_ports port 80          # http

acl Safe_ports port 21          # ftp

acl Safe_ports port 443         # https

acl Safe_ports port 70          # gopher

acl Safe_ports port 210         # wais

acl Safe_ports port 1025-65535  # unregistered ports

acl Safe_ports port 280         # http-mgmt

acl Safe_ports port 488         # gss-http

acl Safe_ports port 591         # filemaker

acl Safe_ports port 777         # multiling http

 

acl CONNECT method CONNECT

#定义CONNECTHTTP请求方法名字为CONNECT,除了443端口,其他都拒绝(这种方法比较危险,会被利用访问远程服务器,但SSl会用到)

 

acl manager proto cache_object

#定义proto类型的名字为manager

#protoURI访问(或传输)协议。如下是有效值:http,https (same as HTTP/TLS), ftp, gopher, urn, whois, cache_object。也就是说,这些是被squid支持的URL机制名字

#cache_object用于访问squid的缓存管理接口


 

#ACL元素有:

 # src : 源地址(即客户机IP地址)

# dst : 目标地址(即服务器IP地址)

# srcdomain : 源名称(即客户机名称)

# dstdomain : 目标名称(即服务器名称)

       # port : 服务端口

# time : 一天中的时刻和一周内的一天

# url_regex :URL 规则表达式匹配

# urlpath_regex:URL-path 规则表达式匹配,略去协议和主机名

# proxy_auth : 通过外部程序进行用户验证

 

 

http_access deny limip1 URL

http_access deny limip2 URL

http_access allow 199

http_access allow 220

http_access allow 206

http_access allow 212

http_access allow 223

http_access allow 224

http_access allow 225

http_access allow 226

http_access allow 233

http_access allow 237

http_access allow 241

http_access allow 243

http_access allow 251

http_access allow 252

http_access allow 254

http_access allow 246

http_access allow 247

http_access allow 227

http_access allow 228

http_access allow 229

http_access allow 230

http_access allow 218

http_access allow 213

http_access allow 26

http_access allow 27

http_access allow 219

http_access allow 249

http_access allow manager localhost

http_access allow manager myip1

http_access allow manager myip2

http_access allow manager myip3

http_access allow manager myip4

http_access deny manager

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_access deny all

icp_access deny all

 

#访问控制规则的语法如下:

#access_list allow|deny [!]ACLname ...

#访问控制规则:

       # http_access:这是最重要的访问控制列表。它决定哪些客户HTTP请求被允许,和哪些被拒绝。假如http_access配置错误,squid cache容易遭受攻击或被不当利用。

       # icp_access: 假如你的squid被配置来服务ICP响应,那么该使用icp_access列表

       # no_cache : 指示squid,不必存储某些响应在磁盘或内存里

      

cache_mgr tech@gyyx.cn

#设定管理者的E-mail,方便他人联系

cache_effective_user nobody

cache_effective_group nobody

#配置squid,在执行完需要特别权限的任务后,变成哪个用户和组

 

visible_hostname webcache

#有时由于DNS的问题,找不到主机名会出错,就得加上此设定

logfile_rotate 10

#保留几份log

forwarded_for on

#开启forwarded-for转发,不然截取不到forwarded信息头,但暴露客户的真实IP

 

coredump_dir none

#squid挂掉后,临终遗言要放到哪里(不易看懂)

snmp_port 3401

acl snmppublic snmp_community gyyxpub

snmp_access allow snmppublic all

#开启snmp功能

1. 对配置文件查错
   
使用如下命令:
   
/usr/local/squid/sbin/squid -k parse

    假如你看不到输出,配置文件有效,你能继续后面的步骤。然而,如果配置文件包含错误,squid会提示

2. 设置目录权限
   ·chown -R nobody.nobody /usr/local/squid/var/cache_eth0/,设置cache目录权限
   ·chown -R nobody.nobody /usr/local/squid/var/logs/,更改目录权限
   ·mkdir /usr/local/squid/logs,创建目录
   ·chown -R nobody.nobody /usr/local/squid/logs,设置权限

3. 初始化cache目录
  
在初次运行squid之前,或者无论何时你增加了新的cache_dir,你必须初始化cache目录,使用如下命令:
    
/usr/local/squid/sbin/squid -z

4. 在终端窗口里测试squid
  
一旦你已经初始化cache目录,就可以在终端窗口里运行squid,将日志记录到标准错误。这样,你能轻易的定位任何错误或问题,并且确认squid是否成功启动。使用-N选项来保持squid在前台运行,-d1选项在标准错误里显示1级别的调试信息,命令如下:
   /usr/local/squid/sbin/squid -N -d1

假如你看到错误消息,你该首先修正它。请检查输出信息的开始几行以发现警告信息。最普通的错误是文件/目录许可问题,和配置文件语法错误。假如你看到一条不引起注意的错误消息,请见16章中关于squid故障处理的建议和信息。

一旦你见到"Ready to serve requests"消息,就可用一些HTTP请求来测试squid。配置你的浏览器使用squid作为代理,然后打开某个web页面。假如squid工作正常,页面被迅速载入,就象没使用squid一样。另外,你可以使用squidclient程序,它随squid发布:
  /usr/local/squid/bin/squidclient-h 本机地址 -p 80 http://www.baidu.com | more
   假如它正常工作,squid的主页html文件会在你的终端窗口里滚动。一旦确认squid工作正常,你能中断squid进程(例如使用ctrl-c)并且在后台运行squid

注意:为测试成功,添加了如下acl:
        acl baidu url_regex www.baidu.com

http_accessallow baidu

 

5.启动、停止squid命令:

作为服务启动Squid,使用命令:
/usr/local/squid/sbin/squid-Ds -f squid.conf
 -D
      正常情况下,squid直到验证它的DNS可用才能启动,该选项阻止了这样的检测

-s:
       激活将日志记录到syslog进程

-f:

指定一个配置文件


       最安全的停止squid的方法是使用squid -kshutdown命令:
    /usr/local/squid/sbin/squid -k shutdown
       该命令发送TERM信号到运行中的squid进程。在接受到TERM信号后,squid关   闭    进来的套接字以拒收新请求。然后它等待一段时间,用以完成外出请求。默认时       间    是30秒,你可以在shutdown_lifetime指令里更改它。
       假如,因为某些理由,squid.pid文件丢失或不可读,squid -k命令会失败。在此情  形    下,你可以用ps找到squid的进程ID,然后手工杀死squid
    假如,你使用squid-k interrupt命令,squid立即关闭,不用等待完成活动请求。这 与    在kill里发送INT信号相同。

6. 脚本启动squid
使用脚本启动,在/etc/rc.local中可以看到,有两个脚本,下面说下这两个脚本的用途,其中一个:


默认系统就会加载/dev/shm ,它就是所谓的tmpfs,它可以使用您的 RAM,但它也可以使用您的交换分区来存储。而且传统的虚拟磁盘是个块设备,并需要一个 mkfs 之类的命令才能真正地使用它,tmpfs 是一个文件系统,而不是块设备;您只是安装它,它就可以使用了。 

tmpfs有以下优势: 
1.
动态文件系统的大小,也就是说这个档案系统的大小是可以随时调整的,像是再追加一个指令如:mount -o remount,size=2G /dev/shm
2.tmpfs
的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中,读写几乎可以是瞬间的。 
3.tmpfs
数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。


在上面的脚本之后,运行如下这个脚本:

#!/bin/sh

 

#######################################################

# Subject: start squid

# File Name: squid_start.sh

# Created Date: 09-04-16

# Updated Date: 09-04-17

# Author:

# Abstract: stop squid first and start

#######################################################

 

ulimit -Hn 16384

#指定一个进程可以拥有的文件描述符的数量的极限,H表示硬限制

echo 16384 > /proc/sys/fs/file-max

#文件系统可以拥有的文件描述符的数量的极限

#简单的说, max-file表示系统级别的能够打开的文件句柄的数量,ulimit -n控制进程级别能够打开的文件句柄的数量.

echo "30" >/proc/sys/net/ipv4/tcp_fin_timeout

#决定保持在FIN-WAIT-2状态的时间(FIN-WAIT-2:从远程TCP等待连接中断请求)

echo "1200" >/proc/sys/net/ipv4/tcp_keepalive_time

#keepaliveTCP保鲜定时器。当网络两端建立了TCP连接之后,闲置idle(双方没有任何数据流发送往来)了tcp_keepalive_time后,

#服务器内核就会尝试向客户端发送侦测包,来判断TCP连接状况(有可能客户端崩溃、强制关闭了应用、主机不可达等等)

echo "1" > /proc/sys/net/ipv4/tcp_syncookies

#设置为1,开启此功能,有效地防止synflood攻击

echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse

#可以使用TIME_WAIT tcp连接用于建立新的tcp连接

echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle

#开启快速回收TIME_WAIT tcp连接的功能

echo "10000 60000" >/proc/sys/net/ipv4/ip_local_port_range

#用于向外连接的端口范围

echo "8192" > /proc/sys/net/ipv4/tcp_max_syn_backlog

#对于那些依然还未获得客户端确认的连接请求,需要保存在队列中的最大数目

#echo "5000" >/proc/sys/net/ipv4/tcp_max_tw_buckets

echo "20000" >/proc/sys/net/ipv4/tcp_max_tw_buckets

#系统同时处理TIME_WAIT sockets数目。如果一旦TIME_WAIT tcp连接数超过了这个数目,系统会强制清除并且显示警告消息。设立该限制,主要是防止那些简单的DoS攻击,加大该值有可能消耗更多的内存资源

/usr/local/squid/sbin/squid -k shutdown -f/usr/local/squid/sh/squid_eth0.conf

#squid停止命令

#/usr/local/squid/sbin/squid -k shutdown -f/usr/local/squid/sh/squid_eth1.conf

while [ `pgrep squid|wc -l` -eq 0 ]

do

        sleep 1

done

sleep 1

/usr/local/squid/sbin/squid -Ds -f/usr/local/squid/sh/squid_eth0.conf

#启动squid


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值