squid 代理

简介:

个人的学习笔记,只供参考。

公司因需求,设置一代理服务器,供10.231.18.136-137两台电脑代理上网,并要进行用户密码验证,用户名:user1,user2。

内网地址:eth0:10.231.19.252 255.255.252.0
外网地址:eth1:192.168.1.9 255.255.255.0


1.安装squid
yum install squid
或:[root@linux36 Server]# rpm -ivh squid-2.6.STABLE21-3.el5.i386.rpm 
 
2.设置10G空间为硬盘缓存,设置192M。
[root@linux36 ~]# vi /etc/squid/squid.conf

auth_param basic program /usr/lib/squid/ncsa_auth  /etc/squid/passwd (密码验证文件的路径,注意ncsa_auth程序的位置)
auth_param basic children 5 (指定认证程序的进程数)
auth_param basic credentialsttl 2 hours (基本的认证有效时间)
auth_param basic realm Your password? (设置输入密码界面的提示字符)

http_port 10.231.19.252:8080    (设置代理的端口)
cache_mem 192 MB    (设置内存空间)
cache_dir ufs /var/spool/squid 10240 16 256    (utf,代理存储格式;设置硬盘缓存位置,大小,一二级缓存;默认单位MB)
access_log /var/log/squid/access.log squid    (设置访问日志access log)
cache_log /var/log/squid/cache.log    (设置缓存日志,This is where general information about your cache's behavior goes.)
cache_store_log /var/log/squid/store.log    (设置网页缓存日志,Logs the activities of the storage manager.  Shows which objects are ejected from the cache, and which objects are saved and for how long. )
dns_nameservers 192.168.1.1 (设置DNS,Use this if you want to specify a list of DNS name servers (IP addresses) to use instead of those given in your /etc/resolv.conf file.)

acl all src 0.0.0.0/0.0.0.0    (设置控制访问列表)
acl mynet src 10.231.18.136/255.255.252.255 10.231.18.137/255.255.252.255 (自定义mynet控制访问列表,注意具体IP的netmask的写法。)
acl users  proxy_auth REQUIRED (普通用户需要通过认证才能访问Internet)

http_access allow mynet users(允许mynet访问代理)
http_access deny all

cache_effective_user squid    (设置squid进程所属用户)
cache_effective_group squid    (设置squid进程所属组别)
visible_hostname ProxyServer    (设置错误提示)
cache_mgr  root        (当代理运行失败时,设置通知的邮箱地址。)    



3.建立squid用户(借助apache的htpasswd命令进行增加用户)
htpasswd –c /etc/squid/passwd  user1 (-c建立密码文件,输入命令时提示输入密码,如直接在命令行写上密码,请man htpasswd.)
htpasswd /etc/squid/passwd user2

4.检查语法
[root@linux36 ~]# squid -k parse


5.[root@linux36 squid]# squid -zX    (初始化硬盘缓存目录)
-z     Create swap directories
-X     Force full debugging.


6.[root@linux36 squid]# service squid start

注: squid -k reconfigure 可以重新赢取配置文件。

7.检查服务状态
[root@linux36 squid]# service squid status
[root@linux36 squid]# squid -D
[root@linux36 squid]# netstat -tunlp|grep 8080

8.在客户端的浏览品设置代理
 

 

常用的存取控制类型

 

SquidProxy的存取控制
 
基本存取控制
在SQUID里,Access Control List存取列表简称ACL用来在SQUID.CONF里设置客户端到代理服务器的权限控制。利用ACL可以将不同性质的客户端分类,以方便管理,也能对某个已经定义的ACL群组,限制其与代理服务器的联机。为什么可以轻易限制所定义的ACL群组呢?因为SQUID代理服务器的运行,需要通过HTTP,ICP等通讯协议,所以可以通过,
HTTP_ACESS ALLOW | DENY ACLNAME
ICP_ACCESS ALLOW | DENY ACLNAME等方式,允许或者拒绝HTTP,ICP达到限制控制的目的
 
在squid里对客户端的联机做存取控制分为两个阶段进行,第一阶段是定义ACL,第二阶段是设置ACL存取权限,第一阶段定义ACL
在proxy上通过ACL做连接控制
acl member src 192.168.1.10/24
http_access allow member
 
用法:
ACL的定义有以下两种:
1 acl acl名称 ACL类型 字符串1 字符串2...(ACLlist)
2 acl acl名称 ACL类型 “文件的路径”
说明:
acl命令 ,用来说明要做“存取控制列表”
acl名称,读者可以自定义一个acl名称,如:reject
ACL类型,即做限制的类型。ACL的类型有src,dst,srcdomain,dstdomain,url_pattern,urlpath_pattern,url_regex,urlpath_regex,time,port,proto,method,browser,user等相当多的限制类型
在squid里面做客户端的存取控制的定义的时候,最重要的是选择ACL类型,ACL类型会影响过滤存取的速度,一般建议使用src,dst等以IP地址为主的ACL类型,在存取规则上会快很多。
 
ACLIST:ACL的List大致可以分为字符串和文件两大类,字符串的内容可以是IP地址,FQDN,URL地址,含正则表达式的URL,文件路径(用双引号引起来),在所指定的文件里,再一行一行的写入ACLLIST
以下针对几种常用的ACL类型,说明如何完成控制客户端对SQUID PROXY的联机限制。
 
1.src限制
这种限制诶行的设置格式如下:
ACL ACL名称 SRC IP-NETWORK/NETMASK IP-NETWORK/NETMASK
用法:
使用src ACL类型的时候,后面必须是受限制的客户端的IP地址以及其掩码,也可以使用CIDR的格式,请注意SRC 是 source(来源)的意思,这种ACL是针对来源客户端的IP地址进行存取管理,使用src ACL类型的时候不能在后面输入FQDN
 
acl member src 192.168.1.0/24
主要是用来设定可以使用proxy Server的来源范围
 
其设置方式如下
acl all src 0.0.0.0/0.0.0.0;ACL名称为ALL ,并且限制来源的范围是0.0.0.0/0.0.0.0(所有)
 
acl local src 127.0.0.1/32 192.168.1.0/255.255.255.0
;这种写法适合单主机ACL名称是LOCAL来源范围是127.0.0.1/32 192.168.1.0/255.255.255.0
 
acl reject src 210.110.0.0/16 163.21.136.100/32
ACL名称是reject,reject的来源是210.110.0.0/16网域和一个163.21.136.100/32单一主机
 
acl members src 163.21.0.0/16 203.100.77.0/24
ACL的名称是MEMBER member的来源是163.21.0.0/16 网域 203.100.77.0/24网域
 
SRC限制类型,在squid存取管理里是运行速度最快的,因此如果需要对下层的客户或者是squid代理服务器做联机管理,建议使用src限制类型定义管制的来源对象,这种方式时如果有相当多的来源对象,需不断将“IP地址/掩码”加入在src语句后面,不要自动换行,但是加在src语句后面的长度会收到字符串总长度不能超过255字符的限制,因此如果使用src限制的来源对象众多的时候,请改用第二中方式即 “acl acl名称 ACL类型 “文件的路径””来做来源限制,如下所示:
acl members src "/etc/squid/myfriends"
 
接着在/etc/squid/myfriends文件里,将源IP地址/掩码,一行,一行写入,如
163.21.0.0/26
163.21.0.1/32
.................
 
在此强烈建议使用这种方法,这样可以更加快速的定义受管制的来源对象
 
2http_access命令
定义完ACL之后,暂时还无法对联机的客户端做存取控制,必须进入第二个阶段,用命令http_access设置ACL的存取权限,其语法如下:
用法:
http_access allow|deny acl名称
 
说明:
1.http_access申明设置ACL存取权限的命令
2.allow|deny 控制权限的方式。allow是允许,deny是拒绝
3.acl名称:用acl命令定义的acl名称,如前例的reject,member
以前设置的acl,all,local,reject,member为例,说明怎样设置acl的存取权限
 
http_access allow all
上式表示所有的网域都可以联机到本机的代理服务器,如果要限定特定的联机客户端,就要取消以上定义式,而改用
 
#http_access allow all
http_access allow mebmers
 
如果要定义ACL reject所定义的来源范围,拒绝使用本代理服务器,则可以定义如下:
http_access deny reject
 
在定义ACL存取权限的时候,allow和deny可以一起混用,但是必须注意存取的权限对象的先后顺序,在排列存取对象的先后顺序时,应当吧权限限制最低的项目放在前面,而权限限制最高的项目放在后面,如下列所示:
 
http_access dney rejector
http_access allow members
http_access allow local
http_access deny all
 
注意,由于members与local的来源范围有所重复,因此,需将范围交大的ACL放在范围较小的ACL的前面,习惯上做ACL存取权限定义的时候,会在定义权限限制的最末行加上“http_access deny all”,以明确的拒绝其他客户的联机要求。
 
在用http_access allow(deny)对acl对象做如上例的members做设置的时候,可以使用“!”符号做反向存取控制,如:members的定义是acl members src 163.21.110.0/24,如果设置如下:
http_access allow !members
 
表示客户端的来源IP只要不是163.21.110.0/24这个IP网域的用户,都可以使用代理。
 
当设置好存取控制之后,就先存储,并退出/etc/squid/squid.conf文件,然后让squid重新获得配置文件 squid -k reconfigure
 
补充:
读者可能已经注意到上面的使用http_access allow |deny设置存取权限的时候,acl名称都只有一个这是因为在,如果在这个命令后面接多个acl名称的话,其作用是对member1和member2的交集做存取控制,也就是说,如果这两个对象如果没有交集(一般情况)那么这条存取控制就实效,导致客户端无法使用代理服务器。如果acl名称定义的是time类型的存取控制类型,则可以与src,dst,srcdomain,dstdomain,url_pattern,urlpath_pattern,url_regex,urlpath_regex等存取控制类型搭配使用
 
3dst限制类型
 
用法
acl acl名称 dst ip-network/netmask ip-network/netmask
说明:
dst,就是distance,目的地。使用这种限制类型,可以用来对客户端要存取的“目的地”做权限控制,dst限制类型的对象是目的地的ip地址/掩码对
 
范例:
acl sex dst “/etc/squid/sex.list"
acl violence dst 210.96.0.0/16 210.128.1.0/24
http_access deny sex
http_access deny violence
 
上述设置可以用来防止不健康的网站的联机,不过一般而言,搜集不健康的网络的IP比较麻烦,所以通常防止不健康网站联机的时候,使用dstdomain限制类型较为方便
 
4srcdomain限制类型
用法:
acl acl名称 srcdomain 来源网址1 来源网址2.......
说明:
src限制类型适用于来源范围是IP地址,而srcdomain限制类型则适用于来源范围是域名或FQDN(完整域名)。
范例:
acl friends srcdomain tp.edu.cn tpc.edu.cn tmtc.edu.cn
acl 客户s srcdomain "/etc/squid/客户_list"
http_access allow friends
http_access allow clients
 
上述定义表示,允许来自tp.edu.cn tpc.edu.cn tmtc.edu.cn三个网域,以及客户_list文件里所列的域名的主机,使用本机的代理服务器。srcdomain之后通常接“域名”,如:tp.edu.cn。当然,也可以使用单一主机的FQDN,如:proxy.dfes.bj.edu.cn
注意:
用srcdomain限制类型,由于代理服务器要用DNSSERVER做域名解析在做来源范围过滤时,速度会很慢。
 
5.dstdomain限制类型
用法:
acl acl名称 dstdomain 目的网域1 目的网域2.......
说明:
dst限制类型适用于目的范围地址是IP地址,而dstdomain限制类型,则适用于目的范围是域名或FQDN(完整域名)
 
范例:
acl sex dstdomain "etc/squid/sex.list"
acl violence dstdomain "etc/squid/violence.list"
 
http_access deny sex;拒绝联机到色情网站
http_access deny violence;拒绝联机到暴力网站
 
/etc/squid/sex.list文件内容
girl.com
 
dstdomain限制类型由于可对客户端所要缓冲的目的域做联机控制,因此非常适用于对不健康网站进行保护。以上例来说,建议读者将不见看的网域分为多个ACL,例如SEX,VIOLENCE等,再将不健康的网站一一列在指定的文件里,如sex.list,violence.list如此一来,就可以很轻松的做好限制访问不健康的网站的工作。
 
6.url_regex限制类型
用法:
acl acl名称 url_regex URL1 URL2
说明:
dstdomain限制类型对限制不健康网站的访问很有用,但却把整个网站都设置为拒绝联机,例如很多的著名的商业网站,在提供各类服务的同时也包含色情,暴力等网站的查询,当进行不见看的网站限制访问时,不能因为这个因素将其纳入黑名单,必须正对URL地址做控制才对,但是通过dstdomain限制无法做到的。此时,可改用URL_REGEX限制类型
 
范例:
acl sex1 url_regex^http
//dir.kimo.com/recreation/sex/$
acl sex2 url_regex^http://dir.kimo.com/recreation/sex$
acl violence url_regex "etc/squid/violence.list"
 
http_access deny sex1;拒绝联机到特定的URL地址
.......
 
URL_REGEX限制类型后面所接的是用正则表达式regular express表示的匹配对象,最简单的形似是"^URL$",也就是说在URL地址的前面加上^,表示匹配的开头,在URL的地址后面加上$标识匹配的结尾,请注意,我们在范例中给出的第一和第二个例子是不同的,请注意区分,如果您熟悉正则表达式,那么可以自己定制相应的URL
 
正则表达式的相关基础,详细在网络上有很多的介绍,在这里就不再累述了。
 
7.urlpath_regex限制类型
用法
acl acl名称 urlpath_regex URL1,URL2
 
说明:URL_REGEX限制类型主要适用于匹配网站的URL 如:“ http://dir.kimol.com.cn/$" 如果针对某个网页,文件,图片的URL地址做存取控制,就得改用urlpath_regex限制类型。urlpath_regex限制类型主要用来对"http://bj.edu/works/js/js001.gif"这种完整的网页,文件,图形的URL地址来做存取控制。
范例:
acl dst urlpath_regex
^http://www.bj.edu/works/js001.gif$
 
http_access deny dst1 ;拒绝联机到特定URL地址
http_access deny dst2 ;拒绝联机到特定URL地址
 
urlpath_regex限制类型其后所接的也是正则表达式描述的URL地址。最简单的形式也是:”^URL$",也就是说在URL地址前面加上“^”,标识样式匹配的开头,在URL地址的后面加上"$",表示样式匹配的结果,如“
^http://www.bj.edu/works/js001.gif$”
 
8.time限制类型
用法:
acl acl名称 time [day-abbrevs] [h1:m1-h2:m2]
说明:
squid的ACL的限制类型,除了前面几种常用的类型外,还有一种相当特殊的ACL限制类型,TIME限制类型:time限制类型,time限制类型不能单独使用,必须配合其他限制类型结合使用,使用TIME限制类型的时候,请在 [day-abbrevs]栏填入所控制的“天”(星期几的英文所写),如:SM(表示SUNDAY,MONDAY)在[h1:m1-h2:m2]填入控制的时间,用24小时制计算,如:09:00-22:30。以下列出time限制类型用法:
 
#acl aclname time [day-abbrevs] [h1:m1-h2:m2]
#day-abbreves:
#S-Sunday
#M-Monday
#T-Tuesday
#W-Wednesday
#H-Thursday
#F-Friday
#A-Saturday
#h1:m1必须小于h2:m2
 
范例一:
acl members src "/etc/squid/myfriends"
acl Do_work time MTWHF 07:00-20:00
 
http_access allow Do_work members
http_access deny Do_work
 
上例是先用SRC限制类型指定来源范围的MEMBERS ACL:第二行用TIME限制类型定义限制联机的时间是:星期一到星期5,每天从早上7点到晚上8点,指定给Do_work ACL:第三行是重点,将Do_work,members放在http_access allow后,表示允许members联机,且限制在Do_works指定的时间里
 
范例二
 
acl members src "/etc/squid/myfriends"
acl Do_work time MTWHF 07:00-20:00
acl all src 0.0.0.0/0
acl Don’t_work time s 01:00-02:00
 
http_access deny Dont_work all
http_access allow Do_work members
http_access deny Do_work
 
这个范例,增加了一个设定,是设置每个星期天凌晨1点到2点间不允许所有的客户端联机,通常这段时间用来做系统整理LOG文件或者重新启动SQUID_DEAMON

 


本文转自 pk2008 51CTO博客,原文链接:http://blog.51cto.com/837244/891597


相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
Web App开发 缓存 监控
|
Web App开发 缓存 网络协议
|
Web App开发 缓存 监控