Total Pageviews

Thursday 11 October 2012

liunx 下巧妙使用代理服务器squid

一、代理服务器
简介:
  代理服务器是目前网络中常见的服务器之一,它可以提供文件
缓存、复制和地址过滤等服务,充分利用有限的出口带宽,加快
内部主机的访问速度,也可以解决多用户需要同时访问外网但公
有IP地址不足的问题。同时可以作为一个防火墙,隔离内网与外
网,并且能提供监控网络和记录传输信息的功能,加强局域网的
安全性等。它的主要作用有以下几点。
1.共享网络
2.加快访问速度,节约通信带宽
3.防止内部主机受到攻击
4.限制用户访问,完善网络管理
原理: 
① 客户端A向代理服务器提出访问Internet的请求
② 代理服务器接受到请求后,首先与访问控制列表中的访问规则相对照,如果满足规则,则在缓存中查找是否存在需要的信息。
③ 如果缓存中存在客户端A需要的信息,则将信息传送给客户端。如果不存在,代理服务器就代替客户端向Internet上的主机请求指定的信息。
④ Internet上的主机将代理服务器的请求信息发送到代理服务器中,同时代理服务器会将信息存入缓存中。
⑤ 代理服务器将Internet上主机的回应信息传送给客户端A。
⑥ 客户端B向代理服务器提出相同的请求。
⑦ 代理服务器也首先与访问控制列表中的访问规则相对照。
⑧ 如果满足规则,则将缓存中的信息传送给客户端B。
image
二、squid简介  
  Squid是Linux和UNIX平台下最为流行的高性能免费应用
层代理服务器,它具有权限管理灵活、性能高和效率快等特
点。Squid是一个由众多在互联网上的开发人员共同努力完
成的高性能的代理缓冲服务器,它的具体开发是由国家网络
应用研究室(the National Laboratory for Applied Network
Research)的Duane Wessels主持,由NSF出资支持的。
    Squid的另一个优越性在于它使用访问控制列表(ACL)
访问权限列表(ARL)进行权限管理内容过滤。访问控
制清单和访问权限清单通过阻止特定的网络连接来减少潜在
的Internet非法连接,可以使用这些清单来确保内部网的主
机无法访问有威胁的或不适宜的站点。
三、CDN简介:
image
image
image
image
image
image
image
image
文件下载加速服务:
image
四、Web缓存的类型和特点:
Web缓存的位置可以有三种,一是可以防止在客户端,二是放在服务器,三是放在客户端与服务器之间的某个网络节点上,这个网络节点就是web代理服务器。
1 客户端缓存
2 代理服务器缓存
3 服务器缓存
三种典型的代理方式
1 传统代理
2 透明代理
3 反向代理
五、配置简介
1.查看是否已安装squid
Red Hat Enterprise Linux 5安装程序默认没有安装Squid
服务,读者可以使用下面的命令检查系统是否已经安装了
Squid服务或查看已经安装了何种版本。
rpm -q squid
2.Squid代理服务的基本配置
2.1 Squid主配置文件/etc/squid/squid.conf ,最基本的设置如下。
http_port 192.168.16.1:8080   
cache_mem 64 MB
cache_dir ufs /var/spool/squid 4096 16 256
cache_effective_user squid
cache_effective_group squid
dns_nameservers 61.144.56.101
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
visible_hostname 192.168.16.1
cache_mgr lindenstar@163.com
acl all src 0.0.0.0/0.0.0.0
http_access allow all
2.2 acl选项的格式如下:
acl列表名称 列表类型 [-i] 列表值
列表名称:用于区分Squid的各个访问控制列表,任何两个访问控制列表不能用相同的列表名。虽然列表名称可以随便定义,但为了避免以后不知道这条列表是干什么用的,应尽量使用有意义的名称,如badurl、clientip和work time等。
列表类型:是可被Squid识别的类别。Squid支持的控制类别很多,可以通过IP地址、主机名、MAC地址和用户/密码认证等识别用户,也可以通过域名、域后缀、文件类型、IP地址、端口和URL匹配等控制用户的访问,还可以使用时间区间对用户进行管理
-i选项:表示忽略列表值的大小写,否则Squid是区分大小写的。
列表值:针对不同的类型,列表值的内容是不同的。例如,对于类型为src或dst,列表值的内容是某台主机的IP地址或子网地址;对于类型为time,列表值的内容是时间;对于类型为srcdomain和dstdomain,列表值的内容是DNS域名。
类型选项
image
2.3 http_access 的使用
Squid会针对客户HTTP请求检查http_access规则,
定义访问控制列表后,就使用http_access选项根据访
问控制列表允许或禁止访问了。
该选项的基本格式为:
http_access [allow | deny] 访问控制列表名称
?  [allow | deny]:定义允许(allow)或禁止(deny)访问控制列表定义的内容。
?  访问控制列表名称:需要http_access控制的ACL名称
2.4 初始化Squid
1.创建Squid使用硬盘缓冲区的目录结构
/usr/sbin/squid –z
2.设置Squid错误提示信息为中文
    在Squid的主配置文件/etc/squid/squid.conf中添加下
列语句,并使用命令“/etc/init.d/squid reload”重新载
入配置文件
error_directory /usr/share/squid/errors/Simplify_Chinese
2.5启动和停止代理服务器
1.启动代理服务
/etc/init.d/squid start
2.停止代理服务
/etc/init.d/squid stop
3.重新启动代理服务
/etc/init.d/squid restart
4.重新载入配置文件
/etc/rc.d/init.d/squid reload
六、具体案例
案例一:传统代理:
image
介绍:
代理服务器(squid):Red Hat Linux 5.4
(eth1 :Host-only 到vmware1 
   eth0: Bridged 到本地连接)
内网主机:windows xp  (虚拟机Host-only)
实机(windows 7)通过无线路由器直接上网!
1.用setup配网络参数:
imageimageimageimageimage
2. 安装squid
[root@gjp99 ~]# mkdir /mnt/cdrom
[root@gjp99 ~]# mount /dev/cdrom /mnt/cdrom
mount: block device /dev/cdrom is write-protected, mounting read-only
image
[root@gjp99 Server]# rpm -ql squid |less
查看注释语句:
/etc/httpd/conf.d/squid.conf   //和Apache的代理捆绑在一起
/etc/pam.d/squid          //支持pam
/etc/rc.d/init.d/squid     //独立守护进程
/etc/squid/squid.conf    // squid的主配置文件
[root@gjp99 Server]# grep -v "^#" /etc/squid/squid.conf  |grep -v "^$"
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
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
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 deny all      默认拒绝所有
icp_access allow all
http_port 3128        代理服务器的监听端口,最好在前面写上具体ip地址,
hierarchy_stoplist cgi-bin ?
access_log /var/log/squid/access.log squid
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
refresh_pattern ^ftp:        1440    20%    10080
refresh_pattern ^gopher:    1440    0%    1440
refresh_pattern .        0    20%    4320
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
coredump_dir /var/spool/squid
3.测试机配置:
3.1 配ip
走代理,dns也不用配置(无需地址解析)
image
3.2 代理设置
IE 右击属性----连接-----局域网(LAN)设置
image
3.3 参考文档:
image
image
3.4 主文件配置:
[root@gjp99 Server]# ll /var/spool/squid/
total 0
说明:squid还没有被初始化!
[root@gjp99 Server]# vim /etc/squid/squid.conf
image 修改成:
image
image
image
3.5 支持代理的软件
浏览器支持代理、聊天工具(qq支持代理)、下载工具(如:网络蚂蚁):
登陆时设置:
image
image
3.6 客户机访问外网测试:
image
image 该为允许所有!
image image
刷新页面
image
[root@gjp99 Server]# tail -f /var/log/squid/
access.log  cache.log   squid.out   store.log  
[root@gjp99 Server]# tail -f /var/log/squid/access.log


t_search_word_style/piddomain.js - DIRECT/220.181.124.108 application/x-javascript
1346398516.767  17157 192.168.2.22 TCP_MISS/000 0 GET http://www.gougou.com/js/input-ac.js - DIRECT/www.gougou.com -
1346398516.767  17188 192.168.2.22 TCP_HIT/000 0 GET http://www.gougou.com/ - DIRECT/www.gougou.com -
修改squid.conf 文件,避免其他人使用此代理服务器访问外网!
squid.confimage
image
类型参考:
image
4.代理服务器安全应用测试:
4.1.拒绝某个人:禁止IP地址为192.168.2.22的客户机上网。
image
允许其他人:
image
[root@gjp99 Server]# service squid restart
测试:日志监视:
[root@gjp99 ~]# tail -f /var/log/squid/access.log
1346401928.431      2 192.168.2.22 TCP_DENIED/403 1415 GET http://www.baidu.com/ - NONE/- text/html
1346401938.105      1 192.168.2.22 TCP_DENIED/403 1417 GET http://www.google.com/ - NONE/- text/html
image
换了个ip,就能正常上网!(参考日志信息)
1346402102.080    897 192.168.2.21 TCP_MISS/302 934 GET http://www.google.com/ - DIRECT/74.125.71.106 text/html
1346402106.243   4162 192.168.2.21 TCP_MISS/302 648 GET http://www.google.com.hk/url? - DIRECT/74.125.71.199 text/html
1346402109.660   3416 192.168.2.21 TCP_MISS/200 169690 GET http://www.google.com.hk/ - DIRECT/74.125.71.199 text/html
1346402113.359   3596 192.168.2.21 TCP_MISS/404 1310 GET http://www.google.com.hk/compressiontest/gzip.html - DIRECT/74.125.71.199 text/html
4.2 拒绝某个网段的人:禁止192.168.2.0这个子网里所有的客户机上网。
image
任选该网段的三个ip段作为测试:
1346402829.564      4 192.168.2.21 TCP_DENIED/403 1415 GET http://www.baidu.com/ - NONE/- text/html
1346402881.349      2 192.168.2.1 TCP_DENIED/403 1417 GET http://www.gougou.com/ - NONE/- text/html
1346402926.390      2 192.168.2.254 TCP_DENIED/403 1415 GET http://www.baidu.com/ - NONE/- text/html
4.3 拒绝访问某个ip的网站   禁止用户访问IP地址为119.75.218.77的网站
image
主配置文件的590行!
image
image
image
以上证明:拒绝ip,却拒绝不了访问该网站,因为一个服务器可对应于多个ip
4.4 拒绝访问带某个域名的网站 :禁止用户访问域名包含有sina.com的网站。
image
日志信息:
1346407353.802     12 192.168.2.22 TCP_DENIED/403 1413 GET http://www.sina.com/ - NONE/- text/html
1346407365.210      3 192.168.2.22 TCP_DENIED/403 1415 GET http://news.sina.com/ - NONE/- text/html
4.5 禁止用户访问域名包含有sex关键字的URL。
image
image
4.6  禁止用户访问域名为 www.163.com的网站
acl baddomain1 dstdomain -i www.163.com
http_access deny baddomain1
image
image
4.7 限制IP地址为192.168.2.100的客户机并发最大连接数为5。
acl clientip1 src 192.168.2.100
acl conn5 maxconn 5
http_access deny client1 conn1
4.8 禁止192.168.2.0这个子网里所有的客户机在周一到周五的9:00到18:00上网。
acl clientnet1 src 192.168.2.0/255.255.255.0
acl worktime time MTWHF 9:00-18:00
http_access deny clientnet1 worktime

下班时间可以正常上网:
[root@gjp99 ~]# date
Fri Aug 31 18:37:49 CST 2012
image
调整为上班时间:
[root@gjp99 ~]# date 083112302012
Fri Aug 31 12:30:00 CST 2012
日志信息:
1346387408.908      1 192.168.2.22 TCP_DENIED/403 1415 GET http://www.baidu.com/ - NONE/- text/html
image
4.9 禁止客户机下载*.mp3、*.exe、*.zip和*.rar类型的文件
image

测试:迅雷中:
image
禁止的是用下载工具下载如(迅雷)如果网页上直接保存,可以下载!
4.10 禁止QQ通过Squid代理上网。
acl qq url_regex -i tencent.com
http_access deny qq
正常情况下,qq工具只要设置代理方式中的任意一种也可登陆qq
image
qq已无法正常登陆!
image