您的位置:首页 > 运维架构 > 反向代理

squid配置及应用

2012-08-30 19:53 225 查看
一、Squid简介及作用
Squid是Linux下一个缓存Internet数据的代理服务器软件,其接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户想要下载一个主页时,可以向Squid发出一个申请,要Squid代替其进行下载,然后Squid连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份。当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。 
squid不仅可用在Linux系统上,还可以用在AIX、Digital Unix、FreeBSD、NetBSD、Nextstep、SCO和Solaris等系统上。
Squid与Linux下其它的代理软件如Apache相比,下载安装简单,配置简单灵活,支持缓存和多种协议。用ipchains+Squid的解决方案,就可以获得通过缓存高
性能的同时能够无缝的访问Internet。
Squid代理服务器的作用
1.通过缓存的方式为用户提供web访问加速
2.对用户的web访问进行过滤控制
缓存代理服务器又分为普通代理服务器,透明代理服务器,和反向代理服务器。
普通代理服务即指标准的,传统的代理服务,需要客户机在浏览器中指定代理服务器的地址,端口。
透明代理服务器适合企业的网关主机,客户机不需要指定代理服务器地址,端口等信息,需要设置防火墙策略将客户机的web访问数据转交给代理服务器。
反向代理服务为INTERNET用户访问网络内网站点提供缓存加速,提高访问效率。

二、squid常用命令及其相关配置

1. Squid命令
在开启squid之前,你应该验证其配置文件是否正确
# squid -k parse
初始化cache目录.即建立缓存目录的存储格式,观察这个过程,请使用-X选项
# squid –zX
启动squid服务
# service squid start
重配置运行中的squid进程
# squid -k reconfigure
最安全的停止squid的方法是使用squid -k shutdown命令:
# squid -k shutdown

2.Squid 主要组成部分
服务名:squid
主程序:/usr/sbin/squid
配置目录:/etc/squid
主配文件:/etc/squid/squid.conf
监听tcp端口号:3128
默认访问日志文件:/var/log/squid/access.log

3.squid 常用配置选项(/etc/squid/squid.conf)
http_port 3128 #监听端口

cache_mem 64MB #缓存占内存大小

maximum_object_size 4096KB #最大缓存块

reply_body_max_size 1024000 allow all #限定下载文件大小

access_log /var/log/squid/access.log #访问日志存放的文件

visible_hostname proxy.test.xom #可见的主机名

cache_dir ufs /var/spool/squid 100 16 256

usf:缓存数据的存储格式

/var/spool/squid 缓存目录

100 : 缓存目录占磁盘空间大小(M)

16 :缓存空间一级子目录个数

256 :缓存空间二级子目录个数

cache_mgr webmaster@test.com #定义管理员邮箱

http_access deny all #访问控制

4.squid中的访问控制
使用访问控制特性,可以控制在访问时根据特定的时间间隔进行缓存、访问特

定站点或一组站点等等。 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 bbs.bitsCN.com元素的值被匹配,则这个 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. 请记住列表中的规则总是遵循由上而下的顺序。 

三、实验环境的搭建

1.试验设备:

客户机

Microsoft window xp , Microsoft window 7

www服务器

Microsoft window 2003

Squid代理服务器

[root@localhost ~]# uname -r

2.6.18-164.el5

[root@localhost ~]# cat /etc/redhat-release

Red Hat Enterprise Linux Server release 5.4 (Tikanga)

2.安装squid服务

[root@localhost ~]# mkdir /mnt/cdrom

[root@localhost ~]# mount /dev/cdrom /mnt/cdrom

[root@localhost ~]# cd /mnt/cdrom/Server/

[root@localhost Server]# rpm -ivh squid-2.6.STABLE21-3.el5.i386.rpm

四、实验案例
1.实现普通代理服务器
拓扑图:





配置信息squid服务器
[root@localhost ~]# vim /etc/squid/squid.conf
637 http_access allow all
920 http_port 192.168.2.101:3128 ##代理的ip地址
#http_port指令告诉squid在哪个端口侦听HTTP请求
2994 visible_hostname 192.168.2.101 ##出现错误时,返回的主机信息
[root@localhost ~]# squid -k parse ##检查配置文件
[root@localhost ~]# service squid start ##启动
测试
客户端配置和网络配置参数
打开IE浏览器—>工具—>Internet选项—>连接—>局域网设置—>












访问控制示例
1)禁止访问sina
acl sina dst www.sina.com.cn

http_access deny sina
2) 禁止来自某些IP地址的访问
在squid配置文件中添加以下acl名称及访问规则,并重新加载配置文件
acl enemy src 192.168.2.10/32

http_access deny enemy
3) 禁止在某些时段访问
acl Working_hours MTWHF 08:00-17:00

http_access allow Working_hours

http_access deny !Working_hours
4) 禁止某个代理客户建立过多连接
acl OverConnLimit maxconn 4

http_access deny OverConnLimit
5)禁止访问域名包含为google.com的网站
acl badurl url_regex -i google.com

http_access deny badurl
篇幅有限,这里不再多举例子了,我也是菜鸟一个,在这方面也要多努力学习。

2.实现透明代理服务器
拓扑图:





配置信息
打开数据的转发功能
[root@localhost ~]# vim /etc/sysctl.conf
7 net.ipv4.ip_forward = 1 ##1代表打开,0代表关闭
[root@localhost ~]# sysctl –p ##生效
[root@localhost ~]# vim /etc/squid/squid.conf
920 http_port 192.168.2.101:3128 transparent ##透明代理
[root@localhost ~]# squid -k parse
[root@localhost ~]# service squid restart
添加iptables规则
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -p udp --dport 53 -o eth1 -j MASQUERADE
[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j REDIRECT --to-ports 3128
测试
客户端网络配置参数









3、反向代理服务
拓扑图:





配置信息
[root@localhost ~]# vim /etc/squid/squid.conf
920 http_port 192.168.101.26:80 vhost ##反向代理
1185 cache_peer 192.168.2.201 parent 80 0 originserver

测试
客户端网络配置参数





本文出自 “lee” 博客,请务必保留此出处http://lee0128.blog.51cto.com/5627365/977824
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: