squid作为一款应用层的代理服务软件,它主要提供了缓存加速、应用层过滤的功能。
squid代理服务器的工作机制:
当我们客户机通过squid代理去访问web页面时,指定的代理服务器会先检查自己的缓存,若是缓存中有我们客户机需要的页面,那么squid服务器将直接把缓存中的页面内容返回给客户机,如果缓存中没有客户端请求的页面,那么squid代理服务器就会向internet发送访问请求,获得返回的web页面后,将网页的数据保存到缓存中并发送给客户机。
由于客户机的web访问请求实际上是squid代理服务器来代替完成的,所以隐藏了用户的真实IP地址,从而起到一定的保护作用。
另一方面,squid也可以针对要访问的目标、客户机的地址、访问的时间段进行过滤控制。
根据实现的方式不同,基本可以分为传统代理和透明代理两种方式:
传统代理:也就是普通的代理服务,需要我们客户端在浏览器、聊天工具等一些程序中设置代理服务器的地址和端口,然后才能使用代理来访问网络,这种方式相比较而言比较麻烦,因为客户机还需手动指定代理服务器,所以一般用于Internet环境。
透明代理:与传统代理实现的功能是一样的,区别在于客户机不需要手动指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将web访问重定向,实际上仍然交给代理服务器来处理,重定向的过程完全是由squid服务器进行的,所以对于客户机来说,甚至不知道自己使用了squid代理服务,因此呢,我们称之为透明模式。
透明代理多用于局域网环境,如在Linux网关中启用透明代理后,局域网主机无须进行额外设置就能享受更好的上网速度。
就此打住,不说废话,开始安装及优化squid服务器:
来吧,先来搭建一个传统代理:
所需设备:
1、Windows客户端一个;
2、squid服务器一个,具有两块网卡;
3、web服务器一个;
所需squid源码包:
链接:https://pan.baidu.com/s/1RoWEOxLH1yFHSL07pralYw
提取码:sdnx
或者直接去官网下载:
http://www.squid-cache.org/Versions/
网络环境如下:
1、开始实施安装:
[root@localhost src]# tar zxf squid-3.5.23.tar.gz
[root@localhost src]# cd squid-3.5.23/
[root@localhost 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-gunregex && make && make install
上述配置项的具体作用如下:
--prefix=/usr/local/squid :指定安装目录;
--sysconfdir=/etc :单独将配置文件修改到其他目录;
--enable-linux-netfilter:使用内核过滤;
--enable-async-io=值:异步I/O,提升存储性能;
--enable-default-err-language=Simplify_Chinese :错误信息显示语言。
--disable-poll 与--enable-epoll:关闭默认使用poll模式,开启epoll模式提提升性能;
--enable-gunregex:使用GUN正则表达式。
更多的配置项可以参考“./configure --help”。
安装完成后,创建链接文件、创建用户和组:
[root@localhost /]# # ln -s /usr/local/squid/sbin/* /usr/local/sbin/
[root@localhost /]# useradd -M -s /sbin/nologin squid
[root@localhost /]# chown -R squid:squid /usr/local/squid/var/
2、修改squid的配置文件:
[root@localhost /]# vim /etc/squid.conf
...........................
http_port 3128 #用来指定代理服务器监听地址和端口,默认存在该行(默认端口号是3128)
cache_effective_user squid #用来指定squid的程序用户,用来设置初始化等相关信息。
#否则启动不成功,该行及下一行配置项默认不存在。
cache_effective_group squid #用来指定运行组。需手动添加该行
...........................
3、squid服务的运行控制:
[root@localhost /]# squid -k parse
#检查配置文件语法是否正确,只要在输出的信息中没有ERROR字样即可。
[root@localhost /]# squid -z #初始化缓存目录。
[root@localhost /]# squid #启动squid服务。
#为了方便控制服务,编写一个squid服务脚本,并添加为系统服务,脚本如下:
[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
[root@localhost /]# chmod +x /etc/init.d/squid #赋予脚本执行权限
[root@localhost /]# chkconfig --add squid #添加为系统服务
[root@localhost /]# systemctl restart squid #重启服务以测试脚本是否可用
现在基于传统代理的squid代理服务器已经配置完成了,模拟的web服务器省略配置过程,可参考博文:https://blog.51cto.com/14154700/2391114 搭建web服务器。现在开启客户端进行配置及验证:
1、打开浏览器,手动指定代理服务器:
1)
2)
3)指定代理服务器IP及端口号:
4)访问验证(看到了网站默认的首页):
这里没做DNS服务,若需要DNS服务,参考博文:https://blog.51cto.com/14154700/2357252
至此,基于传统代理的部署已经完成,并测试成功。
配置squid服务器的透明代理参考博文: https://blog.51cto.com/14154700/2406121