Squid代理服务器

一 Squid服务基础

Squid是linux系统中很常用的一款开源代理服务软件,可以很好的实现HTTP、FTP以及DNS查询、SSL等应用的缓存代理,功能十分强大

·缓存代理概述

代理的工作机制

1工作机制

客户端通过代理请求web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中有客户需求的页面,则直接将缓存中的页面反馈给客户端;如果没有,则缓存服务器自己向internet中发送请求,获得所需页面后,会将页面保存在自己的缓存中并发送给客户端

2优点

减少了向internet提交重复的请求,提高了响应速度

隐藏用户的真实IP地址,起到一定的保护作用

还可以配置代理服务器达到过滤的目的

代理的基本类型

根据实现方式不同可以分为传统代理和透明代理

1传统代理:在客户机的浏览器、QQ聊天工具、下载软件等程序中,需要手动指定代理服务器的地址和端口,然后才能使用代理来访问网络;使用传统代理时,网页浏览器访问网站时的域名解析请求会发给指定的代理服务器

2透明代理:客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将web访问重定向,实际仍交给代理服务器处理;使用透明代理时,网页浏览器访问网站时的域名解析请求将优先发给DNS服务器

反向代理:用来为企业Web站点提供缓存加速,适用于Internet中的大量用户访问企业的单个(或少量)Web站点的情况

·Squid的基本配置

Squid服务端

软件包:squid-2.6.STABLE21-6.el5

系统服务:squid

主程序:/usr/sbin/squid

主配置文件:/etc/squid/squid.conf

默认监听端口:TCP 3128

默认访问日志:/var/log/squid/access.log

安装服务:提前查看一下是否安装

常用配置项

配置文件中注释太多,先过略一下(没有的配置项可手动添加,否则默认)

http_port 3128    /监听端口号,默认3128;还可以直接指定IP地址:http_port 1.1.1.1:3128

access_log /var/log/squid/access.log squid    /指定日志文件位置和记录方式

cache_mem 64 MB        /缓存大小,容量为4的倍数;建议设置为内存的1/4或1/3

cache_dir ufs /var/spool/squid 100 16 256    /指定缓存数据所使用的格式、目录、容量、一级子目录个数、二级子目录个数;当执行了此参数后会在/var/spool/squid/下创建16个子目录

visible_hostname proxy.benet.com    /指定代理服务器的主机名

dns_testnames www.google.com www.163.com        /用来执行DNS测试,确保服务器自身的DNS查询正常

maximum_object_size 4096 KB    /允许保存到缓存空间的最大文件大小,被限制的文件将不会缓存,而是直接转给用户;如果缓存视频、音频等文件需适当调整此参数

reply_body_max_size 10240000 allow all    /允许用户下载的最大文件大小(字节)默认为0字节,表示不限制

二构建代理服务器

·传统代理

案例环境:如图所示

Squid服务器的配置

默认安装好squid服务后,服务器只对自己进行代理,需要配置主机名、添加访问策略、其他配置可以默认

1修改squid.conf配置文件(其他默认)

2初始化并启动服务(自动初始化)

或者使用squid –z初始化,squid –D启动

确认服务正常监听

客户端的配置

1打开浏览器,打开internet选项,单击连接选项卡

2点击局域网设置,勾选并输入代理服务器地址和默认端口

3测试访问(客户端不用指定DNS服务器也可以)

192.168.1.2

4查看日志

查看代理服务器跟踪日志

查看web服务器访问日志,没有客户端的地址

·透明代理

透明代理的实现依赖于默认路由和防火墙的重定向策略,适用于为局域网主机服务,而不适用于为internet客户机服务

 

案例环境:如图所示;Linux网关提供透明代理服务;局域网通过代理访问Internet中的网站

配置Squid服务器

1添加透明代理支持并重启服务

2开启路由功能

3设置防火墙策略

清空规则

将访问网站协议HTTP、HTTPS的外发数据转交给本机的squid服务(3128端口)

此时已经可以让客户端使用IP进行访问了,但是不能通过域名访问,因为域名请求不能通过网关防火墙,还需要编写SNAT规则

最后进行访问测试并查看日志验证

三ACL访问控制

Squid提供了强大的代理控制机制,通过合理设置ACL(访问控制列表)并进行限制,可以针对源地址、目标地址、访问的URL路径、访问的时间等各种条件进行过滤

在配置文件squid.conf中。ACL访问控制通过以下两个步骤实现:

  1. 使用acl配置项定义需要控制的条件;
  2. 通过http_access配置项对已定义的列表做"允许"或"拒绝"访问的控制

·定义ACL列表

每一行acl配置可以定义一条访问控制列表,格式如下

acl 列表名称 列表类型 列表内容 ...

列表名称:由管理员自行指定

列表类型:必须使用Squid预定义的值,包括:

src 源地址(可以是网段、IP地址范围)

dst 目标地址

port 目标端口

dstdomain 目标域,域内所有站点

time 访问时间;如MTWHFAS 8:60-17:30表示每一天的这个时间

maxconn 最大并发连接

url_regex 目标URL地址;如:url_regex –i ^rhsp://    -i表示忽略大小写

Urlpath_regex 整个目标URL路径

列表内容:是控制的主要对象,可以有多个值,以空格分隔,为"或"的关系

例如:

如果要限制指定地址,可以调用黑白名单(提前创建黑白名单)

·设置acl访问权限

定义好各种访问控制列表后,需要使用http_access配置项来进行控制;每一条配置必须放在acl配置行之后;格式如下

http_access allow或deny 列表名称 ...

每一条http_access规则中可以包含多个acl列表名,以空格风格,为"与"的关系,即满足所有acl列表对应的条件才会进行限制,可以使用!取反

例如:定义一条acl名为all,然后拒绝所有地址

注意:

在没有设置任何规则时,默认拒绝所有

有规则但没有acl时,会采用最后一条规则相反的规则

综合示例

测试访问,被阻止时的显示

不允许下载时的显示