## 17.2 Proxy 服务器的基础设定
虽然在我们小型的网络环境中,架设 Proxy 真的没有什么用,不过,考虑到大家未来可能会高升嘛!所以企业常用的 Proxy 也需要了解一下比较好。 在这个小节中,我们主要介绍一个比较简单的 Proxy 环境,就是单纯可以跑而已的代理服务器。比较高阶的设定请参考后续小节的介绍啰。
* * *
### 17.2.1 Proxy 所需的 squid 软件及其软件结构
达成代理服务器功能的软件很多,例如效能不是很好的 Apache 以及我们这个章节要介绍的八爪章鱼 squid 这一套。 目前代理服务器在 Unix Like 的环境下,大多就是使用 squid ,因此我们这里以 squid 为准来介绍啦。同样的, 请使用 rpm 来检查,如果尚未安装,请用『 yum install squid 』来安装吧!安装好 squid 之后,它主要的提供的配置文件有:
* /etc/squid/squid.conf
这个是主要的配置文件,所有 squid 所需要的设定都是放置在这个档案当中的! 鸟哥底下提到的种种设定方法几乎都是这个档案里面的说明喔!
* /etc/squid/mime.conf
这个档案则是在设定 squid 所支持的 Internet 上面的文件格式,就是所谓的 mime 格式啰! 一般来说,这个档案的预设内容已经能够符合我们的需求了,所以不需要更动他,除非你很清楚的知道你所需要额外支持的 mime 文件格式。
其他重要的目录与档案有:
* /usr/sbin/squid:提供 squid 的主程序啊!
* /var/spool/squid:就是默认的 squid 快取放置的目录。
* /usr/lib64/squid/:提供 squid 额外的控制模块,尤其是影响认证密码方面的程序,都是放在这个目录下的;
* * *
### 17.2.2 CentOS 预设的 squid 设定
在预设的情况下,CentOS 的 squid 具有底下几个特色:
* 仅有本机 (localhost, 127.0.0.1) 来源可以使用这个 squid 功能
* squid 所监听的 Proxy 服务埠口在 port 3128
* 快取目录所在的位置在 /var/spool/squid/ ,且仅有 100MB 的磁盘高速缓存量
* 除了 squid 程序所需要的基本内存之外,尚提供 8MB 的内存来给热门档案快取在内存中 (因为内存速度比硬盘还快)
* 默认启动 squid 程序的用户为 squid 这个账号 (与磁盘高速缓存目录权限有关)
其实, CentOS 预设的 squid 设定,是仅针对本机 (localhost) 开放的情况,而一大堆设定的默认值, 都是仅针对小型网络环境所指定的数值,同时,很多比较特殊的参数都没有启动。所以,我们就得要来了解一下各设定值的意义, 这样才能够进行修改嘛!这些参数都是在 squid.conf 里头指定的,所以,就让我们来看看这个档案的内容与较重要的参数吧:
**Tips:** CentOS 6.x 已经将 squid.conf 里面不相干的设定值通通拿掉了,所以这个档案就变的非常的精简!这样其实有好有坏啦! 好处是,你不用去看一些你用不到的参数值,坏处是,如果你想要其他的设定,就得额外参考外部文件了!伤脑筋~
![](https://box.kancloud.cn/2016-05-13_5735736501917.gif)
```
[root@www ~]# vim /etc/squid/squid.conf
# 1\. 信任用户与目标控制,透过 acl 定义出 localhost 等相关用户
acl manager proto cache_object <==定义 manager 为管理功能
acl localhost src 127.0.0.1/32 <==定义 localhost 为本机来源
acl localhost src ::1/128
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 <==定义 to_localhost 可联机到本机
acl to_localhost dst ::1/128
# 2\. 信任用户与目标控制,定义可能使用这部 proxy 的外部用户(内网)
acl localnet src 10.0.0.0/8 <==可发现底下都是 private IP 的设定
acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16
acl localnet src fc00::/7
acl localnet src fe80::/10
# 上述数据设定两个用户 (localhost, localnet) 与一个可取得目标 (to_localhost)
# 3\. 定义可取得的数据端口所在!
acl SSL_ports port 443 <==联机加密的埠口设定
acl Safe_ports port 80 # http <==公认标准的协议使用埠口
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
# 定义出 SSL_ports 及标准的常用埠口 Safe_ports 两个名称
# 4\. 定义这些名称是否可放行的标准依据(有顺序喔!)
http_access allow manager localhost <==放行管理本机的功能
http_access deny manager <==其他管理来源都予以拒绝
http_access deny !Safe_ports <==拒绝非正规的埠口联机要求
http_access deny CONNECT !SSL_ports <==拒绝非正规的加密埠口联机要求
<==这个位置为你可以写入自己的规则的位置喔!不要写错了!有顺序之分的!
http_access allow localnet <==放行内部网络的用户来源
http_access allow localhost <==放行本机的使用
http_access deny all <==全部都予以拒绝啦!
# 5\. 网络相关参数,最重要的是那个定义 Proxy 协议埠口的 http_port
http_port 3128 <==Proxy 预设的监听客户端要求的埠口,是可以改的
# 其实,如果想让 proxy server/client 之间的联机加密,可以改用 https_port (923)
# 6\. 快取与内存相关参数的设定值,尤其注意内存的计算方式
hierarchy_stoplist cgi-bin ? <==hierarchy_stoplist 后面的关键词 (此例为 cgi-bin)
# 若发现在客户端所需要的网址列,则不快取 (避免经常变动的数据库或程序讯息)
cache_mem 8 MB <==给proxy额外的内存,用来处理最热门的快取数据(需自己加)
# 7\. 磁盘高速缓存,亦即放置快取数据的目录所在与相关设定
cache_dir ufs /var/spool/squid 100 16 256 <==默认使用 100MB 的容量放置快取
coredump_dir /var/spool/squid
# 底下的四个参数得要自己加上来喔!旧版才有这样的默认值!
minimum_object_size 0 KB <==小于多少 KB 的数据不要放快取,0 为不限制
maximum_object_size 4096 KB <==与上头相反,大于 4 MB 的数据就不快取到磁盘
cache_swap_low 90 <==与下一行有关,减低到剩下 90% 的磁盘高速缓存为止
cache_swap_high 95 <==当磁盘使用量超过 95% 就开始删除磁盘中的旧快取
# 8\. 其他可能会用到的默认值!参考参考即可,并不会出现在配置文件中。
access_log /var/log/squid/access.log squid <==曾经使用过 squid 的用户记录
ftp_user Squid@ <==当以 Proxy 进行 FTP 代理匿名登录时,使用的账号名称
ftp_passive on <==若有代理 FTP 服务,使用被动式联机
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
# 上面这四行与快取的存在时间有关,底下内文会予以说明
cache_mgr root <==预设的 proxy 管理员的 email
cache_effective_user squid <==启动 squid PID 的拥有者
cache_effective_group squid <==启动 squid PID 的群组
# visible_hostname <==有时由于 DNS 的问题,找不到主机名会出错,就得加上此设定
ipcache_size 1024 <==以下三个为指定 IP 进行快取的设定值
ipcache_low 90
ipcache_high 95
```
光是了解上述的一些基础设定值,可能就要头昏昏了,更别说 squid.conf 里面的其他设定值,看到头好昏... 无论如何,上述这些设定已经是很基础的设定了,你最好了解一下!除了 cache_dir 那一行取消批注,其他的保持不动! 让我们以默认值来直接启动 squid 看看有什么特别的地方再说。
* 使用默认值来启动 squid 并观察相关信息
要启动 squid 真是简单,让我们来启动 squid 并且观察有没有相关的埠口吧!
```
[root@www ~]# /etc/init.d/squid start
init_cache_dir /var/spool/squid... 正在激活 squid: . [ 确定 ]
# 第一次启动会初始化快取目录,因此会出现上述左边的数据,未来这个讯息不会再出现
[root@www ~]# netstat -tulnp | grep squid
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 :::3128 :::* LISTEN 2370/(squid)
udp 0 0 :::45470 :::* 2370/(squid)
[root@www ~]# chkconfig squid on
```
如果你有设定 icp_port 时,squid 预设会启动 3128 及 3130 两个埠口,其中要注意的是, 实际帮用户进行监听与传送数据的是 port 3128 (TCP),3130 (UDP) 仅是负责与邻近 Proxy 互相沟通彼此的快取数据库的功能,与实际的用户要求无关。因此,如果你的 proxy 是单纯的单一主机,或者是单纯的作为防火墙功能,那么这个 port 3130 是可以关闭的。就因如此,所以 CentOS 6.x 预设将这个设定值批注不使用啰!
例题:由于我的 Proxy 仅是部简单的单一代理服务器,并没有架设成为公开的邻近代理服务器 (peer proxy 或 neighbor proxy), 因此想要关闭 port 3130 ,该如何处理?答:旧版的 CentOS 5.x 以前的版本才需要进行,很简单,直接修改 icp_port 即可!方法为:
```
[root@www ~]# vim /etc/squid/squid.conf
#Default: VBird 2011/04/06 modified,将下列数据从 3130 改为 0 即可
icp_port 0
[root@www ~]# /etc/init.d/squid restart
```
事实上,如果你的客户端与 proxy 之间的沟通想要使用加密机制的 SSL 功能,以保障客户端的信息避免被窃取时, 那么还有个 https_port 可以取代 http_port !不过,充其量我们的 proxy 并非公开也仅是架设在内部区网, 因此还不需要使用到这个 https_port 啦!
* 观察与修改快取目录 (cache_dir):权限与 SELinux
从前面的说明我们知道磁盘高速缓存是影响 proxy 效能的一个相当重要的参数,那么 squid 是如何将快取存进磁盘的呢? squid 是将数据分成一小块一小块,然后分别放置到个别的目录中。由于较多的目录可以节省在同一个目录内找好多档案的时间 (想一想,分门别类的放置书籍在不同的书柜内,总比将所有书籍杂乱无章的放置到一个大书柜要好的多吧!), 因此,在默认的 /var/spool/squid/ 目录下, squid 又会将它分成两层子目录来存放相关的快取数据,所以观察该目录就会是:
```
[root@www ~]# ls /var/spool/squid
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F swap.state
# 算一下,你会发现共有 16 个子目录!那么我们来看看第一个子目录的内容:
[root@www ~]# ls /var/spool/squid/00
00 08 10 18 20 28 ... 98 A0 A8 B0 B8 C0 C8 D0 D8 E0 E8 F0 F8
01 09 11 19 21 29 ... 99 A1 A9 B1 B9 C1 C9 D1 D9 E1 E9 F1 F9
....(中间省略)....
06 0E 16 1E 26 2E ... 9E A6 AE B6 BE C6 CE D6 DE E6 EE F6 FE
07 0F 17 1F 27 2F ... 9F A7 AF B7 BF C7 CF D7 DF E7 EF F7 FF
# 看见了吗?总共有 256 个子目录出现啰!
```
现在我们知道了较多的目录是为了将数据分门别类放置,但是第一层 16 个与第二层 256 个是怎么来的? 让我们来瞧一瞧 cache_dir 这个重要参数的设定是怎样:
* cache_dir ufs /var/spool/squid 100 16 256
在 /var/spool/squid/ 后面的参数意义是:
* 第一个 100 代表的是磁盘使用量仅用掉该文件系统的 100MB
* 第二个 16 代表第一层次目录共有 16 个
* 第三个 256 代表每层次目录内部再分为 256 个次目录
根据 squid 的说法与其他文献的说明,这两层快取目录较佳的配置就是 16 256 以及 64 64 这两种配置, 所以我们也不需要修改相关的数据啦!重点时还得要注意这个目录的档案拥有者与 SELinux 类型才成呦!
例题:看起来预设的 proxy 的磁盘高速缓存应该是不够用,而之前的磁盘规划又没有做好,因此 /var/ 最多还有 500MB 可以让我们做为磁盘高速缓存。 那么如果想要将预设的磁盘高速缓存改为 500MB 而且再加上 /srv/squid/ 目录给予 2GB 的容量做为磁盘高速缓存,该如何进行设定?答:这里都与 cache_dir 有关!这个设定值可以重复出现多次!因此,我们可以这样进行的,特别注意底下的目录权限与 SELinux 类型呦!
```
[root@www ~]# vim /etc/squid/squid.conf
#Default: VBird 2011/04/06 modified,底下的设定除了拿掉 # 之外还得修改!
cache_dir ufs /var/spool/squid 500 16 256
cache_dir ufs /srv/squid 2000 16 256
[root@www ~]# mkdir /srv/squid
[root@www ~]# chmod 750 /srv/squid
[root@www ~]# chown squid:squid /srv/squid
[root@www ~]# chcon --reference /var/spool/squid /srv/squid
[root@www ~]# ll -Zd /srv/squid
drwxr-x---. squid squid system_u:object_r:squid_cache_t:s0 /srv/squid/
[root@www ~]# /etc/init.d/squid restart
```
之所以要改成 squid 拥有,是因为上头的 squid.conf 中,预设的启动 PID 的账号就是 squid 这个人物嘛!所以当然要变更!至于 SELinux 的类型方面,参考预设的 /var/spool/squid 就能够知道了。不过要注意,某些特定的目录 (例如 /home) 是不允许建立快取目录的, 因此我们使用服务资料可以放置的 /srv 作为测试范例啰!
想一想,既然快取是放在磁盘上面的,那么快取的数据会不会塞满整个快取磁盘呢?当然会啊!而且当塞满磁盘之后, 你的 proxy 恐怕就无法继续运作了!所以,我们当然得要好好的注意磁盘使用量是否已经饱和了。在上述的例题中, 若 /var/spool/squid 塞满 500MB 而 /srv/squid 塞满 2GB 那么你的 proxy 就挂了。为了避免这个问题,因此 squid 有底下两个重要设定:
* cache_swap_low 90
* cache_swap_high 95
代表当磁盘使用量达 95% 时,比较旧的快取数据将会被删除,当删除到剩下磁盘使用量达 90% 时,就停止持续删除的动作。 以本案例中,总共 2.5GB 的容量,当用到 2.5*0.95=2.375G 时,旧的数据会开始被删除,删到剩下 2.5*0.9=2.25GB 时,就停止删除的意思。所以会被删除掉 125MB 的旧数据就是了。通常这个设定值已经足够了,不需要变动他, 除了你的快取太大或太小时,才会调整这个设定值。
* squid 使用的内存计算方式
事实上,除了磁盘容量之外,内存可能是另一个相当重要的影响 proxy 效能的因子!怎么说呢?因为 proxy 会将数据存一份在磁盘高速缓存中,但是同时也会将数据暂存在内存当中啊,以加快未来使用者存取同一份数据的速度! 但是这个内存快取是需要花费额外的服务器物理内存的量,所以就得要以额外的设定值来指定啰。那就是 cache_mem 这个设定值的功能了。
很多人 (包括鸟哥) 都会误会 cache_mem 的用途!其实 cache_mem 是额外的指定一些内存来进行比较『热门』的数据存取! cache_mem 并不是指我要使用多少内存给 squid 使用,而是指 "我还要额外提供多少内存给 squid 使用" 的意思』!由于预设 1GB 的磁盘高速缓存会占用约 10M 的内存,而 squid 本身也会占用约 15MB 的内存, 因此,上个例题中 squid 使用掉的内存就有:
* 2.5 * 10 + 15 + "cache_mem 设定值 (8)"
squid 官方网站建议你的物理内存最好是上面数值的两倍,也就是说,上述的内存使用量已经是 48MB, 则我的物理内存最好至少要有 100 MB 以上,才会有比较好的效能!当然,这个单指 Proxy 部分而已,如果你的该部主机还有负责其他的工作,呵呵!那么内存就得在累加上去啦!一般来说,如果你的 Proxy 很多人使用时,这个值越大越好,但是最好也要符合上面的需求喔!
例题:由于我的内存够大,而 proxy 确实是我重要的服务,因此想要增加额外的 32MB 作为热门数据快取,该如何修改?答:直接做了啦!就是修改 cache_mem 而已!
```
[root@www ~]# vim /etc/squid/squid.conf
#Default: VBird 2011/04/06 modified,将原本的 8 改为 32 啰!
cache_mem 32 MB
[root@www ~]# /etc/init.d/squid restart
```
* * *
### 17.2.3 管控信任来源 (如区网) 与目标 (如恶意网站): acl 与 http_access 的使用
在上面的基础设定中,其实仅有 proxy 服务器本身可以向自己的 proxy 要求网页代理~那有个屁用啊? 我们的重点是想要开放给区网来使用这个 proxy 的嘛!所以当然得要修改信任用户的管控参数啰。 此时,那个重要到不行的 acl 就得要来瞧一瞧啦!这个 acl 的基本语法为:
```
acl <自定义的 acl 名称> <要控制的 acl 类型> <设定的内容>
```
由于 squid 并不会直接使用 IP 或网域来管控信任目标,而是透过 acl 名称来管理,这个 <acl 名称> 就必须要设定管理的是来源还是目标 (acl 类型) ,以及实际的 IP 或网域 (设定的内容) 啦!这个 acl 名称可以想成是一个昵称就是了。那么有哪些重要的 acl 类型呢?基本上有这些:
* 管理是否能使用 proxy 的信任客户端方式:
由于因特网主要有使用 IP 或主机名来作为联机方式的,因此信任用户的来源至少就有底下几种:
* src ip-address/netmask:
主要控制『来源的 IP 地址』。举例来说,鸟哥的内网有两个,分别是 192.168.1.0/24 以及 192.168.100.0/24 , 那么假设我想要制订一个 vbirdlan 的 acl 名称,那就可以在配置文件内写成:
acl vbirdlan src 192.168.1.0/24 192.168.100.0/24
* src addr1-addr2/netmask:
主要控制『一段范围来源的 IP 地址』。假设我只想要让 192.168.1.100-192.168.1.200 使用这部 proxy ,那么就用:
acl vbirdlan2 src 192.168.1.100-192.168.1.200/24
* srcdomain .domain.name:
如果来源用户的 IP 一直变,所以使用的是 DDNS 的方式来更新主机名与 IP 的对应,此时我们可以使用主机名来开放! 例如来源是 .ksu.edu.tw 的来源用户就开放使用权,那就是:
acl vbirdksu srcdomain .ksu.edu.tw
* 管理是否让 proxy 帮忙代理到该目标去获取数据:
除了管理来源用户之外,我们还能够管理是否让 proxy 服务器到某些目标去获取数据喔!在预设的设定中, 我们的 proxy 仅管理可以向外取得 port 21, 80, 440... 等端口的目标网站,不是这些端口就无法帮忙代理取得。 至于 IP 或网域则没有管理。基本的管理有这些方式:
* dst ip-addr/netmask:
控制不能去的目标网站的 IP ,举例来说,我们不许 proxy 去捉取 120.114.150.21 这部主机的 IP 时,可以写成是:
acl dropip dst 120.114.150.21/32
* dstdomain .domain.name:
控制不能去的目标网站的主机名。举例来说,如果你在上课时不允许学生跑去种田还是小小战争,那就得要把 .facebook.com 给关闭!那就需要写成:
acl dropfb dstdomain .facebook.com
* url_regex [-i] ^http://url:
使用正规表示法来处理网址列的一种方式!这种方式的网址列必须要完整的输入正规表示法的开始到结尾才行。 举例来说,昆山科大的中文网页写法为 (并非部分比对,所以最结尾的 .* 记得要加上去!):
acl ksuurl url_regex ^http://www.ksu.edu.tw/cht/.*
* urlpath_regex [-i] \.gif$:
与上一个 acl 非常类似,只是上一个需要填写完整的网址数据,这里则是根据网址列的部分比对来处置。以上述的预设案例来说, 只要网址列结尾是 gif (图片文件) 就符合这个项目了。万一我要找出有问题的色情网站,有出现 /sexy 名称并以 jpg 结尾的, 就予以抵挡,那就是使用:
acl sexurl urlpath_regex /sexy.*\.jpg$
除了上述的功能之外,我们还能够使用外部的档案来提供相对应的 acl 内容设定值喔! 举例来说,假设我们想要抵挡的外部主机名常常会变动,那么我们可以使用 /etc/squid/dropdomain.txt 来设定主机名, 然后透过底下的方式来处理
```
acl dropdomain dstdomain "/etc/squid/dropdomain.txt"
```
然后在 dropdomain.txt 当中,一行一个待管理的主机名,这样也能够减少持续修改 squid.conf 的困扰! 好了!了解了 acl 之后,接下来得要谈谈 http_access 这个实际放行或拒绝的参数了!
* 以 http_access 调整管理信任来源与管控目标的『顺序』:
设定好 acl 之后,接下来就是要看看到底要不要放行喔~放行与否跟 http_access 这个项目有关。基本上, http_access 就是拒绝 (deny) 与允许 (allow) 两个控件目,然后再加上 acl 名称就能够达到这样的功能了! 只是你得要特别注意的是:http_access 后面接的数据,是有顺序的!这个观念很重要喔! 我们用底下的案例来说明好了:
假设我要放行内部网络 192.168.1.0/24, 192.168.100.0/24 这两段网域,然后拒绝对外的色情相关图片, 以及 facebook.com 网站,那么就应该要这样做:
```
[root@www ~]# vim /etc/squid/squid.conf
# http_access 是有顺序的,因此建议你找到底下这个关键词行后,将你的资料加在后面
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
acl vbirdlan src 192.168.1.0/24 192.168.100.0/24
acl dropdomain dstdomain .facebook.com
acl dropsex urlpath_regex /sexy.*jpg$
http_access deny dropdomain <==这三行的『顺序』很重要!
http_access deny dropsex
http_access allow vbirdlan
[root@www ~]# /etc/init.d/squid restart
```
你得要注意,如果先放行了 vbirdlan 才抵挡 dropdomain 时,你的设定可能会失败!因为内网已经先放行, 因此后面的规则不会比对,那么 facebook.com 就无法被抵挡了!这点得要很注意才行! 通常的作法是,先将要拒绝的写上去,然后才写要放行的数据就好了。
* * *
### 17.2.4 其他额外的功能项目
* 不要进行某些网页的快取动作
从前面的说明我们知道 Proxy 的快取通常在记录比较少变动的数据,如果是讨论区或者是程控类的数据库型态网页, 那么恐怕就没有快取的需要,因为数据一直变动嘛!你总不希望你发了一帖留言,结果等一下再去浏览时,看到的还是旧留言吧! 所以啰,在预设的情况下,squid 已经拒绝某些数据的快取了,那就是底下的几个设定值:
```
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY <==重点就是这一行!可以拒绝,不要让后面的 URL 被快取!
```
我们知道通常 .php 结尾的网页大部分就是讨论区之类的变动性数据,那么能不能出现 .php 结尾的网页就不要快取呢? 当然可以啊!那该如何进行?我们以上面的数据来照样造句一下吧!
例题:只要网址列出现 .php 结尾的,就不予以快取!答:透过 acl 配合 cache 这两个参数来处理即可!
```
[root@www ~]# vim /etc/squid/squid.conf
acl denyphp urlpath_regex \.php$
cache deny denyphp
# 在此档案的最后新增这两行即可!
[root@www ~]# /etc/init.d/squid restart
```
* 磁盘中快取的存在时间
还记得底下的设定值吗?这个设定值的参数是这样设定的:
```
# refresh_pattern <regex> <最小时间> <百分比> <最大时间>
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
```
* regex:使用的是正规表示法来分析网址列的资料,如上面第一行设定为网址列开头是 ftp 的意思。
* 最小时间:单位是分钟,当取得这个数据的时间超过这个设定值,则该数据会被判定为旧资料。如上面第一行, 表示当取得的资料超过 1440 分钟时,该资料会被判定为旧数据,若有人尝试读取同样的网址列,那么 squid 会重新抓取该数据,不会使用快取内的旧数据。至于第三行,则表示除了上述的两个开头数据外,其他的数据都是被定义为新的, 因此 squid 只会从快取内抓数据给客户端。
* 百分比:这个项目与『最大时间』有关,当该资料被抓取到快取后,经过最大时间的多少百分比时,该数据就会被重抓。
* 最大时间:与上一个设定有关,就是这个数据存在快取内的最长时间。如上面第一行,最大时间为 10080 分钟,但是当超过此时间的 20% (2016分钟) 时,这个数据也会被判定为旧资料。
例题:在网址列出现 .vbird. 字样时,该数据为暂时使用的,因此 2 小时后就算旧数据。而最长保留在快取给她一天的时间, 且经过 50% 的时间后,就被判定为旧数据吧!答:
```
[root@www ~]# vim /etc/squid/squid.conf
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern \.vbird\. 120 50% 1440
refresh_pattern . 0 20% 4320
[root@www ~]# /etc/init.d/squid restart
```
* 主机名与管理员的 email 指定
如果你的服务器主机名尚未决定,因此使用的主机名在因特网上面是找不到对应的 IP 的 (因为 DNS 未设定), 那么在预设的 squid 设定中,恐怕会无法顺利的启动。此时你可以手动的加入一个主机名,就是透过 visible_hostname 来指定。 同时,如果客户端使用 squid 出现任何错误时,屏幕上都会出现管理员的 email 让用户可以回报。现在假设主机名为 www.centos.vbird 且管理员的 email 为 dmtsai@www.centos.vbird ,此时我们可以这样修改:
```
[root@www ~]# vim /etc/squid/squid.conf
cache_mgr dmtsai@www.centos.vbird <==管理员的 email 呦!
visible_hostname www.centos.vbird <==直接设定主机名喔!
[root@www ~]# /etc/init.d/squid restart
```
* * *
### 17.2.5 安全性设定:防火墙, SELinux 与黑名单档案
* 防火墙得要放行 tcp 的 port 3128
现在我们已经设定了让 192.168.100.0/24 及 192.168.1.0/24 这两段来源使用我们的 proxy server , 那么想当然尔,防火墙的设定就得要开放这两段使用 port 3128 才行啊!不过你得要特别注意,并不是开放防火墙就能使用 proxy server 的资源,还得要使用 acl 配合 http_access 才行呦!注意注意!假设你已经使用了 iptables.rule , 那么修改的方法就是这样:
```
[root@www ~]# vim /usr/local/virus/iptables/iptables.allow
iptables -A INPUT -i $EXTIF -p tcp -s 192.168.1.0/24 --dport 3128 -j ACCEPT
# 因为内网 192.168.100.0/24 本来就是全部都接受放行的!
[root@www ~]# /usr/local/virus/iptables/iptables.rule
```
* SELinux 的注意事项
针对 proxy 来说,CentOS 6.x 倒是没有给予太多的规则限制,因此似乎不太需要修订规则。不过,SELinux 的安全本文在类型部分得注意。这包括配置文件 (/etc/squid/ 内的数据) 类型是 squid_conf_t 的样式, 而快取目录的类型则是 squid_cache_t 的类型,且上层类型 (/var/spool/) 应该是要成为 var_t 之类的才行。 修改的方法就是透过 chcon 来处理即可。
* 建立黑名单配置文件
我们在 [17.2.3](#http_access) 小节里面谈到,可以透过『 dstdomain .domain.name 』来抵挡不想联机的网站。 不过每次都得使用 root 身份来设定 squid.conf 才行。那有没有办法额外处理出一个档案,让想要拒绝联机的数据写入, 这样比较容易管理,不需要一直去修改 squid.conf 嘛!有没有办法可以达成呢?有的,就透过特定档案来处置即可。 看看底下这个例题来修订一下吧:
例题:建立一个名为 /etc/squid/dropdomain.txt 的档案,内容为拒绝联机的目标网站。答:我们之前设定过相关的网站,处理的方法是直接将主机名写入 squid.conf 中,现在我们可以这样修订:
```
[root@www ~]# vim /etc/squid/squid.conf
# 找到底下的数据,就是 dropdomain 那行,约在 629 行左右,并且修改一下
acl dropdomain dstdomain "/etc/squid/dropdomain.txt"
# 注意一下,如果是档名,请写绝对路径,且使用双引号或单引号圈起来!
[root@www ~]# vim /etc/squid/dropdomain.txt
.facebook.com
.yahoo.com
# 一行一个 domain 名称即可
[root@www ~]# /etc/init.d/squid reload
```
这个方法的好处是,你可以使用额外的控制方式去修改 /etc/squid/dropdomain.txt 这个档案的内容, 并且修改完毕后再使用 reload 去加载配置文件,不必要重新启动 (restart),因为 reload 的速度比较快速。 举例来说,鸟哥的专题生就用 PHP 写了一支控制该档案的网页接口,可以让老师在上课时直接透过网页输入要被控制的目标网站, 这样学生就无法在上课时联机到外面的某些网站去玩游戏啰~
* * *
- 鸟哥的Linux私房菜:服务器架设篇 第三版
- 第一部份:架站前的进修专区
- 作者序
- 第一章、架设服务器前的准备工作
- 1.1 前言: Linux 有啥功能
- 1.2 基本架设服务器流程
- 1.3 自我评估是否已经具有架站的能力
- 1.4 本章习题
- 第二章、基础网络概念
- 2.1 网络是个什么玩意儿
- 2.2 TCP/IP 的链结层相关协议
- 2.3 TCP/IP 的网络层相关封包与数据
- 2.4 TCP/IP 的传输层相关封包与数据
- 2.5 连上 Internet 前的准备事项
- 2.6 重点回顾:
- 2.7 本章习题
- 2.8 参考数据与延伸阅读
- 第三章、局域网络架构简介
- 3.1 局域网络的联机
- 3.2 本书使用的内部联机网络参数与通讯协议
- 第四章、连上 Internet
- 4.1 Linux 连上 Internet 前的注意事项
- 4.2 连上 Internet 的设定方法
- 4.3 无线网络--以笔记本电脑为例
- 4.4 常见问题说明
- 4.5 重点回顾
- 4.6 本章习题
- 4.7 参考数据与延伸阅读
- 第五章、 Linux 常用网络指令
- 5.1 网络参数设定使用的指令
- 5.2 网络侦错与观察指令
- 5.3 远程联机指令与实时通讯软件
- 5.4 文字接口网页浏览
- 5.5 封包撷取功能
- 5.6 重点回顾
- 5.7 本章习题
- 5.8 参考数据与延伸阅读
- 第六章、 Linux 网络侦错
- 6.1 无法联机原因分析
- 6.2 处理流程
- 6.3 本章习题
- 6.4 参考数据与延伸阅读
- 第二部分:主机的简易资安防护措施
- 第七章、网络安全与主机基本防护:限制端口, 网络升级与 SELinux
- 7.1 网络封包联机进入主机的流程
- 7.2 网络自动升级软件
- 7.3 限制联机埠口 (port)
- 7.4 SELinux 管理原则
- 7.5 被攻击后的主机修复工作
- 7.6 重点回顾
- 7.7 课后练习
- 7.8 参考数据与延伸阅读
- 第八章、路由观念与路由器设定
- 8.1 路由
- 8.2 路由器架设
- 8.3 动态路由器架设:quagga (zebra + ripd)
- 8.4 特殊状况:路由器两边界面是同一个 IP 网段: ARP Proxy
- 8.5 重点回顾
- 8.6 本章习题
- 8.7 参考数据与延伸阅读
- 第九章、防火墙与 NAT 服务器
- 9.1 认识防火墙
- 9.2 TCP Wrappers
- 9.3 Linux 的封包过滤软件:iptables
- 9.4 单机防火墙的一个实例
- 9.5 NAT 服务器的设定
- 9.6 重点回顾
- 9.7 本章习题
- 9.8 参考数据与延伸阅读
- 第十章、申请合法的主机名
- 10.1 为何需要主机名
- 10.2 注册一个合法的主机名
- 10.3 重点回顾
- 10.4 本章习题
- 10.5 参考数据与延伸阅读
- 第三部分:局域网络内常见的服务器架设
- 第十一章、远程联机服务器SSH / XDMCP / VNC / RDP
- 11.1 远程联机服务器
- 11.2 文字接口联机服务器: SSH 服务器
- 11.3 最原始图形接口: Xdmcp 服务的启用
- 11.4 华丽的图形接口: VNC 服务器
- 11.5 仿真的远程桌面系统: XRDP 服务器
- 11.6 SSH 服务器的进阶应用
- 11.7 重点回顾
- 11.8 本章习题
- 11.9 参考数据与延伸阅读
- 第十二章、网络参数控管者: DHCP 服务器
- 12.1 DHCP 运作的原理
- 12.2 DHCP 服务器端的设定
- 12.3 DHCP 客户端的设定
- 12.4 DHCP 服务器端进阶观察与使用
- 12.5 重点回顾
- 12.6 本章习题
- 12.7 参考数据与延伸阅读
- 第十三章、文件服务器之一:NFS 服务器
- 13.1 NFS 的由来与其功能
- 13.2 NFS Server 端的设定
- 13.3 NFS 客户端的设定
- 13.4 案例演练
- 13.5 重点回顾
- 13.6 本章习题
- 13.7 参考数据与延伸阅读
- 第十四章、账号控管: NIS 服务器
- 14.1 NIS 的由来与功能
- 14.2 NIS Server 端的设定
- 14.3 NIS Client 端的设定
- 14.4 NIS 搭配 NFS 的设定在丛集计算机上的应用
- 14.5 重点回顾
- 14.6 本章习题
- 14.7 参考数据与延伸阅读
- 第十五章、时间服务器: NTP 服务器
- 15.1 关于时区与网络校时的通讯协议
- 15.2 NTP 服务器的安装与设定
- 15.3 客户端的时间更新方式
- 15.4 重点回顾
- 15.5 本章习题
- 15.6 参考数据与延伸阅读
- 第十六章、文件服务器之二: SAMBA 服务器
- 16.1 什么是 SAMBA
- 16.2 SAMBA 服务器的基础设定
- 16.3 Samba 客户端软件功能
- 16.4 以 PDC 服务器提供账号管理
- 16.5 服务器简单维护与管理
- 16.6 重点回顾
- 16.7 本章习题
- 16.8 参考数据与延伸阅读
- 第十七章、区网控制者: Proxy 服务器
- 17.1 什么是代理服务器 (Proxy)
- 17.2 Proxy 服务器的基础设定
- 17.3 客户端的使用与测试
- 17.4 服务器的其他应用设定
- 17.5 重点回顾
- 17.6 本章习题
- 17.7 参考数据与延伸阅读
- 第十八章、网络驱动器装置: iSCSI 服务器
- 18.1 网络文件系统还是网络驱动器
- 18.2 iSCSI target 的设定
- 18.3 iSCSI initiator 的设定
- 18.4 重点回顾
- 18.5 本章习题
- 18.6 参考数据与延伸阅读
- 第四部分:常见因特网服务器架设
- 第十九章、主机名控制者: DNS 服务器
- 19.1 什么是 DNS
- 19.2 Client 端的设定
- 19.3 DNS 服务器的软件、种类与 cache only DNS 服务器设定
- 19.4 DNS 服务器的详细设定
- 19.5 协同工作的 DNS: Slave DNS 及子域授权设定
- 19.6 DNS 服务器的进阶设定
- 19.7 重点回顾
- 19.8 本章习题
- 19.9 参考数据与延伸阅读
- 第二十章、WWW 伺服器
- 20.1 WWW 的簡史、資源以及伺服器軟體
- 20.2 WWW (LAMP) 伺服器基本設定
- 20.3 Apache 伺服器的進階設定
- 20.4 登錄檔分析以及 PHP 強化模組
- 20.5 建立連線加密網站 (https) 及防砍站腳本
- 20.6 重點回顧
- 20.7 本章習題
- 20.8 參考資料與延伸閱讀
- 第二十一章、文件服务器之三: FTP 服务器
- 21.1 FTP 的数据链路原理
- 21.2 vsftpd 服务器基础设定
- 21.3 客户端的图形接口 FTP 联机软件
- 21.4 让 vsftpd 增加 SSL 的加密功能
- 21.5 重点回顾
- 21.6 本章习题
- 21.7 参考数据与延伸阅读
- 第二十二章、邮件服务器: Postfix
- 22.1 邮件服务器的功能与运作原理
- 22.2 MTA 服务器: Postfix 基础设定
- 22.3 MRA 服务器: dovecot 设定
- 22.4 MUA 软件:客户端的收发信软件
- 22.5 邮件服务器的进阶设定
- 22.6 重点回顾
- 22.7 本章习题
- 22.8 参考数据与延伸阅读