Squid代理服务器

简介

        本章将学习Squid代理服务器的构建与控制。Squid是Linux系统中最常用的一款开源代理服务软件(官方网站http://www.squid-cache.crg),可以很好地实现HTTP和FTP,以及DNS查询、SSL等应用的缓存代理,功能十分强大。

一、Squid服务基础

1.缓存代理概念

作为应用层的代理服务软件,Squid主要提供缓存加速,应用层过滤控制的功能。

(1)代理的工作机制

        当客户机通过代理来请求Web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要的网页,则直接将缓存中的页面内容反馈给客户机;如果缓存中没有客户机要访问的页面,则由代理服务器向lnternet发送访问请求,获取放回值

        HTTP代理的缓存加速对象主要是文字、图像等静态Web元素。使用缓存机制后,当客户机在不同的时候访问同一Web元素,或者不同的客户机访问相同的Web元素时,可以直接从代理服务器的缓存中获得结果。这样就大大减少了向Internet提交重复的Web请求的过程,提高了客户机的Web访问响应速度。

        由于客户机的Web访问请求实际上是由代理服务器来代替完成的,从而可以隐藏用户的真实IP地址,起到一定的保护作用。另一方面,代理服务器担任着类似“经纪人”的角色,可以针对要访问的目标,客户机的地址、访问的时间段等进行过滤控制。

(2)代理的基本类型

根据实现方式不同,代理服务可分为传统代理和透明代理两种常见的代理服务。

  • 传统代理:也就是普通的代理服务,首先必须在客户机的浏览器、QQ聊天工具、下载软件等程序中手动设置代理服务器的地址和端口,然后才能使用代理来访问网络。对于网页浏览器,访问网站时的域名解析请求也会发给指定的代理服务器。
  • 透明代理:提供与传统代理相同的功能和服务,其区别在于客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向,实际仍然交给代理服务器来处理。重定向的过程对客户机来说是“透明”的,用户甚至并不知道自己在使用代理服务,所以称为透明代理。使用透明代理时,网页浏览器访问网站时的域名解析请求将优先发给DNS 服务器。

        实际应用中,传统代理多见于Internet环境,如为QQ程序使用代理可以隐藏本机真实IP地址、为下载工具使用多个代理可以规避服务器的并发连接限制。而透明代理多见于局域网环境,如在Linux网关中启用透明代理后,局域网主机无须进行额外设置就可以享受更好的上网速度。

2.安装及运行控制
(1)编译安装 Squid

        配置Squid的编译选项时,将安装目录设为/usr/local/squid,其他具体选项根据实际需要来定,配置前可参考”./configure -- help”给出的说明。

[root@localhost ~]# tar zxf squid-3.5.23.tar.gz 
[root@localhost ~]# 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-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=t"。
  • --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/
(2) Squid的配置文件

        Squid 服务的配置文件位于/etc/squid.conf,充分了解配置行的作用将有助于管理员根据实际情况灵活配置代理服务。

[root@localhost squid-3.5.23]# vim /etc/squid.conf

        默认情况下,配置文件中不包括cache_effective_user与cache_effective_group配置项,需要手动添加。

(3) Squid的运行控制

1)检查配置文件语法是否正确

[root@localhost ~]# squid -k parse

2)启动、停止Squid

        第一次启动Squid服务时,会自动初始化缓存目录。在没有可用的Squid服务脚本的情况下,也可以直接调用Squid程序来启动服务,这时需要先进行初始化。

        确认Squid服务处于正常监听状态

3)使用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服务。

二、构建代理服务器

        主要从三个方面来学习Squid服务的构建和使用,分别为传统代理,透明代理和ACL访问控制。传统代理的实现最为简单,透明代理还需要结合默认路由,防火墙策略等一起来完成,ACL列表主要用来针对客户机的Web访问过程进行过滤控制。

1.传统代理

        使用传统代理的特点在于,客户机的相关程序(如IE浏览器.QQ聊天软件)必须指定代理服务器的地址,端口等基本信息。下面通过一个简单的应用案例来学习传统代理的配置和使用方法。基于Internet 网络环境(图13.2),案例的主要需求描述如下。

  • 在Linux主机B上,构建Squid为客户机访问各种网站提供代理服务,但禁止通过代理下载超过10MB大小的文件。
  • 在客户机C上,指定主机B作为Web访问代理,以隐藏自己的真实IP地址。

Squid代理服务器_第1张图片

        针对上述实验环境,主机B作为代理服务器,必须正确构建Squid服务,并允许客户机使用代理;若要客户机通过代理以http://www.bdqn.com/的域名形式访问,则代理服务器本身必须能够正确解析该域名。主机C作为客户机,需要为浏览器等程序指定所使用的代理服务器地址,端口号等信息,主机A作为测试网站,需要启用httpd服务。

        关于httpd服务器、DNS服务器的构建,请参考以前的课程,这里不再重复讲解。下面主要介绍Squid 服务器的配置,客户机的代理设置,以及代理服务的验证方法。

(1)Squid服务器的配置

        配置 Squid 实现传统代理服务时,需要注意添加http_access allow all访问策略,以便允许任意客户机使用代理服务。除此以外,为了限制下载的文件大小,还需要设置reply_body_max_size 项,其他各种参数均可保持默认。

1)修改squid.conf配置文件

[root@localhost ~]# vim /etc/squid.conf

Squid代理服务器_第2张图片

2)重载squid服务

        修改squid.conf配置文件以后,需要重新启动服务方可生效。执行“systemctl restart squid”或"squid -k reconfigure",都可以重新加载服务配置。

(2)客户机的代理配置

        在Edge浏览器中,单击框选的“…”位置,然后选择“设置”→“查看高级设置”→“打开代理设置”,打开“设置”窗口,在“手动设置代理”选项组中单击“使用代理服务器”选项下面的开关项,并添加代理服务器地址与端口,单击“保存”按钮即可生效。

你可能感兴趣的:(linux)