一.Squid简介:
Squid代理是目前使用非常普遍的一种将局域网和interner连接到一起的方式,其优点是:
1, 可以预存缓存,减轻服务器的访问压力,同是也可以提高client的访问速度。例如我们平时用的126,163,都是基于squid代理
2, 在一定程度上很大的解决了IP紧张的问题。
3, 它可以对web访问的方式基于应用层内容进行过滤控制,同时因为它介于服务器和client之间,在一定程度上提高了服务器的安全性。
缺点:
Squid支持的服务种类较少:HTTP. FTP.
二.Squid根据代理的方式分为普通代理,透明代理,反向透明代理。
1. 标准的代理缓冲服务器
一个标准的代理缓冲服务器主要用来存储用户访问过的网页信息,当client向squid服务器请求时,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 (httpd,ftp)
Squid:eth0 192.168.0.20
eth1
内网:
注意:
Squid默认是deny all的。我们需要事先在squid.conf配置文件中在http_access deny all 的前面加入http_access allow all。启动squid代理服务。在
下面我们来正是开始我们的实验:
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
实验效果验证(不需要在浏览器中指定代理服务器的地址、端口) 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
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$
要求:
允许
允许
在配置文件中做如下修改:
acl srcnetwork src
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