Squid 代理
目标:
了解 squid 的工作原理,熟练掌握 squid 的配置,实现其普通代理,透明代理,方向透明代理, http_access 控制
内容:
A.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 服务器的负载
B.Squid 的基本配置
v squid 软件包
Ü 软件包名: squid-2.6.STABLE6
Ü 服务名: squid
Ü 主程序: /usr/sbin/squid
Ü 配置目录: /etc/squid/
Ü 主配置文件: /etc/squid/squid.conf
Ü 默认监听端口: TCP 3128
Ü 默认访问日志文件: /var/log/squid/access.log
v 常用配置项
Ü 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 ( 缓存空间的二级子目录个数 )
常用命令
Squid –z 初始化缓存
Squid -k parser 分析配置文件语法错误
Squid -d 调试启动 -D 启动 squid 服务。
我们来做个简单实验来实现一个简单的透明代理:
实验环境 :
外网: 192.168.0.254 ( httpd , ftp )
Squid : eth0 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.20 的 IE 中加入 squid 的端口号以及 IP 地址。显示出 RedHat enterprise test page 为正常
下面我们来正是开始我们的实验:
1. 实现透明代理
透明代理的实现步骤:
修改 squid.conf 配置文件,并重新加载该配置
http_port 192.168.0.20:8080 transparent
[root@congtou squid]# service squid reload
添加 iptables 规则
[root@congtou squid]# 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
注意:
这里需要注意的是反向透明代理是不能和透明代理一块的实现的。
我们需要取消掉刚才透明代理的配置,再开始做反向透明代理。
反向透明代理的实现步骤
[root@mail postfix]# 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
cache_peer Web 服务器地址 服务器类型 http 端口 icp 端口 [ 可选项 ]
( 因为我们这里只有一个 web 服务服务器,这里的意思是想让大家了解下这个语句的用法 ) 权重为 5 ,最大的链接数为 30
测试
在 10.0.2.150 地址栏输入 http;//10.0.2.100 出现测试页为正常
查看日志记录
[root@congtou named]# tail -1 /var/log/squid/access.log
1267973512.539 40 10.0.2.150 (source) TCP_MISS/200 2795 GET http://10.0.2.100 (destination) /icons/apache_pb2.gif - FIRST_UP_PARENT/192.168.0.254 ( server )image/gif
下面我们来做一些访问规则的配置测试
v 访问控制规则的匹配顺序
Ü 没有设置任何规则时
—— 将拒绝所有客户端的访问请求
Ü 有规则但找不到相匹配的项时
n 将采用与最后一条规则相反的权限,即如果最后一条规则是 allow ,那么就拒绝客户端的请求,否则允许该请求
n 当两个命令罗列到一块是取其交集
选项:
Ü src
Ü dst
Ü port
Ü srcdomain 来源域限制
Ü dstdomain 转发域限制
Ü time 时间限制
Ü maxconn 最大连接数限制
Ü url_regex 正则表达式限制
Ü urlpath_regex 正则表达路径限制
Ü arp mac 限制
Ü proto 协议限制
规则示例:
Ü 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 网段的主机在每天的 8 : 00-18 : 00 登录 192.168.0.254ftp 服务,但是不能下载 pdf 格式的文件。
允许 10.0.2.0 网段的主机在 22 : 00 -23 : 59 00 : 00-8 : 00 访问服务器的 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 ========== 》经测试成功,以上均成功
其他的命令大家可以自己测试试试。
Over