码迷,mamicode.com
首页 > 其他好文 > 详细

【实战】Squid 缓存服务器 之 传统代理 + 透明代理

时间:2018-09-20 17:20:01      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:etc   9.png   防火   字节   发送请求   user   eve   机制   oss   

目录:

1· Squid代理的概述原理
2· 代理的基本类型
3· Squid 服务脚本
4· 构建代理服务器(传统代理、透明代理)
5· 总结


Squid代理的概述原理

1)代理的工作机制


1.什么是 Squid ?

Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。


2·缓存的工作原理

squid 是工作在应用层的代理服务软件,squid 主要提供缓存加速和应用层过滤控制的功能。在这里举个列子:当客户机通过代理来请求 web 页面时,那么代理服务器会检查自己有没有你请求的页面,有的话就直接发送给客户端,没有的话,代理服务器就会向web发送请求,当获得了web页面后,就会把数据保存到缓存中,并发给客户端。


下图是代理服务的缓存机制过程:
技术分享图片


2)·HTTP 代理的缓存说明:


HTTP代理的缓存加速对象主要针对文字、图像等静态 Web 元素。使用缓存机制后,客户端在访问 同一 Web 元素,就可以直接从代理服务器的缓存中得到你想要的。这样做的好处就减少 对 Web 请求的过程,提高了客户端的访问速度


还有就是客户机访问的 Web 访问请求实际上是由代理服务器带完成的,这样就可以隐藏用户的真实 IP,有一定的保护作用,代理服务器还有机会对访问的目标、客户机的地址、访问的时间段进行过滤控制。


代理的基本类型与应用方向:

1)传统代理:

也就是普通的代理服务,比如我们用的浏览器、QQ聊天工具等需要手动设置代理服务器的地址和端口,才能使用代理服务的。


下图是浏览器设置代理服务器地址图:


技术分享图片


对以上图说明:每个软件或者是浏览器设置代理服务器的位子是不一样的,只要找到选项,几乎就在里面,设好代理服务器的地址与端口即可。


2)应用方向

传统代理:多用于 Internet 环境,QQ 程序、下载工具等,可以规避服务器的并发连接。


透明代理:多用于局域网环境,比如在 Linux 网关中启用代理,局域网主机就不用再进行额外的设置就能更快的访问。


传统代理服务器部署

部署前说明:

1·部署环境是:CenOS 7.4


2·部署方式:手工编译, 版本为 Squid 3.4.6


3·提供源码包下载地址:Squid 缓存源码包,需要请点击 密码:63xn


传统代理服务器拓扑图如下:


技术分享图片


开始部署:
1)编译安装 Squid,现在是手工编译的,在这之前我们需要把源码包下载,进行解压,安装编译环境、指定安装路径与功能模块等

[root@localhost ~]# tar zxvf squid-3.4.6.tar.gz -C /opt/ ----(解压到 /opt 目录下


[root@localhost ~]# yum install gcc gcc-c++ make -y ----(安装编译环境


[root@localhost ~]# cd /opt/squid-3.4.6/
[root@localhost squid-3.4.6]# ./configure --prefix=/usr/local/squid \
> --sysconfdir=/etc \
> --enable-arp-acl \
> --enable-linux-netfilter \
> --enable-linux-tpoxy \
> --enable-async-io=100 \
> --enable-err-language="Simplify_Chinese" \
> --enable-underscore \
> --enable-poll \
> --enable-gnuregex


2)对以上模块解释:

1·指定安装路径
2·单独将配置文件放在 /etc
3·可以在规则中设置为直接通过客户端MAC进行管理,防止客户端使用IP欺骗
4·使用内核过滤
5·支持透明模式
6·异步 I/O,提升存储性能
7·错误信息的显示语言
8·允许 URL 中有下划线
9·使用POLL()模式,提升性能
10·使用GNU 正则表达式


[root@localhost squid-3.4.6]# make && make install ----(制作、编译安装,这里等待的时间需要稍长一点,请耐心等待


3)安装完毕,现在需要对 Squid 进行一些优化,使以后我们用起来更加符合日常日操作习惯


[root@localhost squid-3.4.6]# ln -s /usr/local/squid/sbin/ /usr/local/sbin ——(创建软连接)


[root@localhost squid-3.4.6]# useradd -M -s /sbin/nologin squid ---(创建管理用户)


[root@localhost squid-3.4.6]# chown -R squid.squid /usr/local/squid/var/


4)修改主配置文件,有图有文字说明:

[root@localhost squid-3.4.6]# vim /etc/squid.conf ----(在编译的时候就指定了主配置文件放在 /etc 下


修改如下内容:

http_access allow all -----(需要添加,意思是运行所有人访问http,这里相当于是一个ACL访问控制列表
cache_effective_user squid ------(添加指定的程序用户
cache_effective_group squid ------(添加 指定的账号基本组


下图是配置文件添加内容:


技术分享图片


检查配置文件语法,看看是否有报错:

[root@localhost squid-3.4.6]# squid -k parse ---(检查语法,有报错问题几乎是配置文件的问题)


编写 Squid 启动脚本

[root@localhost squid-3.4.6]# vim /etc/init.d/squid


编写内容如下:


#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
start)
netstat -antp | grep squid &> /dev/null
if [ $? -eq 0 ]
then
echo "squid is running"
else
echo "正在启动 squid...."
$CMD
fi
;;
stop)
$CMD -k kill &> /dev/nulll
rm -rf $PID &> /dev/null
;;
status)
[ -f $PID ] &> /dev/null
if [ $? -eq 0 ]
then
netstat -antp | 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|status|reload|check|restart}"
;;
esac


优化 squid 与 启动脚本

[root@localhost squid-3.4.6]# chmod +x /etc/init.d/squid ---(给脚本执行权限
[root@localhost squid-3.4.6]# chkconfig --add squid ----(加入系统服务
[root@localhost squid-3.4.6]# chkconfig --level 35 squid on ----(设置开机自启


到此 Squid 服务基本配置完成。接下来我们需要先来做传统代理模式


[root@localhost squid-3.4.6]# vim /etc/squid.conf ---(修改配置文件)


添加内容如下:
cache_mem 64 MB ---(#指定缓存功能使用的内存空间大小,以便于保持访问较频繁的web对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4)


reply_body_max_size 10 MB ----(允许用户下载的最大文件大小,以字节为单位,默认0,表示不限制


maximum_object_size 4096 KB ---(允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户)


下图是修改后的配置文件:
技术分享图片


启动前准备:


[root@localhost squid-3.4.6]# squid -k parse ---(再次检查配置文件语法


[root@localhost squid-3.4.6]# squid -z ---(初始化缓存目录


[root@localhost squid-3.4.6]# iptables -F ----(清空防火墙规则,便于之后我们自己填写策略)
[root@localhost squid-3.4.6]# iptables -t nat -F


[root@localhost squid-3.4.6]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT ---(添加防火墙策略:允许 tcp 协议 3128端口通过)‘
[root@localhost squid-3.4.6]# setenforce 0 ---(关闭增强功能)


[root@localhost squid-3.4.6]# service squid start ----(启动服务)
正在启动 squid...


[root@localhost squid-3.4.6]# netstat -antp | grep 3128 ----(查看启动端口
tcp6 0 0 :::3128 :::* LISTEN 36813/(squid-1)


验证传统代理服务器:

方法:搭建 Apache 网站服务器,用 windows 客户端 IE 浏览器设置代理服务器,访问 Apache 网站服务器,然后查看Apache 日志文件,查看是谁访问的Apache。如果是代理服务器说明我们部署成功。


1)在另外一台服务器上搭建 Apache 服务器:


[root@localhost ~]# yum install httpd -y ---(注意这里是在其他服务器上安装Apache


[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl start httpd.service


2)在客户机上给 IE 浏览器设置 Squid 代理服务器的地址与端口


这里用图表示:
技术分享图片


开始访问 apache 网站服务器:
技术分享图片


以上图说明:访问成功,但是我们需要知道是谁去访问的,所以现在需要看看 apache 的日志文件。


下图是 Apache 的日志文件:
技术分享图片


上图说明:传统代理服务器部署成功!


透明代理部署:

透明代理提供的服务功能与传统代理是一致的,但是其 ” 透明 “ 的实现依赖默认路由和防火墙的重定向策略。


在Linux 网关上,构架squid 为客户机访问 Internet 提供代理服务
在所有的局域网客户机上,只需要争取设置IP地址、默认网关,而不需要手动指定代理服务器的地址、端口等信息。


根据以上的理论,所以我们应该把 Squid 代理服务器 再添加一块新的网卡,透明代理的拓扑图如下:
技术分享图片


开始部署:

[root@localhost ~]# vim /etc/squid.conf ---(修改配置文件


修改内容如下:
http_port 192.168.100.1:3128 transparent ----(修改监听地址,因为是内网需要访问外网,所以监听的是内网 transparent:意思就是透明模式


配置文件修改得不多,接下来就是需要设置 iptables 的重定向策略:

[root@localhost ~]# iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128


[root@localhost ~]# iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128


开启路由转发功能:
[root@localhost ~]# echo "1" > /proc/sys/net/ipv4/ip_forward


重启 squid 代理服务器

[root@localhost ~]# service squid restart
正在关闭 squid...
正在启动 squid...


透明模式验证:
说明:透明模式 是不需要手动设置代理服器的,访问如下图:


技术分享图片


下图是apache 日志分析,看看是那一台主机访问的web


技术分享图片


结论:如上图,是不需要手动设置代理服务器,访问web服务器是由代理服务器去访问!


如果要再Linux客户机的命令行界面中使用代理服务器(比如:elinks 网页浏览器、wget 下载工具),必须通过环境变量来指定代理服务器的地址、端口等信息。


[root@localhost ~]# vim /etc/profile ---(添加如下内容到环境变量中)


添加如下内容:

HTTP_PROXY=http:192.168.100.50:3128 ---(为使用HTTP协议指定代理)
HTTPS_PROXY=http:192.168.100.50:3128 ---(为使用HTTPS协议指定代理)
FTP_PROXY=http:192.168.100.50:3128 ----(为使用FTP协议指定代理)
NO_RPOXY=192.168.20.,192.168.30. ---(对两个局域网段不使用代理)
export HTTP_PROXY HTTPS_PROXY FRP_PROXY NO_PROXY**

[root@localhost ~]# source /etc/profile


总结:

1·要知道,我们访问的是web服务器,如果 Squid缓存代理服务器有访问的数据,代理服务器就会直接给予回馈,如果没有,squid 就会去找web服务器要数据,再返回给客户端。


2·代理的基本类型有:传统代理、透明代理。之间最大的区别是:需要手动设置代理服务器的地址和端口。


3·排错可能性:·访问的时候,web服务器的防火墙没有关闭;防火墙策略写入有误、修改配置文件后是否重启服务,查看端口服务是否启动。


【实战】Squid 缓存服务器 之 传统代理 + 透明代理

标签:etc   9.png   防火   字节   发送请求   user   eve   机制   oss   

原文地址:http://blog.51cto.com/13746824/2177725

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!