本章将学习Squid代理服务器的构建与控制,Squid是Linux系统中最常用的一款开源代理服务软 件(官方网站为http://www.squid-cache.crg),可以很好地实现HTTP和FTP,以及DNS查询、SSL 等应用的缓存代理,功能十分强大。
????????作为应用层的代理服务软件,Squid主要提供缓存加速、应用层过滤控制的功能。
当客户机通过代理来请求Web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已 经有客户机需要的页面,则直接将缓存中的页面内容反馈给客户机:如果缓存中没有客户机要访问 的页面,则由代理服务器向lhternet发送访问请求,获得返回的Web页面以后,将网页数据保存到缓 存中并发送给客户机,如图下图所示
????????HTTP代理的缓存加速对象主要是文字,图像等静态Web元素,使用缓存机制后,当客户机在不 同的时候访问同一Web元素,或者不同的客户机访问相同的Web元素时,可以直接从代理服务器的 缓存中获得结果。这样就大大减少了向lhternet 提交重复的Web请求的过程,提高了客户机的 Web 访问响应速度。
????????由于客户机的Web访问请求实际上是由代理服务器来代替完成的,从而可以隐藏用户的真实P 地址.起到一定的保护作用。另一方面,代理服务器担任着类似“经纪人”的角色,可以针对要访 问的目标、客户机的地址、访问的时间段等进行过滤控制。
?根据实现方式不同,代理服务可分为传统代理和透明代理两种常见的代理服务。
>传统代理:也就是普通的代理服务,首先必须在客户机的浏览器、QQ聊天工具、下载软件 等程序中手动设置代理服务器的地址和端口,然后才能使用代理来访问网络,对于网页浏 览器,访问网站时的域名解析请求也会发给指定的代理服务器。
>透明代理:提供与传统代理相同的功能和服务,其区别在于客户机不需要指定代理服务器 的地址和端口.而是通过默认路由、防火墙策略将Web访问重定向,实际仍然交给代理服 务器来处理。重定向的过程对客户机来说是“透明”的,用户甚至并不知道自己在使用代 理服务,所以称为透明代理.使用透明代理时,网页浏览器访问网站时的域名解析请求将优 先发给DNS 服务器。
????????实际应用中,传统代理多见于Internet 环境,如为QQ程序使用代理可以隐藏本机真实IP地址、 为下载工具使用多个代理可以规避服务器的并发连接限制。而透明代理多见于局域网环境,如在Linux 网关中启用透明代理后,局域网主机无须进行额外设置就可以享受更好的上网速度。
????????配置Squid的编译选项时,将安装目录设为/usr/local/squid,其他具体选项根据实际需要来定, 配置前可参考“./configure--help”给出的说明。
[root@lgcllc ~]# rz -E //把源码包squid-3.5.23.tar.gz拉进来
rz waiting to receive.
[root@lgcllc ~]# tar zxf squid-3.5.23.tar.gz
[root@lgcllc ~]# cd squid-3.5.23/
[root@lgcllc squid-3.5.23]# ./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-linux-netfilter --enable-async-io=240 --enable-default-err-language=Simplify_Chinese --disable-poll --enable-epoll --enable-gnuregex
[root@lgcllc squid-3.5.23]# make && make install
安装完成后,创建链接文件、创建用户和组。
[root@lgcllc squid-3.5.23]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
[root@lgcllc squid-3.5.23]# useradd -M -s /sbin/nologin squid
[root@lgcllc squid-3.5.23]# chown -R squid:squid /usr/local/squid/var/
????????Squid 服务的配置文件位于/etc/squid.conf,充分了解配置行的作用将有助于管理员根据实际情 况灵活配置代理服务。
[root@lgcllc ~]# vim /etc/squid.conf //在监听端口配置项下面配置添加下列配置项
。。。。。。
cache_effective_user squid
cache_effective_group squid
?
默认情况下,配置文件中不包括 cache_effective_user 与 cache_effective_group 配置项,需要手 动添加。?
(1)检查配置文件语法是否正确
[root@lgcllc ~]# squid -k parse
(2)启动、停止Squid
第一次启动Squid 服务时,会自动初始化缓存目录。在没有可用的Squid 服务脚本的情况下,也 可以直接调用Squid程序来启动服务,这时需要先进行初始化。
[root@lgcllc ~]# squid -z //-z选项用来初始化缓存目录
[root@lgcllc ~]# squid //启动squid服务
确认Squid服务处于正常监听状态。
[root@lgcllc ~]# netstat -anpt | grep squid
(3)使用Squid?服务脚本
为了使Squid服务的启动、停止,重载等操作更加方便,可以编写Squid服务脚本,并使用chkconfig 和systemctl 工具来进行管理。
[root@lgcllc ~]# vim /etc/init.d/squid
#!/bin/bash
# chkconfig: 2345 90 25
# config: /etc/squid.conf
# pidfile: /usr/local/squid/var/run/squid.pid
# Description: Squid - Internet Object Cache.
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
start)
netstat -anpt | grep squid &> /dev/null
if [ $? -eq 0 ]
then
echo "Squid is running"
else
echo "正在启动squid..."
$CMD
fi
;;
stop)
$CMD -k kill &> /dev/null
rm -rf $PID &> /dev/null
;;
status)
[ -f $PID ] &> /dev/null
if [ $? -eq 0 ]
then
netstat -anpt | grep squid
else
echo "Squid is not running."
fi
;;
restart)
$0 stop &> /dev/null
echo "正在关闭squid..."
$0 start &> /dev/null
echo "正在启动squid..."
;;
reload)
$CMD -k reconfigure
;;
check)
$CMD -k parse
;;
*)
echo "用法:$0 {start | stop | restart | reload | check | status}"
;;
esac
[root@lgcllc ~]# chmod +x /etc/init.d/squid
[root@lgcllc ~]# chkconfig --add squid
[root@lgcllc ~]# systemctl restart squid
这样一来,就可以通过Squid脚本来启动、停止,重启、重载Squid服务器了,方法是在执行 /etc/init.d/squid 脚本时添加相应的start.stop.restart 参数或通过systemctl 命令控制Squid 服务。
????????配置 Squid实现传统代理服务时,需要注意添加 http_access allow all 访问策略,以便允许任意 客户机使用代理服务,除此以外,为了限制下载的文件大小,还需要设置reply_body_max_size 项. 其他各种参数均可保持默认。
[root@lgcllc ~]# vim /etc/squid.conf
?
修改squid.conf 配置文件以后,需要重新启动服务方可生效。执行‘systemctl restart squid”或 “squid -k reconfigure”,都可以重新加载服务配置。
[root@lgcllc ~]# squid -k reconfigure
在Edge浏览器中,单击如图13.3所示的框选的“…”位置,然后选择“设置”→“查看高级 设置”→“打开代理设置”,打开“设置”窗口,在“手动设置代理”选项组中单击“使用代理服 务器”选项下面的开关项,并添加代理服务器地址与端口.单击“保存”按钮即可生效?