CentOS搭建squid正向代理

Posted 奔放热带鱼在家刷剧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS搭建squid正向代理相关的知识,希望对你有一定的参考价值。

squid介绍

官网地址:http://www.squid-cache.org/


Squid cache(简称为 Squid)是一个流行的自由软件(GNU 通用公共许可证)的代理服务器和 Web 缓存服务器。Squid 有广泛的用途,从作为网页服务器的前置 cache 服务器缓存相关请求来提高 Web 服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理上网。Squid 主要设计用于在 Unix 一类系统运行。

Squid 的发展历史相当悠久,功能也相当完善。除了 HTTP 外,对于 FTP 与 HTTPS 的支援也相当好,在 3.0 测试版中也支援了 IPv6。

Squid主要提供缓存加速、应用层过滤控制的功能。

代理的工作机制

(1)代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址。

(2)将获得的网页数据(静态 Web 元素)保存到缓存中并发送给客户机,以便下次请求相同的数据时快速响应。

代理服务器的概念及其作用

代理服务器是一个位于客户端和原始(资源)服务器之间的服务器,为了从原始服务器取得内容,客户端向代理服务器发送一个请求并指定目标原始服务器,然后代理服务器向原始服务器转交请求并将获得的内容返回给客户端。

缓存代理对于Web至关重要,尤其对于大型高负载Web站点。缓存可作为性能优化的一个重要手段,可以极大减轻后端服务器的负载。通常对于静态资源,即较少经常更新的资源,如图片,css或js等进行缓存,从而在每次刷新浏览器的时候,不用重新请求,而是从缓存里面读取,这样就可以减轻服务器的压力。

主要作用

(1)资源获取:代替客户端实现从原始服务器的资源获取

(2)加速访问:代理服务器可能离原始服务器更近,从而起到一定的加速作用

(3)缓存作用:代理服务器保存从原始服务器所获取的资源,从而实现客户端快速的获取

(4)隐藏真实地址:代理服务器代替客户端去获取原始服务器资源,从而隐藏客户端真实信息

squid的三种代理类型

squid软件主要有三种代理类型:

  • 正向代理:代理内部主机上网,共享上网,缓存,控制内网用户上网行为等功能(客户端需要设置代理服务器的IP和代理端口)。
  • 透明代理:客户机不需指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理。
  • 反向代理:如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的 WEB 服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。

正向代理分析图:

反向代理分析图:

squid安装和配置文件说明

安装软件

# yum镜像仓库里有squid的软件包
yum -y install squid

# squid配置初始化
cat >> /etc/squid/squid.conf<< EOF
cache_mem 64 MB
maximum_object_size 4 MB
maximum_object_size_in_memory 4096 KB
cache_dir ufs /var/spool/squid 100 16 256
access_log /var/log/squid/access.log
EOF

# squid初始化
squid -z

# 启动squid并设置为开机启动
service squid start && systemctl enable squid

# 检查squid是否正常运行
netstat -ntlp | grep squid

# 如果防火墙开启的话,放开3128端口
firewall-cmd --zone=public --add-service=squid --permanent

软件的文件列表

/etc/squid/squid.conf           # 配置文件
/etc/rc.d/init.d/squid          # 启动脚本
/usr/sbin/squid                 # 二进制命令
/usr/share/doc/squid-3.1.10     # 手册
/var/log/squid                  # 日志目录
/var/spool/squid                # 缓存目录

配置文件说明

# cat /etc/squid/squid.conf

#####	设置监听的IP与端口号
http_port 3128

#####	额外提供给squid使用的内存大小,默认256 MB
cache_mem   64 MB   

#####	设置squid磁盘缓存最大文件,超过4M的文件不保存到硬盘
maximum_object_size 4 MB   

#####	设置squid磁盘缓存最小文件
minimum_object_size 0 KB 

#####	设置squid内存缓存最大文件,超过4M的文件不保存到内存
maximum_object_size_in_memory 4096 KB  

#####	定义squid的cache存放路径 、cache目录容量(单位M)、一级缓存目录数量、二级缓存目录数量,此处的100 一定要大于 cache_mem 否则报错。
cache_dir ufs /var/spool/squid 100 16 256  

#####	log文件日志格式
logformat combined %&gt;a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%Referer>h" "%User-Agent&gt;h" %Ss:%Sh

#####	log文件存放路径和日志格式
access_log /var/log/squid/access.log combined

#####	设置缓存日志
cache_log /var/log/squid/cache.log

#####	log轮转60天
logfile_rotate 60

#####	cache目录使用量大于95%时,开始清理旧的cache
cache_swap_high 95

#####	cache目录清理到90%时停止
cache_swap_low 90

#####	定义本地网段
acl localnet src 192.168.1.0/24

#####	允许本地网段使用
http_access allow localnet

#####	拒绝所有
http_access deny all

#####	主机名
visible_hostname xxx.xxxx.xxxx

#####	管理员邮箱
cache_mgr 123456@qq.com

正向代理客户端配置

Windows客户端配置代理:

Internet 选项 > 连接 > 局域网设置 ”,在代理服务器区域,按照以下格式设置:

Linux客户端:

先创建并修改/etc/profile.d/proxy.sh文件

# 创建proxy.sh文件
touch /etc/profile.d/proxy.sh

编辑proxy.sh文件

# 进入profile.d目录
cd /etc/profile.d/
# 编辑proxy.sh文件
vim proxy.sh

添加下列内容

# squid正向代理只支持http、https、ftp协议,把下面的proxy_server_ip更换为自己搭建的squid服务器IP
export https_proxy=http://proxy_server_ip:3128
export http_proxy=http://proxy_server_ip:3128
export ftp_proxy=http://proxy_server_ip:3128

执行source /etc/profile使其生效

# 执行source /etc/profile
source /etc/profile

配置完成

squid正向代理和反向代理服务器搭建

squid是比较知名的代理软件,它不仅可以跑在Linux上还可以跑在Windows和UNIX上,它的技术已经非常成熟。目前使用squid的用户也十分广泛。squid与Linux下其他的代理软件如Apache、socks、TIS FWTK等相比,下载安装简单,配置简单灵活,支持缓存和多种协议。

squid之所以用的很多,是因为它的的缓存功能,squid的缓存不仅可以节省宝贵的带宽资源,也可以大大降低服务器的I/O。从经济角度考虑,它是很多网站架构中不可或缺的角色。

squid可以做正向代理,也可以做反向代理。当做正向代理时,squid后面是客户端,客户端想上网需经过squid。当一个客户端想要请求一个主页时,它向squid发出一个申请,要squid替它请求,然后squid连接用户要请求的网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户请求同样的页面时,squid将保存的页面立即传给用户,使用户觉得速度相当快。使用正向代理时,客户端需要做一些设置才能实现,也就是平时我们在IE选项中设置的那个代理。而反向代理是,squid后面是某个站点的服务器,客户端请求该站点时,会先把请求发送到squid上,然后squid去处理用户的请求动作。正向代理如下图所示:

技术分享

反向代理如下图所示:

技术分享

正向代理后面是客户端,客户端上网要通过squid上。反向代理squid后面是服务器,服务器返回给用户的数据需要走squid。正向代理用在企业的办公环境中,员工上网需要通过squid代理来上网,这样可以节省网络带宽资源。而反向代理用来搭建网站静态项(图片、HTML、流媒体、JS、CSS等)的缓存服务器,它用于网站架构中。

squid正向代理:

使用centos源中自带的squid包安装:

[[email protected] ~]# yum install -y squid

编辑squid配置文件:

[[email protected] ~]# vim /etc/squid/squid.conf

打开注释行:

cache_dir ufs /var/spool/squid 100 16 256

说明:缓存目录为/var/spool/squid,缓存大小为100MB,该目录下有16个一级子目录,每个子目录下又有256个二级子目录。

并在其下面增加一行:

cache_mem 64 MB

注意:大小不能超过上面的总大小100MB

在最后面添加要缓存的静态项:

refresh_pattern \.(jpg|png|gif|js|css|mp3|mp4) 1440  20%  2880 ignore-reload

最后面添加代理服务器要显示的主机名:

visible_hostname test.com

启动squid:

[[email protected] ~]# /etc/init.d/squid start

init_cache_dir /var/spool/squid... 正在启动 squid:.       [确定]

查看进程和端口(默认3128):

[[email protected] ~]# ps aux | grep squid

root      1738  0.0  0.1  15216  2688 ?        Ss   05:11   0:00 squid -f /etc/squid/squid.conf

squid     1740  0.1  0.4  17816  9072 ?        S    05:11   0:00 (squid) -f /etc/squid/squid.conf

squid     1742  0.0  0.0   3272   888 ?        S    05:11   0:00 (unlinkd)

root      1745  0.0  0.0   5980   744 pts/0    S+   05:12   0:00 grep squid

[[email protected] ~]# netstat -lnp | grep squid

tcp        0      0 :::3128                     :::*                        LISTEN      1740/(squid)

udp        0      0 0.0.0.0:40410               0.0.0.0:*                               1740/(squid)

udp        0      0 :::37508                    :::*                                    1740/(squid)

使用浏览器测试:

在浏览器中设置使用该代理:工具——Internet选项——连接——局域网设置——勾选“为LAN使用代理服务器”——高级——HTTP:192.168.147.139:3128——确定——确定——确定

使用浏览器访问www.baidu.com,可见能成功访问到百度。为了验证走的是我们的代理服务器,我们可以使用tcpdump工具抓个包看看

安装tcpdump抓包工具:

[[email protected] ~]# yum install -y tcpdump

技术分享

此时,访问百度就可以看到抓到很多包,说明确实走的是我们的代理服务器。

同时在缓存目录下产生了很多文件:

技术分享

使用curl测试:

[[email protected] ~]# curl -x127.0.0.1:3128 www.baidu.com -I

HTTP/1.0 200 OK

Server: bfe/1.0.8.18

Date: Fri, 10 Mar 2017 13:25:23 GMT

Content-Type: text/html

Content-Length: 277

Last-Modified: Mon, 13 Jun 2016 02:50:02 GMT

ETag: "575e1f5a-115"

Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform

Pragma: no-cache

Accept-Ranges: bytes

X-Cache: MISS from test.com

X-Cache-Lookup: MISS from test.com:3128

Via: 1.0 test.com (squid/3.1.23)

Connection: keep-alive

[[email protected] ~]# curl -x127.0.0.1:3128 www.qq.com -I

HTTP/1.0 200 OK

Server: squid/3.5.20

Date: Fri, 10 Mar 2017 13:26:13 GMT

Content-Type: text/html; charset=GB2312

Vary: Accept-Encoding

Vary: Accept-Encoding

Expires: Fri, 10 Mar 2017 13:27:13 GMT

Cache-Control: max-age=60

Vary: Accept-Encoding

Vary: Accept-Encoding

X-Cache: HIT from shanghai.qq.com

X-Cache: MISS from test.com

X-Cache-Lookup: MISS from test.com:3128

Via: 1.0 test.com (squid/3.1.23)

Connection: keep-alive

3128端口是可以改变的:只需要修改配置文件中的http_port 3128即可。

此时的代理是任何人都可以访问任何网站,并没有对访问进行控制,我们需要编辑配置文件进行访问限制,比如只允许员工访问.aminglinux.com和.baidu.com:

编辑配置文件:

[[email protected] ~]# vim /etc/squid/squid.conf

添加如下白名单good_domain配置(也可以设置黑名单bad_domain):

acl http proto HTTP

acl good_domain dstdomain .aminglinux.com .baidu.com

http_access allow good_domain

http_access deny !good_domain

检查配置是否有错:

[[email protected] ~]# squid -kcheck (或者squid -kch)

重新加载配置文件:

[[email protected] ~]# squid -kreconfig (或者squid -kre)

使用curl测试:

[[email protected] ~]# curl -x127.0.0.1:3128 www.baidu.com -I

HTTP/1.0 200 OK

Server: bfe/1.0.8.18

Date: Fri, 10 Mar 2017 13:43:57 GMT

Content-Type: text/html

Content-Length: 277

Last-Modified: Mon, 13 Jun 2016 02:50:06 GMT

ETag: "575e1f5e-115"

Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform

Pragma: no-cache

Accept-Ranges: bytes

X-Cache: MISS from test.com

X-Cache-Lookup: MISS from test.com:3128

Via: 1.0 test.com (squid/3.1.23)

Connection: keep-alive

[[email protected] ~]# curl -x127.0.0.1:3128 www.aminglinux.com -I

HTTP/1.0 301 Moved Permanently

Server: nginx

Date: Fri, 10 Mar 2017 13:45:01 GMT

Content-Type: text/html

Content-Length: 178

Location: http://www.apelearn.com/

X-Cache: MISS from test.com

X-Cache-Lookup: MISS from test.com:3128

Via: 1.0 test.com (squid/3.1.23)

Connection: keep-alive

[[email protected] ~]# curl -x127.0.0.1:3128 www.qq.com -I

HTTP/1.0 403 Forbidden

Server: squid/3.1.23

Mime-Version: 1.0

Date: Fri, 10 Mar 2017 21:45:32 GMT

Content-Type: text/html

Content-Length: 3241

X-Squid-Error: ERR_ACCESS_DENIED 0

Vary: Accept-Language

Content-Language: en

X-Cache: MISS from test.com

X-Cache-Lookup: NONE from test.com:3128

Via: 1.0 test.com (squid/3.1.23)

Connection: keep-alive

squid反向代理:

做百度和qq的反向代理:

百度的IP:31.135.169.125,端口:80,域名:www.baidu.com

qq的IP:61.135.157.156,端口:80,域名:www.qq.com

编辑配置文件:

[[email protected] ~]# vim /etc/squid/squid.conf

将http_port 3128修改为下面的内容:

http_port 80 accel vhost vport

cache_peer 61.135.169.125 parent 80 0 originserver name=a

cache_peer_domain a www.baidu.com

cache_peer 61.135.157.156 parent 80 0 originserver name=b

cache_peer_domain b www.qq.com

每当增加一个域名的反向代理需要增加两行。注意name不能相同。

为了测试的方便,我们将上面做的正向代理先注释掉:

#acl http proto HTTP

#acl good_domain dstdomain .aminglinux.com .baidu.com

#http_access allow good_domain

#http_access deny !good_domain

检查配置无误后重新加载配置:

[[email protected] ~]# squid -kcheck

[[email protected] ~]# squid -kreconfig

使用curl测试:

做反向代理的域名OK:

[[email protected] ~]# curl -x127.0.0.1:80 www.baidu.com -I

HTTP/1.0 200 OK

Server: bfe/1.0.8.18

Date: Fri, 10 Mar 2017 14:05:41 GMT

Content-Type: text/html

Content-Length: 277

Last-Modified: Mon, 13 Jun 2016 02:50:01 GMT

ETag: "575e1f59-115"

Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform

Pragma: no-cache

Accept-Ranges: bytes

X-Cache: MISS from test.com

X-Cache-Lookup: MISS from test.com:80

Via: 1.0 test.com (squid/3.1.23)

Connection: keep-alive

[[email protected] ~]# curl -x127.0.0.1:80 www.qq.com -I

HTTP/1.0 200 OK

Server: squid/3.5.20

Date: Fri, 10 Mar 2017 14:06:10 GMT

Content-Type: text/html; charset=GB2312

Vary: Accept-Encoding

Vary: Accept-Encoding

Expires: Fri, 10 Mar 2017 14:07:10 GMT

Cache-Control: max-age=60

Vary: Accept-Encoding

Vary: Accept-Encoding

X-Cache: HIT from tianjin.qq.com

X-Cache: MISS from test.com

X-Cache-Lookup: MISS from test.com:80

Via: 1.0 test.com (squid/3.1.23)

Connection: keep-alive

没有做反向代理的域名不可达:

[[email protected] ~]# curl -x127.0.0.1:80 www.aminglinux.com -I

HTTP/1.0 503 Service Unavailable

Server: squid/3.1.23

Mime-Version: 1.0

Date: Fri, 10 Mar 2017 22:06:45 GMT

Content-Type: text/html

Content-Length: 3588

X-Squid-Error: ERR_CANNOT_FORWARD 0

Vary: Accept-Language

Content-Language: en

X-Cache: MISS from test.com

X-Cache-Lookup: MISS from test.com:80

Via: 1.0 test.com (squid/3.1.23)

Connection: keep-alive

使用浏览器测试:

首先删除浏览器中之前的正向代理配置,然后在本地主机的hosts文件(路径为C:\Windows\System32\drivers\etc\hosts)中添加测试的域名(让这些域名走我们的反向代理服务器):

192.168.147.139 www.baidu.com www.qq.com www.sina.com www.aminglinux.com

技术分享

技术分享

没有做反向代理的域名不可达:

技术分享

技术分享




以上是关于CentOS搭建squid正向代理的主要内容,如果未能解决你的问题,请参考以下文章

Centos7使用squid实现正向代理

squid正向代理和反向代理服务器搭建

Squid(代理服务)

centos7 安装配置 squid作为正向代理

squid配置 正向代理

squid正向代理