2005年08月17日

        今天,随便看了看高中同学群里面的一些同学的资料,无意发现一个很久都没有上过线的头像“帅帅鼠”,这才突然想起来——他是一位我已经故去的同学。

       “帅帅鼠”,名叫陈帅。确实也是一个很帅的小伙儿。他是一个为人处世都很不错的男生,即使是我这样一个在别人眼中不怎么好相处的人,也是很佩服他的。但是很可惜,我一直跟他的关系不算太好,至多也就是一个点头之交,到如今他已经不在了,我也再没有机会去结交他。

          今天看到了他的QQ资料,一句话使我久久不能平静——“请相信,我还在你们身边”。当他写下这句话的时候,是怎样一种心情我不得而知。但是在我现在看来,我马上回忆起与他少的可怜的一些交往片断,发现我始终无法对他作出什么深刻的回忆,只是因为他已经不我们的世界了。

         时间的流逝,很可能我以后没有机会看到这份资料,这里来了一个快照。以作纪念。

                                                 ——深刻怀恋陈帅,我的同学

2005年08月12日

来源:网络

文章难度似乎高于CCNA要求,放这里权当参考,可以加深一下这个链路状态路由协议的理解。

DR:designated router.多路访问网络中,为避免router间建立完全相邻关系而引起大量开销,ospf在区域中选举一个DR,每个router都与之建立完全相邻关系。router用hello协议选举一个DR。在广播型网络里,hello报文使用多播地址224.0.0.5周期性广播,并发现邻居。在NBMA中,DR负责向其他路由器逐一发送hello报文。

BMA:广播式多点接入网络。如常见的以太网。在BMA中,必须有一个DR、BDR。
NBMA:非广播式多点接入网络。如FrameRelay,x.25,ATM等。在NBMA中,需要special ospf configuration,并且需要定义neighbor关系,也要有DR、BDR。
点到点网络(ptp):有一个物理上的串行电路连接;或者是逻辑上的,如FR中由VC连接起来。

ptp拓扑中不需要DR or BDR,邻居是自动发现的。
点到多点网络(PtMP):同样不需要DR or BDR。

协议操作:

1、建立邻接关系。
router发送含有自身ID(如loopback端口or最大的IP地址)的hello报文。若是点到点或点到多点网络则跳过下一步,直接进入第三步。若为multiaccess网络,则进入选举步骤。
2、选举DR/BDR。
(不同类型的网络选举DR/BDR的方式不同。)
multiaccess网络,ospf需要建立起作为link state和lsa更新的中心节点。选举利用hello报文内priority字段值和router id确定,这两个均可以直接设置。
3、发现路由。
multiaccess内,DR与BDR互换信息,并同时与本子网内其他路由器交换link state信息。point to piont or point to multipoint网络中,相邻路由器间互换链路状态信息。
4、选择路由。
根据cost,用spf算法决定best路由。
5、维护路由。
当link state变化时,通过flooding过程通告其他路由器,更新数据库,重新计算路由表。另外,ospf路由信息也会自动更新,默认时间30分钟。

OSPF中的四种router:
在ospf多区域网络中,路由器可以按不同的需要同时成为以下四种路由器的几种。
1.内部路由器,所有端口在同一区域的路由器,维护一个link state database。
2.主干路由器,具有连接主干区域端口的路由器。
3.区域边界路由器(ABR),具有连接多区域端口的router,一般作为一个area的出口,ABR为

每个连接的区域建立link state database,负责将所连接的区域的路由摘要信息发送到主干区域,而主干区域上的ABR则负责将这些信息发送到各个区域。
4.自治系统边界路由器ASBR,至少拥有一个连接外部自治域网络端口的路由器,负责将非ospf

网络信息传入ospf网络。

在eigrp中,router会与neighbor交换路由信息。而ospf中,却picky得多,建立了adjacency才会交换。not all the neighbors will become adjacent.不是所有的neighbor都能adjacent.

如果路由器在不同的域有多个接口,路由器会为每个area创建一个单独的树来运行spf运算。if router have multiple interfaces in different areas,then it will contruct separate trees for each area for spf caculation.

ospf中的path metric是bandwidth.(来自于ospf 和rip对照的表)
ospf uses a metric refered to as cost.cisco uses a simple equation of 10^8/

bandwidth.

配置最简单的ospf需要两步:
router(config)#router ospf process-id
router(config-router)#network 10.0.0.0 0.255.255.255 area 0

其中process-id只有本地意义,不同的router可以设成不同的值。
area后的数字可以十进制的,也可以是点分十进制,如0.0.0.0 同于0。//这个是ccna的要求
当一台优先级更高的路由器被加到了网络中,原来的DR和BDR不变,只有原来的DR和BDR失效时才会改变。

OSPF启动过程:
1.交换过程(exchange process) 
当一个路由器A启动时,它处于DOWN状态,它从其各个接口通过224.0.0.5发送HELLO数据包到其它运行OSPF的路由器,其它路由器收到这个H ELLO包后就会把它加入自己的邻居列表中,这叫"init"状态,之后发送一个单点传送回复HELLO包,其中包含着自己的和其它相邻路由器的信息,路由器A 收到这个HELLO后,会把其中有相邻关系数据库加入到自己的库中这叫"two-way"状态,此时就建立了双向通信。
2.发现路由
在选出了DR和BDR之后,路由器就被认为是处于"准启动(exstart)状态",并且已准备好发现有关网络的链路状态信息,以及生成它们的链路状态数据库。用来发现网络路由的这个过程称为交换协议,它被执行来使用权路由器达到通信的" 全(FULL)"状态。在这个协议中的第一步是让DR和BDR建立起与其它各路由器的毗邻关系。当毗邻的路由器处于"全"状态时,它们不会重复执行交换协议,除非" 全"状态发生了变化。 

3.选择路由 
当路由器有了一个完整的链路状态数据库时,它就准备好要创建它的路由表以便能够转发数据流。CISCO路由器上缺省的开销度量是基于网络介质的带宽。要计算到达目的地的最低开销,链路状态型路由选择协议(比如OSPF)采用Dijkstra算法,OSPF路由表中最多保存6条等开销路由条目以进行负载均衡,可以通过"maximum-paths"进行配置。
如果链路上出现fapping翻转,就会使路由器不停的计算一个新的路由表,就可能导致路由器不能收敛。路由器要重新计算客观存它的路由表之前先等一段落时间,缺省值为5 秒。在CISCO配置命令中 "timers spf spf-delay spy-holdtime"可以对两次连续SPF计算之间的最短时间(缺省值10秒)进配置。 
4.维护路由信息 
在链路状态型路由环境中,所有路由器的拓朴结构数据库必须保持同步这一点很重要。当链路状态发生了变化时,路由器通过扩散(flooding)过程将这一变化通知给网络中其他路由器,链路状态更新数据包提供了扩散LSA的技术。各LSA都有有它自己的老化计时器,承载在LS寿命域内。缺省值为30分钟。

修改路由器的优先级:router(config)#ip ospf priority number 
number是1-255的数,缺省是1,0表示不能被选举为DR或BDR. 

修改链路开销要通过"ip ospf cost cost"命令覆盖分配给一个OSPF接口的缺省开销值.


当一个网段上的DR和BDR选择产生后,该网段上的其余所有路由器都只与DR及BDR建立相邻关系。

对于ABR来说,由于一个区域边界路由器同时与几个区域相联,因此一个区域边界路由器上会同时运行几套OSPF计算方法,每一个方法针对一个OSPF区域。
 

2005年08月10日

来源:www.net130.com

hostname Router1 ;路由器名称
enable secret xxxx ;特权访问口令为 xxxx
interface serial 0 ;定义接口
deion To Internet ; 目的描述
ip address 162.70.73.33 255.255.255.248 ;设置IP地址
ip access-list 101 in ; 定义入站过滤器
ip access-list 102 out ;定义出站过滤器
access-list 101 permit tcp any any established Note 1 ;允许所有tcp业务流入,会话始于园区网内
access-list 101 permit tcp any host 144.254.1.3 eq ftp ;允许 ftp 到不洁网(dirty net )中的ftp服务器
access-lsit 101 permit tcp any host 144.254.1.3 eq ftp-data ! ;允许 ftp 数据到不洁网中的ftp服务器
access-list 101 deny ip 127.0.0.0 0.255.255.255 any ;阻止来自Internet并以RFC
access-list 101 deny ip 10.0.0.0 0.255.255.255 any ;保留地址为源的数据包入站
access-list 101 deny ip 172.16.0.0 0.240.255.255 any
access-list 101 deny ip 192.168.0.0 0.0.255.255 any
access-list 101 deny icmp any any echo-reply ;拒绝任何应答
access-list 101 deny icmp any any host-unreachable ;拒绝任何无法接通的主机
access-list 101 deny udp any any eq snmp ;拒绝引入的SNMP
access-list 101 deny udp any eq 2000 ;拒绝引入的openwindows
access-list 101 deny udp any any gt 6000 ;拒绝引入的X-windows
access-list 101 deny tcp any any eq 2000 ; 拒绝引入的openwindows
access-list 101 deny tcp any any gt 6000 ;拒绝引入的X-windows
access-list 101 deny udp any any eq 69 ; 拒绝引入的tftpd
access-list 101 deny udp any any eq 111 ; 拒绝引入的SunRPC
access-list 101 deny udp any any eq 2049 ;拒绝引入的NFS
access-list 101 deny tcp any any eq 111 ; 拒绝引入的SunRPC
access-list 101 deny tcp any any eq 2049 ; 拒绝引入的 NFS
access-list 101 deny tcp any any eq 87 ; 拒绝引入的连接
access-list 101 deny tcp any any eq 512 ; 拒绝引入的 BSD UNIX “r”指令
access-list 101 deny tcp any any eq 513 ; 拒绝引入的 BSD UNIX “r”指令
access-list 101 deny tcp any any eq 514 ; 拒绝引入的 BSD UNIX “r”指令
access-list 101 deny tcp any any eq 515 ; 拒绝引入的 lpd
access-list 101 deny tcp any any eq 540 ; 拒绝引入的 uucpd
access-list 101 permit ip any any ; 其它均允许
access-list 102 permit ip 144.254.0.0 0.0.255.255 any ; 只允许有源的包
access-list 102 deny ip any any ;园区网到Internet的地址

aaa new-model ; 在全范围实现AAA
aaa authentication login default tacacs+ ;默认登录方法经由 tacacs+
aaa authentication login staff tacacs+ local ;通过tacacs+鉴别工作人员用户名… ; 如果无法连接服务器,退而求其次的方法是本地鉴别
aaa authorization exec tacacs+ local ; 鉴别通过后,授权运行 exec shell
aaa authorization commands 0 tacacs+ none ;鉴别与指定特权等级相关的运行模式指令
aaa authorization commands 1 tacacs+ none ; 如果无可用的tacacs+ 服务器,
aaa authorization commands 15 tacacs+ local ; 15级权限指令就需要本地鉴别,其它不需要任何鉴别
aaa accounting update newinfo ; 每当有新的记帐信息需要报告时,中间记帐记录将被送到服务器
aaa accounting exec start-stop tacacs+ ; 对终端会话进行记帐
aaa accounting network start-stop tacacs ; 对所有 PPP, SLIP和ARAP连接记帐
username user1 password 7 user1 ;创建本地口令并以加密格式存储
tacacs-server host 244.252.5.9 ; 定义tacacs+ 服务器地址
tacacs-server key xxxxxxx ; 定义共享的 tacacs+ 密码
line con 0
exec-timeout 5 30 ; 确认控制台会话结束时间
login authentication user1 ;只有用户名工作人员可接入控制台
line aux 0
transport input none ;没有telnet进入
no exec ;该端口没有得到运行提示
line vty 0 3
exec-timeout 5 30 ; 确认 telnet 会话结束时间
login authentication default ; 通过 tacacs+ 登录鉴别
privilege level 15 ; 获得15 级权限
line vty 4
exec-timeout 5 30 ; 确认 telnet 会话结束时间
login authentication user1 ; 鉴别为工作人员
rotary 1
privilege level 1
logging on ; 开启syslog
logging 244.252.5.5 ;定义syslog服务器地址
logging console information ; 定义登录的信息

2005年08月09日

A:You’ve been assigned the CIDR (classless inter domain routing) block of
115.64.4.0/22 from your ISP. Which of the IP addresses below can you use for a
host? (Select all valid answers)
A. 115.64.8.32
B. 115.64.7.64
C. 115.64.6.255
D. 115.64.3.255
E. 115.64.5.128
F. 115.64.12.128
Answer: B, C, E
Explanation:
115.64.4.0 = 01110011.01000000.00000100.00000000
Subnet mask = 11111111.11111111.11111100.00000000= 255.255.252.0
Subnet number = 01110011.01000000.00000100.00000000= 115.64.4.0
Broadcast = 01110011.01000000.00000111.11111111= 115.64.7.255
Valid address range = 115.64.4.1 – 115.64.7.254

B:You have a Class C network, and you need ten subnets. You wish to have as many
addresses available for hosts as possible. Which one of the following subnet masks
should you use?
A. 255.255.255.192
B. 255.255.255.224
C. 255.255.255.240
D. 255.255.255.248
E. None of the above
Answer: C
Explanation:
Using the 2n-2 formula, we will need to use 4 bits for subnetting, as this will provide for
24-2 = 14 subnets. The subnet mask for 4 bits is then 255.255.255.240.

上面这两道题,单独理解都很容易,但是,我结合两道题的答案看起来,觉得有点问题。题B说了,能够利用的子网为24-2,很明显,它是考虑将子网全“0”和全“1”排除了。那么,在题A中,为什么又把全“0”和全“1”的情况(即115.64.4.0和115.64.7.0两个子网)包括进去了?

2005年08月08日

持续更新中

使用cisco技术设计简单LAN(15问)

  1. router,switch和bridge能够划分LAN。
  2. router能够包交换,包过滤,网络间通信。增加路由器能够减少碰撞冲突,但是无法是碰撞消失。增加路由器使一个网络的广播域增加,但是广播域大小变小。路由器不转发广播。
  3. 一个hub的所有接口是一个冲突域,一个广播域。一个交换机的所有接口是一个广播域,但是每个接口是一个冲突域。一个路由器的每个接口是一个广播域,也是一个冲突域。
  4. 增加一个路由器会使一个网络的广播域从一变为二,而这时网段一到网段二的链路层的数据包传输将需要路由,虽然整个网络的传输量减少了(广播域变小),但是网段间的传输效率确实降低了。由于路由器的增加,冲突将大大减少(见2)。
  5. 路由器不转发广播,能够基于第三层的信息进行包过滤。增加任何一个网络设备都会增加时延。交换机的处理速度快于路由器,因为交换机工作于第二层,而路由器工作于第三层,需要寻找三层目的地址,效率低于交换机。
  6. 见3
  7. hub支持半双工模式,所有接口是一个冲突域,其接口的主机间通信经常发生碰撞。
  8. 见3
  9. unicast address 单播地址,是指向一个特定主机发送广播,一般就是一个主机地址。multicast address组播地址,所有的D段ip都是组播地址,他们不区分网络id和主机id。eg:172.16.128.255/18她的实际广播地址是172.16.191.255,所以172.16.128.255是一个单播地址。
  10. 网桥和交换机都工作于第二层,交换机的端口数量一般比网桥多。
  11. hub和repeater能够扩大一个网络的覆盖面积。而交换机,路由器等虽然也能扩大面积但是同时也划分了网络。
  12. CDP是一个cisco特有的协议。为了转发CDP消息,接口必须支持SNAP头部。任何LAN接口,HDLC,帧中继和ATM都支持CDP。交换机和路由器都能够发现邻接路由器的三层地址细节,即使没有配置三层协议——因为CDP并不依靠任何三层协议。CDP能够发现的邻接路由器的细节有:1〉设备标识号——如主机名;2〉地址列表——网络层和链路层地址;3〉端口标识号——端口的别名;4〉功能列表——设备能干什么,如路由或者交换;5〉平台——model和OS类型
  13. 如果考虑只有一个缺省vlan的话,无论是几个交换机无连,网络也只有一个广播域。交换机和hub并不划分广播域,只有路由器才划分广播域。

按设计需求分配IP地址(54问)

  1. 私有ip地址范围:A类:10.0.0.0——10.255.255.255;B类:172.16.0.0——172.31.255.255;C类:192.168.0.0——192.168.255.255
  2. http://blog.donews.com/dugu/archive/2005/08/09/501761.aspx
  3. vlan间路由的知识,路由器的连接交换机的接口必须no ip address,然后在其每个vlan对应的子接口上设置各自的ip(这里可以理解为设置为网关ip)

停止更新

三种广播地址

  1. Local Network Broadcast:255.255.255.255
  2. Directed Broadcast:172.16.3.255//假设掩码为255.255.255.0
  3. All Subnet Broadcast:172.16.255.255

       在老版本路由器中,除第一种广播会被隔离外,其他两种广播都会被转发。而新版本路由器中,所有类型广播都被隔离。

区别交叉线和直连线

培训的时候,老师说过的,但是还是没怎么记住,今天看了视屏,又巩固了一遍:

Use a crossover cable when BOTH ports are designed with an "x" or neither port is designed with an "x"!

一般来说,交换机或者hub的接口都带有"x",如1x,2x……,而PC机的网卡和路由器的接口都没有"x"。

实际上,从原理上解释是因为,交换机的接口RJ45,管脚1,2是用于接收,管脚3,6用于发送。而PC机的网卡和路由器的接口,管脚1,2用于发送,管脚3,6用于接收。所以,对于交换机连接交换机,用交叉线。而交换机连接PC或者路由器,就要用直连线。

综上,相同设备(交换机和hub,PC机和路由器)之间连接用交叉线,不同设备连接用直连线。

routing Protocol和routed Protocol

前者是路由协议,是用来路由和维持路由表的协议,如rip等;后者是被路由协议,是用来承载用户数据的协议,如ip,ipx等。

路由协议

IGRPEIGRP都为CISCO的转有协议,不允许其他厂商使用。

OSPF是flooded链路状态信息出去,LSA(链路状态信息公告)只是在一个area进行flooded,路由器收集area上的所有lsa信息,形成一个连路状态信息数据库,OSPF使用SPF算法计算最佳路径。使用OSPF需要分层,需要有骨干网和普通网,比较适合分层的结构化网络。它使用COST来计算最佳路径:10*8/带宽

RouterID:为路由器启动过程当中,所有端口中能够激活的最大的ip地址为RouterID。不过,为了稳定,一般将loopback口优先考虑设置为RouterID。

Autonomous Systems:自制系统

他是一个范围,具有相同管理域下的所有网络设备的组合,称为一个自制系统。如:网通,电信和铁通都可以理解为一个自制系统。在一个自制系统内部运行的协议,成为IGPs(内部网关协议):RIP,IGRP等。运行在不同自制系统之间的协议称为EGPs(外部网关协议):BGP。

Administrative Distance:管理距离

他是用来衡量路由协议好坏的一个标准。其值越小,说明可行度越高。RIP的缺省管理距离是120,而IGRP为100。

路由协议的分类:

  1. Distance Vector(距离矢量路由协议):定期的把自己的整个路由表广播给邻居,如RIP和IGRP。
  2. Hybrid Routing(杂合协议):具有1,3两者特点的协议,如:EIGRP。EIGRP相比IGRP:1〉快速收敛;2〉减少了带管占用;3〉支持更多的高层协议;4〉类似的Metric计算方法;5〉相同的负载均衡方式
  3. Link State(链路状态路由协议):只有网路拓扑结构发生变化的时候,才会向网上所有的路由器发送变化部分的更新,如:OSPF。链路状态路由协议具有三个特点:1〉发送自己的端口发连接的链路状态信息;2〉以组播方式发送;3〉触发式更新,无更新周期;4〉路由的获取是自己计算的(SPF)。

Major Classful Network(主有类网络)

Rip和Igrp都只支持主有类网络的路由,即路由信息不带有子网掩码。主有类网络路由协议,将在网络边界汇总。他不支持不连续的网络。

在不连续网路中,使用静态路由的时候,需要使用ip classless命令以支持无类路由,否则,网络将无法连通。

负载均衡

RIP和IGRP默认支持4条路径的负载均衡,最大可以支持到6条。但是,RIP只能支持等效负载均衡,而IGRP却可以支持非等效的负载均衡:1〉使用命令variant multiplier 来确定一个倍数n(即为multiplier值),假设最佳路经的Metrics值为X,而另一条可行路经的Metrics值为Y+Z(其中Y为源地址到下一跳的Metrics值,而Z为下一跳的值到目的地值的Metrics值),那么X,Y,Z和n必须满足的关系:Z<X且Y+Z<n*X

Metrics

距离矢量用来选择最佳路径的依据。对于RIP:仅仅用Hop Count,跳数来衡量Metrics值。对于IGRP:用带宽,时延,负载,可靠性和最大传输单元来确定Metrics值(但是缺省只用带宽和时延来确定)。

Routing Loop(路由环路)

由谣言传送的特性所导致,当然此特性仅在距离矢量路由协议上存在。解决方法有:

  1. 定义一个最大值,RIP的最大跳数定义为15跳。
  2. Split Horizon(水平分割):a发送更新信息给b后,b不能再发送同样的更新信息给a。
  3. Route Poisoning(路由毒杀):当路由器C的直连网络无法到达时,路由器C并不立即删除对应网络的路由条目,而是将Metrics值标识为无限大,即不可到达。在C下次更新信息的时候,将把这个不可到达信息发送给邻接路由器。以避免由于C直接删除路由条目,而导致的路由环路。
  4. Poison Reverse(反转毒杀):在3的情况下,C发送某个网路不可到达的信息给邻接路由器B后,B并不立即更新路由条目为不可到达,而是设置对应路由条目为Possible Down,然后再次将这个Possible Down信息发送给C(这种情况已经打破了水平分割的原则,但是也仅允许这种特例才能打破水平分割原则),其目的在于,要求C确认是否真的不可到达,同时也是防止C收到的是其他路由器的错误信息。
  5. Holddown Timers:在3的情况下,当C发送不可到达信息给B时,B由于以前的路由条目为能够到达,而现在收到的不可到信息比以前的信息更坏,将进入holddown状态,此时不再接收信息直到收到比以前更好的信息或者时间到达后,才会退出holddown状态(注意:仅仅是不再接收对应路由条目的信息,但是会发送这个possible down路由条目出去,同时其他的路由条目的发送与接收也不会被影响)。
  6. Triggered Updates(触发更新):在3的情况下,路由器C将立刻把网络不可到达的信息发送给邻接路由器,而邻接路由器也会立刻将此信息发送出去,此时是立刻发送信息,路由器B没有机会产生谣言,无法形成路由环路。

ACL配置

在配置Acl的时候,应该注意:标准acl应该设置在目的网络的路由器上,而扩展acl则要设置在源地址网络附近的路由器上。因为对于标准acl,如果设置在源地址网络附近的路由器上,将会扩大acl的应用范围;而若把扩展acl设置在目的网络附近的路由器上,将会增加沿途路由器对于不必要的数据转发的负担。

交换机的三大功能

  1. Address Learning
  2. Forward / Filter decision
  3. Loop avoidance

广播风暴

由于冗余拓扑结构的存在,会导致广播风暴。当在存在冗余交换机B的网络中,某台pc发送一个广播后,交换机A.B的MAC表中都没有目的地址条目,就会flood到自己的所有接口上,而flood出去的帧又会被其他交换机再次flood,由此形成广播风暴。

Multiple Frame Copies多帧复制

同样在存在冗余交换机的网络中,当交换机刚刚启动后,地址表中没有任何条目时,某x发送一个unicast帧给同一个网段的y,这个时候,交换机A本应丢弃这个单播帧的,但是由于还没有学习到地址条目,就会将这个帧flood到所有端口,而此时冗余交换机B收到这个帧后,由于同样的没有学习到mac条目,他也会再次flood到所有的端口,而这个时候,目的地址y收到了来自x,A,B的三个同样的帧。造成了帧的重复接收,这种情况,对计数问题有很大的影响。

MAC DATABASE Instability Mac地址的不稳定性

在上一种的情况下,同样在交换机刚启动的时候,x发送一个单播帧给y的时候,交换机A会先会在port0端口接收到来自x的帧,此时mac表中,将x的地址和port0建立关联,接下来,冗余交换机B同样会将x地址和自己的port0建立关联,同时也会flood这个帧到自己的port1端口,这个时候,A的port1端口收到的来自B 的port1端口的帧,交换机A又会认为x的地址和port1也建立了关联,可是,这种情况显然是不应该存在的。这就造成了MAC地址的不稳定。

Spanning-Tree Protocol 

交换机间每两秒种发送一个Bpdu(Bridge Protocol Data Unit),它包含有桥的状态信息和身份标志。Root Bridge 是指有最小Bridge ID的桥,而Bridge ID的大小由两部分决定:前半部分为Bridge Priority(交换机缺省为32768),后部分为Mac Address。此时其他交换机就为NonRoot Bridge,他选取和Root Bridege通信速度更快的接口为root port。 Designated Port由端口优先级(默认相同)和端口地址决定。Root Bridge在一个广播域下决定,而Root Port和Designated Port在一个冲突域下决定。

改变一些参数,使得stp更快捷,就成为了Rapid Spanning-Tree Protocol 。

本征VLAN(NATIVE VLAN)

它是指在802.1Q封装的Trunk中,不加上tag的vlan。这样的vlan由于不需要封装就可以在trunk上传输,因此可以通过hub(hub没有封装数据帧的能力)。一般vlan1缺省为本征vlan。

Per-Vlan Spanning Tree

PVST:他是指每一个vlan都能够启动一个STP。

VTP(Vlan Trunk Protocol)

它是用来将一个vtp域下的vlan配置信息进行同步,周期性的在域间利用Trunk通告vlan的配置信息。在一个VTP域下的交换机具有相同的域名和密码。VTP有三种模式:Server,Client和Transparent。VTP通告以组播的方式每五分钟发送一次,Server和Client将会同步信息到最新版本号。

VTP Prunning(VTP的修整)

由于一个VTP域中,不是每个端口都有端口对应所有的VLAN,实际上对于某个制定的VLAN,有很多交换机没有任何端口加入的这个VLAN的,如果仍然在这些交换机相连的Trunk上传输这个vlan的信息,将占用一些不必要的带宽。所以,就有了VTP域的修整,也就是在这些不必要的传输VLAN信息的Trunk上过滤掉flooded信息以节省带宽。

配置VLAN

  1. 首先考虑是否创建VTP域:一般在很多交换机的时候才需要创建域。在建立一个vtp域的时候,需要:VTP域名,VTP模式,是否启用VTP修整,密码和VTP Trap。需要注意的是,在添加一个新的交换机到一个vtp域的时候,为了避免新的交换机由于配置信息的版本号过高而将其错误的配置信息传播出去,应该将新的交换机的vtp模式设置为Client模式。 delete vtp命令可以将vtp配置信息版本号调整至0。
  2. 建立Trunk:两台以上交换机互连的时候建立Trunk。
  3. 创建VLAN
  4. 分配端口给VLAN

19系列交换机中,在全局模式下直接建立vtp的一些设置,而在29系列中,需要在特权模式下,命令vlan database进入vlan设置。

NAT配置

NAT配置的时候,需要注意相对于内网的外部路由器在建立路由表的时候,应该创建路由到inside Global ip address,而非inside Local ip address。

广域网

连接方式:

  1. 专线(leased line):24小时服务,64K基本,T1(1.5M),E1(2M), T3(45M),E3(34M)。
  2. 交换式电路:异步DSTN;同步ISDN(Serial同步口) //1,2两种方式都属于点对点的电路连接方式
  3. 包交换:发出的数据包头有特定信息,网络会根据包头中的特定信息来确定包往哪儿发送。虚电路,可以实现点对多。

使用协议:

广域网在二层使用的协议:

  1. 专线:HDLC(分为cisco hdlc:支持多协议——所有的cisco产品默认支持和标准hdlc:只支持单协议ip),PPP(由hdlc发展起来的,由NCP支持多协议,LCP支持链路捆绑,身份验证CHAP和PAP,数据加密等),SLIP(早期的只用于服务IP协议的一种协议)
  2. 包交换:X.25(帧中继前生),Frame Relay(主要用于接入网),ATM(主要用于骨干网)

PPP的认证方式

PAP:两次握手,直接明文发送用户名和密码

CHAP:三次握手(A<————>B):

1〉A先发送一个challage|编号01|id|random|hostname(routerB)|

2〉B发送一个Respond   |编号02|id|Hash|hostname(routerA)|,其中Hash值是B用A发送过来的random值和他查询hostname对应的密码一起用MD5计算出来的。

3〉A根据B发送过来的hostname来查找一个密码和原来备份得random值一起计算一个Hash值,用这个计算出来的Hash值,和B发送过来的Hash值比较,如果一致,则A向B发送一个Welcome信息(编号03);如果不一致则发送Refuse(编号04)。

帧中继

几个术语:

PVC:永久式虚电路

SVC:交换式虚电路

DLCI:数据链路连接标志,只用于本地虚电路的一个编号

LMI:帧中继信令信号,查询维护DLCI状态信息的工具

CIR:可保障信息速率

EIR:网络通行情况下最大的峰值速率

FECN / BECN:前 / 后 向拥塞通告信息

帧中继是一个非广播型网络结构,它的数据帧有两种类型:

1〉CISCO(所有CISCO设备采用);

2〉IETF。

        由于数据帧格式所限,他的广播包只能到达一个唯一目的地。他一般采用星型网络拓扑结构,有点对点和点对多点两种结构。

LMI工作过程

CISCO产品支持三种LMI标准:

CISCO;ANSI T1.617 Annex D;ITU-T Q.933 Annex A

帧中继反转Arp和LMI信号A〈——Frame Relay Cloud——〉B

  1. A向帧中继交换机发送一个hello包,请求咨询A的网络状态
  2. 帧中继交换机查询虚电路表,将A的接口对应的虚电路的DLCI全部发送给A
  3. A发送一个包给B,B将把本地DLCI号和A的IP地址对应(称作反转ARP)

帧中继能够和ATM,ATM终端互连

ISDN

ISDN有两类接入方式:

  1. BRI:有2B(64K*2, 使用PPP或者HDLC协议)和1D(16K,信令信号,LAPD协议)信道
  2. PRI:欧洲标准:30B+1D(64K*30+64K=2M,E1);美洲标准:23B+1D(23K*64+64=1.5M,T1)

ISDN网络结构:

NT-1连接U口(两根线)和T口(四根线);

NT-2将一个T口分为许多相同功能的S口(增加接口类似HUB的功能)

TA:终端适配器,接口为R口,对于本身不支持ISDN的I,E,Q系列协议的设备,需要这个终端适配器来转换信号

U口:将TE1和NT-1接口合在一起

Dial-on-Demand Router(按需拨号路由)

他使用一个isdn物理链路远程接入路由器。在需要的时候连接,结束时断开连接,使用isdn或者pstn。

DDR操作过程

  1. 定义到目的路由器的静态路由
  2. 定义感兴趣流量
  3. 拨号信息查询
  4. 数据传输
  5. 呼叫终止

拨号的几个概念

Dialer Interface:为了设置拨号参数而虚拟的一个接口

Dialer Pool:组织物理接口的一个平台,并不实际存在

Physical Interface:加入到拨号池中

在对硬盘进行分区前,应该先弄清楚计算机担负的工作及硬盘的容量有多大,还要考虑到以下几个问题。

  第一点也是最重要的一点,要知道当前安装LILO的版本,因为LILO2.21及早期版本对硬盘大小有限制,如果安装LILO到1023磁道以外即8G的空间以外,LILO就无法启动。 但一些BIOS较老的机器,LINUX仍然无法突破1024磁道的限制,因此这些BIOS无法认出大于1024的硬盘空间。

  还需要考虑的问题有:

  · 是否限制用户可使用的磁盘空间大小?

  · 在系统中需要安装哪些软件?

  · 交换分区需要多大?

  · 系统是否有多个硬盘?

  下面,我们按系统工作性质的不同对分区的划分提出了一些建议。当然,根据实际情况,在满足系统工作需求的前提下,下面的分区大小也可以灵活的变动。

基本工作站的分区方案
  假设系统的硬盘大小是10G。

  /boot 20M

  Swap 128M

  /root 9.85G

  建立一个20M的/boot分区是为了避免将系统内核文件放到1024磁道以外,如果将/boot做为root分区的一个子目录,内核文件就会安装在root分区的任何地方,因为硬盘的大小超过了8G,所以在启动时就有可能出现问题。建议将交换分区的大小设置为内存的两倍,在这里我们假设系统的内存为64M。最后我们将硬盘的剩余空间全部分给了root分区。

Red Hat Linux 6.2 及其早期版本上的基本服务器硬盘分区方案
  这里的服务器我们假设只提供几种通用的服务,如WWW服务及FTP服务等几种服务,通过telnet登录的用户数很少。假设其硬盘大小为25G。

  /boot 20M

  Swap 128M

  / 10G

  /home 13G

  /var 2G

  在硬盘的最前面创建20M大小的/boot分区,原因同上。交换分区的大小也是128M,因为内存的大小为64M。

  / ,即root分区设为10G这么大是因为其中有一个/usr目录,这个目录可能会占用很多硬盘空间,特别是在安装了X Server,运行图形界面的应用程序的时候。

  /home分区是硬盘中最大的分区,这似乎与我们假设系统用户数不多有些矛盾。实际上在/home目录下确实没有几个用户目录,但在Red Hat6.2及更早的版本中,Apache服务器和wu-ftpd FTP服务器被放在了/home/httpd及/home/ftp目录中。所以这个分区这么大也是有原因的。

  最后,/var目录独自占用了一个分区,因为系统的所有日志都写到了/var/log目录下,这将会占用很大的硬盘空间。如果系统日志记录得非常详细,整个目录很快会被写满,导致系统工作呆滞。当然,可以通过系统日志后台守护程序syslogd来修改日志配置,避免发生这种情况。

Red Hat 7及以上版本的基本服务器分区方案
  这种情况同前一个方案的情况相同,不同的是LINUX版本为Red Hat 7.0及其以上版本。

  /boot 20M

  Swap 128M

  / 10G

  /var 15G

  与RedHat6不同,在RedHat7中HTTP服务和FTP服务的目录现在位于 /var/www/ 和/var/ftp/,因此/var分区有15G之大也就不难理解了。

多用户服务器分区方案
  在这种服务器系统中,同时有多个用户通过telnet, ssh, rlogin或其方式在远程访问系统。系统中有三个35G的硬盘驱动器,总共有105G的磁盘空间 。系统中用到了RAID 5技术做数据冗余。这种情况下,管理员必须为每个用户分配磁盘空间。对RedHat 6.2及更早的版本,分区如下:

  Disk 1:

  /boot 20M

  / 4G

  /var 3GB

  /home 27.98G

  Disk 2:

  swap 20MB

  / 4GB

  /var 3GB

  /home 27.98GB

  Disk 3:

  swap 20MB

  / 4GB

  /var 3GB

  /home 27.98GB

  这样分区的原因:首先,Disk1上的20M /boot分区不属于任何RAID阵列,否则如果你将/boot放至RAID阵列中,以后就不能系统内核升级了。

  为了方便管理,在其它两个硬盘中建立了20M的交换分区。这种服务器一般配有1G以上的内存,因此交换分区的大小不成问题。如果增大交换分区,就会减少RAID分区空间,所以20M是足够的。RAID分区的分组如下:

  · 1-A, 2-A, and 3-A 一起组成一个8G的 RAID 5 驱动器,做为/根目录打开。

  · 1-B, 2-B, and 3-B 组成 6GB的 RAID 5 驱动器,做为 /var目录。

  · 1-C, 2-C, and 3-C 组成 55.96GB RAID 5 驱动器, 做为 /home.目录。

  这种分配方案总共有55.96G的空间分配给所有用户及Apache和FTP服务,在/var下用6G空间用做记录日志、邮件,这么大的空间是足够的。

  如果安装Red Hat7或以上版本,应给/var分区更大的空间,因为它同时还存放着WEB和FTP服务的两个目录。

路由器 <一>

  最简单的网络可以想象成单线的总线,各个计算机可以通过向总线发送分组以互相通信。但随着网络中的计算机数目增长,这就很不可行了,会产 生许多问题:

    1、带宽资源耗尽。
    2、每台计算机都浪费许多时间处理无关的广播数据。 

    3、网络变得无法管理,任何错误都可能导致整个网络瘫痪。
    4、每台计算机都可以监听到其他计算机的通信。

  把网络分段可以解决这些问题,但同时你必须提供一种机制使不同网段的计算机可以互相通信,这通常涉及到在一些ISO网络协议层选择性地在网段间传送数据,我们来看一下网络协议层和路由器的位置。

  我们可以看到,路由器位于网络层。本文假定网络层协议为IPv4,因为这是最流行的协议,其中涉及的概念与其他网络层协议是类似的。

    一、路由与桥接

  路由相对于2层的桥接/交换是高层的概念,不涉及网络的物理细节。在可路由的网络中,每台主机都有同样的网络层地址格式(如IP地址),而无论它是运行在以太网、令牌环、FDDI还是广域网。网络层地址通常由两部分构成:网络地址和主机地址。

  网桥只能连接数据链路层相同(或类似)的网络,路由器则不同,它可以连接任意两种网络,只要主机使用的是相同的网络层协议。

  路由器 <二>

    二、连接网络层与数据链路层


  网络层下面是数据链路层,为了它们可以互通,需要“粘合”协议。ARP(地址解析协议)用于把网络层(3层)地址映射到数据链路层(2层)地址,RARP(反向地址解析协议)则反之。

  虽然ARP的定义与网络层协议无关,但它通常用于解析IP地址;最常见的数据链路层是以太网。因此下面的ARP和RARP的例子基于IP和以太网,但要注意这些概念对其他协议也是一样的。

    1、地址解析协议

  网络层地址是由网络管理员定义的抽象映射,它不去关心下层是哪种数据链路层协议。然而,网络接口只能根据2层地址来互相通信,2层地址通过ARP从3层地址得到。

  并不是发送每个数据包都需要进行ARP请求,回应被缓存在本地的ARP表中,这样就减少了网络中的ARP包。ARP的维护比较容易,是一个比较简单的协议。

    2、简介

  如果接口A想给接口B发送数据,并且A只知道B的IP地址,它必须首先查找B的物理地址,它发送一个含有B的IP地址的ARP广播请求B的物理地址,接口B收到该广播后,向A回应其物理地址。

  注意,虽然所有接口都收到了信息,但只有B回应该请求,这保证了回应的正确且避免了过期的信息。要注意的是,当A和B不在同一网段时,A只向下一跳的路由器发送ARP请求,而不是直接向B发送。 接收到ARP分组后处理,注意发送者的对被存到接收ARP请求的主机的本地ARP表中,一般A想与B通信时,B可能也需要与A通信。 

    3、IP地址冲突

  ARP产生的问题中最常见的是IP地址的冲突,这是由于两个不同的主机IP地址相同产生的,在任何互联的网络中,IP地址必须是唯一的。这时会收到两个ARP回应,分别指出了不同的硬件地址,这是严重的错误,没有简单的解决办法。

  为了避免出现这类错误,当接口A初试化时,它发送一个含有其IP地址的ARP请求,如果没有收到回应,A就假定该IP地址没有被使用。我们假定接口B已经使用了该IP地址,那么B就发送一个ARP回应,A就可以知道该IP地址已被使用,它就不能再使用该IP地址,而是返回错误信息。这样又产生一个问题,假设主机C含有该IP地址的映射,是映射到B的硬件地址的,它收到接口A的ARP广播后,更新其ARP表使之指向A的硬件地址。为了解决这个错误,B再次发送一个ARP请求广播,这样主机C又更新其ARP表再次指向B的硬件地址。这时网络的状态又回到先前的状态,有可能C已经向A发送了应该发送给B的IP分组,这很不幸,但是因为IP提供的是无保证的传输,所以不会产生大的问题。

    4、管理ARP缓存表

  ARP缓存表是对的列表,根据IP地址索引。该表可以用命令arp来管理,其语法包括:

    向表中添加静态表项 — arp -s

    从表中删除表项 — arp -d

    显示表项 — arp -a

  ARP表中的动态表项(没有手动加入的表项)通常过一段时间自动删除,这段时间的长度由特定的TCP/IP实现决定。

5、静态ARP地址的使用

  静态ARP地址的典型使用是设置独立的打印服务器,这些设备通常通过telnet来配置,但首先它们需要一个IP地址。没有明显的方法来把此信息告诉该设备,好象只能使用其串口来设置。但是,这需要找一个合适的终端和串行电缆,设置波特率、奇偶校验等,很不方便。

  假设我们想给一个打印服务器设置IP地址P-IP,并且我们知道其硬件地址P-hard,在工作站A上创建一个静态ARP表项把P-IP映射到P-hard,这样,虽然打印服务器不知道自己的IP地址,但是所有指向P-IP的数据就将被送到P-hard。我们现在就可以telnet到P-IP并配置其IP地址了,然后再删除该静态ARP表项。

  有时会在一个子网里配置打印服务器,而在另一个子网里使用它,方法与上面类似。假设其IP地址为P-IP,我们分配一个本网的临时IP地址T-IP给它,在工作站A上创建临时ARP表项把T-IP映射到P-hard,然后telnet到T-IP,给打印服务器配以IP地址P-IP。接下来就可以把它放到另一个子网里使用了,别忘了删除静态ARP表项。

    6、代理ARP

  可以通过使用代理ARP来避免在每台主机上配置路由表,在使用子网时这特别有用,但注意,不是所有的主机都能理解子网的。基本的思想是即使对于不在本子网的主机也发送ARP请求,ARP代理服务器(通常是网关)回应以网关的硬件地址。

  代理ARP简化了主机的管理,但是增加了网络的通信量(不是很明显),并且可能需要较大的ARP缓存,每个不在本网的IP地址都被创建一个表项,都映射到网关的硬件地址。在使用代理ARP的主机看来,世界就象一个大的没有路由器物理网络。

路由器 <三>

    三、IP地址

  在可路由的网络层协议中,协议地址必须含有两部分信息:网络地址和主机地址。存贮这种信息最明显的方法是用两个分离的域,这样我们必须考虑到两个域的最大长度,有些协议(如IPX)就是这样的,它在小型和中型的网络里可以工作的很好。

  另一种方案是减少主机地址域的长度,如24位网络地址、8位主机地址,这样就有了较多的网段,但每个网段内的主机数目很少。这样一来,对于多于256个主机的网络,就必须分配多个网段,其问题是很多的网络给路由器造成了难以忍受的负担。

  IP把网络地址和主机地址一起包装在一个32位的域里,有时主机地址部分很短,有时很长,这样可以有效利用地址空间,减少IP地址的长度,并且网络数目不算多。有两种将主机地址分离出来的方法:基于类的地址和无类别的地址。

    1、主机和网关

  主机和网关的区别常产生混淆,这是由于主机意义的转变。在RFC中(1122/3和1009)中定义为:

    主机是连接到一个或多个网络的设备,它可以向任何一个网络发送和从其接收数据,但它从不把数据从一个网络传向另一个。

    网关是连接到多于一个网络的设备,它选择性的把数据从一个网络转发到其它网络。

  换句话说,过去主机和网关的概念被人工地区分开来,那时计算机没有足够的能力同时用作主机和网关。主机是用户工作的计算机,或是文件服务器等。现代的计算机的能力足以同时担当这两种角色,因此,现代的主机定义应该如此:

    主机是连接到一个或多个网络的设备,它可以向任何一个网络发送和从其接收数据。它也可以作为网关,但这不是其唯一的目的。

  路由器是专用的网关,其硬件经过特殊的设计使其能以极小的延迟转发大量的数据。然而,网关也可以是有多个网卡的标准的计算机,其操作系统的网络层有能力转发数据。由于专用的路由硬件较便宜,计算机用作网关已经很少见了,在只有一个拨号连接的小站点里,还可能使用计算机作为非专用的网关。

    2、基于类的地址

  最初设计IP时,地址根据第一个字节被分成几类:

    0: 保留
    1-126: A类(网络地址:1字节,主机地址:3字节)
    127: 保留
    128-191: B类(网络地址:2字节,主机地址:2字节)
    192-223: C类(网络地址:3字节,主机地址:1字节)
    224-255: 保留

    3、子网划分

  虽然基于类的地址系统对因特网服务提供商来说工作得很好,但它不能在一个网络内部做任何路由,其目的是使用第二层(桥接/交换)来导引网络中的数据。在大型的A类网络中,这就成了个特殊的问题,因为在大型网络中仅使用桥接/交换使其非常难以管理。在逻辑上其解决办法是把大网络分割成若干小的网络,但在基于类的地址系统中这是不可能的。为了解决这个问题,出现了一个新的域:子网掩码。子网掩码指出地址中哪些部分是网络地址,哪些是主机地址。在子网掩码中,二进制1表示网络地址位,二进制0表示主机地址位。传统的各类地址的子网掩码为:

    A类:255.0.0.0

    B类:255.255.0.0

    C类:255.255.255.0

  如果想把一个B类网络的地址用作C类大小的地址,可以使用掩码255.255.255.0。

  用较长的子网掩码把一个网络分成多个网络就叫做划分子网。要注意的是,一些旧软件不支持子网,因为它们不理解子网掩码。例如UNIX的routed路由守护进程通常使用的路由协议是版本1的RIP,它是在子网掩码出现前设计的。
 上面只介绍了三种子网掩码:255.0.0.0、255.255.0.0和255.255.255.0,它们是字节对齐的子网掩码。但是也可以在字节中间对其进行划分,这里不进行详细讲解,请参照相关的TCP/IP书籍。

  子网使我们可以拥有新的规模的网络,包括很小的用于点到点连接的网络(如掩码255.255.255.252,30位的网络地址,2位的主机地址:两个主机的子网),或中型网络(如掩码255.255.240.0,20位网络地址,12位主机地址:4094个主机的子网)。

  注意DNS被设计为只允许字节对齐的IP网络(在in-addr.arpa.域中)。

    4、超网(supernetting)

  超网是与子网类似的概念–IP地址根据子网掩码被分为独立的网络地址和主机地址。但是,与子网把大网络分成若干小网络相反,它是把一些小网络组合成一个大网络–超网。

  假设现在有16个C类网络,从201.66.32.0到201.66.47.0,它们可以用子网掩码255.255.240.0统一表示为网络201.66.32.0。但是,并不是任意的地址组都可以这样做,例如16个C类网络201.66.71.0到201.66.86.0就不能形成一个统一的网络。不过这其实没关系,只要策略得当,总能找到合适的一组地址的。

    5、可变长子网掩码(VLSM)

  如果你想把你的网络分成多个不同大小的子网,可以使用可变长子网掩码,每个子网可以使用不同长度的子网掩码。例如:如果你按部门划分网络,一些网络的掩码可以为255.255.255.0(多数部门),其它的可为255.255.252.0(较大的部门)。

    6、无类别地址(CIDR)

  因特网上的主机数量增长超出了原先的设想,虽然还远没达到232,但地址已经出现匮乏。1993年发表的RFC1519–无类别域间路由CIDR(Classless Inter-Domain Routing)–是一个尝试解决此问题的方法。CIDR试图延长IPv4的寿命,与128位地址的IPv6不同,它并不能最终解决地址空间的耗尽,但IPv6的实现是个庞大的任务,因特网目前还没有做好准备。CIDR给了我们缓冲的准备时间。

  基于类的地址系统工作的不错,它在有效的地址使用和少量的网络数目间做出了较好的折衷。但是随着因特网意想不到的成长出现了两个主要的问题:

    已分配的网络数目的增长使路由表大得难以管理,相当程度上降低了路由器的处理速度。

    僵化的地址分配方案使很多地址被浪费,尤其是B类地址十分匮乏。

  为了解决第二个问题,可以分配多个较小的网络,例如,用多个C类网络而不是一个B类网络。虽然这样能够很有效地分配地址,但是更加剧了路由表的膨胀(第一个问题)。

  在CIDR中,地址根据网络拓扑来分配。连续的一组网络地址可以被分配给一个服务提供商,使整组地址作为一个网络地址(很可能使用超网技术)。例如:一个服务提供商被分配以256个C类地址,从213.79.0.0到213.79.255.0,服务提供商给每个用户分配一个C类地址,但服务提供商外部的路由表只通过一个表项–掩码为255.255.0.0的网络213.79.0.0–来分辨这些路由。

  这种方法明显减少了路由表的增长,CIDR RFC的作者估计,如果90%的服务提供商使用了CIDR,路由表将以每3年54%的速度增长,而如果没有使用CIDR,则增长速度为776%。如果可以重新组织现有的地址,则因特网骨干上的路由器广播的路由数量将大大减少。但这实际是不可行的,因为将带来巨大的管理负担。

路由器 <四>  

    四、路由

    1、路由表

  如果一个主机有多个网络接口,当向一个特定的IP地址发送分组时,它怎样决定使用哪个接口呢?答案就在路由表中。来看下面的例子:

目的 子网掩码 网关 标志 接口
201.66.37.0 255.255.255.0 201.66.37.74 U eth0
201.66.39.0 255.255.255.0 201.66.39.21 U eth1

  主机将所有目的地为网络201.66.37.0内主机(201.66.37.1-201.66.37.254)的数据通过接口eth0(IP地址为201.66.37.74)发送,所有目的地为网络201.66.39.0内主机的数据通过接口eth1(IP地址为201.66.39.21)发送。标志U表示该路由状态为“up”(即激活状态)。对于直接连接的网络,一些软件并不象上例中一样给出接口的IP地址,而只列出接口。
 此例只涉及了直接连接的主机,那么目的主机在远程网络中如何呢?如果你通过IP地址为201.66.37.254的网关连接到网络73.0.0.0,那么你可以在路由表中增加这样一项:  

  目的
  掩码
  网关
  标志
  接口

  73.0.0.0
  255.0.0.0
  201.66.37.254
  UG
  eth0

  此项告诉主机所有目的地为网络73.0.0.0内主机的分组通过201.66.37.254路由过去。标志G(gateway)表示此项把分组导向外部网关。类似的,也可以定义通过网关到达特定主机的路由,增加标志H(host): 

  目的 掩码 网关 标志 接口
  91.32.74.21 255.255.255.255 201.66.37.254 UGH eth0

  下面是路由表的基础,除了特殊表项之外:

  目的 掩码 网关 标志 接口
  127.0.0.1 255.255.255.255 127.0.0.1 UH lo0
  default 0.0.0.0 201.66.37.254 UG eth1

 第一项是loopback接口,用于主机给自己发送数据,通常用于测试和运行于IP之上但需要本地通信的应用。这是到特定地址127.0.0.1的主机路由(接口lo0是IP协议栈内部的“假”网卡)。第二项十分有意思,为了防止在主机上定义到因特网上每一个可能到达网络的路由,可以定义一个缺省路由,如果在路由表中没有与目的地址相匹配的项,该分组就被送到缺省网关。多数主机简单地通过一个网卡连接到网络,因此只有通过一个路由器到其它网络,这样在路由表中只有三项:loopback项、本地子网项和缺省项(指向路由器)。

    2、重叠路由


  假设在路由表中有下列重叠项: 

  目的 掩码 网关 标志 接口
  1.2.3.4 255.255.255.255 201.66.37.253 UGH eth0
  1.2.3.0 255.255.255.0 201.66.37.254 UG eth0
  1.2.0.0 255.255.0.0 201.66.37.253 UG eth1
  default 0.0.0.0 201.66.39.254 UG eth1

   之所以说这些路由重叠是因为这四个路由都含有地址1.2.3.4,如果向1.2.3.4发送数据,会选择哪条路由呢?在这种情况下,会选择第一条路由,通过网关201.66.37.253。原则是选择具有最长(最精确)的子网掩码。类似的,发往1.2.3.5的数据选择第二条路由。

  注意:这条原则只适用于间接路由(通过网关)。把两个接口定义在同一子网在很多软件实现上是非法的。例如下面的设置通常是非法的(不过有些软件将尝试在两个接口进行负载平衡):

  接口 IP地址 子网掩码
  eth0 201.66.37.1 255.255.255.0
  eth1 201.66.37.2 255.255.255.0

  对于重叠路由的策略是十分有用的,它允许缺省路由作为目的为0.0.0.0、子网掩码为0.0.0.0的路由进行工作,而不需要作为路由软件的一个特殊情况来实现。

  回头来看看CIDR,仍使用上面的例子:一个服务提供商被赋予256个C类网络,从213.79.0.0到213.79.255.0。该服务提供商外部的路由表只以一个表项就了解了所有这些路由:213.79.0.0,子网掩码为255.255.0.0。假设一个用户移到了另一个服务提供商,他拥有网络地址213.79.61.0,现在他是否必须从新的服务提供商处取得新的网络地址呢?如果是,意味着他必须重新配置每台主机的IP地址,改变DNS设置,等等。幸运的是,解决办法很简单,原来的服务提供商保持路由213.79.0.0(子网掩码为255.255.0.0),新的服务提供商则广播路由213.79.61.0(子网掩码为255.255.255.0),因为新路由的子网掩码较长,它将覆盖原来的路由。

  3、静态路由

  回头看看我们已建立的路由表,已有了六个表项:

  目的 掩码 网关 标志 接口
  127.0.0.1 255.255.255.255 127.0.0.1 UH lo0
  201.66.37.0 255.255.255.0 201.66.37.74 U eth0
  201.66.39.0 255.255.255.0 201.66.39.21 U eth1
  default 0.0.0.0 201.66.39.254 UG eth1
  73.0.0.0 255.0.0.0 201.66.37.254 UG eth0
  91.32.74.21 255.255.255.255 201.66.37.254 UGH eth0

  这些表项分别是怎么得到的呢?第一个是当路由表初始化时由路由软件加入的,第二、三个是当网卡绑定IP地址时自动创建的,其余三个必须手动加入,在UNIX系统中,这是通过命令route来做的,可以由用户手工执行,也可以通过rc脚本在启动时执行。上述方法涉及的是静态路由,通常在启动时创建,并且没有手工干预的话将不再改变。

 路由器 <五>

  四、路由

  4、路由协议

  主机和网关都可以使用称作动态路由的技术,这使路由表可以动态改变。动态路由需要路由协议来增加和删除路由表项,路由表还是和静态路由一样地工作,只是其增添和删除是自动的。

  有两种路由协议:内部的和外部的。内部协议在自制系统(AS)内部路由,而外部协议则在自制系统间路由。自制系统通常在统一的控制管理之下,例如大的公司或大学。小的站点常常是其因特网服务提供商自制系统的一部分。

  这里只讨论内部协议,很少有人涉及到甚至听说外部协议。最常见的外部协议是外部网关协议EGP(External Gateway Protocol)和边缘网关协议BGP(Border Gateway Protocol),BGP是较新的协议,在逐渐地取代EGP。

  5、ICMP重定向

  ICMP通常不被看作路由协议,但是ICMP重定向却与路由协议的工作方式很类似,所以将在这里讨论一下。假设现在有上面所给的六个表项的路由表,分组被送往201.66.43.33,看看路由表,除了缺省路由外,这并不能匹配任何路由。静态路由将其通过路由器201.66.39.254发送(trip 1),但是,该路由器知道所有发向子网201.66.43.0的分组应该通过201.66.39.253,因此,它把分组转发到适当的路由器(trip 2)。但是如果主机直接把分组发到201.66.39.253就会提高效率(trip 3)。

    因为路由器把分组从同一接口发回了分组,所以它知道有更好的路由,路由器可以通过ICMP重定向指示主机使用新的路由。虽然路由器知道所有发向201.66.43.0子网的分组应该通过201.66.39.253,它通常只发送特定的主机的ICMP重定向(此例中是201.66.43.33)。主机将在路由表中创建一个新的表项: 
目的 掩码 网关 标志 接口
  201.66.43.33 255.255.255.255 201.66.39.253 UGHD eth1

  注意标志D,对所有由ICMP重定向创建的路由设置此标志。将来此类分组将通过新路由发送(trip 3)。

  6、RIP

  RIP是一种简单的内部路由协议,已经存在很久,被广泛地实现(UNIX的routed就使用RIP)。它使用距离向量算法,所以其路由选择只是基于两点间的“跳(hop)”数,穿过一个路由器认为是一跳。主机和网关都可以运行RIP,但是主机只是接收信息,而并不发送。路由信息可以从指定网关请求,但通常是每隔30秒广播一次以保持正确性。RIP使用UDP通过端口520在主机和网关间通信。网关间传送的信息用于建立路由表,由RIP选定的路由总是具有距离目的跳数最少的。RIP版本1在简单、较小的网络中工作得不错,但是在较大的网络中,就出现一些问题,有些问题在RIP版本2中已纠正,但有些是由于其设计产生的限制。在下面的讨论中,适用于两种版本时简单称为RIP,RIP v1和RIP v2则指特定的版本。

  RIP并没有任何链接质量的概念,所有的链路都被认为是相同的,低速的串行链路被认为与高速的光纤链路是同样的。RIP以最小的跳数来选择路由,因此当在下面两个路由中选择时:

    100Mbps的光纤链路,路由器,然后是10Mbps的以太网

    9600bps的串行链路

  RIP将选择后者。RIP也没有链路流量等级的概念。例如对于两条以太网链路,其中一个很繁忙,另一个根本没有数据流,RIP可能会选择繁忙的那条链路。

  RIP中的最大hop数是15,大于15则认为不可到达。因此在很大的自制系统中,hop数很可能超过15,使用RIP是很不现实的。RIP v1不支持子网,交换的信息中不含子网掩码,对给定路由确定子网掩码的方法各不相同,RIP v2则弥补了此缺点。RIP每隔30秒才进行信息更新,因此在大网中断链信息可能要花些时间才能传播开来,路由信息的稳定时间可能更长,并且在这段时间内可能产生路由环路。对此有一些解决办法,但这里不进行讨论。

  可以看出,RIP是一个简单的路由协议,有一些限制,尤其在版本1中。不过,它常常是某些操作系统的唯一选择。

2005年08月07日

停止更新

交换机:

switch#show mac-address-table   //显示交换机中的mac地址表

switch(config)#mac-address-table permanent hhhh.hhhh.hhhh ethernet0/1  //添加永久地址表

switch(config)#mac-address-table restricted static hhhh.hhhh.hhhh e0/1 e0/2  //添加受限地址表——只允许来自e0/2的接口,且目的地址是hhhh.hhhh.hhhh的数据帧,才能发送到e0/1.非e0/2的其他接口来的任何数据帧,不被允许发送到e0/1.

swith(config-if)#port secure max-mac-count 1 //设置接口的最大学习的mac地址数,设置范围1-132,一旦学习到一个mac地址,由动态转化为静态地址表,此时一旦有第二台试图从此接口发送数据,将根据管理员设定自动关闭端口或者其他。此命令只在19系列有效。在29,35系列上,用命令:port security max-mac-count 1-132

switch#show mac-address-table security //显示有每个端口的port secure设置情况,不过,我的测试中,只有1900系列交换机是这个命令,而29,35系列的交换机只有show port securityshow mac-address-table secure命令

switch(config)#address-violation {suspend|disable|ignore} //设置违反port secure设置后,系统如何处理。这个命令在29,35系列交换机上都没有。在29,35系列上,用命令:port security action {shutdown|trap}

swith#copy nvram tftp://host/dst_file  //区别和路由器的备份格式copy nvram tftp

switch#delete nvram //区别路由器清除命令erase nvram

VLAN配置

SWITCH1900(config)#vtp transparent

SWITCH1900(config)#vtp domain switchlab

SWITCH2950#vlan database

SWITCH2950(vlan)#vtp { server | client | transparent }

SWITCH2950(vlan)#vtp domain domain-name

SWITCH2950(vlan)#vtp password password

SWITCH2950(vlan)#vtp pruning

SWITCH2950(vlan)#snmp-server enable traps vtp

SWITCH2950(vlan)#exit

SWITCH2950(config-if)#switchport mode trunk //在29上启用接口的trunk功能

SWITCH1900(config-if)#trunk on //在19上启用trunk

switch(config)#vlan vlan-number (name vlan-name ) //vlan号一旦创建,不可变更,但是vlan名可以修改

SWITCH1900(config-if)#vlan-membership {static vlan-number | dynamic } //19系列端口接入vlan

SWITCH2950(config-if)#switchport access vlan vlan-number //29系列端口接入vlan

SWITCH1900#show vtp

SWITCH2950#show vtp status

SWITCH1900#show trunk { A  | B } //19系列上显示trunk信息

SWITCH2950#show interface fa0/2 switchport //29系列上显示trunk信息

SWITCH2950(config-if)#switchport trunk encapsulation { dot1q | isl }

SWITCH2950(config-if)#switchport trunk pruning

路由器:

创建ACL

router(config)#access-list 1-99 {permit|deny|remark} {hostname|any|host}  反码//IP标准ACL,缺省反码是0.0.0.0

router(config)#access-list 100-199 {permit|deny|dynamic|remark} {各种协议} //IP扩展ACL

应用ACL

router(config-if)#ip access-group 1-199 {in | out} //缺省为输出访问控制列表设置掩码显示格式

router#terminal ip netmask-format {bit-count | decimal | hexadecimal}

DNS设置

router(config)#ip host d61 10.100.21.61  //本地数据库建立d61和10.100.21.61的映射

router(config)#ip name-server server-address

router(config)#ip domain lookup //Enable IP Domain Name System hostname translation,DNS is enabled by default.

VLAN间路由设置

router(config-if)#no ip address

router(config-if)#int fa0/0.1

router(config-subif)#ip address ip-address mask

router(config-subif)#encapsulation isl valan-number

router(config-if)#int fa0/0.2

router(config-subif)#ip address ip-address mask

router(config-subif)#encapsulation isl valan-number

RIP配置

router(config)#router rip

router(config-rouer)#network network-number //这里要求为主有类网络号,即没有经过子网划分的网络号,RIPv1仅仅支持主有类网络。

IGRP配置

router(config)#router igrp autonormous-system  //进入配置igrp协议,参数autonomous-system则是规定只有相同的这个值,才能互相发送自己的路由表信息。

router(config-rouer)#variance multiplier //配置IGRP协议中的负载均衡应满足的条件(倍数)

router(config-rouer)#traffic-share { balanced | min } //使用balanced参数才可以利用上一条命令来实现规定范围的负载均衡(按Metrics值的反比来分配流量),而用min参数,则必须使用最小Metrics值的路径来传输。

router(config-rouer)#network network-number   //这里要求为主有类网络号

router#debug ip igrp events

router#debug ip igrp translations //相比上一条命令,更加详细

EIGRP配置

router(config)#router eigrp autonormous-system  //进入配置eigrp协议,参数autonomous-system则是规定只有相同的这个值,才能互相发送路由表信息。

router(config-rouer)#variance multiplier //配置EIGRP协议中的负载均衡应满足的条件(倍数)

router(config-rouer)#traffic-share { balanced | min } //使用balanced参数才可以利用上一条命令来实现规定范围的负载均衡(按Metrics值的反比来分配流量),而用min参数,则必须使用最小Metrics值的路径来传输。

router(config-rouer)#network network-number   //尽管这里仍然要求为主有类网络号,但是由于端口上设置的子网掩码确实发送出去了,当然,在网络边界,无类网络仍然会被汇总,所以Eigrp不作处理的话,还是不支持连续网络。(因为它的路由汇总功能可以手工关闭,这样它就可以支持不连续网络了)

router#show ip eigrp neighbors

router#show ip eigrp topology

router#show ip route eigrp

OSPF配置

router(config)#router ospf process-id  //这里的process-id仅仅是用来在路由器本地标识一个ospf进程,并不要求所有的路由器一致

router(config-rouer)#network address mask area area-id   //这里的address可以为地址,也可以为网络号。mask则必须为反码。area则是指定该路由器在哪一个area。他支持不连续的网络。

router#show ip ospf interface //观察端口处于哪一个area以及端口的近邻(adjacency)信息

router#show ip ospf neighbor //显示邻居信息,neighbor指所有的可通信的设备。

router#debug ip ospf events

router#debug ip ospf packet //比上一条更详细

NAT配置

router(config)#ip nat inside source static 192.168.1.1 202.1.1.1 //inside Local ip——>inside Global ip,静态转换

router(config-if)#ip nat { inside | outside }

router#show ip nat translations

router#clear ip nat translations *  //清除所有的nat转换列表

router(config)#ip nat pool pool-name start-ip end-ip netmask mask //创建一个地址转换池

router(config)#access-list 1 permit ip wildmask //此处相当于inside local ip addr

router(config)#ip nat inside source list 1 pool pool-name (overload) //参数为使用地址复用,即使用端口对应

router(config)#ip nat inside source list 1  interface s0 overload //使用端口地址转换,此处就不再使用地址池

PPP配置

routerA(config)#username routerB password cisco //用户名设置为对方的hostname,密码必须和对方一致

routerA(config-if)#encapsulation ppp //封装PPP协议

routerA#debug ppp negotiation //观看PPP协议的协商过程

routerA(config-if)#ppp authentication chap

帧中继配置

routerA(config-if)#encapsulation frame-relay

routerA(config-if)#frame-relay map ip 10.0.0.1 dlci-number broadcast //点对多点模式下必须指出所有的dlci号的映射关系

routerA(config)#interface serial 0 { point-to-point | multi-point }  //进入物理接口

routerA(config-if)#no ip address ip mask //进入子接口配置前,应先去掉物理接口ip

routerA(config-subif)#bandwidth 512 //进入子接口配置的话,带宽应该在子接口下配置

routerA(config)#interface serial 0.1 { point-to-point | multipoint }  //进入子接口

routerA(config-subif)#frame-relay interface-dlci dlci-number //子接口模式必须手工明确指出dlci号,因为帧中继协议只能告诉物理接口是用那一个dlci号,而不能告诉逻辑接口

routerA(config-if)#frame-relay lmi-type {cisco | ansi | q933a} //缺省为cisco标准

routerA#show frame-relay traffic

routerA#clear frame-relay-inarp //清除反转arp映射表

routerA#show frame-relay lmi

routerA#show frame-relay map //显示反转arp映射表

routerA#show frame-relay pvc //显示虚电路dlci号

ISDN配置

Router(config)#isdn switch-type switch-type //在所有接口上应用

Router(config-if)#isdn switch-type switch-type //在某一个接口上应用

Router(config)#controller { T1 | E1 } slot/port  //对某个接口的控制器设定为T1或E1

T1配置

Router(config-controller)#framing esf  //传帧类型

Router(config-controller)#linecode b8zs //线路编码

Router(config-controller)#pri-group timeslots 1-24 //开通的时序范围

Router(config-controller)#interface Serial3/0:23 //对第23路信令信号设置

Router(config-if)#isdn switch-type primary-5ess

Router#show isdn active

Router#show interface bri0

Router#show isdn status

Router#debug isdn q921

Router#debug isdn 9321

DDR配置

Router(config)#dialer-list 1 protocol ip permit //设定感兴趣流量,这个命令将使任何ip都能连接网络

Router(config)#dialer-list 1 protocol ip list 101 //由访问控制列表来控制感兴趣流量

Router(config)#access-list 101 deny tcp any any eq ftp //设定访问控制列表

Router(config)#access-list 101 permit ip any any //设定访问控制列表

Router(config-if)#dialer-group 1 //应用感兴趣流量设定1

Router(config-if)#dialer map ip 10.1.1.1 name central 5555200 //设置拨号号码,使用dialer map,说明静态路由使用的是下一跳地址的ip,这个ip和拨号号码建立了映射关系

Router(config-if)#dialer string number//使用dialer string说明静态路由使用的是本地端口

Router(config-if)#dialer idle-timeout 180 //设置链路闲置多长时间后,断开连接

Router(config-if)#dialer load-threshold hold { outbound | inbound | either } //设置在超过规定负载的时候,允许第二条链路开通

Router(config)#interface dialer 1 //设置拨号接口1

Router(config-if)#ip addr 10.1.1.1 255.255.255.0

Router(config-if)#encapsulation ppp

Router(config-if)#dialer-group 1  //应用感兴趣流量,根据dialer-list的设置来设置

Router(config-if)#dialer pool 1 //调用拨号池1的资源,和在物理接口bri0上的    dialer pool-member 1的号码匹配,这样设置,拨号参数就可以选用池中的物理接口

Router#show dialer interface bri0 //可以查看物理接口和哪个拨号接口匹配,使用哪个信道等

2005年08月04日

文章作者:ldj2285

本文档与站点服务器安全有关,由本人根据实际工作经验编写而成;

  站点服务器通常指托管在IDC机房的服务器,如果你有服务器托管在IDC那里,就不得不对它们的安全予以关注。如果你是网络程序员或系统管理员,本文或许会对你有所帮助,如果你是专业安全管理员,那么看一下本文也无妨。
站点安全应该包括几部分:物理安全、网络安全、系统安全以及安全管理,下面从这几方面予以阐述。

一. 物理安全
服务器运行的物理安全环境是很重要的,很多人忽略了这点。物理环境主要是指服务器托管机房的设施状况,包括通风系统、电源系统、防雷防火系统以及机房的温度、湿度条件等。这些因素会影响到服务器的寿命和所有数据的安全。我不想在这里讨论这些因素,因为在选择IDC时你自己会作出决策。
在这里着重强调的是,有些机房提供专门的机柜存放服务器,而有些机房只提供机架。所谓机柜,就是类似于家里的橱柜那样的铁柜子,前后有门,里面有放服务器的拖架和电源、风扇等,服务器放进去后即把门锁上,只有机房的管理人员才有钥匙打开。而机架就是一个个铁架子,开放式的,服务器上架时只要把它插到拖架里去即可。这两种环境对服务器的物理安全来说有着很大差别,显而易见,放在机柜里的服务器要安全得多。
如果你的服务器放在开放式机架上,那就意味着,任何人都可以接触到这些服务器。别人如果能轻松接触到你的硬件,还有什么安全性可言?以下是几个不安全的事例:
很多Windows服务器采用终端服务进行管理,在一个机架式的机房里,你可以随便把显示器接在哪台服务器上。如果你碰巧遇到某台机器的管理员或使用者正通过终端使用这台机器,那么他的操作你可以一览无余。甚至,你可以把键盘接上去,把他kill off,然后完全控制这台机器。当然,这种事情比较少见,但不意味着不可发生。
另外,很多Unix系统的管理员在离开机房时,没有把root或其他帐号的shell从键盘退出,这样你只要把键盘和显示器接上去,就完全可以获取这个shell的权限。这可比远程攻击获取系统权限容易得太多。我有次在机房时想要一个unix shell临时使用一下,于是我把显示器在旁边机架的几台服务器上接了一下,很快就发现一个没有退出的root shell,我把键盘接上去,做完我自己的事后,帮他退出了这个shell。如果我是一个不安好心的人,我完全可以在他的服务器里不带任何痕迹的安装一个木马(RootKit)。
某天我看到一个公司的维护人员在机房调试专线时,怀疑是协议转换仪有问题,于是他毫不犹豫的把旁边一个机架上的协议转换仪拔下来,接到他自己的专线上用于调试。被破坏的服务器数据传输会中断几分钟,这对某些公司可能是致命的,而他们的服务器管理人员可能到死也查不出原因!
还有,用一张Linux光盘引导Linux系统,你可以毫无障碍的重新获取主机的root权限;你可以无意中碰动别人的电源,等等,不在这里赘述。所有这些是要说明一点,放在开放机架上的服务器是不安全的。如果你的服务器硬件可以让其他人轻易接触,那么不出事是你的幸运,出事了你也找不到原因或找不到责任人。
而放在密封式机柜里的服务器会安全很多,一般情况下,你的所有服务器放在一起(同一个机柜或者几个机柜)是明智之举,机柜里不要有其他公司的服务器。如果你的服务器只有有限的几台,那么放在机柜里也会安全很多。因为不是任何人都可以打开机柜接触到你的硬件,就算同一个机柜的其他公司的服务器的维护人员有这个机会,但风险也要小得多。而且,就算出事了,你也可以追查到责任人。
有一次我们的服务器因为电源断掉,而中断几个小时,我们根据系统日志很快判断出服务器的down机情况,在追查责任时,我首先想到是IDC机房的维护人员的责任,因为在我们那个机柜里没有其他公司的服务器,别人不会接触到那里面的电源。后来经查实,果然是该IDC的电工在弄电时不小心把我们的服务器电源断掉,他们向我们出具了道歉声明。而如果在一个开放式机架的机房里,碰到这样的情况你无从查起。
如果你的服务器只能放在开放式机架的机房,那么你可以这样做:1)将电源用胶带绑定在插槽上,这样避免别人无意中碰动你的电源;2)安装完系统后,重启服务器,在重启的过程中把键盘和鼠标拔掉,这样在系统启动后,普通的键盘和鼠标接上去以后不会起作用(USB鼠标键盘除外)3)跟机房值班人员搞好关系,不要得罪机房里其他公司的维护人员。这样做后,你的服务器至少会安全一些。

二. 网络安全
网络安全是指你机房的服务器要有合理的安全拓扑结构。安全的网络环境会让你的系统管理任务轻松很多,否则你会时刻提心吊胆。例如,如果你的NFS服务器直接面对互联网,那么你的麻烦就来了。因此,在服务器的前面,至少要有网络屏蔽设施,或称为防火墙。
从头部署新的防火墙策略是一件复杂的事情,你要综合考虑许多方面。一般来说,防火墙有两种工作模式,称为路由模式和透明模式,在路由模式下,防火墙就象一个路由器,能进行数据包的路由。不同的是,它能识别网络第四层协议(即传输层)的信息,因此它能基于TCP/UDP端口来进行过滤。在该模式下,防火墙本身要配备两个或多个网络地址,你的网络结构会被改变。在透明模式下,防火墙更象一个网桥,它不干涉网络结构,从拓扑中看来,它似乎是不存在的(因此称为透明)。但是,透明模式的防火墙同样具备数据包过滤的功能。透明模式的防火墙不具备IP地址。这两种模式的防火墙都提供网络访问控制功能,例如你可以在防火墙上设置,过滤掉来自因特网的对服务器的NFS端口的访问请求。
在网络中使用哪种工作模式的防火墙取决于你的网络环境。一般来说,如果你的服务器使用真实IP地址(该地址一般是IDC分配给你的),会选择防火墙的透明模式。因为在该模式下,你的服务器看起来象直接面对互联网一样,所有对服务器的访问请求都直接到达服务器。当然,在数据包到达服务器之前会经过防火墙的检测,不符合规则的数据包会被丢弃掉(从服务器编程的角度看,它不会觉察到数据包实际已被处理过)。
实际上为了安全起见,很多服务器都采用私有IP地址(例如172.16.0.0/16和192.168.0.0/24都属于私有IP地址),如果这些服务器不必对外提供服务,那么就最安全不过了,如果要对外提供服务,就有必要通过防火墙的NAT(网络地址转换)来满足来自因特网的访问要求。NAT是防火墙的一项功能,它实际上工作在路由模式下。大多数防火墙都会区分所谓的正向NAT和反向NAT,所谓正向NAT就是指从内网出去的数据包,在经过防火墙后,包头会被改写,源IP被改写成防火墙上绑定的IP地址(或地址池,肯定是公网真实IP),源端口也会有所改变,回来的数据包经过同样处理,这样就保证内网具有私有IP的主机能够与因特网进行通信。在反向NAT的实现中,会将服务器的公网IP绑定在出口处的防火墙上,服务器只会使用一个私有IP,防火墙会在它的公网IP和这个私有IP之间建立一个映射,当外网对这台服务器的请求到达防火墙时,防火墙会把它转发给该服务器。当然,在转发之前,会先匹配防火墙规则集,不符合规则的数据包将被丢弃。
使用反向NAT,会大大提高服务器的安全性。因为任何用户的访问都不是直接面对服务器,而是先要经过防火墙才被转交。而且,服务器使用私有IP地址,这总比使用真实地址要安全。在抗拒绝服务攻击上,这种方式的成效更显然。但是,相对于透明模式的防火墙,采用反向NAT方式的防火墙会影响网络速度。如果你的站点访问流量超大,那么就不要使用该种方式。值得一提的是,CISCO的PIX在NAT的处理上性能异常卓越。
另外一种情况是,服务器使用真实IP地址,防火墙配置成路由模式,不使用它的NAT功能。这种情况虽然可以实现,但会使你的网络结构变得很复杂,似乎也不会带来效益的提高。
大多数IDC的机房不提供防火墙服务,你需要自己购买和配置使用防火墙。你完全可以按透明模式或NAT模式来配置,具体怎么配取决于你的实际情况。有些IDC公司会提供防火墙服务,作为他们吸引客户的一个手段。一般来说,他们的防火墙服务会收费。
如果你的服务器在IDC提供的公共防火墙后面,那么就有必要仔细考虑你的内网结构了。如果IDC提供给你的防火墙使用透明模式,也即是你的服务器全部使用真实IP地址,在这种情况下,除非你的服务器数量足够多(象我们在北京有500多台),那么在你的逻辑网段里肯定还有其他公司的主机存在。这样,虽然有防火墙,你的系统管理任务也不会轻松多少,因为你要受到同一网段里其他公司主机的威胁。例如,你的服务器的IP地址段是211.139.130.0/24,你使用了其中的几个地址,那么在这个网段里还会有200多台其他公司的主机,它们与你的主机同处于一个防火墙之后,虽然防火墙可以屏蔽来自因特网的某些访问,然而,内部这些主机之间的相互访问却没有任何屏蔽措施。于是,其他公司不怀好意的人可以通过他们的主机来攻击你。或者,网络中一台主机被黑客入侵,则所有服务器都会面临严重威胁。在这样的网络中,你不要运行NFS、Sendmail、BIND这样的危险服务。
这种问题的解决方法是自己购买防火墙,并配置使用透明模式,不要使用公用防火墙的透明模式。
有的IDC公司会给你提供NAT方式的防火墙,你需要在服务器上设置私有IP地址,然后由防火墙来给服务器做地址转换。这种情况与上述情况存在同样的问题,那就是,在你的服务器所在的逻辑网段里还有其他公司的主机。例如在172.16.16.0/24这个网段可容纳254台主机,你的服务器使用了其中的几个IP,那么可能还有200多台其他公司的主机与你的服务器在同一个网段里。这样,虽然对外有防火墙保护,但无法防范来自内网的攻击。
要解决这个问题,你不必自己购买防火墙。既然私有IP是可以任意分配的,那么你可以向IDC单独要一个网段,例如172.16.19.0/24网段,把你的服务器都放在这个网段里,其中不要有其他公司的主机。这样一来,你的内网也无懈可击了。
实际上,如果你有一个大的UNIX主机的网络,那么没必要让每台主机都在防火墙上打开登陆端口。你可以特别设置一台或两台主机做为登陆入口,对其他主机的访问都必须使用入口主机作为跳板。这样做牺牲了使用的方便性,但带来更强的安全性。当然,前提是你必须管理好入口主机。有一种电子令牌卡适合这种应用,它是一张随身携带的卡,每隔一段时间(这个时间通常很小,几分钟或者几十秒)动态产生一个口令,你只有使用这个口令才能登陆主机,并且该口令很快就会失效。
不仅是UNIX主机,对Windows主机的终端管理也可以采用这种跳板的方式。但Windows的终端比UNIX的shell要麻烦得多,如果你不愿牺牲太多的方便性,那么就不要这样做。
三. 系统安全
系统安全是站点安全的主要部分。如果你的系统存在明显漏洞,那么再好的物理环境和网络环境也保不了你。一个很明显的问题是,如果你的WEB服务器存在安全漏洞,你在没有将其修补的情况下对外提供服务,那么不管你的防火墙有多坚固,也会很快被入侵。因此,系统管理员在保证系统功能稳定的同时,不得不花时间来研究系统的安全问题。
我所接触的服务器主要有Windows2000 Server、Freebsd、Linux和Solaris。第一种是微软的产品,方便好用,但是,你必须要不断的patch它。Freebsd是一种优雅的操作系统,它简洁的内核和优异的性能让人感动。Linux和Freebsd一样,是免费的操作系统,它们都广泛使用GNU(一个伟大的组织)的实用工具集,Linux容易上手,但不如Freebsd简洁。Solaris是SUN的商用操作系统,关于SUN OS的文章在网上被贴得到处都是,但遗憾的是,它看起来并不快,而且,你也要经常对它打补丁。
关于这几种操作系统的安全,每种都可以写一本书。我不会在这里对它们进行详细描述,只讲一些系统初始化安全配置。

1. Windows2000 Server的初始安全配置
Windows的服务器在运行时,都会打开一些端口,如135、139、445等。这些端口用于Windows本身的功能需要,冒失的关闭它们会影响到Windows的功能。然而,正是因为这些端口的存在,给Windows服务器带来诸多的安全风险。远程攻击者可以利用这些开放端口来广泛的收集目标主机信息,包括操作系统版本、域SID、域用户名、主机SID、主机用户名、帐号信息、网络共享信息、网络时间信息、Netbios名字、网络接口信息等,并可用来枚举帐号和口令。今年8月份和9月份,微软先后发布了两个基于135端口的RPC DCOM漏洞的安全公告,分别是MS03-026和MS03-039,该漏洞风险级别高,攻击者可以利用它来获取系统权限。而类似于这样的漏洞在微软的操作系统中经常存在。
解决这类问题的通用方法是打补丁,微软有保持用户补丁更新的良好习惯,并且它的Windows2000 SP4安装后可通过Windows Update来自动升级系统补丁。另外,在防火墙上明确屏蔽来自因特网的对135-139和445、593端口的访问也是明智之举。
Microsoft的SQL Server数据库服务也容易被攻击,今年3月份盛行的SQL蠕虫即使得多家公司损失惨重,因此,如果安装了微软的SQL Server,有必要做这些事:1)更新数据库补丁;2)更改数据库的默认服务端口(1433);3)在防火墙上屏蔽数据库服务端口;4)保证sa口令非空。
另外,在Windows服务器上安装杀毒软件是绝对必须的,并且要经常更新病毒库,定期运行杀毒软件查杀病毒。
不要运行不必要的服务,尤其是IIS,如果不需要它,就根本不要安装。IIS历来存在众多问题,有几点在配置时值得注意:1)操作系统补丁版本不得低于SP3;2)不要在默认路径运行WEB(默认是c:\inetpub\wwwroot);3)以下ISAPI应用程序扩展可被删掉:.ida .idq .idc .shtm .shtml .printer。

2. Freebsd的初始安全配置
Freebsd在设计之初就考虑了安全问题,在初次安装完成后,它基本只打开了22(SSH)和25(Sendmail)端口,然而,即使是Sendmail也应该把它关闭(因为历史上Sendmail存在诸多安全问题)。方式是编辑/etc/rc.conf文件,改动和增加如下四句:
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
这样就禁止了Sendmail的功能,除非你的服务器处于一个安全的内网(例如在防火墙之后并且网段中无其他公司主机),否则不要打开Sendmail。
禁止网络日志:在/etc/rc.conf中保证有如下行:
syslogd_flags="-ss"
这样做禁止了来自远程主机的日志记录并关闭514端口,但仍允许记录本机日志。
禁止NFS服务:在/etc/rc.conf中有如下几行:
nfs_server_enable="NO"
nfs_client_enable="NO"
portmap_enable="NO"
有些情况下很需要NFS服务,例如用户上传图片的目录通常需要共享出来供几台WEB服务器使用,就要用到NFS。同理,要打开NFS,必须保证你的服务器处于安全的内网,如果NFS服务器可以被其他人访问到,那么系统存在较大风险。
保证/etc/inetd.conf文件中所有服务都被注销,跟其他系统不同,不要由inetd运行任何服务。将如下语句加进/etc/rc.conf:
inetd_enable="NO"
所有对/etc/rc.conf文件的修改执行完后都应重启系统。
如果要运行Apache,请编辑httpd.conf文件,修改如下选项以增进安全或性能:
1) Timeout 300—>Timeout 120
2) MaxKeepAliveRequests 256
3) ServerSignature on—>ServerSignature off
4) Options Indexes FollowSymLinks 行把indexes删掉(目录的Options不要带index选项)
5) 将Apache运行的用户和组改为nobody
6) MaxClients 150——>MaxClients 1500
(如果要使用Apache,内核一定要重新编译,否则通不过Apache的压力测试,关于如何配置和管理WEB服务器请见我的另一篇文章)
如果要运行FTP服务,请安装proftpd,它比较安全。在任何服务器上,都不要打开匿名FTP。

3. Linux的初始安全配置
Linux安装完成后,默认会打开一些不必要端口,运行netstat –an |grep LISTEN命令看一下,会看到本机打开的所有端口。除了必须的网络端口如SSH、FTP和WEB,其他端口都关闭。如果你不熟悉这些端口对应什么程序,那么请参看/etc/services文件,里面有端口和服务的对应列表。
在Redhat 9.0默认安装完成后,请进入/etc/rc2.d和/etc/rc3.d,将系统启动时打开的不必要服务都在这里注销掉。这些服务通常包括sendmail、NFS、rpc等,注销的方法是将S打头的相关服务文件重命名(注意不要命名为S或K 打头的其他文件)。
例如将/etc/rc2.d/S80sendmail 改名为 X80sendmail
将/etc/rc3.d/S13portmap S14nfslock S28autofs S80sendmail 改名为 X13portmap X14nfslock X28autofs X80sendmail
RPC的安全问题历来很多,请注意一定不要打开111端口。
改完后需要重启Linux服务器。
如果你的Linux直接面对因特网,那么可以配置它的防火墙来实现访问控制。Linux2.4内核支持iptables,2.4以下支持ipchains,它们的语法差不多,都是很好的防火墙工具。例如,如果你只允许从因特网访问SSH和WWW服务,那么可将如下语句加进/etc/rc.d/rc.local文件:
/sbin/iptables -F
/sbin/iptables -A INPUT -p tcp -d 211.96.13.* –dport 80 -i eth0 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -d 211.96.13.* –dport 22 -i eth0 -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -j DROP
说明:iptables –F刷新iptables规则表,接下来两条语句允许任何人访问211.96.13.*这个地址的WWW和SSH服务,最后一条DROP语句将不符合规则的其他访问过滤掉。
这样系统在启动后即可自动运行防火墙规则。
通常在Freebsd或Linux上会运行Mysql数据库服务,不要将数据库服务端口(3306)暴露在防火墙之外。如果运行Apache,同样要做如Freebsd的修改。

4. Solaris的初始安全配置
关于Solaris的安全配置网上有一篇非常好的文章,叫做《The Solaris Security FAQ》,照着做就可以了。
1) 禁止root从网络直接登陆:修改/etc/default/login文件,确保CONSOLE=/dev/console被设置,该行只允许root从控制台登陆。将root用户加入/etc/ftpusers,保证root不可以远程使用ftp。
2) 禁止rlogin和rsh访问:删除/etc/hosts.equiv和/.rhosts文件,从/etc/inetd.conf文件里注释掉所有以r打头的服务。
3) 帐号控制:删除、锁定或注释掉不必要的系统帐号,包括sys/uucp/nuucp/listen等
4) 改变/etc目录的访问权限:该目录下文件不应该对同组用户可写,执行:chmod –R g-w /etc (不推荐)
5) 在solaris2.5 以上版本的系统中,创建/etc/notrouter文件来关闭solaris默认的路由转发。
6) 禁止automounter:删除/etc/auto_*配置文件,删除/etc/init.d/autofs
7) 禁止NFS服务:删除/etc/dfs/dfstab,重命名/etc/rc3.d/S15nfs.server,重命名/etc/rc2.d/S73nfs.client (不要再以S打头)
8) 禁止rpc服务:重命名/etc/rc2.d/S71RPC
9) 修改/etc/inetd.conf文件,注释掉大部分不必要服务,只保留telnet和ftp服务,然后重启inetd进程。
10) 给系统打补丁:包括各版本Solaris通用补丁和单个补丁集合。
11) 将如下三行加进/etc/init.d/inetinit文件:
ndd -set /dev/ip ip_forward_directed_broadcasts 0
ndd -set /dev/ip ip_forward_src_routed 0
ndd -set /dev/ip ip_forwarding 0
这样在系统启动后就关闭了IP转发和IP源路由。
四. 服务器安全管理
4.1 安全管理应做的事
安全管理是站点安全中最重要的一环,离开了管理,安全将变得不切实际。以下也许是Windows系统安全管理员每天应做的事:
1. 检查系统有无新增帐户,并了解其来源及用途;查看管理员组里有无新增帐户,该组的帐户除系统最初设置外,以后不应该增加帐户;
2. 在命令行状态下,运行netstat –an命令查看当前连接及打开的端口,查找可疑连接及可疑的端口;
3. 查看“任务管理器”,查找有无可疑的应用程序或后台进程在运行,并观察CPU及内存的使用状态;
4. 运行注册表编辑器,查找有无可疑的程序被加到windows的启动项里,并查看有无新增的可疑服务;
5. 使用 Windows事件查看器查看“系统日志”“安全日志”和“应用程序日志”,以发现有无可疑的事件或影响系统性能的事件;
6. 检查共享目录,不应有对所有用户可写的目录存在;
7. 如果运行Microsoft IIS,查看C:\WINNT\system32\LogFiles\下的WEB 服务器日志,以发现是否有试图攻击WEB的行为;
8. 不定期运行杀毒软件查杀病毒;
9. 经常浏览微软的网站,保持服务器的补丁同步更新,留意微软发布的安全公告。

以下是Unix系统安全管理员应经常做的事:
1. 以root运行last,查看用户在过去一段时间内所发生的事件;
2. 查看/etc/passwd和/etc/shadow文件,以发现是否有新增用户,并追查用户来源及用途;保证这两个文件中的系统用户(如Daemon bin sys adm lp uucp nuucp listen noaccess、mysql、sshd、nobody等)没有自己的shell;检查有无帐户被提升到root权限(UID 0);
3. 运行netstat –an |grep LISTEN查看有无可疑的打开的端口;
4. 使用ps命令查看系统进程,保证只有必要的进程在运行;
5. 检查被cron运行的程序,Solaris一般在/var/spool/cron目录里,Freebsd一般在/var/cron里,初始化的crontable除root外,其他用户不应拥有;仔细查看root的crontable;
6. 使用vmstat和top查看系统资源占用状况,对高资源占用的系统进程要做谨慎处理;
7. 查看系统日志,包括Solaris下的/var/adm/messages和Freebsd下的/var/log/messages,以发现有无可疑的事件发生;
8. 查看系统安全日志,包括用户登陆尝试、验证失败、可疑的IP地址登陆等,在solaris下是/var/log/authlog,freebsd下是/var/log/auth.log;
9. 运行chkrootkit,以检查系统是否被植入木马程序;
10. 安装了Apache的主机,不定期查看Apache的访问日志和错误日志, 以发现是否有试图攻击WEB的行为。

4.2 系统及服务的稳定性
一些重要的服务器是片刻也不能停的,一旦发生服务器down机事故,而你又没有及时发现和恢复,那么你面对的将是铺天盖地的指责。系统安全管理的任务也许不是很重,但责任却并不轻。因此,你有必要时刻了解服务器的存活状况,一旦发生down机事件,你应在第一时间知道。
有些好的IDC机房有服务器监控系统,一旦某台机器down掉,它会发出警报。然后机房的值班人员会电话通知你,这样你就能从容的处理事故。然而,并非所有的机房都有这样的措施,很多时候还得依靠自己的小心。
在机房网络中,应该有一它网管机器,这台机器最好是Unix系统,因为你可以在上面编写脚本来监控网络,并通过sendmail发送邮件给自己。这台机器可以是一台服务器,象前面讲过的登陆入口服务器,就完全可以充当网管机;也可以是一台配置很低的普通PC,能运行Linux或Freebsd就可以了。有必要在上面运行sendmail,因为它要对外发送邮件。当然,sendmail有一些安全问题,因此在运行它之前,你必须确认服务器处于安全的网络:在防火墙之后,且同一网段中没有其他公司的服务器。否则,就不要运行它。当然,你也可以配置sendmail绑定在127.0.0.1端口,不接受网络请求(在Linux默认安装的sendmail不接受网络请求,Freebsd中可以在rc.conf文件中设置使sendmail绑定在127.0.0.1端口),这样的sendmail会安全很多。
然后你可以写一个简单的脚本来监控网络主机生存状况。在Unix主机上,使用shell或perl都很容易编写脚本,但是,shell脚本用于系统管理更简单明了,除非你要进行复杂的数学计算或文本处理。如下这个shell脚本很简单,却很实用:


#!/bin/sh
# script name:nping
# use this script to confirm the hosts are alive or not
HOST01="xxx.xxx.xxx.xxx"
HOST02="xxx.xxx.xxx.xxx"
HOST03="xxx.xxx.xxx.xxx"
HOST04="xxx.xxx.xxx.xxx"
HOST05="xxx.xxx.xxx.xxx"
HOST06="xxx.xxx.xxx.xxx"
HOST07="xxx.xxx.xxx.xxx"
HOST08="xxx.xxx.xxx.xxx"
HOST09="xxx.xxx.xxx.xxx"
HOST10="xxx.xxx.xxx.xxx"

for LOOP in $HOST01 $HOST02 $HOST03 $HOST04 $HOST05 $HOST06 $HOST07 $HOST08 $HOST09 $HOST10
do
if !/sbin/ping -c 2 $LOOP >/dev/null 2>&1;then
echo "Warning:The host $LOOP seems down" >> error.log
fi
done

if [ -f error.log ];then
cat error.log |mail -s "Warning:Host Down"
yourname@yourmail.com
rm –rf error.log
fi

该脚本执行一个简单的ping操作,以判断目标主机是否存活,如果目标主机停止响应,则向管理员发送邮件报警。
你可以在任务里设定每隔一段时间执行一次该脚本,由于ping对内网的影响很小,因此这个时间可以短一些,我把它设为1小时。
然而,有的时候,你可能关心的不止是服务器是否存活,更想了解它的服务状态是否正常,这个时候,你可以使用一个工具来判断服务器的开放服务状态,这个工具就是被Unix系统管理员广泛使用的网络端口扫描工具Nmap(可以从
http://www.insecure.org/nmap/ 下载最新版本)。它的使用很简单,安装完成后直接在命令行下执行:nmap IP,就可以得到目标主机的开放TCP端口状况。当然,Nmap的功能远不止如此,它还可以执行UDP、SYN、FIN、RPC等扫描,它的半开放扫描可绕过防火墙的过滤,并可根据操作系统指纹判断目标系统类型。在这里只要利用到Nmap的TCP扫描就够了。然后,你可以编写一个脚本来定期检测服务器的开放端口状况,并将结果Email给管理员。我编写的如下:

#!/bin/sh
# script name:nscan
# use this script to check the services status on local servers
HOST01="xxx.xxx.xxx.xxx"
HOST02="xxx.xxx.xxx.xxx"
HOST03="xxx.xxx.xxx.xxx"
HOST04="xxx.xxx.xxx.xxx"
HOST05="xxx.xxx.xxx.xxx"
HOST06="xxx.xxx.xxx.xxx"
HOST07="xxx.xxx.xxx.xxx"
SQL_PORT="2433/tcp"
MSRDP_PORT="3389/tcp"
PCANYWH_PORT="5631/tcp"

for LOOP in $HOST01 $HOST02 $HOST03 $HOST04 $HOST05 $HOST06 $HOST07
do
nmap -sT $LOOP >nmap.tmp 2>&1
for PORT in $SQL_PORT $MSRDP_PORT $PCANYWH_PORT
do
if ! grep $PORT nmap.tmp >/dev/null 2>&1;then
echo “Warning:The port $PORT is seem to down on $LOOP” >>$LOOP.error
fi
done

if [ ! -f $LOOP.error ];then
echo "The services running on $LOOP are nomal!"
else
cat $LOOP.error >>nscan.err 2>&1
rm -rf $LOOP.error
fi

rm -rf nmap.tmp
done

if [ -f nscan.err ];then
cat nscan.err |mail –s “Host Services Down”
yourname@yourmail.com
rm –rf nscan.err
fi


该脚本只是判断MS SQL Server、MS终端服务和Pcanywhere服务是否正常,如果不正常,就向管理员发送邮件报警。如果你需要检查其他的服务端口,修改该脚本即可。
你也可以配置任务来定期执行该脚本,不过请注意,Nmap扫描会影响网络,因此检测的时间间距不要太小。当然,在Unix系统下,有好些方法可以判断目标系统的开放端口状况,但使用Nmap扫描看起来也不错。
4.3 日志管理
不管是Windows系统还是Unix系统,都有自己的事件日志。在Windows下使用事件查看器可以清楚的了解系统运行的各项状态,它包括应用程序日志、安全日志和系统日志。你应经常阅读这些日志,尤其是一些红色标记的错误信息。根据这些错误提示发现问题和解决问题是Windows系统管理员应做的事。
如果服务器不加入域,那么一般来说系统错误信息很少;如果在机房的服务器组成一个域,那么从日志里可能会经常看到各种错误提示,尤其是在域控制器有问题的时候。管理好一个域不是一件太容易的事,它凭空给系统管理员增加很多困难。如果你真碰到这样的问题,建议你到google上面去查找答案,一般来说,你碰到的问题别人肯定也遇见过了,因特网上有很多热心的人愿意解答困难者的问题(尤其是国外的技术站点)。
读Windows的日志不浪费你太多精神,因为它都分门别类整理得很清楚,有什么错误能一目了然的看出来。每天快速翻一下它的日志是可行的,如果你的服务器磁盘有坏道,也能从日志里体现出来,为你及早更换磁盘、避免数据灾难赢得了时间。
在Unix系统下,读日志要费劲一些,因为Unix系统通常把一些通用的日志信息写到messages文件里,导致这个文件里杂七杂八什么都有,包括应用程序信息、用户验证信息、网络连接信息、内核信息等等,在浏览它们时比较费劲。然而,这不意味着你可以不管它们。实际上,日志文件是系统侦错时的唯一依据。某天你的Unix系统崩溃了,在居丧之余,不要忘了去分析它的日志,或许可以为你找到原因。
在Unix系统下,有一个日志分析软件叫Swatch,它能很好的帮你裁减和分析日志,减轻系统管理员的负担。关于它的安装和使用我不在这里详叙,因为我自己并没有使用它。我自己编写脚本用于查看日志,使用awk语句照样能将日志文件裁减到合理的程度。这个脚本的样式我不在这里描述,因为不同的系统和网络环境所产生的条件并不一样。
在UNIX系统下,另外一个日志文件也很值得关注,它记载了用户的登陆和验证信息,该文件一般位于/var/log下,名为authlog或者auth.log,只有root才可以对它进行读写。
如果系统中安装了Apache,那么经常查看Apache的错误日志和访问日志也值得推荐。从这两个日志里,你可以发现很多有趣信息,因特网上对WEB站点的攻击从来没有终止过(从这里也可以找到大量试图攻击IIS的信息)。


4.4 用户管理
用户管理通常是指系统的用户帐户管理,不管是UNIX系统还是Windows系统,帐户安全是系统安全的关键。系统中应保持固定数量的用户帐户,作为系统管理员,应清楚每一个帐户的使用者和用途。用户新申请帐户应该有个流程,规范的管理总比不规范好。
在Unix系统上,大多数系统帐户平时是没什么用的,包括:bin daemon adm lp mail news uucp operator games gopher rpc等,如果你不把它们删除,那么也不要让它们拥有真正的shell,检查/etc/passwd文件,看看这些帐户的最后一个域(shell)是否被置/sbin/nologin或/bin/false。经常检查帐户的权限,普通帐户不应该在root组(gid=0),更不应拥有root权限(uid=0)。可以写一个脚本来替你检查,如下所示:
#!/bin/sh
# script name:checkuser
# check if there is any user who have real shell or have root id/gid

FILE=/etc/passwd
NUM=0

while read LINE
do
NUM=`expr $NUM + 1`

if [ $NUM -lt 3 ];then
continue
fi

USER=`echo $LINE |cut -d: -f1`
USER_SHELL=`echo $LINE |cut -d: -f7`
USER_UID=`echo $LINE |cut -d: -f3`
USER_GID=`echo $LINE |cut -d: -f4`

if [ "$USER_SHELL" != "/sbin/nologin" ];then
echo -e "\n$USER has one real shell:$USER_SHELL"
fi
if [ $USER_UID -eq 0 ];then
echo "$USER has the root uid(uid 0)"
fi
if [ $USER_GID -eq 0 ];then
echo "$USER has the root gid(gid 0)"
fi

done <$FILE
这个脚本运行在Freebsd下,Freebsd的/etc/passwd文件前两行是版本说明,所以在程序里把它跳过,从第三行起挨个检查用户帐号,它将每一个拥有真正shell或者拥有root用户ID或组ID的帐号在屏幕上打印出来。
同样,在Windows服务器上,如果不运行IIS服务,那么把IIS相关的帐号禁止掉,把终端服务帐号禁止掉,把guest帐号禁止掉。Windows系统的管理员组除了Administrator外不要有其他帐号,甚至应该把Administrator帐号改名。每一个帐号在帐号描述里说明它的用途。如果Windows服务器采用域的方式,那么应确保域中有尽可能少的用户。一般域中两个用户就够了,一个Administrators组的用户,一个普通用户。请记住,域的Administrators组的用户(通常是administrator)对你的每一台加入域的服务器都有生死控制权,所以你应绝对保证这个帐户的安全。
不管是系统的root密码还是普通用户密码,都应定期更改。我一般每两个月更改一次系统root密码。当然,如发现系统有被入侵迹象,应马上更改密码。对于用户密码,不管在什么系统中,都可以设置密码过期期限,用户使用一段时间后必须更改密码。有的用户安全意识并不强烈,他们使用自己容易记住的词汇作为口令,例如自己的英文名或者生日。这些都容易被猜测,你可以使用工具破解这些简单口令。Unix下的John和Windows下的LC3都是非常好的密码破解工具,在系统上运行它们几分钟就可以破解出一堆弱口令。口令过于简单的用户,一定要强制他们更改口令,否则后患无穷。如果用户拒绝更改口令,那就删除他们,我就做过这样的事。

4.5 安全巡检
最后要讲的是安全巡检,有时间就跑到机房看看去吧,看看服务器运行的环境,检查一下电源和网线,摸摸机表的温度,跟机房的值班人员聊聊天,都对你有好处。一般来说,就算服务器正常运行,每月也应去机房两次。当然,来去打车的费用,希望你的公司给你报销。