Proxy 所需的 squid 软件及其软件结构 达成代理服务器功能的软件很多,目前代理服务器在 Unix 的环境下,大多就是使用 squid ,如果尚未安装,请用『 yum install squid 』来安装!安装好 squid 之后,它主要的提供的配置文件有:
其他重要的目录与文件有:
在默认情况下,CentOS 的 squid 具有底下几个特色:
CentOS 默认的 squid 设定,是仅针对本机 (localhost) 开放的情况,而一大堆设定的默认值,都是仅针对小型网络环境所指定的数值,同时,很多比较特殊的参数都没有启动。所以,我们就得要来了解一下各设定值的意义,这样才能够进行修改!这些参数都是在 squid.conf 里指定的:
如果你有设定 icp_port ,squid 默认会启动 3128 及 3130 两个端口,其中要注意的是, 实际帮用户进行监听与传送数据的是 port 3128 (TCP),3130 (UDP) 仅是负责与邻近 Proxy 互相沟通彼此的快取数据库的功能,与实际的用户要求无关。因此,如果你的 proxy 是单纯的单一主机,或者是单纯的作为防火墙功能,那么这个 port 3130 是可以关闭的。就因如此,所以 CentOS 6.x 默认将这个设定值批注不使用! 想要关闭 port 3130,直接修改 icp_port 即可!方法为:
事实上,如果你的客户端与 proxy 之间的沟通想要使用加密机制的 SSL 功能,以保障客户端的信息避免被窃取时, 那么还有个 https_port 可以取代 http_port !不过,一般我们的 proxy 并非公开也仅是架设在内部区网,因此还不需要使用到这个 https_port !
磁盘高速缓存是影响 proxy 效能的一个相当重要的参数。 squid 是将数据分成一小块一小块,然后分别放置到个别的目录中。由于较多的目录可以节省在同一个目录内找好多档案的时间 (分门别类的放置书籍在不同的书柜内,总比将所有书籍杂乱无章的放置到一个大书柜要好的多!), 因此,在默认的 /var/spool/squid/ 目录下, squid 又会将它分成两层子目录来存放相关的缓存数据,所以观察该目录就会是:
现在我们知道了较多的目录是为了将数据分门别类放置,但是第一层 16 个与第二层 256 个是怎么来的? 让我们来瞧一瞧 cache_dir 这个重要参数的设定是怎样:
在 /var/spool/squid/ 后面的参数意义是:
根据 squid 的说法与其他文献的说明,这两层快取目录较佳的配置就是 16 256 以及 64 64 这两种配置,所以我们也不需要修改相关的数据啦!重点时还得要注意这个目录的文件拥有者与 SELinux 类型才成!
那么如果想要将默认的磁盘高速缓存改为 500MB 而且再加上 /srv/squid/ 目录给予 2GB 的容量做为磁盘高速缓存,该如何进行设定?
这里都与 cache_dir 有关!这个设定值可以重复出现多次!因此,我们可以这样进行:
想一想,既然快取是放在磁盘上面的,那么快取的数据会不会塞满整个快取磁盘呢?当然会!而且当塞满磁盘之后, proxy 恐怕就无法继续运作了!所以,我们得好好的注意磁盘使用量是否已经饱和了。在上述的示例, 若 /var/spool/squid 塞满 500MB 而 /srv/squid 塞满 2GB 那么你的 proxy 就挂了。为了避免这个问题,因此 squid 有底下两个重要设定:
代表当磁盘使用量达 95% 时,比较旧的快取数据将会被删除,当删除到剩下磁盘使用量达 90% 时,就停止持续删除的动作。以本案例中,总共 2.5GB 的容量,当用到 2.5*0.95=2.375G 时,旧的数据会开始被删除,删到剩下 2.5*0.9=2.25GB 时,就停止删除的意思。 所以会被删除掉 125MB 的旧数据。通常这个设定值已经足够了,不需要变动他,除了你的缓存太大或太小时,才会调整这个设定值。
除了磁盘容量之外,内存可能是另一个相当重要的影响 proxy 效能的因子!因为 proxy 会将数据存一份在磁盘高速缓存中,但是同时也会将数据暂存在内存当中啊,以加快未来使用者存取同一份数据的速度!但是这个内存快取是需要花费额外的服务器物理内存的量,所以就得要以额外的设定值来指定。那就是 cache_mem 这个设定值的功能了。
squid 官方网站建议你的物理内存最好是上面数值的两倍,也就是说,上述的内存使用量已经是 48MB,则我的物理内存最好至少要有 100 MB 以上,才会有比较好的效能! 在上面的基础设定中,其实仅有 proxy 服务器本身可以向自己的 proxy 要求网页代理~那有个屁用啊?我们的重点是想要开放给区网来使用这个 proxy !所以当然得要修改信任用户的管控参数。 此时,那个重要到不行的 acl 就得要来瞧一瞧啦!这个 acl 的基本语法为:
由于 squid 并不会直接使用 IP 或网域来管控信任目标,而是透过 acl 名称来管理,这个就必须要设定管理的是来源还是目标 (acl 类型) ,以及实际的 IP 或网域 (设定的内容) 啦!这个 acl 名称可以想成是一个昵称就是了。那么有哪些重要的 acl 类型呢?基本上有这些:
由于因特网主要有使用 IP 或主机名来作为联机方式的,因此信任用户的来源至少就有底下几种:
除了管理来源用户之外,我们还能够管理是否让 proxy 服务器到某些目标去获取数据!在默认的设定中, 我们的 proxy 仅管理可以向外取得 port 21, 80, 440... 等端口的目标网站,不是这些端口就无法通过代理取得。基本的管理有这些方式:
除了上述的功能之外,我们还能够使用外部的文件来提供相对应的 acl 内容设定值!如,假设我们想要阻止的外部主机名常常会变动,那么我们可以使用 /etc/squid/dropdomain.txt 来设定主机名,然后通过底下的方式来处理 acl dropdomain dstdomain "/etc/squid/dropdomain.txt" 然后在 dropdomain.txt 当中,一行一个待管理的主机名,这样也能够减少持续修改 squid.conf 的困扰!好了!
设定好 acl 之后,接下来就是要看看到底要不要放行~放行与否跟 http_access 这个项目有关。基本上, http_access 就是拒绝 (deny) 与允许 (allow) 两个控件,然后再加上 acl 名称就能够达到这样的功能了!只是你得要特别注意的是:http_access 后面接的数据,是有顺序的! 假设我要放行内部网络 192.168.1.0/24, 192.168.100.0/24 这两段网域,然后拒绝对外的色情相关图片,以及 facebook.com 网站,那么就应该要这样做:
要注意,如果先放行了 test 才阻止 dropdomain 时,设定可能会失败!因为内网已经先放行,因此后面的规则不会生效,那么 facebook.com 就无法被阻止!通常的作法是,先将要拒绝的写上去,然后才写要放行的数据。
Proxy 的缓存通常在记录比较少变动的数据,如果是动态网页,那么恐怕就没有缓存的需要,因为数据一直变动!总不能你发了一帖留言,等一下再去浏览时,看到的还是旧留言吧!所以,在默认情况下,squid 已经拒绝某些数据的快取了,那就是底下的几个设定值:
通常 .php 结尾的网页大部分就是动态数据,设定 .php 结尾的网页就不缓存:
现在我们已经设定了让 192.168.100.0/24 及 192.168.1.0/24 这两段来源使用我们的 proxy server , 那么想当然尔,防火墙的设定就得要开放这两段使用 port 3128 才行!不过你得要特别注意,并不是开放防火墙就能使用 proxy server 的资源,还得要使用 acl 配合 http_access 才行!假设你已经使用了 iptables.rule , 那么修改的方法就是这样:
前面谈到,可以通过『 dstdomain .domain.name 』来抵挡不想联机的网站。 不过每次都得使用 root 身份来设定 squid.conf 才行。还可以额外处理出一个档案,让想要拒绝联机的数据写入, 这样比较容易管理,不需要一直去修改 squid.conf :
这个方法的好处是,你可以使用额外的控制方式去修改 /etc/squid/dropdomain.txt 这个档案的内容,并且修改完毕后再使用 reload 去加载配置文件,不必要重新启动 (restart),因为 reload 的速度比较快速。举例来说,鸟哥的专题生就用 PHP 写了一支控制该档案的网页接口,可以让老师在上课时直接透过网页输入要被控制的目标网站,这样学生就无法在上课时联机到外面的某些网站去玩游戏啰
(责任编辑:IT) |