squid

Squid是一个缓存internet数据的一个软件,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户想要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid 连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。

标准代理:

一个标准的代理缓冲服务被用于缓存静态的网页(例如:html文件和图片文件等)到本地网络上的一台主机上(即代理服务器)。当被缓存的页面被第二次访问的时候,浏览器将直接从本地代理服务器那里获取请求数据而不再向原web站点请求数据。这样就节省了宝贵的网络带宽,而且提高了访问速度。但是,要想实现这种方式,必须在每一个内部主机的浏览器上明确指明代理服务器的IP地址和端口号。客户端上网时,每次都把请求送给代理服务器处理,代理服务器根据请求确定是否连接到远程web服务器获取数据。如果在本地缓冲区有目标文件,则直接将文件传给用户即可。如果没有的话则先取回文件,先在本地保存一份缓冲,然后将文件发给客户端浏览器。

透明代理:

透明代理缓冲服务代理操作对客户端的浏览器是透明的(即不需指明代理服务器的IP和端口)。透明代理服务器阻断网络通信,并且过滤出访问外部的HTTP(80端口)流量。如果客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,如果在本地没有缓冲则向远程web服务器发出请求,其余操作和标准的代理服务器完全相同。对于Linux操作系统来说,透明代理使用Iptables或者Ipchains实现。因为不需要对浏览器作任何设置,所以,透明代理对于ISP(Internet服务器提供商)特别有用。

反向代理:

反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始WEB服务器的负载。反向代理服务器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载。它位于本地WEB服务器和Internet之间,处理所有对WEB服务器的请求,组织了WEB服务器和Internet的直接通信。如果互联网用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发送给用户。这种方式通过降低了向WEB服务器的请求数从而降低了WEB服务器的负载。

CDN网络:

CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

案例一

拓扑图:

image

 

1新建挂载点,挂载光盘

# mkdir /mnt/cdrom

# mount /dev/cdrom /mnt/cdrom

clip_image002

2.安装代理服务器软件squid

# cd /mnt/cdrom/Server/

# ll squid*

# rpm -ivh squid-2.6.STABLE21-3.el5.i386.rpm

clip_image002[4]

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

# vim /etc/squid/squid.conf

将2994 TAG: visible_hostname 修改为 visible_hostname www.abc.com

visible_hostname 后可随便写,当squid服务器出错时在网页上将显示visible_hostname 后的内容。但是如果不修改该项,squid 服务无法启动

clip_image004

4.修改开启的端口号。将http_port 3128 修改为只开启内网卡的3128 端口号,防止外网用户使用外网卡的3128 端口作为跳板,来***互联网其他用户

clip_image006

5.第405 行是进行ac l控制,下面根据 来源ip,目的ip,目的域名,目的域名关键字匹配,时间控制,url 控制,uri 控制来进行举例

6.限制来源ip

6.1 拒绝来自192.168.10.1 的ip通过代理服务器访问外网web服务器

acl badip src 192.168.10.1

http_access deny badip

clip_image008

默认允许所有通过

clip_image010

6.2 启动squid服务

clip_image012

6.3 搭建Windows server 2008 web服务器

打开服务器管理器,添加角色,安装Web服务器管理器

clip_image014

6.4 打开iis管理器

在站点目录下创建创建一个网页

双击默认文档图标,将index.html上移到顶

clip_image015

clip_image017

6.5 浏览网页

clip_image019

clip_image021

6.6 设置测试PC的浏览器的代理功能, 不用配置网关和dns指向,只需在浏览器中设置代理服务器的地址及其端口,其他的交给代理服务器来完成

clip_image001

clip_image003

6.7 测试 192.168.10.3 主机能够访问外网服务器

clip_image005

6.8 将 192.168.10.3 主机 的ip 地址为192.168.10.1

clip_image006

clip_image008[4]

查看squid日志 :tail -F /var/log/squid/access.log

clip_image010[4]

7. 控制目的ip 地址

7.1 拒绝访问目的ip为192.168.101.100 的服务器

# vim /etc/squid/squid.conf

acl badserver dst 192.168.101.100

http_access deny badserver

clip_image011

7.2 重启squid 服务,测试访问

clip_image002[6]

8.根据目的域名进行限制

8.1在Windows server 2008 上安装DNS服务

clip_image004[4]

打开DNS管理器,新建正向区域

clip_image006[4]

clip_image007

clip_image008

新建主机A记录

clip_image009

clip_image010

8.2 在不做规则限制时可以访问www.abc.com (也就是Windows Server 2008服务器)

clip_image012[4]

8.3 编辑 /etc/squid/squid.conf

acl baddomain dstdomain www.abc.com

http_access deny baddomain

clip_image002[8]

8.4 重启squid 服务后, 测试

访问被拒绝

clip_image004[6]

9.目的域名关键字匹配: - I 忽略大小写

acl baddomainstr dstdom_regex - I Abc

http_access deny baddomainstr

clip_image006[6]

clip_image008[6]

去掉 -I 参数

clip_image010[6]

clip_image012[6]

10.基于时间控制

clip_image014[4]

10.1 重启服务后,可以访问

clip_image016

10.2 查看系统时间

#date

clip_image002[10]

修改系统时间,使时间在worktime 范内

# date 083014002012

clip_image004[8]

clip_image006[8]

11 url 控制

11.1修改DNS 管理器,为正向区域abc.com 添加A记录 ,ftp.abc.com ,ip 地址和www.abc.com 相同。

clip_image007[4]

11.2 编辑/etc/squid/squid.conf

acl badurl url_regex -i ^http://www.abc.com

http_access deny badurl

clip_image009

clip_image011

访问ftp.abc.com 可以访问

clip_image013

12 基于URI控制

12.1 编辑 /etc/squid/squid.conf ,控制网页撒谎能够不显示.jpg图片

acl badpic urlpath_regex \.jpg$

http_access deny badpic

clip_image015

clip_image017[4]

clip_image019[4]

 

透明代理的实现

1.取消测试PC 浏览器代理设置

clip_image001[4]

2.

修改测试PC的网络参数

clip_image002

3.修改 /etc/squid/squid.conf

在http_port 192.168.10.2:3128 后加关键字: transparent

clip_image004[10]

4.打开路由转发功能

# vim /etc/sysctl.conf

clip_image006[10]

5. 使上步配置生效

# sysctl -p

clip_image008[8]

6.

# iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth1 -j REDIRECT --to-port 3128

# iptables -t nat -A POSTROUTING -p udp --dport 53 -o eth0 -j MASQUERADE

clip_image010[8]

7.测试

clip_image012[8]

 

 

案例二:

反向代理

拓扑图:

image

1.编辑/etc/squid/dquid.conf

image

2.缓存的邻居为父级Web服务器,端口为80,而且该服务器为源头服务器

image

3.重启squid 服务,测试连接

image