squid 作为一款服务器代理工具,可以缓存网页对象,减少重复请求,从而达到加快网页访问速度,隐藏客户机真实IP,更为安全。 squid的工作机制: 当我们客户机通过squid代理去访问w
squid的工作机制:
当我们客户机通过squid代理去访问web页面时,指定的代理服务器会先检查自己的缓存,若是缓存中有我们客户机需要的页面,那么squid服务器将直接把缓存中的页面内容返回给客户机,如果缓存中没有客户端请求的页面,那么squid代理服务器就会向internet发送访问请求,获得返回的web页面后,将网页的数据保存到缓存中并发送给客户机。
由于客户机的web访问请求实际上是squid代理服务器来代替完成的,所以隐藏了用户的真实IP地址,从而起到一定的保护作用。
另一方面,squid也可以针对要访问的目标、客户机的地址、访问的时间段进行过滤控制。
根据实现的方式不同,基本可以分为传统代理和透明代理两种方式:
传统代理:也就是普通的代理服务,需要我们客户端在浏览器、聊天工具等一些程序中设置代理服务器的地址和端口,然后才能使用代理来访问网络,这种方式相比较而言比较麻烦,因为客户机还需手动指定代理服务器,所以一般用于Internet环境。
透明代理:与传统代理实现的功能是一样的,区别在于客户机不需要手动指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将web访问重定向,实际上仍然交给代理服务器来处理,重定向的过程完全是由squid服务器进行的,所以对于客户机来说,甚至不知道自己使用了squid代理服务,因此呢,我们称之为透明模式。
透明代理多用于局域网环境,如在Linux网关中启用透明代理后,局域网主机无须进行额外设置就能享受更好的上网速度。
首先编译安装 Squid:
[[email protected] media]# tar zxf squid-3.5.23.tar.gz -C /usr/src/ [[email protected] media]# cd /usr/src/squid-3.5.23 [[email protected] 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
上述选项含义:
--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 正则表达式。
[[email protected] /]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/ # 将程序文件做链接,方便服务使用 [[email protected] /]# useradd -M -s /sbin/nologin squid # 创建系统账户 [[email protected] /]# chown -R squid:squid /usr/local/squid/var/ # 设置属主 属组
修改 Squid 的配置文件:
[[email protected] /]# vim /etc/squid.conf ........... http_port 3128 #用来指定代理服务器监听地址和端口,默认存在该行(默认端口号是3128) cache_effective_user squid #用来指定squid的程序用户,用来设置初始化等相关信息。 #否则启动不成功,该行及下一行配置项默认不存在。 cache_effective_group squid #用来指定运行组。需手动添加该行
[[email protected] /]# squid -k parse # 用来检查配置文件语法是否正确,只要在输出的信息中没有ERROR字样说明没毛病 [[email protected] /]# squid -z #初始化缓存目录。 [[email protected] /]# squid #启动squid服务。
为了使 Squid 服务的启动、停止、重载更加方便,可以编写一个 Squid 服务脚本,并添加为系统服务:
[[email protected] /]# 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 [[email protected] /]# chmod +x /etc/init.d/squid #赋予脚本执行权限 [[email protected] /]# chkconfig --add squid #添加为系统服务 [[email protected] /]# systemctl restart squid #重启服务以测试脚本是否可用
基于传统代理的squid代理服务器已经配置完成了,web 服务器配置过程省略,可以参考博文:https://blog.51cto.com/14227204/2424170 来搭建 web 服务器
现在开启客户端进行验证:
打开浏览器手动指定代理:
指定代理服务器 IP 及端口号
这里没有配置 DNS 服务,所以使用IP进行的验证: