原文章发布于 2000.3.30 by 黄力尧
在区域网路上可能你听过所谓「广播模式」的资料发送方法,此种方
法不指定收信站,只要和此网路连结的所有网路设备皆为收信对象。但是
这仅仅在区域网路上能够实行,因为区域网路上的机器不多(和Internet比
起来)。如果想是Internet上有数千万的主机,根本就不可能实施资料广播(
至於IP Multicast算是一种限定式广播Restricted Broadcast,唯有被指
定的机器会收到,Internet上其他电脑还是不会收到)。假设Internet上可
以实施非限定广播,那随便一个人发出广播讯息,全世界的电脑皆受其影
响,岂不世界大乱?因此,任何区域网路内的路由器或是类似网路设备都
不会将自己区域网路内的广播讯息转送出去。万一在WAN Port收到广播讯
息,也不会转进自己的LAN Port中。
而既然网路皆有发信站与收信站,用以标示资讯发送者与资讯接收者,
除非对方使用一些特殊的封包封装方式或是使用防火墙对外连线,那麽只
要有人和你的主机进行通讯(寄信或是telnet、ftp过来都算)你就应该会知
道对方的位址,如果对方用了防火墙来和你通讯,你最少也能够知道防火
墙的位址。也正因为只要有人和你连线,你就能知道对方的位址,那麽要
不要知道对方位址只是要做不做的问题而已。如果对方是透过一台UNIX主
机和你连线,则你更可以透过ident查到是谁和你连线的(ident在元月号专
栏已经有作过讲解,不再赘述)。
在实行TCP/IP通讯协定的电脑上,通常可以用netstat指令来看到目前
连线的状况。(各位读者可以在win95、Novell以及UNIX试试看(注一)),在
下面的连线状况中,netstat指令是在win95上实行的,可以看到目前自己
机器(Local Address处)的telnetport有一台主机workstation.variox.int
由远端(Foreign Address处)连线进来并且配到1029号tcpport.而ccunix1
主机也以ftpport连到workstation.variox.int去。所有的连线状况看得一
清二楚。(如A、B)A.在UNIX主机(ccunix1.variox.int)看netstatB.另一端
在Windows 95(workstation.variox.int)看netstat虽然是不同的作业系统,
但netstat是不是长得很像呢?
通信过程的纪录设定
当然,如果你想要把网路连线纪录给记录下来,你可以用crontable定
时去跑:
netstat>>filename
但是UNIX系统早已考虑到这一个需求,因此在系统中有一个专职记录
系统事件的Daemon:syslogd,应该有很多读者都知道在UNIX系统的/var/adm
下面有两个系统纪录档案:syslog与messages,一个是一般系统的纪录,
一个是核心的纪录。但是这两个档案是从哪边来的,又要如何设定呢?系
统的纪录基本上都是由syslogd(SystemKernelLogDaemon)来产生,而syslogd
的控制是由/etc/syslog.conf来做的。syslog.conf以两个栏位来决定要记
录哪些东西,以及记录到哪边去。下面是一个Linux系统所附上的syslog.conf
档案,这也是一个最标准的syslog.conf写法:
格式就是这样子,第一栏写「在什麽情况下」以及「什麽程度」。然
後用TAB键跳下一栏继续写「符合条件以後要做什麽」。这个syslog.conf
档案的作者很诚实,告诉你只能用TAB来作各栏位之间的分隔(虽然看来好
像他也不知道为什麽)。
第一栏包含了何种情况与程度,中间小数点分隔。另外,星号就代表
了某一细项中的所有选项。详细的设定方式如下:
1.在什麽情况:各种不同的情况以下面的字串来决定。
auth 关於系统安全与使用者认证方面
cron 关於系统自动排程执行(CronTable)方面
daemon 关於背景执行程式方面
kern 关於系统核心方面
lpr 关於印表机方面
mail 关於电子邮件方面
news 关於新闻讨论区方面
syslog 关於系统纪录本身方面
user 关於使用者方面
uucp 关於UNIX互拷(UUCP)方面
上面是大部份的UNIX系统都会有的情况,而有些UNIX系统可能会再分
出不同的项目出来。
2.什麽程度才记录:下面是各种不同的系统状况程度,依照轻重缓急
排列。
none 不要记录这一项
debug 程式或系统本身除错讯息
info 一般性资讯
notice 提醒注意性
err 发生错误
warning 警告性
crit 较严重的警告
alert 再严重一点的警告
emerg 已经非常严重了
同样地,各种UNIX系统可能会有不同的程度表示方式。有些系统是不
另外区分crit与alert的差别,也有的系统会有更多种类的程度变化。在记
录时,syslogd会自动将你所设定程度以及其上的都一并记录下来。例如若
你要系统去记录info等级的事件,则notice、err.warning、crit、alert、
emerg
等在info等级以上的也会一并被记录下来。把上面所写的1、2项以小数点
组合起来就是完整的「要记录哪些东西」的写法。例如mail.info表示关於
电子邮件传送系统的一般性讯息。auth.emerg就是关於系统安全方面相当
严重的讯息。lpr.none表示不要记录关於列表机的讯息(通常用在有多个纪
录条件时组合使用)。另外有叁种特殊的符号可供应用:
1.星号(*)
星号代表某一细项中所有项目。例如mail.*表示只要有关mail的,不
管什麽程度都要记录下来。而*.info会把所有程度为info的事件给记录下
来。
2.等号(=)
等号表示只记录目前这一等级,其上的等级不要记录。例如刚刚的例
子,平常写下info等级时,也会把位於info等级上面的notice、err.warning、
crit、alert、emerg
等其他等级也记录下来。但若你写=info则就只有记录info这一等级了。
3.惊叹号(!)
惊叹号表示不要记录目前这一等级以及其上的等级。
记录到哪边去
一般的syslogd都提供下列的管道以供您记录系统发生的什麽事:
1.一般档案
这是最普遍的方式。你可以指定好档案路径与档案名称,但是必须以
目录符号「/」开始,系统才会知道这是一个档案。例如/var/adm/maillog
表示要记录到/var/adm下面一个称为maillog的档案。如果之前没有这个档
案,系统会自动产生一个。
2.指定的终端机或其他设备
你也可以将系统纪录写到一个终端机或是设备上。若将系统纪录写到
终端机,则目前正在使用该终端机的使用者就会直接在萤幕上看到系统讯
息(例如/dev/console或是/dev/tty1.你可以拿一个萤幕专门来显示系统讯
息)。若将系统纪录写到印表机,则你会有一长条印满系统纪录的纸(例如
/dev/lp0)
。
3.指定的使用者
你也可以在这边列出一串使用者名称,则这些使用者如果正好上线的
话,就会在他的终端机上看到系统讯息(例如root,注意写的时候在使用者
名称前面不要再加上其他的字)。
4.指定的远端主机
这种写法不将系统讯息记录在连接本地机器上,而记录在其他主机上
。有些情况系统碰到的是硬碟错误,或是万一有人把主机推倒,硬碟摔坏
了,那你要到哪边去拿系统纪录来看呢?而网路卡只要你不把它折断,应
该是比硬碟机耐摔得多了。因此,如果你觉得某些情况下可能纪录没办法
存进硬碟里,你可以把系统纪录丢到其他的主机上。如果你要这样做,你
可以写下主机名称,然後在主机名称前面加上「@」符号(例如
@ccunix1.variox.int,
但被你指定的主机上必须要有syslogd)。在以上各种纪录方式中,都没有
电子邮件这项。因为电子信件要等收件者去收信才看得到,有些情况可能
是很紧急的,没办法等你去拿信来看(BSD的Manual Page写着「when you got
mail,it’s already too late...」:-P)。以上就是syslog各项纪录程度
以及纪录方式的写法,各位读者可以依照自己的需求记录下自己所需要的
内容。但是这些纪录都是一直堆上去的,除非您将档案自行删除掉,否则
这些档案就会越来越大。有的人可能会在syslogd.conf里面写:
*.*/var/log/everything
要是这样的话,当然所有的情况都被你记录下来了。但是如果真的系
统出事了,你可能要从好几十MB甚至几百MB的文字中找出到底是哪边出问
题,这样可能对你一点帮助都没有。因此,以下两点可以帮助你快速找到
重要的纪录内容:
1.定期检查纪录
养成每周(或是更短的时间,如果你有空的话)看一次纪录档的习惯。
如果有需要将旧的纪录档备份,可以cploglog.1,cploglog.2...或是
cploglog.971013,cploglog.980101...
等,将过期的纪录档依照流水号或是日期存起来,未来考察时也比较容易
。
2.只记录有用的东西
千万不要像前面的例子一样,记录下*.*然後放在一个档案中。这样的
结果会导致档案太大,要找资料时根本无法马上找出来。有人在记录网路
通讯时,连谁去ping他的主机都记录。除非是系统已经遭到很大的威胁,
没事就有人喜欢尝试进入你的系统,否则这种鸡毛蒜皮的小事可以不用记
录。可以提升些许系统效率以及降低磁碟用量(当然也节省你的时间)。
地理位置的追踪
地理位置的追踪如何查出入侵者的地理位置?光看IP Address可能看
不出来,但是你常看的话,会发现140.xxx的很多都是台湾学术网路的主机,
而168.95.xxx.xxx的一定是HiNet的主机(168.95.0为HiNet Class B网路)
。在固接式的网路环境中,入侵者一定和网路提供单位有着密切的关系。
因为假设是区域网路,那麽距离绝对不出几公里。就算是拨接好了,也很
少人会花大笔钱去拨外县市甚至国外的拨接伺服器。因此,只要查出连线
的单位,入侵者必然离连线单位不远。
拨接式的网路就比较令人头疼了。以前笔者申请HiNet的hntp2.hinet.net
帐号时,拿了自己的身分证和印章,跑到电信局去签了一堆文件,看完网
路规范以後才有HiNet网路可以用。时隔多年,现在hntp2早没了,冒出一
大堆msxx.hinet.net以及民营ISP,有许多ISP为了吸引客户,卖了很多的
所谓小时卡、记点卡……等等不需申请,帐号密码就直接附在上面的卡片
。User这边只要买了固定的小时数,不需须另外向ISP那边提出申请,就可
以按照卡片上的说明自行拨接上网。这样当然可以吸引客户,但是ISP就根
本无从得知是谁在用他们的网路。
也就是说,虽然以小时卡提供拨接服务给拨接使用者带来相当大的便
利,但却是系统安全的大敌,网路管理员的恶梦。如果入侵你的人是使用
小时卡来上网,那……,要从拨号的地点查吗?笔者在前几期的系统安全
专栏就讲过了,入侵者可以不要用自己家里的电话上网。管它是偷是抢,
或是盗打090王八机,反正查到的发话来源绝不是入侵者自己的电话。
来话者电话侦测(CallerID)
各位读者家中有ISDN吗?如果你用过ISDN的Caller ID功能,会发现真
是方便极了,对方的号码马上就显示出来给你看。看到女朋友打电话来,
马上就接了起来;而杂志社的打来催稿,就打开电话答录机假装不在家……:-P
但是Caller ID依然有失效的时候。笔者这次特地和陈冠宇先生(本刊作者)
做了下面的测试,看看Caller ID可以显示出哪些号码(受测机种为Zyxel,
终端机使用Windows NT的Hyper Terminal):要显示来话方号码的前提是,
对方必须是透过数位交换机打到你这边,在台湾有某些地区仍然使用机械
式交换机,如果你打电话的交换路径中,有经过这些机械式的交换机,那
麽依然无法显示出号码来。太电以及其他民营的行动电话因为笔者手边没
有,所以无法测试。而国际电话因一时找不到国外的朋友可以配合作测试,
因此也没有办法将结果向各位读者报告(如果各位读者手边有太电,远传这
些民营的行动电话,可以和笔者联络测试)。
如何靠IPAddress或DomainName找出入侵者位置?
虽然电话不一定查得出来,但是至少你会知道他的IP Address。IP Address
的使用必须向InterNIC登记,而Domain Name要向当地直属的网路管理中心
登记。在Internet上的网路管理中心共有叁个层级(单位性质一定为NET):
1.国际等级国际等级只有InterNIC一个,全球各国的NIC以及洲际NIC
均由其管理。(http://www.internic.net)。
2.洲际等级InterNIC并不直接管理整个Internet,其下的网路资源会
再做分区。例如台湾、日本、香港等亚太地区国家,由亚太洲际网路管理
中心(Asian-PacificNIC,APNIC,位於日本)来管理,并不直接由InterNIC
管理(http://www.apnic.net)。
3.国家等级DomainName後面不挂国码的不是由InterNIC管理就是由洲
际的NIC管理,但是有挂国码的由当地国家之NIC管理,惯例是两位国码加
上NIC就是该国NIC之名称。例如台湾之国码为TW,则台湾网路管理中心为
TWNIC(http://www.twnic.net),但由於InterNIC位於美国,因此美国
的DomainName由InterNIC直辖。有一个特别的例外是挂.mil的美国军方网
路的资料是由ddn.mil(美国军事防卫网路)来管理,不由InterNIC管理,当
您得到某个DomainName或是IPAddress後,可以使用whois来查出资料,语
法如下:
whois -h<whois伺服器><查询对象>
例如向whois.internic.net查询hp.com,需输入:
whois -h whois.internic.net hp.comwhois
也可能使用下列语法:
whois<查询对象>@<whois伺服器>
例如向whois.twnic.net查询ntu.edu.tw需输入:
whois ntu.edu.tw@whois.twnic.net
目前在SlackwareLinux附上的为後者。
Domain Name命名的叁种情况
虽然同样是Domain Name,可能你会遇到叁种命名的不同情况。在许多
国家*.edu.*是由NIC以外的单位所管理(如教育部),而属性也不一定是叁
个字母,甚至没有属性。在判断单位性质时读者宜多加注意,以免找不到
资料。
1.标准国码+叁码属性码(或没有国码,仅有属性码)
普遍使用於欧洲,美洲国家以及部份东南亚国家。如台湾常见*.edu.tw、
*.com.tw,
美国的*.com、*.edu。
2.标准国码+二码属性码
以离台湾最近的日本、中华人民共和国为例,公司属性为co,社团属
性为or,和叁码定义的com、org略有不同。如日本万代公司之Homepage为
www.bandai.co.jp,
如果读者要使用公司名称拼凑出完整主机名称时,需注意日本为仅有两码
属性码之地区,否则若猜测其为www.bandai.com.jp就会发生错误(注:在
国际通信范例中,无论是无线电通信、国际越洋电话、乃至於网际网路等,
均将台湾与中国大陆划分为两个不同国家。笔者在此特称中华人民共和国
除突显此一特性外,并无其他涵义,读者勿需自行揣测其他意义)。
3.仅有标准国码,未有任何属性码
如澳洲的主机均为仅有*.au之主机名称,未有任何其他的com、co、或
任何单位属性码後面直接接上单位名称。
由DomainName查出连线单位资料
在Internet上惯例由whois服务来查询连线单位的登记资料,whois本
来应该是用来查某人的电话或是其他资料的(有点像是finger或是现在很流
行的寻人服务,像是whowhere、bigfoot之类的,请上www.whowhere.com一
探究竟),但是在NIC方面是用来查出连线单位的电话以及住址,技术联络
人等。符合该NIC管理权限的单位资料会存放於该单位的whois主机中,惯
例是whois+NIC名称+net。例如亚太地区网路管理中心whois server为
whois.apnic.net,
台湾网路中心whois server为whois.twnic.net。
当你知道某台主机的DomainName以後,可以依照下面顺序查出连线单
位的电话住址等资料。第一步,先看有没有国码。没有国码的,向
whois.internic.net
问;有国码的,向whois.国码nic.net问(ex.whois.twnic.net)。另外,如
果你要查美国军事单位的联络明细(假如某天你发现有人利用美国海军的网
路来入侵你的电脑)则你需要向nic.ddn.mil查询,方可查到资料。例如查
出美国陆军的资料:但FBI等调查机构属政府单位,非军事单位,查询时需
注意:
由Domain Name查出资料
如您能从nslookup查出某一IP Address之FQDN,则可以直接向当地NIC
查出入侵者网路之资料:
1.由美国入侵的例子:由xxx.aol.com入侵由主机名称发现未有国码,
因此直接向InterNIC查询。由此我们可以查到America Online的技术负责
人以及电话、传真等资料,把你的系统纪录档准备好,发封传真去告洋状
吧!
2.由台湾入侵的例子:由HopeNet入侵(cded1.hope.com.tw)由於TWNIC
目前whois资料库不知怎麽的不见了,故请改由dbms.seed.net.tw查出
hope.com.tw
之中文名称,再打104询问该公司的电话!(图一)现在如果直接由whois.twnic.net
查询会这样:
只有IP Address的查法若某天您发现由168.95.109.222有人入侵,假
设您不知道这是HiNet的网路,而这个IP Address也没有Domain Name的话,
则须先将IP Address分等级,再向InterNIC查询:(以下作为范例之位址均
为虚构,如有雷同,纯属巧合)。
1.由15.4.75.2入侵的例子:
此IP Address是15开头,为一个ClassA网路,故向InterNIC查询15.0
:查出此IP Address为惠普公司所有
2.由140.111.32.53入侵的例子:
此IP Address为Class B,需查询两次。先向InterNIC查询140.111.0
:查出为中华民国教育部所有。再向whois.twnic.net查询140.111.32.0:
很可惜的,由於TWNIC资料库不见了,因此您无法知道这是哪个学术单位。
劳驾您打个电话去TWNIC问吧!
3.由203.66.35.1入侵的例子
这是一个Class C IP,因此必须查询至少二次,一般是叁次。顺序为
国际->洲际->所属国家。先查203.0:出来一大堆,怎麽办?有的情况
只好再追问Class B。由於InterNIC将部份Class C交给洲际管理机构来负
责配给,因此有些Class C的资料会在洲际管理机构,此时先向InterNIC查
出所属洲际管理机构(用Class B问)。问到203.66为亚太地区洲际网路,於
是向whois.apnic.net询问203.66.35.0:查了叁次以後,终於查到203.66.35.0
为:在一堆资料中查到203.66.35.1,此一IP Address为Forwardness
Technology
Co.Ltd.所有,电话地址也一并附在上面(这是笔者朋友开的网路公司)。
由以上的查法,可以由任一主机名称或IPAddress查到连线者网路单位
的资料,如果您发现该网路单位下属主机对您的网路有攻击行为,请检具
资料告诉对方的系统管理员(对方不一定接受,笔者就碰过很恶劣的系统管
理员!)。下面是Windows 95的hosts档案:当您没有DNS的时候,您可以拿
这个来将Domain Name<->IP Address的对应工作做好。写法就和UNIX一
样。Microsoft的这个hosts档案写的是给chicago用的,这是windows 95的
开发代号,看见没?(看来Microsoft出windows 95时太赶,忘了修正这些
小东西),不过各位读者要注意的是,原先的hosts档案档名是hosts.sam,
您要自己将档名改成hosts才能用。
注一:几乎所有使用TCP/IP通讯协定的机器都会有hosts、network等
档案。这是所有TCP/IP系统的共通习惯(但只有Microsoft的软体会有lmhosts
来配合Microsoft自己的wins域名解译系统)。如果读者有注意到的话,可
以发现NovellNetware伺服器也有一个etc目录,还有hosts等档案