CSDN博客

img hdb

Linux组网入门(6):代理服务器

发表于2003/12/29 17:20:00  901人阅读

分类: linux

摘要

  为了节省和控制上网开支,许多公司及办公室采取了申请一条DDN专线,将整个公司或办公室连成一个局域网,然后让整个局域网共享这条DDN专线上网。在这种情况下,如下图所示,我们必须通过一个代理服务器来实现。

(2002-09-16 13:36:43)

By Wing, 出处:fjxufeng

  为了节省和控制上网开支,许多公司及办公室采取了申请一条DDN专线,将整个公司或办公室连成一个局域网,然后让整个局域网共享这条DDN专线上网。在这种情况下,如下图所示,我们必须通过一个代理服务器来实现。

proxyserver-1

  图7-1 用代理服务器上网

7.1 HTTP代理服务器

  代理服务器,顾名思义就是局域上不能直接上网的机器将上网请求(比如说,浏览某个主页)发给能够直接上网的代理服务器,然后代理服务器代理完成这个上网请求,将它所要浏览的主页调入代理服务器的缓存;然后将这个页面传给请求者。这样局域网上的机器使用起来就像能够直接访问网络一样。

  并且,代理服务器还可以进行一些网站的过滤和控制的功能,这样就实现了我们使用它的初衷——控制和节省上网费用。

  在LINUX中,有一个功能很强大的http/https/ftp的代理服务器程序——Squid Proxy Server,由于它安装简单,使用方便,所以已经被广泛地使用。在RedHat LINUX的安装光盘中已经包含了它。下面我们说说它的使用方法。

7.1.1 安装Squid Proxy Server

  由于在安装光盘中用Squid的RPM安装包,所以我们可以使用RPM来安装Squid。

rpm –ivh squid-1.1.22-2.rpm 

  当然,由于这个安装包是在光盘上的,我们要先将光盘mount到文件系统中来,才能够进行安装。

  这样,squid就会完成安装,并做了相应的初始设置。

7.1.2 配置初步

  Squid Proxy Server仅有一个配置文件——/etc/squid.conf。我们必须对它进行相应的修改才能适用于我们的系统。下面就是一些最基本的配置选项。我们可以用vi打开这个文件进行编辑。

  1. 设置http/https/ftp的代理端口号:

  代理端口的默认值是3128,可以根据自己的喜好修改。但是要注意的是,千万不能与一些著名的端口冲突,例如POP端口——110等。如果你不是十分熟悉,就保留默认值吧。

  下面就是在/etc/squid.conf文件中的一句:

http_port 3128 

  2.添加访问控制组:

  我们将需要区别开的不同用户定义成一个访问控制组。比如一个公司的内部网的网络IP是192.168.200.0。而且只想区分公司内和公司外的两类用户,则我们就在/etc/squid.conf文件中添加下表的两句:


   acl all src 0.0.0.0/0.0.0.0
   acl company src 192.168.200.0/255.255.255.0

  这样,我们说定义了一个包含所有人的组,和一个包含公司内部网的所有人的组。下面就可以对这两个组分别进行访问权力的设制。

  3. 设置每个访问控制组的访问权力:

  比如,我们希望公司内部的所有人都能够通过代理服务器上网,而禁止其它的人使用代理服务器上网,则我们就在/etc/squid.conf文件中添加下面两句:


 http_access allow company
 http_access deny all 

  也就是我们allow(允许)“company”组使用代理服务器,而除了这个组以外的“all”deny(禁止)使用代理服务器。要注意的是,这两句一定不能顺序调换。否则将禁止所有的用户使用。

  请大家好好体会。

  4. 存盘退出;

  5. 执行下面的命令,使得新的配置生效:

/etc/rc.d/init.d/squid restart 

  上面仅仅是一个最基本的设置,squid提供了许多功能强大的可选项,大家可以根据实际情况进行更详尽的设置。在/etc/squid.conf文件中,每一项设置均有详尽的注释,大家可以参看这些帮助为squid作更多的设置。

7.1.3 客户端设置

  下面我们以IE为例,简单说明局域网上的客户机的设置。

  1.打开IE,在菜单栏上选择“工具”® “Internet选项”®“连接”®“局域网设置”,将出现如下图所示的对话框:

proxyserver-2

  图7-2 局域网设置

如图所示,选中“使用代理服务器”选项,并且填上代理服务器的IP地址192.168.9.1以及代理端口号3128。

  2. 为了更好地使用squid代理服务器,我们可以进行更加详细的设置,单击“高级…”按钮,进入如图7-3所示的代理服务器设置对话框。

proxyserver-3

  图7-3 代理服务器设置对话框

  由于Squid是一个http和ftp的代理服务器,所以我们应该将使用代理服务器的协议修改为只有http和ftp,修改后如下图所示:

proxyserver-4

  图7-4 修改后的代理服务器

7.2 IP代理服务器

  使用HTTP代理服务器,可以使局域网中的每一台电脑能够获得http/https/ftp三种服务。接下来我们讨论如何让LINUX成为一个连接局域网和Internet无缝连接的一个IP代理服务器。

  在Internet中,每个主机都必须有一个唯一的IP地址。现在的IP协议是IPV4,第四版本的IP协议,在设计它的时候,尽管人们已经大胆地使用了32位地址(大约可以表示320亿个不同地址),但是仍然无法满足日益增长的网络需求。所以网络界已经开始研究和过渡到IPV6(采用128位地址,可以表示320亿的四次方个不同地址)。但在尚未采用新的IP协议的时候,人们只能使用一些折衷的方法。

  现在最常用的方法就是:如果某个网络直接与Internet相连,那就需要先申请一些公用地址,这些公用地址是唯一的,没有重复的。而对于那些不打算直接与Internet相连的网络则采用一些允许重复的“私有地址”。这样,虽然这些私有地址可能被许多网络使用,但是由于它们并不相互通信,所以就不会造成什么影响。按照RFC 1918文件的规定,以下地址为“私有地址”:


1个A类地址:10.0.0.0
16个B类地址:172.16.0.0~172.31.0.0
256个C类地址用于私用地址:192.168.0.0~192.168.255.0

  也就是说,使用这些网络地址来定义内部网,然后通过一个网关或其它可以执行“网络地址翻译”功能的其它系统与Internet相连。如下图所示:

proxyserver-5

  图7-5 IP代理服务器工作示意图

  正如上图所示,在局域网上使用的是私有地址,而网关拥有两个IP地址,一个是内部网的,而另一个则是全球唯一的公用地址。一般来说,申请一条DDN专线,就可以得到8个公用地址。

  在后面的章节中,我们将以这个图为原型,讨论具体的设置方法。值得说明的是,在局域网部分,虽然图中只画出了两台,而实际上,最多可以扩充到254台。(因为我们使用的是一个C类地址:192.168.200.0)

7.3 安装IP代理服务器

7.3.1 重新编译内核

  如果你使用的是RedHat LINUX 6.0,那么就请跳过这个小节。因为在RedHat LINUX 6.0中已经完成了这个部分的工作了。否则,请确认以下选项是否与要求一致。


IP:forwarding/gatewaying(CONFIG_IP_FORWARD)[Y/n] y
IP:optimize as router not host(CONFIG_IP_ROUTER)[Y/n] y
NetWork firewalls(CONFIG_FIREWALL)[y/n] y
TCP/IP networking(CONFIG_NET)[y/n] y
IP:firewalling(CONFIG_IP_FIREWALL)[y/n] y
IP:masquerading(CONFIG_IP_MASQUERADE) y 

7.3.2 配置两块网卡

  要作为IP代理服务器的这台电脑,必须安装两块网卡,而且必须确认两块网卡eth0和eth1工作正常。关于网卡的配置,请大家参看本篇的第三章。而在配置网卡的过程中,可以使用以下命令来使得网卡重新加载:

/etc/rc.d/init.d/network restart 

  将两块网卡的IP地址按实际情况设置好,一个是局域网内的IP地址,一个是连接Internet的公用IP地址。例如:

  我们用第一块网卡(eth0)将IP代理服务器连接到内部网交换机上,则将内部网的IP地址给第一块网卡。

IP address:192.168.200.1 netmask:255.255.255.0 

  我们用第二块网卡(eth1)将IP代理服务器与DDN专线相连(这个部分的连接一般由DDN专线的提供方ISP设置。则将随着DDN而获得的公用地址给第二块网卡。

IP address:202.101.98.1 netmask:255.255.255.0 

7.3.3 设置IP的转发规则

  根据LINUX的内核版本不同,LINUX所提供的IP转发规则设置工作也不一样。在早期版本中,用的是ipfwadm,而在新的版本中(LINUX 2.2以后版本)使用的是ipchains。以下就简单地说明如何使用ipchains工具设置IP的转发规则。

  1. 设置思路

  一般来说,我们可以采用以下两种思路进行IP的转发规则设置:

  1) 先全面禁止所有的输入、输出、转发包,然后根据需要逐步打开所要求的各项服务。这种方法相对来说更安全,但是如果你对要实现的服务和功能不能清楚地知道应该打开哪些服务和端口就不太好办了。

  2) 我们也可以先打开所有的输入、输出、转发包。然后禁止一些危险包,IP欺骗包,广播包,ICMP服务类型攻击等。这种方法的缺点就是不够安全。但是比较方便、容易配置。所以本文以这种方法作为设置的思路。

  2. 设置前的准备

  在设置之前,我们应该对自己所要进行设置的网络环境和要求有一个全面的了解,以便在设置的时候做到心中有数。在本例中我们就是以图7-5所示为参考。

  另外,由于IP的转发规则比较多,而且容易变化,所以我们一般建立一个专门的脚本文件(例如:/etc/ipchains.set)来存放这些IP的转发规则。当创建之后,我们要用chmod命令赋予它可执行的权限。然后运行它,这样IP的转发规则就生效了。

  为了让这个IP转发规则能够在一启动就生效,我们必须在/etc/rc.d/rc.local中加上一行:

/etc/ipchains.set 

  3. 基础知识

  LINUX内核在一启动时规定了三个规则表,这些表称为链。分别是进入(input),外出(output),中转(forward)。当一个包从网卡进来的时候,核心使用进入(input)链的规则来决定这个包的命运(通过还是丢弃);如果通过了,那么核心将决定包下一步该发往何处,假如它是送往另一台机器的,核心就运用中转(forward)链规则决定这个包的命运;最后,一个包发送出去之前,核心应用外出(output)链决定这个包的命运。

  lo interface:简写为lo,它是一个本地环路接口。假如包是由一个本地的进程为另一个本地进程产生的,那么它们通过lo口进出。

  4. 配置实例

  下面给出一个配置实例,汉字部分就是注解。

  1) 在开始说明一下脚本文件,和设定运行时的显示:

 #!/bin/sh echo “Starting ipchains rules….” 

  2) 将所有的规则清空:


  /sbin/ipchains –F forward
  /sbin/ipchains –F input
  /sbin/ipchains –F output 

  3) 设置链的初始规则,DENY代表丢弃,ACCEPT代表通过:


  /sbin/ipchains –P forward DENY 
  /sbin/ipchains –P input ACCEPT 
  /sbin/ipchains –P output ACCEPT 

  4)设置内部IP变量:

external_interface=192.200.168.1 

  5)设置本地环路lo的的规则:


   /sbin/ipchains –A input –j ACCEPT –i lo 
   /sbin/ipchains –A output –j ACCEPT –i lo 

  由于,在本地进程之间的包,我们应该让它们顺利地通过,所以在此我们应该将input和output两条链均设置为通过(ACCEPT),注意,由于是本地环路,所以不存在forward(转发链)。

  6)防止IP欺骗:


  /sbin/ipchains –A input j DENY –i eth1 –s 192.168.200.0/24 
  /sbin/ipchains –A input –j DENY –i eth1 –d 192.168.200.0/24
  /sbin/ipchains –A output –j DENY –i eth1 –s 192.168.200.0/24
  /sbin/ipchains –A output –j DENY –i eth1 –d 192.168.200.0/24

  所谓的IP欺骗就是指在IP包中存在着不可能的IP源地址或目标地址。eth1是一个与外部Internet相连,而192.168.200.0则是内部网的网络号,也就是说,如果有一个包从eth1进入主机,而说自己的源地址是属于192.168.200.0网络,或者说它的目标地址是属于这个网络的,那么这显然是一种IP欺骗,所以我们使用DENY将这个包丢弃(第一、二句)。

  要说明的是,192.168.200.0/24表示网络号是192.168.200.0而子网掩码是255.255.255.0,就代表了所有属于网络192.168.200.0的IP地址。

  同样的,如果有包要通过eth1向Internet,而且它的源地址或目标地址是属于网络192.168.200.0,那么显然也是不可能的。我们仍然使用DENY将它丢弃。

  7)防止广播包从IP代理服务器进入局域网:


  /sbin/ipchains –A input –j DENY –i eth0 –s 255.255.255.255
  /sbin/ipchains –A input –j DENY –i eth0 –d 0.0.0.0
  /sbin/ipchains –A input –j DENY –i eth0 –s 240.0.0.0/3

  当包的源地址是255.255.255.255或目标地址是0.0.0.0,则说明它是一个广播包,当广播包想进入eth0时,我们就应该DENY,丢弃它。而240.0.0.0/3则是国际标准的多目广播地址,当有一个源地址是属于多目广播地址的包,我们将用DENY策略,丢弃它。

  8)设置IP包转发,使得局域网访问Internet的包能够顺利地转发到eth1。


  /sbin/ipchains –A forward –j ACCEPT –i eth1 –s 192.168.200.0/24
  /sbin/ipchains –A forward –j ACCEPT –i eth1 –d 192.168.200.0/24

  9) 启动IP Masquerading rules:

echo “1” > /proc/sys/net/ipv4_forward

  10) 增加一些专用模块:


 /sbin/modprobe ip_masq_ftp
 /sbin/modprobe ip_masq_quake
 /sbin/modprobe ip_masq_irc
 /sbin/modprobe ip_masq_user
 /sbin/modprobe ip_masq_raudio

  11)设置eth0的IP转发规则:

/sbin/ipchains –A forword –j MASQ –I eth0 –s 192.168.200.0/24

  12) 假如你想禁止局域网上的一台主机192.168.200.5访问互联网,则可以设置:


  /sbin/ipchains –A forward –j DENY –i eth1 –s 192.168.200.5/32
  /sbin/ipchains –A forward –j DENY –i eth1 –d 192.168.200.5/32

  5. 客户端设置

  设置了IP代理服务器后,在客户端的设置是十分简单的。只要在网卡的TCP/IP属性中设置网关为192.168.200.1就可以无缝地访问Internet了。

0 0

相关博文

我的热门文章

img
取 消
img