文:铁乐与猫
环境
centos 6.5 x64
安装
最简单的一种就是yum安装。
yum install squid
版本
rpm -qa | grep squid
squid-3.1.23-16.el6_8.6.x86_64
此外就是编译安装
配置
修改squid的配置文件 /etc/squid/squid.conf
主要就是配置一下端口,缓存,日志和访问规则。
http_port 8904 #默认3128,必然得改
cache_mem 64MB #内存中的缓存大小
maximum_object_size 4MB
#最大被缓存文件大小,配合cache_dir使用,只作用于缓存到磁盘的文件。
cache_dir ufs /var/spool/squid 100 16 256
#缓存目录,默认只是在内存中进行缓存。
#这里指定缓存大小为100M,第一层子目录为16个,第二层为256。
access_log /var/log/squid/access.log #访问日志
visible_hostname squid.server
#自定义的代理服务器的主机信息,会出现在错误警告页里。
然后就是一系列的自定义的acl控制列表,就不详列了。
http_port 3128 //设置监听的IP与端口号
cache_mem 64 MB
//额外提供给squid使用的内存,squid的内存总占用为 X * 10+15+“cache_mem”,其中X为squid的cache占用的容量(以GB为单位),
//比如下面的cache大小是100M,即0.1GB,则内存总占用为0.1*10+15+64=80M,推荐大小为物理内存的1/3-1/2或更多。
maximum_object_size 4 MB
//设置squid磁盘缓存最大文件,超过4M的文件不保存到硬盘
minimum_object_size 0 KB
//设置squid磁盘缓存最小文件
maximum_object_size_in_memory 4096 KB
//设置squid内存缓存最大文件,超过4M的文件不保存到内存
cache_dir ufs /var/spool/squid 100 16 256
//定义squid的cache存放路径 、cache目录容量(单位M)、一级缓存目录数量、二级缓存目录数量
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh //log文件日志格式
access_log /var/log/squid/access.log combined //log文件存放路径和日志格式
cache_log /var/log/squid/cache.log //设置缓存日志
logfile_rotate 60 //log轮循 60天
cache_swap_high 95 //cache目录使用量大于95%时,开始清理旧的cache
cache_swap_low 90 //cache目录清理到90%时停止。
acl localnet src 192.168.1.0/24 //定义本地网段
http_access allow localnet //允许本地网段使用
http_access deny all //拒绝所有
visible_hostname squid.dev //主机名
cache_mgr xx@qq.com //管理员邮箱
初始化
在第一次启动之前或者修改了cache路径之后,需要重新初始化cache目录。
squid -z
启动
service squid start
添加用户认证
为了防止squid代理被爬虫扫到并且被用于不法用途,(比如发垃圾邮件),非常有必要为squid添加用户认证。
通过ncsa认证模块来为squid添加认证(还有其他模块,但这个模块是最常用到和大概是最简易的)
配置访问用户的账户信息。最后一个参数是用户名。这一步其实像是替linux建账户一样。
只是需要用到的htpasswd(注意,你没看错,就是htpasswd,而不叫httpasswd,逼死强迫症。)
这个工具,需要安装Apache才有(yum install httpd)。
又或者安装apache独立的工具包apache2-utils更好,
但centos上还真不好找,后来发现在centos上其实就是yum install httpd-tools。就是那些独立工具包了。
安装后默认位置在/usr/bin/htpasswd
htpasswd -c /etc/squid/passwd tiele
敲完这条命令后,会让你输入密码,然后就顺利在passwd文件里生成你的账号密码信息了。
但是后来发现太坑爹了,原来这个命令只能创建一个用户,你第二次输会将前文覆盖!!!
重要:之后添加用户,要把上面的命令去掉-c参数再运行。
-c应该就是指定配置或创建配置文件的意思,真是掉以轻心……犯了错……
所以建议正规做法还是先touch或vim创建一个passwd文件……然后直接是不加-c参数去运行。
而且我在输完十几条这样的命令后才去检查的也是失策,应该两到三个后就该cat看一下文件内容有没有才对!
另附删除用户命令
htpasswd -b -D /etc/squid/passwd usrname passwd
当然我感觉直接进/etc/squid/passwd这个文件里直接删除会更省事
然后在配置文件里加上以下命令:
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
#注意,basic_ncsa_auth是在3.3版本,在3.1.23这个版本是直接ncsa_auth
#该选项指出了认证方式(basic)、需要的程序(ncsa_auth)和 对应的密码文件(password)
auth_param basic children 8 #认证程序同时跑的个数
auth_param basic realm tiele‘s squid server #客户端在使用代理时,输入密码时弹出来的提示框中的描述文字。
auth_param basic credentialsttl 8 hours #认证的持续时间
acl normal proxy_auth REQUIRED
#对normal这个链使用外部程序进行认证。注意,这个名称不能和其他一样。
http_access allow normal #允许normal组中的成员访问
http_access deny all #最后总是会有一条拒绝所有访问的配置。
之后重启squid
service squid restart
附:
访问控制
使用访问控制特性,可以控制在访问时根据特定的时间间隔进行缓存、访问特定站点或一组站点等等。
Squid 访问控制有两个要素:ACL 元素和访问列表。访问列表可以允许或拒绝某些用户对此服务的访问。
下面列出一些重要的 ACL 元素类型
* src : 源地址 (即客户机IP地址)
* dst : 目标地址 (即服务器IP地址)
* srcdomain : 源名称 (即客户机名称、域名)
* dstdomain : 目标名称 (即服务器名称、域名)
* time : 一天中的时刻和一周内的一天
* url_regex : URL 规则表达式匹配
* urlpath_regex: URL-path 规则表达式匹配,略去协议和主机名
* proxy_auth : 通过外部程序进行用户验证
* maxconn : 单一 IP 的最大连接数
为了使用控制功能,必须先设置 ACL 规则并应用。
ACL 声明的格式如下:
acl acl_element_name type_of_acl_element values_to_acl
注:
1. acl_element_name 可以是任一个在 ACL 中定义的名称。
2. 任何两个 ACL 元素不能用相同的名字。
3. 每个 ACL 由列表值组成。
当进行匹配检测的时候,多个值由逻辑或运算连接;
换言之,即任一 ACL元素的值被匹配,则这个 ACL 元素即被匹配。
4. 并不是所有的 ACL 元素都能使用访问列表中的全部类型。
5. 不同的 ACL 元素写在不同行中,Squid 将把它们组合在一个列表中。
我们可以使用许多不同的访问条目。下面列出我们将要用到的几个:
* http_access: 允许 HTTP 访问。这个是主要的访问控制条目。
* no_cache: 定义对缓存请求的响应。
访问列表的规则由一些类似 ‘allow‘ 或 ‘deny‘ 的关键字构成,用以允许或拒绝向特定或一组 ACL 元素提供服务。
注:
1. 这些规则按照它们的排列顺序进行匹配检测,一旦检测到匹配的规则,匹配检测就立即结束。
2. 一个访问列表可以由多条规则组成。
3. 如果没有任何规则与访问请求匹配,默认动作将与列表中最后一条规则对应。
4. 一个访问条目中的所有元素将用逻辑与运算连接:
http_access Action 声明1 AND 声明2 AND 声明 OR.
http_access Action 声明3
多个 http_access 声明间用或运算连接,但每个访问条目的元素间用与运算连接。
5. 请记住列表中的规则总是遵循由上而下的顺序。
下一篇和squid有关的博文再介绍客户端上使用浏览器设置PAC文件代理配合走squid代理浏览重要站点。
适合设置权限让基本只有公司内部的成员才有权访问项目网站的后台管理。
end