*
案例名称
用
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
是一个纯粹由自由软件所组合而成的操作环境,而其背后�K�]有任何的营利组织支持,它的开发团队全部都是来自世界各地的志愿者,官方开发者的总数就将近
1000
名,而非官方的开发者亦为数众多。
Debian
以其坚守
Unix
和自由软件的精神,以及其给予用户的�多选择(现时
Debian
包括了超过
15,000
个组件�K支持
11
个计算机系统结构)而闻名。因此,其它众多
Linux
发行版,例如
Ubuntu
、
Knoppix
和
Linspire
也建基于
Debian
。
Debian
以稳定性闻名,所以很多服务器都使用
Debian
作为其作业系统具备以下几个特点:
Debian
是极为精简的
Linux
发行版,有著干�Q的操作环境。
安装步骤简易,大部分情况下只要
<Enter>
、
<Enter>
一直按下去便可以顺利安装。
拥有方便的组件管理程序,可以让用户容易的寻找、安装、删除、更新程序,或系统�N级。
健全的软件管理制度,包括了臭虫回报、组件维护人等制度,让
Debian
所收集的软件质量在其的
Linux
发行组件之上。
拥有庞大的组件库,令用户只需通过其自身所带的软件管理系统便可下载�K安装组件,不必再在网络上寻找。
组件库分类清楚,用户可以明确地选择安装自由软件、半自由软件或闭源软件。
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_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
都表现异常优秀。
本文出自 “✟lzy's blog” 博客,转载请与作者联系!