本文详细描述了我们一直未能引起足够重视的家用网络安全问题,并在文中以作者的家用网络环境为例,讲述了加强家用网络安全性的一些具体方法。
1、简介
很长时间以来,我之所以一直没有对我的家用网络的安全性给予太多的关注,原因包括以下几点:
1)拨号互联网连接对黑客缺乏足够的吸引力。
2)Linux比MS Windows的安全性能要好得多。我使用的Linux发行版本专门针对安全进行了优化。
3)我仿照Linux的HOWTO中的例子采取了一定的安全措施。
这也是许多的普通Linux用户的想法,然而不幸的是,这些措施都是一厢情愿的。为了在以后用上高速互联网连接时仍然能够免受黑客的侵扰,我认为现在就需要花费一定的时间来考虑网络的安全问题,其结果是令人震惊的。
第一件令人震惊的事来自长期被忽略的/var/log/syslog*文件,该文件中包括了一些禁止连接的条目,其中有一条被禁止连接的FTP,但它能够明显地连接成功。看来,拨号用户并没有被黑客遗忘啊!我的家用网络系统的安全性并非是万无一失的,我需要在安全性上再花费一些时间。
2、系统的组成
我有一个由二台机器组成的非常简单的网络:工作站是一台没有配置打印机或调制解调器、运行Win 95的PC,服务器运行的是Debian Linux 2.1(带各种升级软件),它运行有exim(用于本地的电子邮件和向外发送电子邮件。)、qpopper(工作站使用的POP3服务器)和samba(向工作站提供文件共享和打印功能。)等应用软件。服务器上配置有拨号连接(ppp),通过fetchmail收取外界的电子邮件。
该局域网使用192.168.1.0-192.168.1.24之间的IP地址之一,服务器的IP地址是192.168.1.1,工作站的IP地址是192.168.1.2。服务器上的/etc/hosts和工作站上c:\windows\hosts的内容是:
127.0.0.1 localhost
192.168.1.1 heaven.my.home heaven
192.168.1.2 earth.my.home earth
这表明我的局域网使用的域名为my.home,我没有注册这一域名,因此只能在局域网上使用。向外发送的邮件的发件人地址必须进行转换。
3、“不公开”的家用网络
我对安全的概念是拥有一个“不公开”的网络,也即该网络不提供公用的功能,不提供WWW服务,不能使用telnet服务访问它,甚至不能从外界收取任何信息。如果有人试图访问该网络,它也不会作出什么响应。
从概念上来说,不与互联网连接的局域网就是一个“不公开”的网络,也就是说,拨掉调制解调器,就能使你的网络实现“不公开”化。但这并非我所指的“不公开”网络,我希望在这样的网络上能够使用互联网,收发电子邮件、浏览网站、下载文件等服务,只是不想让黑客非法入侵我的网络而已。
Linux通常情况下都不是一个“不公开”的网络。缺省状态下,Linux的安装过程会建立各种网络服务(象telnet、ftp、finger等),只要知道了口令,这些服务可以被任何一个人访问。同样,用微软的Windows组成的家用局域网同样也不是一个“不公开”的网络,如果连接二台运行Win95计算机组成一个网络,并实现文件共享,只要互联网连接开着,全世界的所有人就都可以共享你的计算机上的文件。
[1] [2] [3] 下一页
可以通过各种技术实现公开网络的安全,例如tcp伪装、内核级的包过滤等,这些技术可以使网络具有一定的“不公开”性,它们就象站在门口的哨兵一样,把非法的访问者挡在了外面,而把我们希望的客人放进来。但我不需要任何人访问我的网络,它是我专用的。
如果服务器可以被外界访问,我们总是会担心有什么配置上的错误会被黑客利用。同时,服务器软件通常也都存在可能被黑客利用的bug。尽管发现bug后,厂商会很快地推出补丁程序,但下一个bug呢?如果不让任何人访问网络不是更安全吗?
如果确实需要开通一些让家庭之外的计算机使用的服务,就必须研究更先进的安全技术,如果仅仅想实现家用网络的“不公开化”,就请继续看下面的内容吧。
4、网络安全吗
为了测试网络系统的安全性,可以使用Secure Design等工具从外部对网络系统进行扫描。当我对我的网络系统扫描后,我再次震惊了!有很多入口可供入侵我的系统:Samba、telnet、打印服务、X、电子邮件服务器、ftp、finger等。我已经采取了一些基本的措施来保证系统的安全性,因此,系统不会受到比较严重的外界入侵(我希望如此!)。但我考虑到,外界知道我有电子邮件服务器,就是系统在安全方面的一个缺陷。因为这些服务是供我在家用网络上使用的,它们与外界无关。
也可以通过运行netstat -pan --inet命令自己对系统进行扫描,在扫描时使用一个较宽的xterm窗口,因为输出中会包括比较长的内容行,在Local Address(本地地址)一列中地址为0.0.0.0的服务可以被外界发现。
5、服务器和客户机
对用户来说,服务器和客户机之间的区别并非是十分明显的。例如,如果想使用ftp服务,可以使用ftp软件与另一台计算机连接。如果只想使用ftp完成这些任务,就只要ftp客户端程序就可以了。如果想让别人从你的计算机上下载文件,或向你的计算机上载文件,那就还需要ftp服务器端软件。这与telnet非常相似,客户端程序供自己使用,服务器端程序是让别人使用的。服务器端和客户端程序是完全不同的,它们有着不同的名子,例如,telnet客户端程序的名字是/usr/bin/telnet,telnet服务器端程序的名字是/usr/sbin/in.telnetd。新手并不总是清楚这中间的区别的。在Linux安装过程中如果系统询问是否安装ftp服务器,用户会考虑自己需要使用ftp功能,就会选择安装。有时系统根本不问你,而自动地安装ftp服务器。
创建不公开网络的途径之一是不安装服务器软件,只安装客户端软件。但如果你的家用网络中连接有多台计算机,这样就会太简单了,也许你需要在网络中使用telnet、电子邮件服务,也就是说,你不能不使用服务器软件。
服务器的功能是监听,它们监听这样的信号:我需要你提供服务。这个信号(至少是基于TCP的服务)是一个被称作SYN包的特殊IP数据包,它表明了需要的服务的代号。例如,telnet服务的代号是23,这些数字通常被称作“端口号”。如果in.telnetd软件没有运行,就没有软件监听代号为23的SYN数据包,也就是所谓的“端口23关闭了。”
所谓的“端口”是不存在的,如果服务器进行监听,端口就是打开的,否则就是关闭的。
SYN数据包是如何进入计算机中的呢?在服务器一端,数据包可以通过三种方式进入系统:
1)从工作站过来的数据包通过以太网卡(也被称作eth0接口)进入服务器,发给固定的IP地址192.168.1.1。
2)来自外部世界的通过ppp连接或ppp0接口进入服务器的数据包。这些数据包也有IP地址,但不是固定的。在每个对话中,ISP都会给出一个动态地址,该地址只能在该对话中使用。
3)数据包也可以来自服务器本身,其目标地址就是它本身。这种发送数据包的方式主要用在测试中,数据包的目标地址为IP地址是127.0.0.1的回送接口。名字localhost指的是回送接口,名字heaven的IP地址是192.168.1.1。(这一点很重要:名字和IP地址指的是接口,而非是计算机,尽管在日常使用中这种差别经常被模糊。)
现在的关健是服务器总是监听带有“它们”端口号的所有数据包,而无论它们是如何进入系统的。如果我们希望建立一个不公开的网络,不向外界提供服务,我们必须改变这种情况。
如果所有在Linux上运行的服务器程序都有能够指定它们监听接口的选项,这一切就可以很方便地得到解决了。如果是这样,就可以让所有的服务器程序不要监听ppp连接,也就不再需要任何安全措施了(tcpd、防火墙等)。也许在将来能够实现这一点,但现在还没有几种服务器软件能够做到这一点(包括非常重要的exim和samba都不能。)因此,必须采取一些措施来使网络实现不公开化。
听从“关闭不必要的端口”的建议没有什么危害,也就是说,不要运行你不需要的服务器软件。对于可以进行选择的服务器软件,使它们只能监听内部的接口(eth0,如果有必要,再添加上回送接口)。“超级服务器”inetd(用于唤醒Linux系统上其他不同的服务器软件)应该换成xinetd,它可以只监听内部的接口。为应付其他的困难,需要安装防火墙阻止外界的SYN数据包进入系统,它还可以防止不需要的UDP、ICMP数据包进入系统。要实现更高的安全性能,还需要采取其他的一些安全措施,其中一条是不在网络上使用IP伪装和转发。
6、删除不必要的服务
6.1 不必要的inetd服务
在Linux系统中总有一些服务是由inetd.conf启动的。几乎所有的Linux系统都有一个被称作inetd的超级服务器,它的职责是同时监听许多端口,并在需要时唤醒相应的服务。然而,它也可能唤醒用户所不需要的服务,一些不需要的服务的例子是:
ftp服务器。我不想与外界共享任何文件,而在内部我可以使用Samba和smbfs来传输文件。不安装ftp服务器不会对运行ftp客户端软件与外界交换文件产生任何影响。但大多数的Linux版本都会缺省地安装ftp服务器。
上一页 [1] [2] [3] 下一页
portmapper和与RPC调用有关的东西。portmapper用来实现RPC,如果使用了NFS,则需要它的支持,但我在家用网络上并不使用NFS。因此,所有inetd.conf中与portmapper和与RPC有关的内容都可以注释掉。
finger和ident。在是否使用ident上,各种意见是见仁见智,我删除了它,并没有感觉到受到什么不利的影响。
inetd.conf中的一些服务是只用于测试网络:echo、chargen、discard、daytime、和time,最后二种服务与
(出处:http://www.sheup.com)
上一页 [1] [2] [3]
(出处:http://www.sheup.com/)
上一页 [1] [2] [3] [4]