*案例名称
用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参考手册(http://qref.sourceforge.net/),这本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很多特性都不会实现,我通常更倾向于源码编译安装。
到下面的官方网站下载最新的版本进行编译安装:
http://www.squid-cache.org/
其中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 lzy@51cto.com
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都表现异常优秀。