* 案例名称
  用 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 发行版,有著干淨的操作环境。
  安装步骤简易,大部分情况下只要 一直按下去便可以顺利安装。
  拥有方便的组件管理程序,可以让用户容易的寻找、安装、删除、更新程序,或系统昇级。
  健全的软件管理制度,包括了臭虫回报、组件维护人等制度,让 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][email protected][/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 都表现异常优秀。