Squid代理服务
- Squid
1、本章结构
2、代理服务器概述
3、squid简介
Squid是一个在GNU/GPL协议下发布的既可作为代理服务器,同时也可作为Web缓存守护进程的应用软件。Squid主要是支持像HTTP和FTP那样的协议,但是对其它的协议比如HTTPS,SSL,TLS等同样也能支持。其特点是Web缓存守护进程通过从经常上访问的网站里缓存Web和DNS数据,从而让上网速度更快。Squid支持所有的主流平台,包括Linux,UNIX,微软公司的Windows和苹果公司的Mac。
每一台代理服务器上都有若干颗硬盘,每个硬盘又分割成多个分区,每一个分区又可建立多个目录,目录下存放文件,squid称这些文件为object。
查询方式:
- 通过查询表的方式来定位某个资源的位置。
- 所查询的表叫hash table和digest table
- digest类似于摘要或索引,记录了每个分区,每个目录里存放的缓存摘要,
- hash类似于目录或提纲,它记录了所有的digest表的信息
- squid接收到请求后,先查看hash,再根据hash所指向的digest去查询所需要的信息。
4、代理的基本类型
①传统代理:适用于Internet,需明确指定服务端
[传统代理]
- SQUID被绑定到代理服务器的3128端口。
- 客户端浏览器被配置使用代理服务器的3128端口。
- 客户端不需要配置DNS。
- 代理服务器上需要配置DNS。
- 客户端不需要配置缺省路由。
②透明代理:适用于共享上网网关,不需指定服务端
[透明代理]
透明代理的意思是客户端根本不需要知道有代理服务器的存在。
- 配置透明代理服务器软件运行在代理服务器的3128端口。
- 配置代理服务器将所有对80端口的连接重定向到3128端口。
- 配置客户端浏览器直接连接到Internet。
- 在客户端配置好DNS。
- 配置客户端的缺省网关,如:192.168.1.1。
③反向代理:位于网站前端,代理web接受客户端的请求
5、使用代理的好处
①提高web访问速度
②隐藏客户机的真实IP地址
6、代理服务器概述
7、常见配置
http_port 3128 #代理服务器的端口
access_log /var/log/squid/access.log squid #squid记录的日志
cache_mem 64 MB #缓存程序所使用的空间
cache_dir ufs /var/spool/squid 100 16 256
- ufs为文件系统,全名unix file system
- 100为缓存的数据大小
- 16为一级目录的数量限制
- 256为二级目录的数量限制
visible_hostname proxy.wdd.com #告诉squid它的主机名,必须写
dns_testnames www.google.com www.163.com#可以测试squid是否可用
maximum_object_size 4096 KB #限制squid能够在本地缓存的文件的大小
reply_body_max_size 10 MB #用户通过squid能够下载的最大文件大小
error_directory /usr/share/squid/errors/Simplify_Chinese #中文错误信息
hierarchy_stoplist cgi-bin ? #用来强制某些特定的对象不被缓存,主要是处于安全的目的
coredump_dir /var/log/squid #定义dump的目录
refresh_partern #刷新缓存的规则
8、acl访问控制
①ACL(Access Control List,访问控制列表):根据源地址、目标URL、文件类型等定义列表。
acl 列表名称 列表类型 列表内容 …
②针对已定义的acl列表进行限制
http_access allow或deny 列表名称 …
③访问规则
- 从上至下依次查看
- 没有任何规则时,默认拒绝squid访问
- 有规则,但没有匹配的项时,采取与最后一条相反的操作
如下所示:
#vim /etc/squid/squid.conf
….
acl all src 192.168.131.0/24
http_access deny all
#service squid reload
④列表类型
src | 源地址 |
dst | 目标地址 |
port | 目标端口 |
dstdomain | 目标域 |
time | 访问时间 |
maxconn | 最大并发连接数 |
url_regex | 目标URL地址 |
urlpath_regex | 整个目标URL路径 |
如下所示
#vim /etc/squid/squid.conf
…
acl all src 0.0.0.0/0.0.0.0
acl MYLAN src 192.168.1.0/24 192.168.4.0/24
acl WORKTIME time MTWHF 08:30-17:30
http_access allow MYLAN WORKTIME
http_access deny all
#service squid reload
注:HTTP_PROXY 为HTTP协议提供代理
HTTPS_PROXY 为HTTPS协议提供代理
FTP_PROXY 为FTP协议提供代理
NO_PROXY 添加不使用代理的客户机地址
二、传统代理
试验准备:主机A、B、C,IP地址分别为192.168.131.137、192.168.131.130、192.168.131.136,主机B和主机C操作系统为RHEL6.4 x86_64,为最小化安装,主机A为桌面化安装。主机A、B、C均在同一个网段,主机A作为客户端,主机B作为squid服务器,主机C作为网站服务器。
均关闭防火墙和SELINUX。
1、主机C操作
#yum –y install httpd
#service httpd start
#vim /var/www/html/index.html
I am host c
在浏览器输入http://192.168.131.136/
visible_hostname www.taobao.com #一定要填写
# service squid start
3、主机A操作
#vim /etc/sysconfig/network-scripts/ifcfg-eth0
#service NetworkManager stop
#ifdown eth0
#ifup eth0
#ifconfig
3、客户端测试
①图形化测试
修改火狐浏览器设置:"Edit"—"Preferences"—"Advanced"—"Network"—"Settings"—"Manual proxy configuration",填写好代理服务器端口和3128端口,如下
点击"ok"即可。
在浏览器输入http://192.168.131.136
# yum -y install elinks #安装字符浏览器
HTTP_PROXY=http://192.168.131.130:3128
#vim /etc/sysconfig/network-scripts/ifcfg-eth0
#vim /etc/sysconfig/network-scripts/ifcfg-eth0
3、主机B操作
#vim /etc/sysconfig/network-scripts/ifcfg-eth0
#vim /etc/sysconfig/network-scripts/ifcfg-eth1
#service network restart
#vim /etc/sysctl.conf
#sysctl –p
#yum –y install squid
#vim /etc/squid/squid.conf
#service squid start
#iptables –F #清楚防火墙策略
#iptables –t nat -A PREROUTING –I eth0 –s 192.168.10.0/24 –p tcp –dport 80 –j REDIRECT –to-ports 3128
#配置防火墙策略 iptables -t nat -I PREROUTING -i 内网接口名 -s 内网网段 -p tcp --dport 80 -j REDIRECT --to-ports 3128
4、测试
①用内网测试机,访问外网
在客户端主机输入http://200.200.200.2
reply_body_max_size 10 MB #10和MB之间是有空格的,否则报错
#service squid reload #重新加载配置文件
#dd if=/dev/zero of=/var/www/html/wdd.txt bs=1M count=15
在浏览器输入http://200.200.200.2/wdd.txt
#vim /etc/sysconfig/network-ifcfg-eth0
#vim /etc/sysconfig/network-ifcfg-eth0
#vim /etc/sysconfig/network-ifcfg-eth0
#vim /etc/sysconfig/network-ifcfg-eth0
#vim /etc/sysconfig/network-ifcfg-eth1
http_port 200.200.200.1:80 vhost
visiable_hoatname www.taobao.com
cache_peer 192.168.10.2 parent 80 0 originserver round-robin weight=1
cache_peer 192.168.10.3 parent 80 0 originserver round-robin weight=1
#service squid start
5、测试