Linux进阶学习笔记之——局域网控制者:Proxy(代理)服务器

域网控制者:Proxy服务器

代理服务器的功能是可以代理局域网内 的个人计算机来向因特网取得网页或其他数据的一种服务,由于代理取的数据可以保存一份在服务器的缓存上,因此往往有类似“加速假象”的功能。还有一种更广泛的功能是局域网**“高级防火墙”**的角色。这里的“高级”指的是OSI七层里边的高层,应用在应用层上的一种防火墙方式,不像iptables是用在网络层、传输层。

1、什么是代理服务器

代理服务器的原理很简单,就是以类似代理人的身份去取得用户所需要的数据。但是由于它的“代理”能力,使得我们可以通过代理服务器实现防火墙功能与用户浏览数据的分析也可以节省带宽以及加快内部网络对因特网WWW的访问速度

Linux进阶学习笔记之——局域网控制者:Proxy(代理)服务器_第1张图片

一般来说,代理服务器会搭建在整个局域网的单点对外防火墙上,而在局域网内部的计算机就是通过Proxy来向因特网要求数据,这就是所谓的“代理服务器”。客户端向外部要求的数据事实上都是Proxy帮用户获得的。因此,因特网上看到的要求数据者,将会是Proxy服务器的IP而不是客户端的IP

1.1、代理服务器的工作流程

Linux进阶学习笔记之——局域网控制者:Proxy(代理)服务器_第2张图片

  • #### 当Proxy的缓存拥有用户所想要的数据时(Step 1~ 4)
  1. Client向Server发送一个数据需求数据报;
  2. Server接收之后,先比对这个数据包的来源于预计要前往的目标网站是否可接受?如果来源于目标都合法,那么Server就替Client取得数据;
  3. Server首先会检查自己的缓存。如果有Client所需的数据,就将数据取出,而不经过Internet要求数据;
  4. 最后将数据发送给Client。
  • #### 当Proxy的缓存没有用户所想要的数据时(Step 1~ 5)
  1. Client向Server发送一个需求数据包;
  2. Server接收之后,开始数据比对;
  3. Server发现没有Client需要的数据缓存时,准备向因特网获取数据;
  4. Server开始向Internet发送要求与取得相关数据;
  5. 最后将数据发送给Client。

Cache的好坏,是影响Proxy效能的关键。

1.2、上层代理服务器

Linux进阶学习笔记之——局域网控制者:Proxy(代理)服务器_第3张图片

上层代理服务器就是代理服务器的代理服务器,作为上层代理的服务器都具有较高的带宽,而上层代理服务器最大的好处是分流

1.3、代理服务器与NAT服务器的差异

代理服务器与NAT服务器的差异 说明
NAT服务器功能 主要通过数据包过滤的方式,并使用iptables的nat表格进行IP伪装(SNAT),让客户端自行前往因特网的任何地方的一种方式。主要的运作行为是OSI的二、三、四层。由于是通过数据包过滤与伪装,因此客户端可以使用的端口号弹性较大
Proxy服务器功能 主要通过Proxy的服务程序提供网络代理的服务,因此Proxy能不能进行某些工作,与该服务的程序功能有关。举例来说,你的Proxy并没有提供邮件或FTP代理,那么你的Client就无法取得这些网络资源。主要工作行为在OSI的应用层。

1.4、搭建代理服务器的用途与优点

主要的功能:

  1. 作为WWW的网页数据获取代理人:最主要的功能
  2. 作为内部局域网的单点对外防火墙系统

常被用于大型的企业内部,因为可以实现杜绝内部人员上班时使用非WWW以外的网络服务,而且还可以监测用户的资料要求流向与流量。

优点:

  1. 节省单点对外的网络带宽,降低网络负载;
  2. 以较短的路径取得网络数据,有网络加速的感觉;
  3. 通过上层代理服务器的辅助,达到自动数据分流的效果;
  4. 提供防火墙内部的计算机连上Internet。

缺点:

  1. 容易被内部局域网的人员滥用;
  2. 需要较高的配置与排错程序;
  3. 可能会取得旧数据。

什么时候需要架设代理服务器:

  1. Client用户不少,而且大部分仅需要WWW这个网络服务而已;
  2. Proxy还兼做防火墙功能;
  3. Client常常需要连接到传输速度很慢的网站,例如国外的网站;
  4. Client常常浏览的网站时静态网站,而不是动态网站。

2、Proxy服务器的基本配置

2.1、Proxy所需要的squid软件及其软件结构

[root@server ~]# yum install squid -y

主要的配置文件:

主要的配置文件 说明
/etc/squid/squid.conf 主要配置文件
/etc/squid/mime.conf 设置squid所支持的Internet上面的文件格式,就是所谓的mime格式

其他重要目录与文件:

其他重要目录与文件 说明
/usr/sbin/squid 提供squid主程序
/var/spool/squid 默认的squid缓存存储的目录
/usr/lib64/suqid/ 提供squid额外的控制模块,尤其是影响认证密码方面的程序

2.2、Centos默认的squid设置

在默认情况下,Centos的squid具有以下几个特色:

  • 仅有本机(127.0.0.1)来源可以使用这个squid功能;
  • squid所监听的Proxy服务器端口在port 3128;
  • 缓存目录所在的位置在/var/spool/squid/,且仅有100MB的磁盘高速缓存量;
  • 除了squid程序所提供的基本内存外,尚提供8MB的内存来给热门文件缓存在内存中;
  • 默认启动squid程序的用户为squid这个账号(与磁盘高速缓存目录权限有关)。

可以看到squid的默认值都是针对小型网络提供的。

[root@server ~]# vim /etc/squid/squid.conf
#1、信任用户与目标控制,通过acl定义出localhost/localnet等相关用户
acl localnet src 10.0.0.0/8     # RFC1918 possible internal network
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7       # RFC 4193 local private network range
acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines
#2、定义可取的数据端口所在
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT
#3、定义这些名称时都可放行的标准依据(有顺序)
http_access deny !Safe_ports	#拒绝非正规的端口连接要求
http_access deny CONNECT !SSL_ports	#拒绝非正规的加密端口连接要求
http_access allow localhost manager	#放行本机的管理功能
http_access deny manager	#其他管理来源都拒绝

http_access allow localnet	#放行内部网络的用户来源
http_access allow localhost	#放行本机的使用
http_access deny all	#全部都给予拒绝
#4、网络相关参数
http_port 3128	#默认监听客户端要求的端口,是可以改的,如果加密连接,可使用port 923
#5、缓存与内存相关参数设置
hierarchy_stoplist cgi-bin ?	
cache_mem 8 MB	#额外内存,用来处理最热门的缓存数据(需自己加)
#6、磁盘高速缓存目录所在
cache_dir ufs /var/spool/squid 100 16 256	#默认使用100MB的缓存容量
coredump_dir /var/spool/squid

2.2.1、使用默认值启动squid并查看相关信息

[root@server ~]# systemctl start squid
[root@server ~]# netstat -tulnp | grep squid
tcp6       0      0 :::3128                 :::*                    LISTEN      29456/(squid-1)    
udp        0      0 0.0.0.0:41190           0.0.0.0:*                           29456/(squid-1)    
udp6       0      0 :::46867                :::*                                29456/(squid-1)  [root@server ~]# systemctl enable squid

2.2.2、查看与修改缓存目录(cache_dir):权限与SELinux

磁盘高速缓存是影响Proxy性能的一个重要因素,那么squid是如何将缓存存进磁盘呢?squid是将数据分成一小块一小块,然后分别放置到个别的目录中。由于较多的目录可以节省在同一个目录内找好多文件的时间,因此,在默认的/var/spool/squid/目录下,squid又将它分成两层子目录来存放现相关的缓存数据。

[root@server squid]# ls /var/spool/squid/
00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F  swap.state
#16个子目录
[root@server squid]# ls /var/spool/squid/00
00  0B  16  21  2C  37  42  4D  58  63  6E  79  84  8F  9A  A5  B0  BB  C6  D1  DC  E7  F2  FD
01  0C  17  22  2D  38  43  4E  59  64  6F  7A  85  90  9B  A6  B1  BC  C7  D2  DD  E8  F3  FE
02  0D  18  23  2E  39  44  4F  5A  65  70  7B  86  91  9C  A7  B2  BD  C8  D3  DE  E9  F4  FF
03  0E  19  24  2F  3A  45  50  5B  66  71  7C  87  92  9D  A8  B3  BE  C9  D4  DF  EA  F5
04  0F  1A  25  30  3B  46  51  5C  67  72  7D  88  93  9E  A9  B4  BF  CA  D5  E0  EB  F6
05  10  1B  26  31  3C  47  52  5D  68  73  7E  89  94  9F  AA  B5  C0  CB  D6  E1  EC  F7
06  11  1C  27  32  3D  48  53  5E  69  74  7F  8A  95  A0  AB  B6  C1  CC  D7  E2  ED  F8
07  12  1D  28  33  3E  49  54  5F  6A  75  80  8B  96  A1  AC  B7  C2  CD  D8  E3  EE  F9
08  13  1E  29  34  3F  4A  55  60  6B  76  81  8C  97  A2  AD  B8  C3  CE  D9  E4  EF  FA
09  14  1F  2A  35  40  4B  56  61  6C  77  82  8D  98  A3  AE  B9  C4  CF  DA  E5  F0  FB
0A  15  20  2B  36  41  4C  57  62  6D  78  83  8E  99  A4  AF  BA  C5  D0  DB  E6  F1  FC
#256个子目录

第一层的16个子目录和第二层的256个子目录是怎么出来的呢?我们来看看cache_dir这个重要的参数设置

cache_dir ufs /var/spool/squid 100 16 256	#默认使用100MB的缓存容量
第一个100:代表缓存容量是100MB
第二个16:代表第一层子目录16个
第三个256:没层次的子目录256个

为了解决缓存数据填满整个缓存区域的问题,squid还有两个重要设置:

cache_swap_low 90	#缓存区域容量90%以下不会删除
cache_swap_high 95	#缓存区域容量95%以上时,删除旧数据

2.2.3、squid使用的内存计算方式

cache_mem并不是指“我要使用多少内存给squid使用”,而是指“我还要额外提供多少内存给squid使用”。

2.2.4、管理信任来源(如局域网)与目标(如恶意网站):acl与http_access的使用

修改信任用户的管理参数,acl的基本语法如下:

acl <自定义的acl名称> <要控制的acl类型> <设置的内容>
  • 管理是否能使用Proxy的信任客户端方式
    1. src ip-address/netmask

      主要控制来源的IP地址。

      acl Li src 172.16.0.50/16
      
    2. src addr1-addr2/netmask

      主要控制一段范围的IP地址

      acl Li src 172.16.0.0-172.16.0.255/16
      
    3. srcdomain .domain.name

      如果来源主机的IP一直变,我们可以使用主机名来开放

      acl Li srcdomian .client.lan
      
  • 管理是否让Proxy帮忙代理到该目标去获取数据
    1. dst ip-addr/netmask

      控制不能去的目标网站IP

      acl dropip dst 192.168.0.1/24
      
    2. dstdomain .domain.name

      控制不能去的目标网站的主机名

      acl dropfb dstdomain .baidu.com
      
    3. url_regex [-i] ^http://url

      使用正则表达式来处理网站的一种方式

      acl ksuurl url_regex ^http://www.baidu.com/.*
      
    4. urlpath_regex [-i] .gif$

      上一个需要填写完整的网址数据,这里是根据网址列的部分比对来处置,比如,只要是网址列出的gif的就符合

      acl sexurl urlpath_regex /sexy.*\.jpg$
      
    5. 还可以使用外部的文件来提供相对应的acl内容设置值。举例来说,如果我想抵挡的主机名经常变动,那么我可以使用/etc/squid/dropdomain.txt来设置主机名:

      acl dropdomian dstdomian "/etc/squid/dropdomain.txt"
      

      然后在dropdomain.txt文件中,一行一个主机名。

2.2.5、以http_access调整管理信任来源与管理目标的顺序

设置好acl之后,接下来就是看到底能不能放行。放行与否跟http_access这个项目有关。基本上http_access就是拒绝(deny)和允许(allow)两个控件目,然后加上acl名称就可以了。但特别注意的是:http_access后面接的数据,是有顺序的

[root@server squid]# vim /etc/squid/squid.conf
acl Li src 172.16.0.50/16 10.0.0.155/8
acl dropdomain dstdomain .baidu.com
acl dropsex urlpath_regex /sexy.*jpg$
http_access deny dropdomain		#这三行顺序很重要
http_access deny dropsex
http_access allow Li

通常的做法是,先将要拒绝的写上去,然后才写要放行的数据。

2.3、其他额外的功能项目

2.3.1、不要进行某些网页的缓存操作

acl QUERY urlpath_regex cgi-bin ?
cache deny QUERY	

2.3.2、磁盘的缓存时间

# Add any of your own refresh_pattern entries above these.
#refresh_pattern		 <最小时间>	<百分比> <最大时间>
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:使用的是正则表达式来分析网址的数据
  • 最小时间:单位是分钟,当取得这个数据的时间超过这个设置值时,则该数据被判定为旧数据。
  • 百分比:这个项目与“最大时间”有关,当该数据被获取到缓存后,经过最大时间的多少百分比,该数据就会被重新获取
  • 最大时间:与上一个设置有关,就是这个数据存在缓存中的最长时间。例如第一行,最大时间为10080分钟,但是超过这个时间的20%(2016分钟),这个数据也被判定为旧资料。
# Add any of your own refresh_pattern entries above these.
#
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
refresh_pattern \.li\.          120     50%     1440	#当网址出现.li.字样时,该数据暂为暂时使用的,2小时就算旧数据,最长时间为1天,且经过50%的时间后,也算是旧数据

3、客户端的使用与测试

3.1、浏览器的设置

Linux进阶学习笔记之——局域网控制者:Proxy(代理)服务器_第4张图片

Linux进阶学习笔记之——局域网控制者:Proxy(代理)服务器_第5张图片

这样,Firefox的Proxy就配置好了!

3.2、测试Proxy失败的画面

当我们连接被拒绝的网站时,会出现什么呢?(测试拒绝访问百度)

acl dropdomain dstdomain .baidu.com
http_access deny dropdomain		#这三行顺序很重要

Linux进阶学习笔记之——局域网控制者:Proxy(代理)服务器_第6张图片

你可能感兴趣的:(Linux进阶—服务器搭建)