一、squid服务基础:
1.1缓存代理的概述:
代理的工作机制
当客户机通过代理来请求Web页面时.指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要的页面,则直接将缓存中的页面内容反馈给客户机:如果缓存中没有客户机要访问的页面,则由代理服务器向Internet发送访问请求.获得返回的Web页面以后.将网页数据保存到缓存中并发送给客户机。HTTP代理的缓存加速对象主要是文字.图像等静态Web元素。使用缓存机制后,当客户机在不同的时候访问同-Web元素.或者不同的客户机访问相同的Web元素时,可以直接从代理服务器的缓存中获得结果。这样就大大减少了向 Internet 提交重复的Web请求的过程,提高了客户机的 Web访问响应速度。
代理的基本类型
根据实现方式不同,代理服务可分为传统代理和透明代理两种常见的代理服务。
传统代理:也就是普通的代理服务.首先必须在客户机的浏览器.QQ聊天工具.下载软件等程序中手动设置代理服务器的地址和端口.然后才能使用代理来访问网络。对于网页浏览器.访问网站时的域名解析请求也会发给指定的代理服务器.
透明代理:提供与传统代理相同的功能和服务.其区别在于客户机不需要指定代理服务器的地址和端口,而是通过默认路由.防火墙策略将Web访问重定向.实际仍然交给代理服务器来处理。重定向的过程对客户机来说是“透明”的.用户甚至并不知道自己在使用代理服务.所以称为透明代理。使用透明代理时,网页浏览器访问网站时的域名解析请求将优先发给DNS服务器。
1.2编译安装squid:
配置Squid的编译选项时,将安装目录设为/usr/ local/squid,其他具体选项根据实际需要来定,配置前可参考./configure —-help”给出的说明。
[root@localhost squid-3.5.23]# ./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-linnux-netfilter --enable-async-io=240 --enable-default-err-language=Simplify_Chinese --disable-poll --enable-epoll --enable-gnuregex
[root@localhost squid-3.5.23]# make
[root@localhost squid-3.5.23]# make install
--prefix=/usr / local / squid:安装目录。
--sysconfdir=/etc:单独将配置文件修改到其他目录。
--enable—linux--netfilter:使用内核过滤。
--enable-async一io=值:异步I/O.,提升存储性能,相当于“--enable-pthreads --enable-storeio=ufs . aufs --with -pthreads --with-aufs一thread=值”.
--enable一default-err—language=Simplify_Chinese;错误信息的显示语言.
--disable-poll 与---enable一epoll:关闭默认使用poll模式.开启epoll模式提升性能。
--enable一gnuregex:使用GNU正则表达式。
安装完后,创建链接文件.创建用户和组.
[root@localhost squid-3.5.23]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
[root@localhost squid-3.5.23]# useradd -M -s /sbin/nologin squid
[root@localhost squid-3.5.23]# chown -R squid:squid /usr/local/squid/var/
1.3Squid 的配置文件
Squid 服务的配置文件位于/etc/squid , conf,充分了解配置行的作用将有助于管理员根据实际情况灵活配置代理服务。
cache_effective_user squid
##这一项指定squic的程序用户,用来设置初始化、运行时缓存的账号,否则启动不成功!
cache_effective_group squid
1.4 Squid的运行控制
检查配置文件语法是否正确
[root@localhost squid-3.5.23]# squid -k parse
启动、停止 Squid
第一次启动Squid服务时,会自动初始化缓存目录。在没有可用的Squid服务脚本的情况下,也可以直接调用Squid程序来启动服务,这时需要先进行初始化。
[root@localhost ~]# squid -z
[root@localhost ~]# squid
确认Squid服务处于正常监听状态。
[root@localhost ~]# netstat -anpt | grep "squid"
使用Squid服务脚本
为了使Squid服务的启动.停止.重载等操作更加方便.可以编写Squid服务脚本,并使用chkconfig和systemctl工具来进行管理。
[root@localhost ~]# 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
这样一来.就可以通过Squid 脚本来启动、停止.重启.重载Squid 服务器了.方法是在执行/etc/init .d/ squid脚本时添加相应的start、stop、restart参数或通过systemctl 命令控制Squid服务。
二、构建代理服务器:
2.1传统代理:
使用传统代理的特点在于.客户机的相关程序〈如E浏览器.QQ聊天软件)必须指定代理服务器的地址.端口等基本信息。下面通过一个简单的应用案例来学习传统代理的配置和使用方法。
Squid服务器的配置
配置 Squid实现传统代理服务时.需要注意添加http_access allow all访问策略.以便允许任意客户机使用代理服务。除此以外,为了限制下载的文件大小,还需要设置reply._body..max_size项,其他各种参数均可保持默认。
修改squid .conf 配置文件.
[root@localhost ~]# vim /etc/squid.conf
reply_body_max_size 10 MB
http_access allow all
重载squid服务
修改squid .conf配置文件以后.需要重新启动服务方可生效。执行“systemctl restart squid”或"squid -k reconfigure”,都可以重新加载服务配置。
[root@localhost ~]# systemctl restart squid
客户机配置
2.2透明代理:
透明代理提供的服务功能与传统代理是--致的,但是其“透明”的实现依赖于默认路由和防火墙的重定向策略,因此更适用于为局域网主机服务.而不适合为internet 中的客户机提供服务。下面也通过一个简单的应用案例来学习透明代理的配置和使用。
1.配置Squid支持透明代理
Squid服务的默认配置并不支持透明代理.因此需要调整相关设置。对于2.6以上版本的Squid服务.只要在htp_port配置行加上一个“transparent”(透明)选项.就可以支持透明代理了。
2.设置firewalld的重定向策略
透明代理中的Squid服务实际上是构建在Linux网关主机上的,因此只需正确设置防火墙策略.就可以将局域网主机访问Internet的数据包转交给Squid进行处理。这需要用到firewalld的P伪装与端口转发策略,其作用是实现本机端口的重定向.将访问网站协议HTTP、HTTPS的外发数据包转交给本机的Squid 服务(3128端口).
防火墙做端口转发操作,将访问本机80、443端口的请求转发到3128端口。