使用Squid构建WEB代理服务器

简介:

Squid:俗称代理服务器,由Squid软件包提供服务,在RHEL5的系统上默认是安装好的,只需要开启即可。Squid代理服务器工作在应用层,通过缓存提供服务,主要用于WEB代理。下面介绍一下Squid代理服务器的工作机制。

Squid服务器的工作原理

   当客户机通过代理来请求WEB页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要请求的页面,则直接将缓存中的页面内容反馈给客户机;如果缓存中没有客户机要访问的页面,则由代理服务器向Internet或WEB服务器发送访问请求,当或得返回的WEB页面以后,将页面数据保存到缓存中并发送给客户机。如下图:

225136619.jpg

代理服务器的基本类型

传统代理:也就是普通的代理服务器,在客户机的浏览器,QQ聊天工具,下载软件等程序中,必须手动设置代理服务器的地址和端口,然后才能使用代理来访问网络。

透明代理:提供与传统代理相同的功能和服务,区别在于:客户机不需要制定代理服务器的地址和端口,而是通过默认路由,防火墙策略将WEB访问重定向,实际仍然交给代理服务器来处理。重定向的过程对客户机来说是“透明”的,用户甚至并不知道自己是在使用代理服务器,所以称“透明代理”。


Squid的配置文件及常见配置项

  Squid服务的配置文件位于“/etc/squid/squid.conf”其中包含大量的注释内容,为相关的配置项提供详细的解释说明。

下面解释几个常见的配置项

http_port 3128:主要用来指定Squid监听的地址和端口(默认3128)。

cache_mem 64 MB:指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4.

maximum_onject_size 4096 KB:允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户。

reply_body_max_size 10240000 allow all:允许用户下载的最大文件大小,以字节为单位。默认设置0表示不进行限制。

cache_dir ufs /var/spool/squid 100 16 256:指定缓存数据所使用的目录,容量,子目录个数等相关参数。(ufs:Squid缓存文件的格式,/var/spool/squid:缓存数据默认存放的目录,100:缓存目录分配的空间大小,以MB为单位,16:一级目录数量,即/var/spool/squid目录下有16个一级目录,256:二级,目录数量,即每个一级目录下有256个二级目录)

access_log /var/log/squid/access.log squid:指定代理服务器的日志文件位置及记录格式,以便记录那些用户使用个代理服务器。

visible_hostname localhost.localdomain:指定代理服务器本机的可见主机名,建议使用完整主机名及FQDN的格式。


构建传统Squid代理服务器

   配置Squid实现传统代理服务器时,需要注意两个地方:其一、设置好可见的主机名,其二、将默认的http_access deny all改为http_access allow all,默认deny all只允许给本机使用代理服务器,这里设置allow all表示允许所有客户机都可以使用Squid代理服务器。如果需要限制用户下载的文件大小还需要修改reply_body_max_size项。修改如下:

[root@localhost /]#vim /etc/suqid/squid.conf

reply_body_max_size 10240000 allow all   //允许下载最大文件为10MB

http_access allow all

......//省略部分内容

现在主需要启动Squid服务,然后再客户端浏览器中指定Squid服务器的地址和端口即可使用代理服务器了。

[root@localhost /]#service suqid start


构建透明Squid代理服务器

   透明代理提供的功能与传统代理是一致的,但是其“透明”的实现依赖于默认路由和防火墙的重定向策略,因此更适用于为局域网提供代理服务,而不不适合为Internet中的客户机提供服务。

透明代理一般是配置在Linux网关服务器上的,在Linux网关服务器上配置好Squid服务后,客户机只需要配置好自己的网关和IP地址即可使用代理服务器,而不需要手动指定。

在Linux网关上配置Squid服务操作如下:

1、配置Squid支持透明代理

   Squid服务的默认配置并不支持透明代理,因此需要调整相关设置,需要在http_port配置行后面加上“transparent”(透明)选项,就可以支持透明代理了。

[root@localhost /]#vim /etc/suqid/squid.conf

http_port 192.168.1.254:3128 transparent

......//省略部分内容

[root@localhost /]#service suqid reload

2、设置iptables的重定向策略

   透明代理中Squid服务实际上是构建在Linux网关主机上的,因此只需要正确设置防火墙策略,就可以将局域网主机访问Internet的数据包转交给Squid进行处理。这需要用到iptables的“REDIRECT”(重定向)策略,其作用是实现本机端口的重新定向,将访问网站协议HHTP、HHTPS的外发数据包转交本机的squid服务(3128端口)。

REDIRECT 也是一种数据包控制类型,只能在nat表的PREROUTING或OUTPUT链使用,通过“--to-ports 端口号”的形式来指定映射的目标端口。

本列中可以将来自局域网段192.168.1.0/24并且访问HTTP、HTTPS协议的数据包,转交给运行在本机3128端口上的Squid服务器处理。

[root@localhost /]#iptables -t nat -A PREROUTOING -i eth1 -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128

[root@localhost /]#iptables -t nat -A PREROUTOING -i eth1 -s 192.168.1.0/24 -p tcp --dport 445 -j REDIRECT --to-ports 3128

此时Squid服务已经配置好了,现在只需要在客户端指定正确的网关即可使用代理服务器了。


Squid代理控制机制(ACL)

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

   在配置文件squid.conf中,ACL访问控制通过一下两个步骤来实现:其一、使用acl配置项定义需要控制的条件,即定义acl列表;其二、通过http_access配置项对已定义的列表做“允许”或“拒绝”访问的控制。

1、定义acl列表

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

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

列表名称:有管理员自行制定,用来识别控制条件。

类表类型:必须使用Squid预定义的值,对应不同类表的控制条件。

列表内容:值定控制的具体对象,不同类型的列表所对应的内容也不一样,可以有多个值,以空格隔开,也可以为文件,即将很多个值放在一个文件中。

定义acl列表时,关键在于选择“列表类型”并设置具体的条件对象。Squid预定义的列表类型有很多种,常用的包括源地址,目标地址,访问时间,访问端口。如下表所示:

列表类型 列表内容示例 含义/用途
src

192.168.1.168

192.168.1.0/24

192.168.1.0-192.168.3.0/24

源IP地址、网段、IP地址范围
dst

216.168.137.3

61.138.167.0/24

www.cshbk.com

目标IP地址、网段、主机名
port 80 443 20 21 目标端口
dstdomain .qq.com .msn.com 目标域,匹配域内所有站点
time MTWHFAS 8:30-17:30 使用代理的时间周一至周日早8:30至晚17:30
maxconn 20 每个客户机的并发连接
url_regex

url_regex -i ^rtsp://

url_regex -i ^emule://

目标资源的URL地址,-i表示忽略大小写
urlpath_regex

urlpath_regex -i sex adult

urlpath_regex -i \.mp3$

目标资源的整个URL路径,-i表示忽略大小写

在定义访问控制列表时,应结合当前网络环境正确分析用户的访问需求,准确定义使用代理服务的控制条件。例如:针对不同的客户机地址,需要限制访问目标网站,特定的时间段,分别定义的列表。

[root@localhost /]#vim /etc/suqid/squid.conf

......//省略部分内容

acl MYLAN src 192.168.10.0/24             //源地址网段    

acl MC20 maxconn 20                       //最大并发连接

acl DOMAIN dstdomain .qq.com .msn.com     //目标为.qq.com .msn.com的域名

acl FILE urlpath_regex -i \.mp3$ \.mp4$   //以.mp3 .mp4结尾的URL路径

acl TIME time MTWHF 08:30-17:30           //时间为周一至周五早8:30至晚17:30


2、设置acl访问权限

   定义好各种访问控制列表以后,需要使用http_access配置项来 控制。注意:http_access配置项必须放在acl列表之后,而且每一行http_access配置至少有一条访问控制规则。格式如下:

http_access    allow或dent    acl列表名

   每一条http_access规则中,可以同时包含多个acl列表名,各个表之间以空格分隔,为“与”关系,表示足所有acl列表时对应的条件才会生效。需要使用取反时,可以在acl列表名前加上“!”号。

[root@localhost /]#vim /etc/suqid/squid.conf

......//省略部分内容

http_access deny MYLAN FILE         //禁止客户机下载MP3 MP4文件

http_access deny MYLAN DOMAIN       //禁止客户机访问acl列表中的网站

http_access deny MYLAN MC20         //客户机的并发连接超过20时将被阻止

http_access allow MYLAN TIME        //允许客户机在工作时间访问互联网

http_access deny all                //默认禁止所有主机


   执行访问控制时,Squid将按照各条规则的顺序依次进行检查,如果匹配则停止向后检查,所以我们一般将默认策略设为拒绝,并放在最后。还需要注意的是将常用的规则放在前面,这样可以减少Squid的负载。




本文转自yun5277 51CTO博客,原文链接:http://blog.51cto.com/dengqi/1267103,如需转载请自行联系原作者

相关文章
|
1天前
|
存储 安全 数据安全/隐私保护
Web应用程序的会话管理是一种跟踪和识别特定用户与Web服务器之间交互的技术
Python Web开发中,会话管理用于跟踪用户与服务器交互,如Flask框架提供的内置功能。以下是一个简单示例:安装Flask后,设置应用密钥,通过session读写用户状态。例如,创建一个显示和设置用户名称的Web应用,用户提交的名字将保存在会话中。在生产环境中,应安全存储密钥,如使用环境变量。扩展会话管理可借助第三方库实现更多功能,但可能需更多配置。
6 2
|
2天前
|
缓存 数据库连接 数据库
构建高性能的Python Web应用:优化技巧与最佳实践
本文探讨了如何通过优化技巧和最佳实践来构建高性能的Python Web应用。从代码优化到服务器配置,我们将深入研究提高Python Web应用性能的各个方面。通过本文,读者将了解到一系列提高Python Web应用性能的方法,从而更好地应对高并发和大流量的挑战。
|
6天前
|
缓存 负载均衡 安全
深入探索Nginx高性能Web服务器配置与优化
【5月更文挑战第7天】本文深入探讨了Nginx的配置与优化,重点介绍了基础配置参数如`worker_processes`、`worker_connections`和`keepalive_timeout`,以及优化策略,包括使用epoll事件驱动模型、开启gzip压缩、启用缓存、负载均衡和安全配置。此外,还提到了性能调优工具,如ab、nginx-stats和nmon,以助于提升Nginx的性能和稳定性。
|
7天前
|
数据采集 存储 XML
如何利用Python构建高效的Web爬虫
本文将介绍如何使用Python语言以及相关的库和工具,构建一个高效的Web爬虫。通过深入讨论爬虫的基本原理、常用的爬虫框架以及优化技巧,读者将能够了解如何编写可靠、高效的爬虫程序,实现数据的快速获取和处理。
|
12天前
|
运维 前端开发 JavaScript
【专栏:HTML进阶篇】HTML与Web标准:构建可访问与可维护的网页
【4月更文挑战第30天】本文探讨了HTML与Web标准的关系,强调遵循标准对创建高质量、可访问、可维护网页的重要性。通过使用语义化标签、提供文本替代、合理使用表格和列表,可提升网页可访问性;通过结构化文档、添加注释、分离结构与表现,能增强网页可维护性。遵循Web标准,可确保网页在不同设备上的兼容性,并满足各类用户需求。
|
12天前
|
Prometheus 监控 Cloud Native
构建高效可靠的Linux服务器监控体系
【4月更文挑战第30天】 在维护企业级Linux服务器的稳定性和性能方面,一个周全的监控体系是至关重要的。本文将探讨如何利用开源工具和实践构建一个高效、灵活且用户友好的监控系统。我们将重点讨论核心组件的选择、配置、报警机制以及数据分析方法,旨在帮助读者打造一个能够实时响应并预防潜在问题的监控环境。
|
13天前
|
开发框架 Dart 前端开发
【Flutter前端技术开发专栏】Flutter中的Web支持:构建跨平台Web应用
【4月更文挑战第30天】Flutter,Google的开源跨平台框架,已延伸至Web领域,让开发者能用同一代码库构建移动和Web应用。Flutter Web通过将Dart代码编译成JavaScript和WASM运行在Web上。尽管性能可能不及原生Web应用,但适合交互性强、UI复杂的应用。开发者应关注性能优化、兼容性测试,并利用Flutter的声明式UI、热重载等优势。随着其发展,Flutter Web为跨平台开发带来更多潜力。
【Flutter前端技术开发专栏】Flutter中的Web支持:构建跨平台Web应用
|
13天前
|
缓存 监控 测试技术
【Go语言专栏】使用Go语言构建高性能Web服务
【4月更文挑战第30天】本文探讨了使用Go语言构建高性能Web服务的策略,包括Go语言在并发处理和内存管理上的优势、基本原则(如保持简单、缓存和并发控制)、标准库与第三方框架的选择、编写高效的HTTP处理器、数据库优化以及性能测试和监控。通过遵循最佳实践,开发者可以充分利用Go语言的特性,构建出高性能的Web服务。
|
13天前
|
网络协议 数据库 开发者
构建高效Python Web应用:异步编程与Tornado框架
【4月更文挑战第29天】在Web开发领域,响应时间和并发处理能力是衡量应用性能的关键指标。Python作为一种广泛使用的编程语言,其异步编程特性为创建高性能Web服务提供了可能。本文将深入探讨Python中的异步编程概念,并介绍Tornado框架如何利用这一机制来提升Web应用的性能。通过实例分析,我们将了解如何在实际应用中实现高效的请求处理和I/O操作,以及如何优化数据库查询,以支持更高的并发用户数和更快的响应时间。
|
3天前
|
弹性计算 运维 监控
解密阿里云弹性计算:探索云服务器ECS的核心功能
阿里云ECS是核心计算服务,提供弹性云服务器资源,支持实例按需配置、集群管理和监控,集成安全防护,确保服务稳定、安全,助力高效业务运营。
15 0