打印

代理服务器squid

代理服务器squid

代理服务器squid


一.squid介绍
Squid是一个高性能的代理缓冲服务器(类似与Windows平台下的WinGate,sygate,MS Proxy Server软件)。Squid是一个应用级代理(或者说防火墙),在保证客户端主机和服务器主机网络连通后,需要客户端软件做相应的设置后才能使用(要给IE设置代理服务器地址、端口)。
红旗服务器4.0默认已经安装了squid,可以直接使用。也可以从http://www.squid-cache.org下载最新的版本用源代码方式安装。
二.基本功能实验步骤
1. Squid的主配置文件是“/etc/squid/squid.conf”。默认安装的Squid配置文件是一个两千多行的文本,实事上需要改动的很少。用编辑器打开该配置文件,找到http_access设置部分,把“http_access deny all”
一行改成“http_access allow all”
用如下命令启动Squid:
#/etc/rc.d/init.d/squid start(或者#service squid start)
现在你的Squid代理服务器已经可以使用了。到客户端设置上网软件的代理选项,以Internet Explorer 6.0为例,在Internet属性设置里设置“连接”属性,点“局域网设置”按钮:在弹出的对话框中选中“为LAN使用代理服务器”,在地址栏填入代理服务器地址,这里假设:192.168.0.1,端口为squid默认的3128。
此时你再用Internet Explorer上网便是使用squid代理。你可以察看squid的log文件来观察到客户端主机通过squid的访问情况:
# tail -f /var/log/squid/access.log
2.设置squid的访问控制
前面的配置是不加限制的允许内部所有用户使用该代理上Internet,显然这不是一个很好的访问策略。我们说过,代理方式对用户权限的控制有着非常丰富的支持。下面就看看squid如何实现多样化的权限控制的。
让我们先了解一下squid.conf的几个配置选项和访问控制特性:
Squid 的定制是通过设置它的配置文件 squid.conf 来实现的,squid.conf 文件通常在 /etc/squid 目录下。这个配置文件内容很多,但它的每个选项都有详尽的说明。下面是几个常用的配置参数:
(1)http_port
首先来更改一下 http_port,这个选项指定了 Squid 监听客户请求的端口,默认值是 3128。要使用代理功能,建议这个端口值和运行 Squid 的机器的 IP 地址一起使用,可以修改成下面这样:
http_port 192.168.0.1:3128
上述声明表示 Squid 绑定在 IP 地址 192.168.0.1 上,端口为 3128。端口可以设置为任意值,但要确认没有其他程序会使用同样的端口。/etc/services文件列出了常用端口,如果你想为squid设置其它的端口,可以参考这个文件的内容,防止重复设置。
(2)visible_hostname 192.168.0.1
设置运行squid的主机的名字,可以写上该机器的IP地址,默认情况下squid要求启动时网络是正常工作的。
(3)cache_mgr iitcc@nyist.net
管理员的邮件地址。在访问发生错误时,visible_hostname和cache_mgr这两个选项的值显示在错误提示页面内的相关位置。
(4)cache_mem 16 MB
定义缓存内存,一般定义为物理内存大小的1/3。默认设置为8MB。
三.访问控制
控制用户的访问权限等功能是使用squid的访问控制特性来实现的。Squid 访问控制有两个要素:ACL和访问列表。访问列表可以允许或拒绝某些用户对特定服务的访问。
为了使用控制功能,必须先设置 ACL。ACL 声明的格式如下:
acl acl_element_name type_of_acl_element values_to_acl
下面列出一些重要的 ACL类型(type_of_acl_element)
l src : 源地址(即客户机IP地址)
l dst : 目标地址(即服务器IP地址)
l srcdomain : 源名称 (即客户机名称)
l dstdomain : 目标名称 (即服务器名称)
l time : 一天中的时刻和一周内的一天
l url_regex : URL 规则表达式匹配
l urlpath_regex: URL-path 规则表达式匹配,略去协议和主机名
l proxy_auth : 通过外部程序进行用户验证
l maxconn : 单一 IP 的最大连接数
注:
1. acl_element_name 可以是任一个在 ACL 中定义的名称。
2. 任何两个 ACL 元素不能用相同的名字。
3. 每个 ACL 由列表值组成。当进行匹配检测的时候,多个值由逻辑或运算连接;换言之,即任一 ACL的值被匹配,则这个 ACL即被匹配。
4. 并不是所有的 ACL都能使用访问列表中的全部类型。
5. 不同的 ACL写在不同行中,Squid 将把它们组合在一个列表中。
我们可以使用许多不同的访问列表。我们常用的是http_access: 允许 HTTP 访问,这个是主要的访问控制列表。
访问列表的规则由一些类似 'allow' 或 'deny' 的关键字构成,用以允许或拒绝向特定或一组 ACL 元素提供服务。
注:
1. 这些规则按照它们的排列顺序进行匹配检测,一旦检测到匹配的规则,匹配检测就立即结束。
2. 一个访问列表可以又多条规则组成。
3. 如果没有任何规则与访问请求匹配,默认动作将与列表中最后一条规则对应。
4. 一个访问条目中的所有元素将用逻辑与运算连接:
http_access Action 声明1 AND 声明2 AND 声明 OR.
http_access Action 声明3
多个 http_access 声明间用或运算连接,但每个访问条目的元素间用与运算连接。
5. 请记住列表中的规则总是遵循由上而下的顺序。
我们具体来看看如何运用acl和http_access。首先把squid.conf的配置改回原状,即修改http_access allow all为http_access deny all。下面给出几种常用访问控制:
根据IP鉴权
只有地址为192.168.100.10和192.168.100.100的终端可以使用代理
在squid.conf的ACCESS CONTROL配置部分添加
acl authorizedip src 192.168.100.10
acl authorizedip src 192.168.100.100
然后到http_access部分
在http_access deny all这一行前面添加
http_access allow authorizedip
如果需要设置的IP地址非常多,又不连续,是不是要写上一大堆的acl xxx xxx x.x.x.x?有一个简单的方法,把这些IP地址写在一个文件里,比如/etc/squid/authorizedip.txt,每行一个。然后在squid.conf里这样写
acl authorizedip src "/etc/squid/authorizedip.txt"
根据时间控制
关于时间段的设置,可以参见squid.conf中的说明,具体是S - Sunday, M - Monday, T - Tuesday, W - Wednesday, H - Thursday, F - Friday A - Saturday,如果七天都允许,也可以不写。时间格式是H1:M1-H2:M2,要求是前面的要小于后面的。
# 定义一个访问时间段:每周星期一到星期五的上午八点到下午五点,允许alloweduser用户在这个时间段内上网
acl accept_time time MTWHF 8:00-17:00
http_access allow alloweduser accept_time
http_access deny alloweduser
访问特定URL地址
虽然我们不希望所有的人都使用代理自由的访问Internet,但有几个网站是可以让内部终端都能访问的。在squid.conf里添加访问控制:
acl alloweddomain dstdomain .linuxforum.net .linuxaid.com.cn
http_access allow alloweddomain
同样的,如果参数很多的情况,也可以把这些允许的地址名写到一个文本里:
acl alloweddomain dstdomain "/etc/squid/alloweddomain.txt"
alloweddomain.txt里是允许访问站点的列表,每行一个。
根据关键字过滤网址
有些网站(色情网站,广告网站)很令人讨厌,通过设置acl可以很容易屏蔽掉这些站点:
acl denyurl url_regex sex boylink xxx city69 asiaadult sehu
http_access deny denyurl
这个设置将过滤带有sex boylink xxx city69 asiaadult sehu这些关键字的URL地址。
和前面一样,也可以把这些关键字写到一个文本里
acl denyedurl url_regex "/etc/squid/sex.txt"
http_access deny denyurl

四.其他功能的设置
显示中文错误提示信息
默认的,squid在发生错误时显示的是英文提示信息,squid的提示信息已经被翻译成很多语言,可以很方便的让他显示中文信息:
# cd /etc/squid/ # rm -f errors
# ln -s /usr/share/squid/errors/Simplify_Chinese errors
/usr/share/squid/errors下面有squid的各种语言版本的提示信息,按目录存放在不同的子目录下面。
五.一个squid.conf的配置实例
现在给出一个支持透明代理并使用MAC地址控制用户上网权限的squid配置文件,该配
置还支持特定网站(如色情网站)的过滤功能:
#定义服务器地址和端口
http_port 192.168.0.1:3128
#定义服务器名字
visible_hostname 192.168.0.1
#定义管理员邮件地址
cache_mgr pangty@usa.net
#定义缓存内存空间和缓存目录
cache_mem 16 MB
cache_dir ufs /var/spool/squid 100 16 256
#支持透明代理
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
#定义acl
#sexurl.txt列出要过滤色情网站地址的关键字,每个关键字占一行,如xchina
acl all src 0.0.0.0/0.0.0.0
acl sexurl url_regex "/etc/squid/sexurl.txt"
#定义访问策略
http_access deny sexurl
http_access allow allowedmac
http_access deny all
宝剑锋从磨砺出,梅花香自苦寒来

TOP