* 案例名称

  用 Linux 实现共享 ADSL 方案

  

  * 技术范围

  接入

  

  * 技术关键词

   ADSL Linux Squid
  

  * 案例描述

  某一小企业团体,局域网规模很小,只有 20 几台终端客户机,没有服务器,需要共享上网。还需要一定的互联网访问权限的设置,为了废物利用,要求利用现存的一台 2000 年购买的赛扬电脑进行改造成互联网代理服务器或者防火墙。

  

  * 解决思路

   2001 年购买的电脑,硬件性能普遍没有时下主流配置强劲,所以如果用 Windows Server 来做平台是不可能的了,原因有很多,撇开硬件因素不谈──想想吧,赛扬 466CPU 128MB 内存跑 Windows Server 2003 ISA Server 是什么感觉啊,老牛拉破车!该团体没有专职的网管员,不可能时刻去照顾服务器,但是 Windows 是众所周知的出了名的脆弱,如果对他放任不管,不去升级补丁,不去仔细设置,没几天就会被***给攻陷了。另外该团队的老板对使用破解的软件心存顾虑。经综合权衡,决定采用 Linux+Squid+ Iptables 来实现目标。这些都是开源软件,不存在破解带来的安全隐患。且 Linux 对硬件配置要求极低,像 2000 年买来的那样配置的硬件, Linux 可以为 50 个客户端提供服务,速度丝毫不受影响,而且 Linux 由于没有 Windows 普及面广,针对它的病毒和***活动与 Windows 平台相比,可以说是微不足道。

  故本方案决定采用 Debian Linux 作为服务器平台,使用 Squid 为客户端提供 HTTP 代理服务。

  

  * 关键技术

   Debian ,是一种自由操作系统,全称 Debian GNU/Linux ,采用 Linux 作为内核,由 Debian 计划( Debian Project )组织维护。 Debian 是一个纯粹由自由软件所组合而成的操作环境,而其背后並沒有任何的营利组织支持,它的开发团队全部都是来自世界各地的志愿者,官方开发者的总数就将近 1000 名,而非官方的开发者亦为数众多。

   Debian 以其坚守 Unix 和自由软件的精神,以及其给予用户的眾多选择(现时 Debian 包括了超过 15,000 个组件並支持 11 个计算机系统结构)而闻名。因此,其它众多 Linux 发行版,例如 Ubuntu Knoppix Linspire 也建基于 Debian

   Debian 以稳定性闻名,所以很多服务器都使用 Debian 作为其作业系统具备以下几个特点:

   Debian 是极为精简的 Linux 发行版,有著干淨的操作环境。

  安装步骤简易,大部分情况下只要 <Enter> <Enter> 一直按下去便可以顺利安装。

  拥有方便的组件管理程序,可以让用户容易的寻找、安装、删除、更新程序,或系统昇级。

  健全的软件管理制度,包括了臭虫回报、组件维护人等制度,让 Debian 所收集的软件质量在其的 Linux 发行组件之上。

  拥有庞大的组件库,令用户只需通过其自身所带的软件管理系统便可下载並安装组件,不必再在网络上寻找。

  组件库分类清楚,用户可以明确地选择安装自由软件、半自由软件或闭源软件。

   Squid cache (简称为 Squid )是一个流行的自由软件( GNU 通用公共许可证)的代理服务器和 Web 缓存服务器。 Squid 有广泛的用途,从作为网页服务器的前缀 cache 服务器缓存相关请求来提高 Web 服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其它网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理上网。 Squid 主要设计用于在 Unix 一类系统运行。

   Squid 的发展历史相当悠久,功能也相当完善。除了 HTTP 外,对於 FTP HTTPS 的支持也相当好,在 3.0 测试版中也支持了 IPv6

  

  * 配置过程

  首先登录 Debian 官方站点下载 Debian 安装镜像,最新版本是 etch 4.0r0, ISO 镜像下载回来刻成光盘来安装最为妥当。

   Debian 安装比较简单,若有问题可以参阅 Debian 参考手册( [url]http://qref.sourceforge.net/[/url] ),这本 Debian 参考手册很好,提供了大量的实例,涵盖了系统管理的方方面面。

  安装时要注意网络的设置,第一块网卡,即接 ADSL Modem 的网卡;第二块网卡即接入局域网 ; 系统表现为 eth0 eth1 ,但实际上 eth0 eth1 未必对应与相应的网卡,故当网络不通的时候应考虑交换一下网线,笔者就曾经犯过这样的低级错误。

  接内网的网卡的网络设置要和局域网的网络在同一网段,如有错误可以修改该网络的设置:

   #ifdown eth0

   #nano /etc/network/interfaces # 根据你的实际需求做出调整

   #ifup eth0
  编辑
/etc/network/interfaces 文件,使其包含类似下面这段的内容:

   iface eth0 inte static

     address 10.152.16.3

     netmask 255.255.255.0

  不要使用 DHCP ,否则其他客户端会找不到这台服务器。该文件避免出现:

   iface eth0 inet dhcp
  快速设置 ADSL 拨号上网的方法是使用 pppoeconf ,在终端中输入:

   #pppoeconf
  即可进行设置 ADSL 拨号。

   pppoeconf 是使用菜单界面询问一些问题,设置后,系统每次启动都会自动拨号 ADSL

  服务器设置最关键是在 squid 的设置。

   squid 的安装有两种途径,一是从 Debian 的源中来安装 ; 二是源码编译安装。

  第一个方法很简单,

   apt-get install squid
  就可以完成安装,但是 Squid 很多特性都不会实现,我通常更倾向于源码编译安装。

  到下面的官方网站下载最新的版本进行编译安装:

   [url]http://www.squid-cache.org/[/url]
  其中 STABLE 稳定版、 DEVEL 版通常是提供给开发人员测试程序的,假定下载了最新 的稳定版 squid-2.*.STABLE.tar.gz ,用以下命令解开压缩包:

   tar xvfz squid-2.*.STABLE.tar.gz
  用 bz2 方式压缩的包可能体积更小,相应的命令是:

   tar xvfj squid-2.*.STABLE.tar.bz2
  然后,进入相应目录对源代码进行配置和编译,命令如下:

   cd squid-2.*.STABLE2
  配置命令 configure 有很多选项,如果不清楚可先用“ -help ”查看。通常情况下,用到的选项有以下几个:

   --prefix=/web/squid
  指定 Squid 的安装位置,如果只指定这一选项,那么该目录下会有 bin sbin man conf 等目录,而主要的配置文件此时在 conf 子目录中。为便于管理,最好用参数 --sysconfdir=/etc 把这个文件位置配置为 /etc

   --enable-storeio=ufs,null
  使用的文件系统通常是默认的 ufs ,不过如果想要做一个不缓存任何文件的代理服务器,就需要加上 null 文件系统。

   --enable-arp-acl
  这样可以在规则设置中直接通过客户端的 MAC 地址进行管理,防止客户使用 IP 欺骗。

   --enable-err-languages="Simplify_Chinese"
   --enable-default-err-languages="Simplify_Chinese"
  上面两个选项告诉 Squid 编入并使用简体中文错误信息。

   --enable-linux-netfilter
  允许使用 Linux 的透明代理功能。

   --enable-underscore
  允许解析的 URL 中出现下划线,因为默认情况下 Squid 会认为带下划线的 URL 是非法的,并拒绝访问该地址。整个配置编译过程如下:

   ./configure --prefix=/var/squid

   --sysconfdir=/etc

   --enable-arp-acl

   --enable-linux-netfilter

   --enable-pthreads

   --enable-err-language="Simplify_Chinese"

   --enable-storeio=ufs,null

   --enable-default-err-language="Simplify_Chinese"

   --enable-auth="basic"

   --enable-baisc-auth-helpers="NCSA"

   --enable-underscore
  其中一些选项有特殊作用。最后执行下面两条命令,将源代码编译为可执行文件,并拷贝到指定位置。

   make

   make install
  配置 squid 是通过编辑 /etc/squid/squid.conf 文件来完成的。所有项目都在 squid.conf 中完成。 Squid 自带的 squid.conf 包括非常详尽的说明,相当于一篇用户手册,对配置有任何疑问都可以参照解决。

  本案例是要求分 advance 组、 normal ;advance 组可以不受任何限制地访问 Internet ,而 normal 组则只能在工作时间上网,而且不能下载多媒体文件,不能访问某些特定的站点,而且发送请求不能超过 3 个。 squid.conf 文件内容如下:

   http_port 10.152.16.3 8080

   cache_mgr [email]lzy@51cto.com[/email]

   cache_dir null /tmp

   cache_access_log /var/squid/access.log

   cache_log /var/squid/cache.log

   cache_store_log /var/squid/store.log

   visible_hostname No1.proxy

   client_mask 255.255.255.255

   httpd_accel_host virtual

   httpd_accel_port 80

   httpd_accel_with_proxy on

   httpd_accel_user_host_header on

   acl advance arp 00:01:02:1f:2c:3e 00:01:02:3c:1a:8b ...

   acl normal proxy_auth REQUIED

   acl all src 0.0.0.0

   acl mmxfile urlpath_regex \.mp3$ \.avi$ \.exe$

   acl conncount maxconn 3

   acl worktime time MTWHF 8:30-12:00 14:00-18:00

   acl sinapage dstdomain ok.sina.com.cn

   acl qq dstdomain .tcccent.com.cn

   http_access allow advance

   http_access deny conncount normal

   http_access deny !worktime

   http_access deny mmxfile

   http_access deny sinapage

   http_access deny qq

   http_access allow normal
   Squid 的能力远不止此,可以建立强大的代理服务器阵列,可以帮助本地的 Web 服务器提高性能,可以提高本地网络的安全性等。要想发挥它的功效,还需要进一步控制。 而这些就不是本案例所讨论的范畴了。

  对于普通的单位上网用户, Squid 可充当代理服务器,而对于大型网站又可以充当 web 加速器,在这两个领域中 Squid 都表现异常优秀。