一、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 #定义管理员邮箱 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
测试
客户端网络配置参数