Squid 代理服务的配置与应用

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介:

squid是一个基于http1.0(目前几乎可以和1.1兼容)的全功能的代理服务器

功能:1 共享网络

2 加快访问速度,节约通信带宽

3 防止内部主机受到攻击

4 限制用户访问,完善网络管理

主要实现网络访问加速的功能。

clip_image002

1 客户端A向代理服务器提出访问Internet的请求;

2 代理服务器接收到请求后,首先与访问控制列表中的访问规则相对照,如果满足规则,在在缓存中查找是否存在需要的信息。

3 如果缓存中存在客户端A需要的信息,则将信息传送给客户端。如果不存在,代理服务器就代替客户端向Internet上的主机请求指定的信息;

4 Internet上的主机将代理服务器的请求信息发送到代理服务器中,同时代理服务会将信息存入到缓存中;

5 代理服务器将Internet上主机的回应信息传送给客户端A;

6 客户端B向代理服务器提出相同的请求;

7 代理服务器也首先与访问控制列表中的访问规则相对照;

8 如果满足,则将缓存中的信息传送给客户端B。

普通代理服务

即标准的、传统的代理服务

需要客户机在浏览器中指定代理服务器的地址、端口

透明代理服务

适用于企业的网关主机(共享接入Internet)中

客户机不需要指定代理服务器地址、端口等信息

需要设置防火墙策略将客户机的Web访问数据转交给代理服务程序处理

ICP protocol 因特网缓存协议,用于在代理服务器之间交换缓存,使用UDP协议3130端口。

Proxy:Squid,Varnish,ATS,Nginx

传统代理,即正向代理,类似于SNAT

反向代理 类似于DNAT,实现反向代理加速。

CDN:内容分发网路 Content Delievery Network

clip_image004

反向代理

Squid是开源界比较流行的应用层代理服务器,具有权限管理灵活,性能高和效率快等特点。

squid软件包

软件包名:squid-2.6.STABLE6

服务名:squid

主程序:/usr/sbin/squid

配置目录:/etc/squid/

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

默认监听端口:TCP 3128

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

squid的主配置文件:

[root@station39 ~]# cat /etc/squid/squid.conf | grep -v "^#" | grep -v "^$"

acl all src 0.0.0.0/0.0.0.0

acl manager proto cache_object

acl localhost src 127.0.0.1/255.255.255.255

acl to_localhost dst 127.0.0.0/8

acl SSL_ports port 443

acl Safe_ports port 80 # http

acl Safe_ports port 21 # ftp

acl Safe_ports port 443 # https

acl Safe_ports port 70 # gopher

acl Safe_ports port 210 # wais

acl Safe_ports port 1025-65535 # unregistered ports

acl Safe_ports port 280 # http-mgmt

acl Safe_ports port 488 # gss-http

acl Safe_ports port 591 # filemaker

acl Safe_ports port 777 # multiling http

acl CONNECT method CONNECT

http_access allow manager localhost

http_access deny manager

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_access allow localhost

http_access deny all

icp_access allow all

http_port 3128 //**监听内网网卡

hierarchy_stoplist cgi-bin ?

access_log /var/log/squid/access.log squid

acl QUERY urlpath_regex cgi-bin \?

cache deny QUERY

refresh_pattern ^ftp: 1440 20% 10080

refresh_pattern ^gopher: 1440 0% 1440

refresh_pattern . 0 20% 4320

acl apache rep_header Server ^Apache

broken_vary_encoding allow apache

coredump_dir /var/spool/squid

几个常用配置项:

# cache_mem 8 MB //**代理进程所使用的内存的大小

# maximum_object_size_in_memory 8 KB //**最大缓存对象

#reply_body_max_size 10240000 allow all //**请求的最大文件大小

#access_log /var/log/squid/access.log squid //**访问日志存放位置

#visible_hostname proxy.test.com //**可见主机名

#cache_dir ufs /var/spool/squid 100 16 256 //**指定缓存目录 ufs:所使用的文件系统,

比较快,适合存放小文件;缓存目录;100:缓存目录可是使用的

缓存空间的大小;16:一级缓存子目录的个数; 256:二级缓存子

目录的个数

下面我们来模拟使用squid代理上网的场景:

clip_image006

代理服务器eth0网卡192.168.0.39使用代理可以上网。所以我们假设这里是公网。目的是局域网内的PC机通过代理服务器来上网。

我们来配置代理服务器:

修改/etc/squid/squid.conf主配置文件

[root@station39 ~]# vim /etc/squid/squid.conf

http_port 192.168.10.11:3128

visible_hostname proxy.a.com

cache_mem 128 MB

cache_dir ufs /var/spool/squid 1024 16 256

error_directory /usr/share/squid/errors/Simplify_Chinese //**将错误日志改为中文

http_access allow all //**修改默认访问策略

检查语法:

[root@station39 ~]# squid -k parse

初始化缓存

[root@station39 ~]# squid -z

2011/03/10 19:13:39| Creating Swap Directories

[root@station39 ~]# service squid start

[root@station39 ~]# netstat -ntlp | grep 3128

tcp 0 0 192.168.10.11:3128 0.0.0.0:* LISTEN 13129/(squid)

添加网关:

[root@station39 ~]# route add default gw 192.168.0.254 //**由于我们这里是内网地址,所

以需要通过指定网关的方式来上网

客户端需要在浏览器中设置使用代理访问:

clip_image008

看!已经可以访问外网了!

clip_image010

当勾选use this proxy server for all protocols 时,我们就可以通过代理服务器来访问所有的服务,包括ftp。

clip_image012

clip_image014

几个常用功能的使用:

reply_body_max_size 10240000 allow all //限制用户所能访问的最大资源 line 780

acl 访问控制列表

基于源地址的访问控制

允许来自192.168.10.0/24网段能够访问外网

先定义acl

acl LAN src 192.168.10.0/24 //** line 628

再使用

http_access allow LAN //** line 635

修改默认策略

http_access deny all //**line 639

clip_image016

基于目标地址的访问控制

禁止所有人访问QQ

acl QQ dstdomain .qq.com

http_access deny QQ

clip_image018

禁止192.168.10.0/24访问QQ

acl LAN src 192.168.10.0/24

acl QQ dstdomain .qq.com

http_access allow LAN !QQ

clip_image020

基于url_regex的访问控制

acl GUGE url_regex -i ^http://www.google.com.hk/index.html

http_access allow LAN !GUGE

clip_image022

通过url拒绝对*.iso的访问

acl NOTISO url_regex -i ^.*tp://.*\.iso$

http_access allow LAN !NOTISO

clip_image024

根据时间来做控制:

定义时间段:

acl WORKTIME time MTWHF 08:00-18:00

http_access allow LAN !NOTISO WORKTIME

clip_image026

PS:当两个列表一样时,将以两个列表的并集作为参数的值。

透明代理

透明代理是NAT和代理的完美结合,在这种工作方式下用户感觉不到代理服务器的存在。当客户访问Internet时,请求数据包经过Linux服务器转发时,linux服务器上的iptables将客户机的HTTP请求重定向到Squid代理服务器,由代理服务器代理客户机访问外部信息资源,再将获取的数据传回客户机。

修改squid的主配置文件

http_port 192.168.10.11:8080 transparent //**实现透明代理

添加一条iptables规则:

iptables -t nat -A PREROUTING -i eth1 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 8080

这样客户端依旧无法上网,因为客户端的DNS请求无法发送出去,怎么办?

我们需要再添加一条规则,使内网的DNS请求能够出去

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 192.168.0.127

打开内核路由功能:

echo 1 > /proc/sys/net/ipv4/ip_forward

也许这里由会有疑问了,使用源地址转换直接就可以上网了,那我们的数据还通过squid服务器不?答案是肯定的,因为SNAT是在POSTROUTING链上做的,而我们做透明代理的话是在PREROUTING链上做的,数据包在进入服务器的时候已经被重定向到squid上去了,所以无论如何基于80端口的访问是绕不开squid的。

客户端指定网关:

route add default gw 192.168.10.11

反向代理 reverse proxy

我们来假设一个反向代理的场景

clip_image028

在虚拟机里构建实验环境:

192.168.10.1 192.168.10.11 仅主机 我们假设这是外网

192.168.0.127 192.168.0.254 桥接 我们假设这是一个网站的内部架构

最终目的是让PC机通过squid代理来访问web 服务。

配置squid服务器:

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

http_port 192.168.10.11:80 vhost //** line 919

cache_peer 192.168.0.254 parent 80 0 originserver weight=1 max-conn=1000

//** line 1449

http_access allow all //** line 637 修改ACL

保存退出。

清除缓存

[root@station39 squid]# rm -rf /var/spool/squid/*

重建缓存

[root@station39 squid]# squid -z

2011/03/11 15:52:38| Creating Swap Directories

语法检查

[root@station39 squid]# squid -k parse

重启服务。

我们在客户端使用firefox访问一下192.168.10.11

clip_image030

看!已经可以访问了。这就是反向代理。










本文转自 490999122 51CTO博客,原文链接:http://blog.51cto.com/lyp0909/521613,如需转载请自行联系原作者
目录
相关文章
|
6天前
|
缓存 负载均衡 安全
Squid代理服务之反向代理模式
总之,Squid代理服务器在反向代理模式下扮演着一个中间层,它有助于提高性能、安全性和可用性,同时可以缓解后端服务器的负载。这使得它在许多不同的应用场景中都非常有用。
11 0
|
7天前
|
缓存 Ubuntu Python
Squid中正向代理的配置与使用
Squid中正向代理的配置与使用
|
缓存 前端开发 JavaScript
Web缓存服务——Squid代理服务器应用(上)
正向代理:代替客户端向服务端发送请求。 反向代理:代理服务端,将请求转发给多个服务端。
443 1
|
应用服务中间件 开发工具 nginx
Nginx代理服务 - 正向代理和反向代理
一、代理简介 1. 代理 2. Nginx代理服务 3. 正向代理和反向代理
Nginx代理服务 - 正向代理和反向代理
|
Web App开发 缓存 监控
|
Web App开发 测试技术 网络安全
|
Web App开发 缓存 监控