TCP三次握手四次挥手

转载申明-http://blog.csdn.net/whuslei/article/details/6667471

建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:

先来看看如何建立连接的。

【更新于2017.01.04 】该部分内容配图有误,请大家见谅,正确的配图如下,错误配图也不删了,大家可以比较下,对比理解效果更好。这么久才来更新,抱歉!!

错误配图如下:

首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。

那如何断开连接呢?简单的过程如下:

【注意】中断连接端可以是Client端,也可以是Server端。

假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说”我Client端没有数据要发给你了“,但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,”告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息“。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,”告诉Client端,好了,我这边数据发完了,准备好关闭连接了“。Client端收到FIN报文后,”就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,”就知道可以断开连接了“。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!

整个过程Client端所经历的状态如下:

而Server端所经历的过程如下:转载请注明:blog.csdn.net/whuslei

【注意】 在TIME_WAIT状态中,如果TCP client端最后一次发送的ACK丢失了,它将重新发送。TIME_WAIT状态中所需要的时间是依赖于实现方法的。典型的值为30秒、1分钟和2分钟。等待之后连接正式关闭,并且所有的资源(包括端口号)都被释放。

【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

转载-http://blog.csdn.net/renzhenhuai/article/details/12105457

一、TCP报文格式

       TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图:


图1 TCP报文格式

       上图中有几个字段需要重点介绍下:
       (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
      (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
       (3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
               (A)URG:紧急指针(urgent pointer)有效。
               (B)ACK:确认序号有效。
               (C)PSH:接收方应该尽快将这个报文交给应用层。
               (D)RST:重置连接。
               (E)SYN:发起一个新连接。
               (F)FIN:释放一个连接。

       需要注意的是:
               (A)不要将确认序号Ack与标志位中的ACK搞混了。
               (B)确认方Ack=发起方Req+1,两端配对。 

二、三次握手
       所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示:


图2 TCP三次握手

       (1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
       (2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
       (3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
       SYN攻击:
               在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了,使用如下命令可以让之现行:
               #netstat -nap | grep SYN_RECV

三、四次挥手
       三次握手耳熟能详,四次挥手估计就,所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发,整个流程如下图所示:


图3 TCP四次挥手

       由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。
       (1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
       (2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
       (3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
       (4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
       上面是一方主动关闭,另一方被动关闭的情况,实际中还会出现同时发起主动关闭的情况,具体流程如下图:


图4 同时挥手

        流程和状态在上图中已经很明了了,在此不再赘述,可以参考前面的四次挥手解析步骤。

四、附注
       关于三次握手与四次挥手通常都会有典型的面试题,在此提出供有需求的XDJM们参考:
       (1)三次握手是什么或者流程?四次握手呢?答案前面分析就是。
       (2)为什么建立连接是三次握手,而关闭连接却是四次挥手呢?
       这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。

抓包:
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.

其中,对于我们日常的分析有用的就是前面的五个字段。

它们的含义是:

SYN表示建立连接,

FIN表示关闭连接,

ACK表示响应,

PSH表示有 DATA数据传输,

RST表示连接重置。

其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,

如果只是单个的一个SYN,它表示的只是建立连接。

TCP的几次握手就是通过这样的ACK表现出来的。

但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。

RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。

一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。

PSH为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。

TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。

概念补充-TCP三次握手:

TCP(Transmission Control Protocol)传输控制协议

TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:

位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码)

第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;

第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包;

第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

完成三次握手,主机A与主机B开始传送数据。

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。  第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;  第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据.

DHCP SNOOPING功能

【交换机】配置DHCP SNOOPING的场景和功能原理是什么?

发布时间: 2013-11-16 点击量: 14625

应用场景:
DHCP Snooping:当你的网络中存在DHCP 服务器欺骗的时候就可以考虑采用这个功能,比如网络中有个别终端用的是window 2003,或者2008系统默认开启了DHCP分配IP的服务,或者是一些接入层的端口连接有TPLINK,DLINK这样的无线路由器,开启了DHCP分配IP的服务。我们推荐在用户接入层交换机上面部署该功能,越靠近PC端口控制的越准确,而每个交换机的端口推荐只连接一台PC,否则如果交换机某端口下串接一个HUB,在HUB上连接了若干PC的话,那么如果凑巧该HUB下发生DHCP欺骗,由于欺骗报文都在HUB端口间直接转发了,没有受到接入层交换机的DHCP snooping功能的控制,这样的欺骗就无法防止了。

DHCP Snooping通常配合IP Source Guard功能实现防止用户私设静态IP,防止用户伪造IP进行内网扫描攻击的安全功能,配合ARP-Check还能实现防范ARP欺骗的安全功能。

功能原理:

DHCP Snooping:意为DHCP 窥探,在一次PC动态获取IP地址的过程中,通过对Client和服务器之间的DHCP交互报文进行窥探,实现对用户的监控,同时DHCP Snooping起到一个DHCP 报文过滤的功能,通过合理的配置实现对非法服务器的过滤,防止用户端获取到非法DHCP服务器提供的地址而无法上网。

下边对DHCP Snooping 内使用到的一些术语及功能进行解释:
1) DHCP 请求报文:DHCP 客户端发往DHCP 服务器的报文。
2) DHCP 应答报文:DHCP 服务器发往DHCP 客户端的报文。
3) DHCP Snooping TRUST 口:由于DHCP 获取IP 的交互报文是使用广播的形式,从而存在着非法的DHCP 服务影响用户正常IP 的获取,更有甚者通过非法的DHCP 服务欺骗窃取用户信息的现象,为了防止非法的DHCP 服务的问题,DHCP Snooping 把端口分为两种类型,TRUST 口UNTRUST 口,设备只转发TRUST 口收到的DHCP 应答报文,而丢弃所有来自UNTRUST 口的DHCP 应答报文,这样我们把合法的DHCP Server 连接的端口设置为TRUST 口,则其他口为UNTRUST 口,就可以实现对非法DHCP Server 的屏蔽。
4) DHCP Snooping 报文过滤:在对个别用户禁用DHCP 报文的情况下,需要评估用户设备发出的任何DHCP 报文,那么我们可以在端口模式下配置DHCP 报文过滤功能,过滤掉该端口收到的所有DHCP 报文。
5) DHCP Snooping 绑定数据库:在DHCP 环境的网络里经常会出现用户随意设置静态IP 地址的问题,用户随意设置的IP 地址不但使网络难以维护,而且会导致一些合法的使用DHCP 获取IP 的用户因为冲突而无法正常使用网络,DHCP Snooping 通过窥探Client 和Server 之间交互的报文,把用户获取到的IP 信息以及用户MAC、VID、PORT、租约时间等信息组成用户记录表项,从而形成DHCP Snooping 的用户数据库,配合ARP 检测功能或ARP CHECK功能的使用,进而达到控制用户合法使用IP 地址的目的。

一、采用DHCP服务的常见问题

架设DHCP服务器可以为客户端自动分配IP地址、掩码、默认网关、DNS服务器等网络参数,简化了网络配置,提高了管理效率。但在DHCP服务的管理上存在一些问题,常见的有:

●DHCP Server的冒充
 ●DHCP Server的DOS攻击,如DHCP耗竭攻击
 ●某些用户随便指定IP地址,造成IP地址冲突
 1、DHCP Server的冒充
 由于DHCP服务器和客户端之间没有认证机制,所以如果在网络上随意添加一台DHCP服务器,它就可以为客户端分配IP地址以及其他网络参数。只要让该DHCP服务器分配错误的IP地址和其他网络参数,那就会对网络造成非常大的危害。

 2、DHCP Server的拒绝服务攻击
 
通常DHCP服务器通过检查客户端发送的DHCP请求报文中的CHADDR(也就是Client MAC address)字段来判断客户端的MAC地址。正常情况下该CHADDR字段和发送请求报文的客户端真实的MAC地址是相同的。攻击者可以利用伪造MAC的方式发送DHCP请求,但这种攻击可以使用Cisco 交换机的端口安全特性来防止。端口安全特性(Port Security)可以限制每个端口只使用唯一的MAC地址。但是如果攻击者不修改DHCP请求报文的源MAC地址,而是修改DHCP报文中的CHADDR字段来实施攻击,那端口安全就不起作用了。由于DHCP服务器认为不同的CHADDR值表示请求来自不同的客户端,所以攻击者可以通过大量发送伪造CHADDR的DHCP请求,导致DHCP服务器上的地址池被耗尽,从而无法为其他正常用户提供网络地址,这是一种DHCP耗竭攻击。DHCP耗竭攻击可以是纯粹的DOS攻击,也可以与伪造的DHCP服务器配合使用。当正常的DHCP服务器瘫痪时,攻击者就可以建立伪造的DHCP服务器来为局域网中的客户端提供地址,使它们将信息转发给准备截取的恶意计算机。甚至即使DHCP请求报文的源MAC地址和CHADDR字段都是正确的,但由于DHCP请求报文是广播报文,如果大量发送的话也会耗尽网络带宽,形成另一种拒绝服务攻击。

 3、客户端随意指定IP地址
 客户端并非一定要使用DHCP服务,它可以通过静态指定的方式来设置IP地址。如果随便指定的话,将会大大提高网络IP地址冲突的可能性。

二、DHCP Snooping技术介绍

DHCP监听(DHCP Snooping)是一种DHCP安全特性。Cisco交换机支持在每个VLAN基础上启用DHCP监听特性。通过这种特性,交换机能够拦截第二层VLAN域内的所有DHCP报文。

DHCP监听将交换机端口划分为两类:

 ●非信任端口:通常为连接终端设备的端口,如PC,网络打印机等
 ●信任端口:连接合法DHCP服务器的端口或者连接汇聚交换机的上行端口

通过开启DHCP监听特性,交换机限制用户端口(非信任端口)只能够发送DHCP请求,丢弃来自用户端口的所有其它DHCP报文,例如DHCP Offer报文等。而且,并非所有来自用户端口的DHCP请求都被允许通过,交换机还会比较DHCP 请求报文的(报文头里的)源MAC地址和(报文内容里的)DHCP客户机的硬件地址(即CHADDR字段),只有这两者相同的请求报文才会被转发,否则将被丢弃。这样就防止了DHCP耗竭攻击。

信任端口可以接收所有的DHCP报文。通过只将交换机连接到合法DHCP服务器的端口设置为信任端口,其他端口设置为非信任端口,就可以防止用户伪造DHCP服务器来攻击网络。DHCP监听特性还可以对端口的DHCP报文进行限速。通过在每个非信任端口下进行限速,将可以阻止合法DHCP请求报文的广播攻击。

DHCP监听还有一个非常重要的作用就是建立一张DHCP监听绑定表(DHCP Snooping Binding)。一旦一个连接在非信任端口的客户端获得一个合法的DHCP Offer,交换机就会自动在DHCP监听绑定表里添加一个绑定条目,内容包括了该非信任端口的客户端IP地址、MAC地址、端口号、VLAN编号、租期等信息。如:

Switch#show ip dhcp snooping binding
MacAddress

IpAddress

Lease(sec) Type

VLAN

Interface
—————— ————— ———- ————- ———–
00:0F:1F:C5:10:08 192.168.10.131 682463 dhcp-snooping 10 FastEthernet0/1

这张DHCP监听绑定表为进一步部署IP源防护(IPSG)和动态ARP检测(DAI)提供了依据。说明:

 I. 非信任端口只允许客户端的DHCP请求报文通过,这里只是相对于DHCP报文来说的。其他非DHCP报文还是可以正常转发的。这就表示客户端可以以静态指定IP地址的方式通过非信任端口接入网络。由于静态客户端不会发送DHCP报文,所以DHCP监听绑定表里也不会有该静态客户端的记录。

信任端口的客户端信息不会被记录到DHCP监听绑定表里。如果有一客户端连接到了一个信任端口,即使它是通过正常的DHCP方式获得IP地址,DHCP监听绑定表里也不有该客户端的记录。如果要求客户端只能以动态获得IP的方式接入网络,则必须借助于IPSG和DAI技术。

 II.交换机为了获得高速转发,通常只检查报文的二层帧头,获得目标MAC地址后直接转发,不会去检查报文的内容。而DHCP监听本质上就是开启交换机对DHCP报文的内容部分的检查,DHCP报文不再只是被检查帧头了。
 III. DHCP监听绑定表不仅用于防御DHCP攻击,还为后续的IPSG和DAI技术提供动态数据库支持。

 IV. DHCP监听绑定表里的Lease列就是每个客户端对应的DHCP租约时间。当客户端离开网络后,该条目并不会立即消失。当客户端再次接入网络,重新发起DHCP请求以后,相应的条目内容就会被更新。如上面的00F.1FC5.1008这个客户端原本插在Fa0/1端口,现在插在Fa0/3端口,相应的记录在它再次发送DHCP请求并获得地址后会更新为:

Switch#show ip dhcp snooping binding
or
Switch#show ip source binding
MacAddress  IpAddress Lease(sec)   Type   VLAN    Interface
——————    —————   ———-  ———–
00:0F:1F:C5:10:08 192.168.10.131 691023 dhcp-snooping 10
FastEthernet0/3

 V.当交换机收到一个DHCPDECLINE或DHCPRELEASE广播报文,并且报文头的源MAC地址存在于DHCP监听绑定表的一个条目中。但是报文的实际接收端口与绑定表条目中的端口字段不一致时,该报文将被丢弃。

  ●DHCPRELEASE报文:此报文是客户端主动释放IP 地址(如Windows 客户端使用ipconfig/release),当DHCP服务器收到此报文后就可以收回IP地址,分配给其他的客户端了
  ●DHCPDECLINE报文:当客户端发现DHCP服务器分配给它的IP地址无法使用(如IP地址发生冲突)时,将发出此报文让DHCP服务器禁止使用这次分配的IP地址。

  VI. DHCP监听绑定表中的条目可以手工添加。

  VII. DHCP监听绑定表在设备重启后会丢失,需要重新绑定,但可以通过设置将绑定表保存在flash或者tftp/ftp服务器上,待设备重启后直接读取,而不需要客户端再次进行绑定

  VIII. 当前主流的Cisco交换机基本都支持DHCP Snooping功能。

三、DHCP Option 82

当DHCP服务器和客户端不在同一个子网内时,客户端要想从DHCP服务器上分配到IP地址,就必须由DHCP中继代理(DHCP Relay Agent)来转发DHCP请求包。DHCP中继代理将客户端的DHCP报文转发到DHCP服务器之前,可以插入一些选项信息,以便DHCP服务器能更精确的得知客户端的信息,从而能更灵活的按相应的策略分配IP地址和其他参数。这个选项被称为:DHCP relay agent information option(中继代理信息选项),选项号为82,故又称为option 82,相关标准文档为RFC3046。

Option 82是对DHCP选项的扩展应用。选项82只是一种应用扩展,是否携带选项82并不会影响DHCP原有的应用。另外还要看DHCP服务器是否支持选项82。不支持选项82的DHCP服务器接收到插入了选项82的报文,或者支持选项82的DHCP服务器接收到了没有插入选项82的报文,这两种情况都不会对原有的基本的DHCP服务造成影响。要想支持选项82带来的扩展应用,则DHCP服务器本身必须支持选项82以及收到的DHCP报文必须被插入选项82信息。

从非信任端口收到DHCP请求报文,不管DHCP服务器和客户端是否处于同一子网,开启了DHCP监听功能的Cisco交换机都可以选择是否对其插入选项82信息。默认情况下,交换机将对从非信任端口接收到的DHCP请求报文插入选项82信息

当一台开启DHCP监听的汇聚交换机和一台插入了选项82信息的边界交换机(接入交换机)相连时:

 ●如果边界交换机是连接到汇聚交换机的信任端口,那么汇聚交换机会接收从信任端口收到的插入选项82的DHCP报文信息,但是汇聚交换机不会为这些信息建立DHCP监听绑定表条目。
 ●如果边界交换机是连接到汇聚交换机的非信任端口,那么汇聚交换机会丢弃从该非信任端口收到的插入了选项82的DHCP报文信息。但在IOS 12.2(25)SE版本之后,汇聚交换机可以通过在全局模式下配置一条ip dhcp snooping information allow-untrusted命令。这样汇聚交换机就会接收从边界交换机发来的插入选项82的DHCP报文信息,并且也为这些信息建立DHCP监听绑定表条目。
  在配置汇聚交换机下联口时,将根据从边界交换机发送过来的数据能否被信任而设置为信任或者非信任端口。

四、DHCP Snooping的配置

Switch(config)#ip dhcp snooping   

//打开DHCP Snooping功能
Switch(config)#ip dhcp snooping vlan 10   //设置DHCP Snooping功能将作用于哪些VLAN
Switch(config)#ip dhcp snooping verify
mac-address//检测非信任端口收到的DHCP请求报文的源MAC和CHADDR字段是否相同,以防止DHCP耗竭攻击,该功能默认即为开启
Switch(config-if)#ip dhcp snooping trust   //配置接口为DHCP监听特性的信任接口,所有接口默认为非信任接口
Switch(config-if)#ip dhcp snooping limit rate 15  //限制非信任端口的DHCP报文速率为每秒15个包(默认即为每秒15个包)如果不配该语句,则show ip dhcp snooping的结果里将不列出没有该语句的端口,可选速率范围为1-2048

建议:在配置了端口的DHCP报文限速之后,最好配置以下两条命令
Switch(config)#errdisable recovery cause dhcp-rate-limit//使由于DHCP报文限速原因而被禁用的端口能自动从err-disable状态恢复
Switch(config)#errdisable recovery interval 30
//设置恢复时间;端口被置为err-disable状态后,经过30秒时间才能恢复

Switch(config)#ip dhcp snooping information option //设置交换机是否为非信任端口收到的DHCP报文插入Option 82,默认即为开启状态
Switch(config)#ip dhcp snooping information option allow-untrusted //设置汇聚交换机将接收从非信任端口收到的接入交换机发来的带有选项82的DHCP报文
Switch#ip dhcp snooping binding 000f.1fc5.1008 vlan 10 192.168.10.131 interface fa0/2 expiry 692000  //特权模式命令;手工添加一条DHCP监听绑定条目;expiry为时间值,即为监听绑定表中的lease(租期)

Switch(config)#ip dhcp snooping database flash:dhcp_snooping.db//将DHCP监听绑定表保存在flash中,文件名为dhcp_snooping.db
Switch(config)#ip dhcp snooping database tftp://192.168.2.5/Switch/dhcp_snooping.db //将DHCP监听绑定表保存到tftp服务器;192.168.2.5为tftp服务器地址,必须事先确定可达。URL中的Switch是tftp服务器下一个文件夹;保存后的文件名为dhcp_snooping.db,当更改保存位置后会立即执行“写”操作。
Switch(config)#ip dhcp snooping database write-delay 30//指DHCP监听绑定表发生更新后,等待30秒,再写入文件,默认为300秒;可选范围为15-86400秒
Switch(config)#ip dhcp snooping database timeout 60//指DHCP监听绑定表尝试写入操作失败后,重新尝试写入操作,直到60秒后停止尝试。默认为300秒;可选范围为0-86400秒
说明:实际上当DHCP监听绑定表发生改变时会先等待write-delay的时间,然后执行写入操作,如果写入操作失败(比如tftp服务器不可达),接着就等待timeout的时间,在此时间段内不断重试。在timeout时间过后,停止写入尝试。但由于监听绑定表已经发生了改变,因此重新开始等待write-delay时间执行写入操作……不断循环,直到写入操作成功。
Switch#renew ip dhcp snooping database flash:dhcp_snooping.db//特权级命令;立即从保存好的数据库文件中读取DHCP监听绑定表。

五、显示DHCP Snooping的状态

Switch#show ip dhcp snooping   
//显示当前DHCP监听的各选项和各端口的配置情况
Switch#show ip dhcp snooping binding
//显示当前的DHCP监听绑定表
Switch#show ip dhcp snooping database //显示DHCP监听绑定数据库的相关信息
Switch#show ip dhcp snooping statistics//显示DHCP监听的工作统计
Switch#clear ip dhcp snooping binding //清除DHCP监听绑定表;注意:本命令无法对单一条目进行清除,只能清除所有条目
Switch#clear ip dhcp snooping database statistics//清空DHCP监听绑定数据库的计数器
Switch#clear ip dhcp snooping statistics  //清空DHCP监听的工作统计计数器

六、DHCP Snooping的实例

1、单交换机(DHCP服务器和DHCP客户端位于同一VLAN)
 
环境:Windows2003 DHCP服务器和客户端都位于vlan 10;服务器接在fa0/1,客户端接在fa0/2
2960交换机相关配置:

ip dhcp snooping vlan 10
ip dhcp snooping
!
interface FastEthernet0/1
description : Connect to Win2003 DHCP Server
switchport access vlan 10
switchport mode access
spanning-tree portfast
ip dhcp snooping trust
!
interface FastEthernet0/2
description : Connect to DHCP Client
switchport access vlan 10
switchport mode access
spanning-tree portfast
ip dhcp snooping limit rate 15

说明:

 ●本例中交换机对于客户端的DHCP 请求报文将插入选项82 信息;也可以通过配置no ip dhcp snooping information option命令选择不插入选项82信息。两种情况都可以。
 ●客户端端口推荐配置spanning-tree portfast命令,使得该端口不参与生成数计算,节省端口启动时间,防止可能因为端口启动时间过长导致客户端得不到IP地址。
 开启DHCP监听特性的vlan并不需要该vlan的三层接口被创建。

2、单交换机(DHCP服务器和DHCP客户端位于同一VLAN) 

  环境:Cisco iOS DHCP服务器(2821路由器)和PC客户端都位于vlan 10;路由器接在交换机的fa0/1,客户端接在fa0/2
  2960交换机相关配置:

ip dhcp snooping vlan 10
ip dhcp snooping
!
interface FastEthernet0/1
description : Connect to IOS DHCP Server C2821_Gi0/0
switchport access vlan 10
switchport mode access
spanning-tree portfast
ip dhcp snooping trust
!
interface FastEthernet0/2
description : Connect to DHCP Client
switchport access vlan 10
switchport mode access
spanning-tree portfast
ip dhcp snooping limit rate 15

  2821路由器相关配置:

ip dhcp excluded-address 192.168.10.1 192.168.10.2
!
ip dhcp pool test
network 192.168.10.0 255.255.255.0
default-router 192.168.10.1
lease 8
!
interface GigabitEthernet0/0
description : Connect to C2960_Fa0/1
ip dhcp relay information trusted
ip address 192.168.10.2 255.255.255.0

说明:
 I、需要注意的是路由器连接到交换机的端口需要配置ip dhcp relay information trusted,否则客户端将无法得到IP地址。

这是因为交换机配置了(默认情况)ip dhcp snooping information option,此时交换机会在客户端发出的DHCP请求报文中插入选项82信息。另一方面由于DHCP服务器(这里指Cisco ios DHCP服务器)与客户端处于同一个VLAN中,所以请求实际上并没有经过DHCP中继代理。

对于Cisco IOS DHCP服务器来说,如果它收到的DHCP请求被插入了选项82信息,那么它会认为这是一个从DHCP中继代理过来的请求报文,但是它检查了该报文的giaddr字段却发现是0.0.0.0,而不是一个有效的IP地址(DHCP请求报文中的giaddr字段是该报文经过的第一个DHCP中继代理的IP地址,具体请参考DHCP报文格式),因此该报文被认为“非法”,所以将被丢弃。可以参考路由器上的DHCP的debug过程。
Cisco IOS里有一个命令,专门用来处理这类DHCP请求报文:ip dhcp relay information trusted(接口命令)或者ip dhcp relay information trust-all(全局命令,对所有路由器接口都有效);这两条命令的作用就是允许被插入了选项82信息,但其giaddr字段为0.0.0.0的DHCP请求报文通过。
 II、如果交换机不插入选项82信息,即配置了no ip dhcp relay information trusted,那么就不会出现客户端无法得到IP地址的情况,路由器也不需要配置ip dhcp relay information trusted命令。
 III、Windows DHCP服务器应该没有检查这类DHCP请求的机制,所以上一个实例中不论交换机是否插入选项82信息,客户端总是可以得到IP地址。
3、单交换机(DHCP服务器和DHCP客户端位于不同VLAN)
环境:Cisco IOS DHCP服务器(2821路由器)的IP地址为192.168.2.2,位于vlan 2;DHCP客户端位于vlan 10;交换机为3560,路由器接在fa0/1,客户端接在fa0/2。
  3560交换机相关配置:

ip routing

ip dhcp snooping vlan 2,10
ip dhcp snooping
!
interface FastEthernet0/1
description : Connect to IOS DHCP Server C2821_Gi0/0
switchport access vlan 2
switchport mode access
spanning-tree portfast
ip dhcp snooping trust
!
interface FastEthernet0/2
description : Connect to DHCP Client
switchport access vlan 10
switchport mode access
spanning-tree portfast
ip dhcp snooping limit rate 15
!
interface Vlan2
ip address 192.168.2.1 255.255.255.0
!
interface Vlan10
ip address 192.168.10.1 255.255.255.0
ip helper-address 192.168.2.2

  2821路由器相关配置:

no ip routing
!
ip dhcp excluded-address 192.168.10.1 192.168.10.2
!
ip dhcp pool test
network 192.168.10.0 255.255.255.0
default-router 192.168.10.1
lease 8
!
interface GigabitEthernet0/0
description : Connect to C3560_Fa0/1
ip address 192.168.2.2 255.255.255.0
!
ip default-gateway 192.168.2.1

说明:

本例中的路由器不需要配置ip dhcp relay information trusted命令,因为从交换机过来的DHCP请求经过了中继代理,其报文中的giaddr字段为192.168.10.1,而不是0.0.0.0,是默认正常的DHCP请求报文。

4、多交换机环境(DHCP服务器和DHCP客户端位于不同VLAN)

环境:2611路由器作为DHCP服务器,IP地址为192.168.2.2,位于vlan 2;PC位于vlan 10; 路由器接在3560的Gi0/2,PC接2960的fa0/1口,两交换机互连口都是gi0/1。

    3560交换机相关配置:

ip routing

interface GigabitEthernet0/1
description : Connect to C2960_Gi0/1
switchport trunk encapsulation dot1q
switchport mode trunk
!
interface GigabitEthernet0/2
description : Connect to IOS DHCP Server C2611_Gi0/0
switchport access vlan 2
switchport mode access
spanning-tree portfast
!
interface Vlan2
ip address 192.168.2.1 255.255.255.0
!
interface Vlan10
ip address 192.168.10.1 255.255.255.0
ip helper-address 192.168.2.2
ip dhcp relay information trusted

    2960交换机相关配置:

ip dhcp snooping vlan 10
ip dhcp snooping
interface FastEthernet0/1
description : Connect to PC
switchport access vlan 10
switchport mode access
spanning-tree portfast
ip dhcp snooping limit rate 15

interface GigabitEthernet0/1
description : Connect to C3560_Gi0/1
switchport mode trunk
ip dhcp snooping trust

    2611路由器相关配置:

no ip routing
!
ip dhcp excluded-address 192.168.10.1 192.168.10.2
!
ip dhcp pool test
network 192.168.10.0 255.255.255.0
default-router 192.168.10.1
lease 8
!
interface GigabitEthernet0/0
description : Connect to C3560_Gi0/2
ip address 192.168.2.2 255.255.255.0
!
ip default-gateway 192.168.2.1

说明:

本例中3560没有开启DHCP监听功能,2960开启了该功能。需要注意的是int vlan 10需要配置ip dhcp relay information trusted,理由如同实例2。

   5、多交换机环境(DHCP服务器和DHCP客户端位于同一VLAN) 

环境:3560交换机自身作为DHCP服务器;PC1和PC2都位于vlan 10;PC1接3560的fa0/1口,PC2接2960的fa0/1口;两交换机互连口都是gi0/1

    3560交换机相关配置:

ip dhcp excluded-address 192.168.10.1
!
ip dhcp pool test
network 192.168.10.0 255.255.255.0
default-router 192.168.10.1
lease 8
!
ip dhcp snooping vlan 10
ip dhcp snooping information option allow-untrusted
ip dhcp snooping
!
interface FastEthernet0/1
description : Connect to PC1
switchport access vlan 10
switchport mode access
spanning-tree portfast
ip dhcp snooping limit rate 15
!
interface GigabitEthernet0/1
description : Connect to C2960_Gi0/1
switchport trunk encapsulation dot1q
switchport mode trunk
ip dhcp snooping limit rate 360

    2960交换机相关配置:

ip dhcp snooping vlan 10
ip dhcp snooping
interface FastEthernet0/1
description : Connect to PC2
switchport access vlan 10
switchport mode access
spanning-tree portfast
ip dhcp snooping limit rate 15

interface GigabitEthernet0/1
description : Connect to C3560_Gi0/1
switchport mode trunk
ip dhcp snooping trust

说明:

本例中3560和2960同时开启了DHCP监听功能。从2960过来的DHCP请求报文是已经被插入了选项82信息,如果将3560的Gi0/1设置为信任端口,那么插入了82选项的DHCP请求报文是允许通过的,但不会为其建立DHCP监听绑定表。即3560上只有PC1的绑定条目,而没有PC2的绑定条目。
如果此时同时部署DAI,IPSG,由于2960不支持这两项功能,对于3560来说,从2960上过来的数据可能存在IP欺骗和ARP欺骗等攻击,是不安全的。另一方面,由于3560没有PC2的绑定条目,而DAI和IPSG必须依赖DHCP监听绑定表。因此如果需要在3560上再部署DAI或者IPSG,就不能将3560的Gi0/1设置为信任端口。

但是将3560的Gi0/1口设置为非信任端口以后,默认情况下,非信任端口将会丢弃收到的插入了82选项的DHCP请求报文。而从2960过来的DHCP请求报文又正好是被插入了选项82信息的。因此必须配置ip dhcp snooping information option allow-untrusted命令,否则3560将丢弃这些DHCP请求报文,接在2960上的PC2将得不到IP地址。只有配置了该命令以后,3560才会接收从2960发送的插入了选项82的DHCP报文,并为这些信息建立绑定条目。
 3560下联的Gi0/1口由于是非信任端口,默认限速为每秒15个DHCP请求报文,如果2960上的所有PC都同时发起DHCP请求,可能此端口会被errdisable掉。这里假设2960为24口,因此简单的设置限速为24*15=360。

2960上联的Gi0/1口必须被配置为信任端口,否则将丢弃从3560过来的DHCP应答报文,PC2将无法得到IP地址。

C3560#show ip dhcp snooping
Switch DHCP snooping is enabled
DHCP snooping is configured on following VLANs:
10
DHCP snooping is operational on following VLANs:
10
DHCP snooping is configured on the following L3 Interfaces:
Insertion of option 82 is enabled
circuit-id format: vlan-mod-port
remote-id format: MAC
Option 82 on untrusted port is allowed
Verification of hwaddr field is enabled
DHCP snooping trust/rate is configured on the following Interfaces:
Interface
Trusted
Rate limit (pps)
———————————————————————-
FastEthernet0/1
no       15
GigabitEthernet0/1      no       360

C3560#show ip dhcp snooping binding
MacAddress IpAddress Lease(sec)   Type    VLAN    Interface
——————   —————   ———-   ———-
00:0F:1F:C5:10:08 192.168.10.2 685618 dhcp-snooping 10 FastEthernet0/1
00:0B:DB:08:21:E0 192.168.10.3688023 dhcp-snooping10 GigabitEthernet0/1
C2960#show ip dhcp snooping
Switch DHCP snooping is enabled
DHCP snooping is configured on following VLANs:
10
Insertion of option 82 is enabled
circuit-id format: vlan-mod-port
remote-id format: MAC
Option 82 on untrusted port is not allowed
Verification of hwaddr field is enabled
Interface
Trusted
Rate limit (pps)
————————————————————-
FastEthernet0/1
no        15
GigabitEthernet0/1    yes      unlimited

C2960#show ip dhcp snooping binding
MacAddress   IpAddress   Lease(sec)   Type   VLAN I  nterface
——————  —————   ———-   —————–
00:0B:DB:08:21:E0 192.168.10.36 88023
dhcp-snooping 10 FastEthernet0/1

6、多交换机环境(DHCP服务器和DHCP客户端位于同一VLAN)

环境:4503交换机自身作为DHCP服务器;PC1和PC2都位于vlan 10;PC1接4503的gi2/1口,PC2接3560的fa0/1口;两交换机互连口是4503 gi1/1 — 3560 gi0/1

    4503交换机相关配置:

ip dhcp excluded-address 192.168.10.1
!
ip dhcp pool test
network 192.168.10.0 255.255.255.0
default-router 192.168.10.1
lease 8
!
ip dhcp snooping vlan 10
ip dhcp snooping
!
interface GigabitEthernet2/1
description : Connect to PC1
switchport access vlan 10
switchport mode access
spanning-tree portfast
ip dhcp snooping limit rate 15
!
interface GigabitEthernet1/1
description : Connect to C3560_Gi0/1
switchport trunk encapsulation dot1q
switchport mode trunk
ip dhcp snooping trust

    3560交换机相关配置:

 

ip dhcp snooping vlan 10
ip dhcp snooping
interface FastEthernet0/1
description : Connect to PC2
switchport access vlan 10
switchport mode access
spanning-tree portfast
ip dhcp snooping limit rate 15

interface GigabitEthernet0/1
description : Connect to C4503_Gi1/1
switchport trunk encapsulation dot1q
switchport mode trunk
ip dhcp snooping trust

说明:
本例中4503和3560同时开启了DHCP监听功能。由于4503的下联口被设置为信任端口,所以从3560过来的DHCP请求报文即使已经被插入了选项82信息,也允许通过的,但不会为其建立DHCP监听绑定表。所以4503上只有PC1的绑定条目,而没有PC2的绑定条目。

作为接入层交换机的3560支持DAI,IPSG,如果同时配置这两项功能,那么有理由相信从3560过来的数据是已经经过检验的安全数据,因此将4503的下联口设置为信任端口是可行的。另外,4503没有PC2的绑定条目,也减少了系统运行时所需的内存空间。

C4503#show ip dhcp snooping binding
MacAddress   IpAddress   Lease(sec)   Type    VLAN Interface
——————————————————————
00:0F:1F:C5:10:08 192.168.10.2  685618  dhcp-snooping  10   GigabitEthernet2/1
C3560#show ip dhcp snooping binding
MacAddress     IpAddress  Lease(sec)   Type     VLAN    Interface
——————————————————
00:0B:DB:08:21:E0 192.168.10.3   688023   dhcp-snooping  10   FastEthernet0

【STP】STP(802.1D)端口状态及拓扑变更

一、STP端口状态

1 写在前面的话:
 
由于网络设备存在固有的滞后,所以交换网络中也存在数据传播延迟。基于上述原因,拓扑变更就可能发生在交换网络中的不同时间和不同的网段。如果2层接口直接从生成树的Blocking切换到Forwading,就可能会出现暂时的数据环路或者暂时的大量数据泛洪。为了缓解这种问题,在开始转发数据帧之前,端口应当等待新的拓扑信息传播到整个交换网络中。
2 STP计时器
STP有三个非常重要的计时器:
  • Hello Timer                    根网桥周期性发送配置BPDU的时间间隔,缺省为2s
  • Forward Delay Timer     转发延迟计时器,从Listening到Learning状态,或者从Learning转换到Forwarding状态所需要的等待的时间,缺省为15s。
  • Max Age Timer              最大生存时间。在丢弃BPDU之前,网桥用来存储BPDU的时间,缺省为20s。如果一个被阻塞的接口(非指定端口)在收到一个BPDU后,20s的时间内再没有收到BPDU了,则开始进入Listening状态。
网络中的生成树拓扑依附于根网桥的计时器,根桥将BPDU中的计时器传递给所有交换机。对于802.1D的STP而言,端口从Blocking到Forwarding通常要30-50s(30s是15+15,也就是两个转发延迟时间,50s即20+15+15)。
3 STP 定义的端口状态如下:
关于为什么要定义这么多的端口状态,其实很好理解,拿Learning来说,为什么不让端口一旦被选举为指定端口后立即进入转发状态呢?设想一下,端口激活后,在它上面是没有学习到任何的MAC地址表项的,如果没有Learning状态的话,端口直接进入转发状态,就有可能引发短暂的数据泛洪。
4 STP端口状态转换过程
二、STP拓扑变更
1 STP拓扑变更概述
当网络拓扑发生变化的时候,最先意识到变化的交换机会从根端口发送TCN BPDU(BPDU报文中TYPE字段=0x80),也就是朝着根桥的方向发送TCN BPDU,这个消息会一跳一跳地传递到根交换机。上联的交换机在收到了该交换机发送上来的TCN BPDU后,除了向它自己的上一级交换机继续发送TCN BPDU外,还需回送一个TCA BPDU(FLAG字段中TCA位为1的配置BPDU)的确认信息给该交换机。当根桥接收到TCN后意识到了拓扑变化,遂向所有网桥发送TC BPDU(FLAG字段中TC位为1的配置BPDU)。
交换机们收到根桥发出来的TC BPDU后,会将自己的MAC地址表的老化时间由缺省的300s减少为15s(转发延迟计时器的时间),根桥发送的这个TC置位一直会持续35s(20+15)。
在发生以下时间时,交换机发送TCN:
  • 对于处于转发和监听状态的接口,过渡到Block状态(链路故障的情况)
  • 端口进入转发状态,并且网桥已经拥有指定端口
  • 非根桥在它的指定端口收到TCN
2 TCN BPDU
 
TCN BPDU包含3个字段,它与配置BPDU除了type字段之外的前3个字段完全相同。
3 拓扑变更过程 范例
 
  1. 1SwitchA挂掉;
  2. SwitchB最先检测到拓扑变化,于是产生TCN BPDU并从自己的根端口发送出去(因为根端口是朝着根桥的方向),B将连续发送TCN BPDU直到上游的指定交换机C发送TCN ACK进行确认;
  3. SwitchB收到这个TCN BPDU,回送一个TC ACK位置位的配置BPDU进行确认,同时向自己的根端口转发这个TCN BPDU;
  4. Root收到这个TCN BPDU,回送一个TC ACK位置位的配置BPDU给C;
  5. Root修改自己的配置BPDU,以此来通告整个交换网络关于拓扑变更的情况。 Root在配置BPDU中设置一段时间的拓扑变更(将配置BPDU中FLAG字段的TC位设置为1),这段时间等于Forward Delay Time + Max Age,默认35s。这个配置BPDU消息会泛洪到整个交换网络;
  6. 当交换机收到Root发出的这个TC置位的配置BPDU,它们使用转发延迟计时器(默认15s)来更新其MAC地址表中的条目。也就是说条目的寿命由原来的300s的默认值变成15s,这样能保证MAC地址条目更快速的刷新。交换机将持续这个过程,直到不再从Root收到TC BPDU消息为止。
我们会发现当拓扑变更的时候,就会产生TCN,然而有些情况下TCN的过渡泛洪可能会对网络才成不必要的影响,通过在接入层交换机上、连接PC终端设备的接口设置为portfast可以在一定程度上优化网络,防止由于PC的开关机导致的接入交换机端口updown而产生过多的TCN。
4 BPDU Flags
 

ACL基础

1. 基于编号的ACL无法删除特定的条目只能删除整个ACL
2. ACL只过滤通过路由器的流量,不能过滤自已产生的流量
3. ACL最后都有一条隐藏命令:deny any/deny ip any any <如果ACL都是拒绝语句,一般在后面加入Permit any/permit ip any any >

4. 标准ACL要放在靠近目的的地方,扩展ACL要放在靠近源的地方

5. ACL对流量从上到下匹配,找到匹配的条目马上执行,剩下条目不再查看;如果没有匹配则丢弃<越详细的语句放在越前面>

6. ACL可以同时用在接口的出和入方向,但在一个接口的一个方向上只能有一个访问列表

下面是应用访问控制列表需要注意的一些事情:

访问控制列表只对穿越流量起作用。
标准列表应该尽可能应用在靠近目标端。
扩展访问列表应该尽可能应用在靠近源端。
ACL条目的放置顺序很重要,如果两条语句放置的前后都不影响结果,一般将较多使用的那条放在前面,这样可以减少路由器的查找时间。
IP访问控制列表中最后隐含为拒绝所有,没有匹配任何语句的流量将被拒绝。
同一个访问控制列表可以应用在同一个路由的不同接口上;对于每个协议的每个接口的每个方向,只能提供一个访问控制列表。
没有携带条目号对ACL的编辑,比如添加操作,条目默认是被添加在ACL的最后面。

1. 什么是ACL?

访问控制列表(Access Control List,ACL)是路由器和交换机接口的指令列表,用来控制端口进出的数据包。ACL适用于所有的被路由协议,如IP、IPX、AppleTalk等。这张表中包含了匹配关系、条件和查询语句,表只是一个框架结构,其目的是为了对某种访问进行控制。

2. ACL有什么样用处?

ACL可以限制网络流量、提高网络性能。例如,ACL可以根据数据包的协议,指定数据包的优先级。

ACL提供对通信流量的控制手段。例如,ACL可以限定或简化路由更新信息的长度,从而限制通过路由器某一网段的通信流量。

ACL是提供网络安全访问的基本手段。ACL允许主机A访问人力资源网络,而拒绝主机B访问。

ACL可以在路由器端口处决定哪种类型的通信流量被转发或被阻塞。例如,用户可以允许E-mail通信流量被路由,拒绝所有的Telnet通信流量。

例如:某部门要求只能使用 WWW 这个功能,就可以通过ACL实现;又例如,为了某部门的保密性,不允许其访问外网,也不允许外网访问它,就可以通过ACL实现。

3. ACL的3p规则

记住 3P 原则,您便记住了在路由器上应用 ACL 的一般规则。您可以为每种协议 (per protocol)、每个方向 (per direction)、每个接口 (per interface) 配置一个 ACL:

每种协议一个 ACL 要控制接口上的流量,必须为接口上启用的每种协议定义相应的 ACL。

每个方向一个 ACL 一个 ACL 只能控制接口上一个方向的流量。要控制入站流量和出站流量,必须分别定义两个 ACL。

每个接口一个 ACL 一个 ACL 只能控制一个接口(例如快速以太网 0/0)上的流量。

ACL 的编写可能相当复杂而且极具挑战性。每个接口上都可以针对多种协议和各个方向进行定义。示例中的路由器有两个接口配置了 IP、AppleTalk 和 IPX。该路由器可能需要 12 个不同的 ACL — 协议数 (3) 乘以方向数 (2),再乘以端口数 (2)。

4. ACL相关规范

(1)ACL的列表号指出了是哪种协议的ACL。各种协议有自己的ACL,而每个协议的ACL又分为标准ACL和扩展ACL。这些ACL是通过ACL列表号区别的。如果在使用一种访问ACL时用错了列表号,那么就会出错误。

(2)一个ACL的配置是每协议、每接口、每方向的。路由器的一个接口上每一种协议可以配置进方向和出方向两个ACL。也就是说,如果路由器上启用了IP和IPX两种协议栈,那么路由器的一个接口上可以配置IP、IPX两种协议,每种协议进出两个方向,共四个ACL。

(3)ACL的语句顺序决定了对数据包的控制顺序。在ACL中各描述语句的放置顺序是很重要的。当路由器决定某一数据包是被转发还是被阻塞时,会按照各项描述语句在ACL中的顺序,根据各描述语句的判断条件,对数据报进行检查,一旦找到了某一匹配条件就结束比较过程,不再检查以后的其他条件判断语句。

(4)最有限制性的语句应该放在ACL语句的首行。把最有限制性的语句放在ACL语句的首行或者语句中靠近前面的位置上,把“全部允许”或者“全部拒绝”这样的语句放在末行或接近末行,可以防止出现诸如本该拒绝(放过)的数据包被放过(拒绝)的情况。

(5)新的表项只能被添加到ACL的末尾,这意味着不可能改变已有访问控制列表的功能。如果必须改变,只有先删除已存在的ACL,然后创建一个新ACL,将新ACL应用到相应的接口上。

(6)在将ACL应用到接口之前,一定要先建立ACL。首先在全局模式下建立ACL,然后把它应用在接口的出方向或进方向上。在接口上应用一个不存在的ACL是不可能的。

(7)ACL语句不能被逐条的删除,只能一次性删除整个ACL。

(8)在ACL的最后,有一条隐含的“全部拒绝”的命令,所以在 ACL里一定至少有一条“允许”的语句。

(9)ACL只能过滤穿过路由器的数据流量,不能过滤由本路由器上发出的数据包。

(10)在路由器选择进行以前,应用在接口进入方向的ACL起作用。

(11)在路由器选择决定以后,应用在接口离开方向的ACL起作用。

5. access-list

控制访问列表有两种:标准的控制访问列表和扩展的控制访问列表。
标准
检查源地址
通常允许、拒绝的是完整的协议
能够对源地址进行过滤,是一种简单,直接的数据控制手段
扩展
检查源地址和目的地址
通常允许、拒绝的是某个特定的协议
除了基于数据包源地址的过滤以外,还能够对协议,目的地址,端口号进行网络流量过滤。当然,配置也更复杂
控制访问列表的一般用法:
限制对网络的FTP访问
禁止一个子网到另一个子网的访问
允许规定主机Telnet访问路由器
如:不允许指定的主机TELNET访问
访问列表的配置指南:
访问列表的编号指明了使用何种协议的访问列表
每个端口、每个方向、每条协议只能对应于一条访问列表
访问列表的内容决定了数据的控制顺序
具有严格限制条件的语句应放在访问列表所有语句的最上面
在访问列表的最后有一条隐含声明:deny any-每一条正确的访问列表都至少应该有一条允许语句
先创建访问列表,然后应用到端口上
访问列表不能过滤由路由器自己产生的数据
标准访问列表的一般配置举例:
Router#
Router#configure terminal
Router(config)#
Router(config)#access-list 1 permit 172.16.2.0 0.0.0.255
配置的访问列表是允许来自网络172.16.2.0的流量
Router#configure terminal
Router(config)#
Router(config)#access-list 2 deny 172.16.3.0 0.0.0.255
Router(config)#access-list 2 permit any
Router(config)#int s0
Router(config-if)#ip access-group 2 out
Router(config-if)#
禁止来自网络172.16.3.0的流量!!!
扩展访问列表的一般配置举例:
access-list 101 deny tcp 172.16.4.0 0.0.0.255 172.16.3.0 0.0.0.255 eq 21
access-list 101 deny tcp 172.16.4.0 0.0.0.255 172.16.3.0 0.0.0.255 eq 20
access-list 101 permit ip any any
(implicit deny all)
(access-list 101 deny ip 0.0.0.0 255.255.255.255 0.0.0.0 255.255.255.255)
拒绝子网172.16.4.0 的数据使用路由器e0ftp到子网172.16.3.0
允许其它数据
access-list 101 deny tcp 172.16.4.0 0.0.0.255 any eq 23
access-list 101 permit ip any any
(implicit deny all)
拒绝子网 172.16.4.0 内的主机使用路由器的端口建立Telnet会话
允许其它数据
我们来比较一下标准的和扩展的异同:
标准:
基于源地址
允许和拒绝完整的
TCP/IP协议
编号范围 1-991300-1999
扩展:
基于源地址和目标地址
指定TCP/IP的特定协议
和端口号
编号范围 100-1992000-2699
我们指定特定的主机时一般用通配符掩码指明,下面我举几个例子:
例如 172.30.16.29 0.0.0.0 检查所有的地址位 可以简写为 host (host 172.30.16.29)
所有主机: 0.0.0.0 255.255.255.255 可以用 any 简写
下面举一个简单的例子:
R>en
password:
R#conf t
R(config)# access-list 101 deny tcp 192.168.2.0 0.0.0.255 any eq telnet      // 禁用从192.168.2.0来的telnet连接
R(config)# interface fastethernet 0/0
R(config-if)# ip access-group 101 out
至此,就成功配置了。最后别忘了wr保存一下哦。