近几年来,计算机网络,特别是互联网的发展非常迅速,ATM以及IP OVER DWDM技术的发展使网络传输的带宽快速增加。而网络安全和管理技术的发展却相对滞后,网络安全的呼声虽高,但真正落到实际的确少之又少。人们往往认为增加企业网络的安全机制需要增加防火墙、认证服务器等设备,但是价格不菲的安全设备,却增加了许多小型企业的生产成本,而事实上,我国广泛使用的CISCO路由器中内嵌IOS中的安全机制以足以满足一般企业互联的需求。
从传统的观点看,路由器的主要功能是将数据报文从一个网络传输到另一个网络。路由器在网络层操作,对应于OSI参考模型的第三层,通过检测报文的网络地址,路由器做出转发报文的决定和相应的动作,与报文一起存在的另一个功能是创建和维护路由表。在安全方面,路由器是保证网络安全的第一关,其保护是以访问控制列表(access-list)的形式进行的,被创建的访问列表可以用来允许或拒绝报文通过路由器。
CISCO路由器的报文过滤可以让用户根据报文的源地址、目的地址以及应用类型控制流入网络的数据流。访问列表是基于将规则和报文进行匹配来允许或拒绝报文的排序表。路由器对报文的控制是按照访问列表中语句创建的顺序进行的,在列表的结尾处,有一句隐含的"deny all",表明没有被此句前访问列表通过的报文将被此句拒绝。
用来允许或拒绝报文的标准是基于报文自身所包含的信息。通常,这些信息只限于报文头所包含的OSI参考模型的第三层的网络地址(访问列表)和第四层的端口(扩展访问列表)信息。因此,访问列表基本上不能使用第四层以上的信息过滤报文,比如,扩展访问列表能够控制ftp报文的访问,但却不能过滤特定的ftp命令如ls 或get等。
一、建立合理的访问列表,必须了解企业的应用情况
访问列表的建立是为了保护企业网络的安全,因此,建立安全合理的访问列表,首先需要对这个企业的应用进行深入细致的了解,有哪些应用、使用哪些端口,访问哪些地址等等,使得访问列表的建立,不会影响到企业正常的网络运转。
可以通过下列命令建立访问列表日志文件来确立企业网络所使用的端口号:
interface serial 0 ip access-group 101 in ip access-group 102 out access-list 101 permit tcp any any log access-list 101 permit udp any any log access-list 101 permit ip any any log access-list 102 permit tcp any any log access-list 102 permit udp any any log access-list 102 permit ip any any log logging buffered |
一段时间后,使用"show log"命令显示匹配访问列表的每个报文的细节信息。由于路由器的log buffer有限,为更彻底了解企业使用TCP/IP端口的详细情况,可以使用"logging A.B.C.E"命令将路由器所搜集的log信息传送到IP 地址为A.B.C.E的syslog server上,windows平台上的免费syslog server 软件可到http://support.3com.com/software/utilities_for_windows_32_bit.htm处下载。
二、根据具体应用,确立访问列表的内容
1. 过滤TCP(Transmission Control Protocol)协议
例如:某个企业(如图)总部在网络上为其分支机构提供的应用主要有:⑴远程登录访问(telnet: TCP port 23)⑵发送接收电子邮件(smtp:TCP port 25,pop3:TCP port 110)⑶WWW(http:TCP port 80),而总部可以任意访问他的分支机构。
498)this.style.width=498;">
那么他的路由器的访问列表定义如下:
access-list 100 permit tcp any 192.168.18.0 0.0.0.255 eq 23 access-list 100 permit tcp any 192.168.18.0 0.0.0.255 eq 25 access-list 100 permit tcp any 192.168.18.0 0.0.0.255 eq 110 access-list 100 permit tcp any 192.168.18.0 0.0.0.255 eq 80 access-list 100 permit tcp any any established …… interface serial 0 ip access-group 100 in |
由于路由器对流经Serial 0 的TCP报文均按照access-list 访问列表的内容顺序进行检测,这无疑将大大加重路由器CPU的负担,因此,建立访问列表一段时间后,可使用命令"show access-list 100"检查每项access-list 后面括号中TCP报文的matched数,根据matched数由大到小的顺序重新排列访问列表每个access-list的顺序,这样可以减少报文在访问列表中不必要的检测,减少特定报文查找访问列表的时间,降低路由器CPU的负担。
一定注意到access-list 100 的最末尾使用了关键字"established",它被CISCO路由器访问列表用来允许TCP返回的报文。它检测TCP报文中ACK或RST标志位的存在,如果报文中的ACK或RST位被设置了,则通常表示报文是一个正在进行的会话的一部分,所以,使用关键字"established"是一种判断报文是否为一个已知会话的一部分的简单方法。但是,作为网络黑客可以非常容易地写出一段程序,用来生成这两个标志,并将带有ACK或RST标志位的报文发送出去,而这些报文却并非正在进行的合法会话的一部分。在实践中我们发现TCP返回的报文随机选择的端口号范围为1024~65536(因为Well-Know port的端口范围是1~1023),所以我们可以将含有关键字"established"的访问控制语句改为:
access-list 100 permit tcp any 192.168.18.0 0.0.0.255 gt 1023 established
这就确保了进入企业内部网络的报文,其目的端口号必须大于1023。那么,黑客的攻击报文即使欺骗地使用了ACK和RST位,企图逃脱访问列表项的控制,但是它的端口号必须大于1023,这能使得欺骗性的报文不会对端口号低于1024的网络设备如FTP、DNS、HTTP等服务器造成影响,在一定程度上提高了网络的安全性。
2. 过滤UDP(User Datagram Protocol)协议
我们知道UDP协议和TCP协议的区别在于UDP是一种无连接的协议。因此,不会有SYN-ACK协商,因此,UDP报文头也不存在类似TCP协议ACK位或RST位那种可以确定某个报文是否为一个已存在报文会话的一部分的位。
假设上一例子中企业网络操作系统是基于Windows NT平台的,使用WINS服务器解析计算机名,假设WINS Server 不在企业总部而在分支机构,它的IP地址为 192.168.2.245。由于互联网上利用Windows 系统Netbios漏洞(UDP port 137~139)进行攻击的程序(如winnuke)较多,因此,必须对这部分UDP协议进行过滤,以保证企业总部的计算机系统不受攻击,同时也不能影响WINS的名字解析工作(UDP port:137,netbios-ns)。
我们根据客户机的端口号是在1023以上随机选择的这样一个规则,使用如下命令解决了这一难题:
access-list 100 permit udp 192.168.2.245 0.0.0.0 eq 137 any gt 1023
这条命令可以保证藏匿在分支机构的黑客可以欺骗性地使用源地址和源端口,并且报文类似WINS服务器的报文,但是他还是不能给企业总部的任何服务器端口发送报文,因为企业总部的服务器的端口通常小于1024。
3. 过滤ICMP(internet Control Message Protocol)协议
经常使用TCP/IP网络的人,一定会用到ping和traceroute(Windows 系统为tracert)命令,这两条命令是基于ICMP协议的。ICMP与其他协议一起为网络发布错误报告,并提供使用其他协议时所发生的相关信息。
我们知道ICMP提供了其他网络服务和应用程序的大量信息,而黑客也可以使用ICMP来获取企业网络上的信息,因此作为网络管理者是不希望将这些信息泄漏出来的。但是,如果没有ICMP,网络管理程序就不能工作,至少不能正常工作。
过滤ICMP比过滤TCP、UDP都要难,因为ICMP信息多数是为了响应其他程序而产生的。因此,要过滤ICMP信息,需要从接口的进出两个方向都进行报文过滤。
正常情况下,我们使用的ICMP报文有:
⑴echo request:为ping使用的环路测试请求; ⑵echo reply:为ping使用的环路测试回应; ⑶packettoo big:某些程序用来侦测目标地址路径上的MTU; ⑷time to live (TTL):tracerouter 测试网络报文生存周期; ⑸destination host unreachable:通知会话目标不可达。 |
上述报文都需要双向通讯。回到我们前面的例子,企业总部的网管员可能希望能ping和tracerouter分支机构的网络设备,而反之则不行。我们可以在路由器的配置中增加下列访问表项:
interface serial 0 ip access-group 100 in ip access-group 101 out access-list 100 permit icmp any 192.168.18.0 0.0.0.255 echo-reply access-list 100 permit icmp any 192.168.18.0 0.0.0.255 packet-too-big access-list 100 permit icmp any 192.168.18.0 0.0.0.255 ttl-exceeded access-list 101 permit icmp 192.168.18.0 0.0.0.255 any echo-reply access-list 101 permit icmp 192.168.18.0 0.0.0.255 any packet-too-big access-list 101 permit ip 192.168.18.0 0.0.0.255 any |
由于访问列表在最末隐含"deny all"表项,所以必须在访问列表101的最后一项要加上"access-list 101 permit ip 192.168.18.0 0.0.0.255 any",否则总部的计算机就无法访问分支机构的计算机。
4. FTP协议的过滤
之所以将FTP单独拿出来讨论,是因为在建立访问列表时我们发现FTP是一个非常特殊而且复杂的多端口TCP操作。虽然FTP使用的是TCP端口21(ftp-control),但它还使用了TCP端口20(ftp-data)。端口21用来传输FTP命令,端口20用来传输数据。令人头痛的是,客户机并不是在通过端口21建立FTP连接后简单地再建立一个到FTP服务器端口20的连接,相反是有FTP服务器从端口20建立与客户机的连接,它选择的客户机端口是大于1023的随机端口,客户机然后将端口信息通过已建立的数据通道发往FTP服务器。换句话说,FTP服务器会发起一个到客户机的返回连接。
回到前面的例子,如果位于企业总部的客户机希望访问分支机构的FTP服务器,那么FTP服务器将会发出一个新的连接至FTP的客户机,虽然报文的目的端口号大于1023,但是它的ACK或RST位不会被设置,那么将会受到"access-list 100 permit tcp any 192.168.18.0 0.0.0.255 gt 1023 established"的阻拦,因此,为保证FTP的正常工作,我们还需在访问列表中增加一项:
access-list 100 permit tcp any eq 20 192.168.18.0 0.0.0.255 gt 1023 |
这样我们就可以保证企业总部的客户机能够顺利访问分支机构的FTP服务器了。
三、利用静态ARP表保障路由器的安全运行
这一点和前面所谈的访问列表关系不大,但是,由于目前许多企业大量使用WINDOWS 平台下的PC,而WINDOWS系统可以任由用户自行定义IP地址,而许多用户在不了解网络的情况下,错误地将自己使用的PC的IP地址改为路由器以太网口的IP地址,这样势必造成网络传输的异常。为防止这类情况出现时,严重影响企业网络的正常运转,可以采取在路由器内建立静态ARP的办法,保证除IP地址出现问题的PC外,其他PC的正常工作。我们可以在CISCO路由器上使用如下命令:
arp 192.168.18.200 aa00.0400.6318 arpa
其中aa00.0400.6318为路由器以太网口的MAC地址。