一.Squid简介:

Squid代理是目前使用非常普遍的一种将局域网和interner连接到一起的方式,其优点是:

1, 可以预存缓存,减轻服务器的访问压力,同是也可以提高client的访问速度。例如我们平时用的126163,都是基于squid代理

2, 在一定程度上很大的解决了IP紧张的问题。

3, 它可以对web访问的方式基于应用层内容进行过滤控制,同时因为它介于服务器和client之间,在一定程度上提高了服务器的安全性。

缺点:

Squid支持的服务种类较少:HTTP. FTP.

二.Squid根据代理的方式分为普通代理,透明代理,反向透明代理。

1. 标准的代理缓冲服务器

一个标准的代理缓冲服务器主要用来存储用户访问过的网页信息,当clientsquid服务器请求时,squid服务器在向web请求数据,将数据传给client的同时会缓存一份在自己缓存器中,在一定时间内有同样的请求时,squid就不用再向webserver请求数据,而是直接将缓存中的数据恢复给库户端,这样既提高了client的访问速度,又大大减轻了服务器的访问压力。但是其最大的缺点是client需要在自己的web浏览器中配置squid代理服务器的地址和端口号,这很大程度上增加了client的难度和网络管理员的管理难度。因此出项了下面的透明代理

2. 透明代理缓冲服务器

透明代理缓冲服务和标准代理服务器的功能完全相同。但是,代理操作对客户端的浏览器是透明的(即无需指明代理服务器的IP和端口)。我们需要在linux squid代理服务器上做最一些相应的改动,并做iptables的端口转发即可。这对与企业的网管主机共享接入到Internet很实用。

3. 反向代理缓冲服务器

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

三.Squid的基本配置

1.软件包名:squid-2.6.STABLE6

 服务名:squid

 主程序:/usr/sbin/squid

 配置目录:/etc/squid/

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

 默认监听端口:TCP 3128

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

2.常用配置项

 http_port 3128 监听端口

cache_mem 64 MB  代理进程所使用的内存大小(为自己物理内存的1/3即可)

maximum_object_size 4096 KB 最大缓存对象的大小

reply_body_max_size 10240000 allow all 用户能访问的最大文件大小

access_log /var/log/squid/access.log squid 监听日志

visible_hostname proxy.test.com   可见主机名

cache_dir ufs (unix file system) /var/spool/squid (为缓存目录分配的磁盘空间) 100 (为缓存目录分配的磁盘空间(MB 16 (缓存空间的一级子目录个数)256 (缓存空间的二级子目录个数)

3.常用命令

Squid z 初始化缓存

Squid -k parser 分析配置文件语法错误

Squid -d 调试启动 -D 启动squid服务。

四.实验实现squid

实验环境:

外网:192.168.0.254 httpdftp

Squideth0 192.168.0.20

       eth1 10.0.2.150

内网:10.0.2.20

注意:

Squid默认是deny all的。我们需要事先在squid.conf配置文件中在http_access deny all 的前面加入http_access allow all。启动squid代理服务。在10.0.2.20IE中加入squid的端口号以及IP地址。显示出 RedHat enterprise test page为正常

下面我们来正是开始我们的实验:

1. 实现透明代理

透明代理的实现步骤:

安装squid:yum install squid -y

修改squid.conf配置文件,vim /etc/squid/squid.conf

http_port 192.168.0.20:8080 transparent

启动服务:# service squid start

添加iptables规则:

# iptables -t nat -A PREROUTING -i eth1 -s 10.0.2.150 -p tcp --dport 80 -j REDIRECT --to-ports 8080

实验效果验证(不需要在浏览器中指定代理服务器的地址、端口) http;//192.168.0.254

2. 实现反向透明代理

http_port 218.29.30.31:80 vhost

cache_peer 192.168.10.7 parent 80 0 originserver weight=5 max-conn=30

cache_peer 192.168.10.8 parent 80 0 originserver weight=5 max-conn=30

注意:

这里需要注意的是反向透明代理是不能和透明代理一块的实现的。

我们需要取消掉刚才透明代理的配置,再开始做反向透明代理。

反向透明代理的实现步骤

# vim /etc/squid/squid.conf 在配置文件中添加如下语句:

http_port 10.0.2.100:80 vhost

cache_peer 192.168.0.254 parent 80 0 originserver weight=5 max-conn=30

测试

在地址栏输入 http;//10.0.2.100 出现测试页为正常

查看日志记录

# tail -1 /var/log/squid/access.log


五. 访问控制规则的匹配顺序

1.①没有设置任何规则时: 将拒绝所有客户端的访问请求

②有规则但找不到相匹配的项时:将采用与最后一条规则相反的权限,即如果最后一条规则是allow,那么就拒绝客户端的请求,否则允许该请求

③当两个命令罗列到一块是取其交集

2.一些常用选项:

src  源地址

dst 目标地址

port 端口

srcdomain 来源域限制

dstdomain 转发域限制

time 时间限制

maxconn 最大连接数限制

url_regex 正则表达式限制

urlpath_regex 正则表达路径限制

arp mac限制

proto 协议限制

3.规则示例:

acl LAN1 src 192.168.10.0/24

acl PC1 src 192.168.10.12/32

acl Blk_Domain dstdomain .qq.com

acl Work_Hours time MTWHF 08:30-17:30

acl Max20_Conn maxconn 20

acl Blk_URL url_regex -i ^rtsp:// ^mms://

acl Blk_Words urlpath_regex -i sex adult

acl RealFile urlpath_regex -i \.rmvb$ \.rm$

要求:

允许10.0.2.0网段的主机在每天的800-1800登录192.168.0.254ftp服务,但是不能下载pdf格式的文件。

允许10.0.2.0网段的主机在2200 -2359 0000-800 访问服务器的httpd服务

在配置文件中做如下修改:

acl srcnetwork src 10.0.2.0/24 来源限制

acl desnetwork dst 192.168.0.0/24

acl ftptime time 8:00-18:00

acl httptime time 22:00-23:59

acl httptime time 00:00-8:00

acl ftp proto FTP

acl http proto HTTP

acl class url_regex ^.*\.pdf$

http_access allow srcnetwork desnetwork ftptime ftp !class

http_access allow srcnetwork desnetwork httptime http

 保存退出,进行实验效果的验证