网络工程师交换试验手册附录4:网络路由器安全配置手册
安全威胁类型:
网络命令、PING扫描、端口扫描侦察 
非授权访问
资源过载型拒绝服务攻击(表一)拒绝服务(DOS
带外数据型拒绝服务攻击(表二)
其他拒绝服务攻击(分布式拒绝服务攻击DDOS、、缓冲区溢出、恶意appletCPU独占)
数据操纵  IP欺骗(IP      Spooling
会话重放和劫持(Hijacking
重路由(Rerouting
否认(Repudianton
(表一)
类型 描述 防范措施
Ping flood 向一台主机发送大量ICMP回声请求包 将边界路由器设置为拒绝响应ICMP回声请求

半开(half-opensyn攻击 向端口发起大量不完整TCP会话连接请求,导致宕机 使用TCP拦截,lock-and-key,IDC检测
数据包风暴 发送大量的UDP 使用cisco PIX上的syn flooding 保护功能
(表二)
类型 描述 防范措施
过大的数据包(死亡ping 修改ip包头中的长度大于实际包长,导致接收系统崩溃 过滤ICMP数据包
重叠的数据包(winnuke.c 对已建立的连接发送带外数据,导致目标重起或停止(典型的对NETBIOS,端口137 如果不需要关闭NETBIOS
分片(teardrop.c 利用一些TCP/IPIP分片组装代码实施中的漏洞,导致内存缓冲区溢出 在边界路由器上扔掉来自外部的被分片了的IP
IP源地址欺骗(land.c 导致计算机产生对自身的TCP连接,陷入死循环 在路由器或主机上过滤掉虚假源地址IP
畸形包头(UDP 制造一些包头中长度不正确的UDP包,导致一些主机出现内核混乱
根据CERT建议列表在主机上安装操作系统补丁
保护管理接口的安全
设置控制台(Console)口令:
router(config)#line  console   0
router(config-line)#login
router(config-line)#password  cisco_psw1
设置vtyTelnet)口令:
router(config)#line  vty  0  4
router(config-line)#login
router(config-line)#password  cisco_psw2
设置特权模式一般口令:
router(config)#enable  password  cisco_psw3
设置特权模式秘密口令:
router(config)#enable  secret cisco_psw4
”service   password-encryption”命令:将口令以一种加密的方式存储在路由器的配置文件中,
以致在“Show  config”中不可见。
路由器限定具体的某台主机拥有”telnet”访问的权限:
router(config)# access-list 21 permit 10.1.1.4
router(config)#line vty 0 4
router(config-line)#access-class 21 in
管理员只能在10.1.1.4上用Telnet访问路由器
CISCO访问列表类型:
标准访问列表:只允许过滤源地址,功能十分有限
access-list [list-number] [permit|deny] [source address] [wildcard-mask] [log]
有三个关键字hostanylog适用此列表,hostany分别适用单个主机和所有主机
access-list 1 permit 192.168.11.0 0.0.0.255 log
access-list 1 deny host 192.168.0.5
access-list 1  permit any
扩展访问列表:允许过滤源地址、目的地址、协议、端口、上层应用数据
access-list [list-number] [permit|deny] [protocol] [protocol keyword] [sourece address] [sour
ce-wildcard] [source port] [destination address] [destination-wildcard] [destination port] [log] [options]
access-list 101 pemit tcp any host 198.78.46.8  eq smtp
access-list 101 pemit ip 196.2.22.0  0.0.0.255 host 198.78.46.8
标准或扩展列表定义好以后,必须用“ip access-group [list-number] [in|out]”应用到端口上
标准的命名IP访问列表:
ip access-list  standard  name
ip access-list standard  test-name
permit 196.2.20.0  0.0.0.255
permit 196.2.12.0  0.0.0.255
ip access-group test-name out
定义和应用的格式与标准列表不同,其他用法和标准列表相同
扩展的命名IP访问列表:
ip access-list  extended  name
ip access-list extended  sever-security
permit tcp any host 202.32..5.69  eq 21
ip access-group sever-security out
定义和应用的格式与扩展列表不同,其他用法和扩展列表相同
动态访问表(lock-and-key):
例一:两个以太网接口E0198.78.46.0E1205.131.175.0;服务器198.78.46.12;希望任何用户都能访问198.78.46.12服务器,并允许205.131.175.0的网络能HTTPFTP访问 INTERNET
username test password cisco
!
interface serial0
ip address 175.10.1.1 255.255.255.0
ip access-group 100 in
!
access-list 100 permit tcp any host 175.10.1.1 eq telnet
access-list 100 permit udp any eq 53 205.131.175.0 0.0.0.255 gt 1023
access-list 100 permit tcp any eq www 205.131.175.0 0.0.0.255 gt 1023 established
access-list 100 permit tcp any eq 21 205.131.175.0 0.0.0.255 gy 1023 established
access-list 100 dynamic test timeout 180 permit ip any host 198.78.46.12 log
!
logging buffered 64000
!
line vty 0 2
login local
autocommand access-enable host timeout 10
line vty 3 4
login local
rotary 1
通常的访问列表,如果想开启一个访问列表让授权用户在不信任端访问内部资源的话,那么这个访问通道将会永久有效直到删除,以致带来巨大的安全漏洞;动态访问列表解决这个问题,它提供了一个用户名和密码的认证方式,避免了不信任端的用户非法侵入。
必需步骤:
1、创建userpassword
2、创建Telnet连接,如果不允许此连接就不能在访问表中创建动态的访问表项。
3、配置动态访问列表项和其它访问列表项
4、必须在line vty下配置“Autocommand”,一般在“line vty 0 2”下。
5、必须在line vty 下配置“rotary 1”
6、将动态和一般访问列表应用到接口:ip access-group  list-number in|out
基于时间的访问列表:
interface ethernet0
ip access-group 101 in
Time-range allow-http
Absolute start 7:00 1 June 2000 end 17:00 31 December 2000
Periodic weekends 7:00 to 17:00
ip access-list 101 permit tcp any any eq 80  allow-http
!
必需步骤:
1、定义时间范围:(具体参数见表三)
time-range time-range-nameabsolute  [start time date] [end time date]
periodic days-of-the -week hh:mm to [days-of-the-week]hh:mm
2、定义访问列表并应用时间范围名称,以及将列表应用到接口
(表三)
Time-range-name 用来标识时间范围进行应用的名称
Time 以小时和分钟方式(hh:mm)输入的时间
Date 以日// 方式输入的日期
Days-of-the-week 产生作用的某天或某周,参数可以是单一的某天(如MondayTuesday),或daily(从周一到周五)、weekdays(从周一到周五)、weekend(周六和周日)
absolute是用于定义全面的时间范围,在一个“time-range”中,只能有一个absolute,但可以有多个Periodic定义具体的时间范围
自反访问列表:
自反访问列表在路由器的一边创建IP流量的动态开启,该过程是基于来自路由器另一边的会话进行的。它必须是基于扩展的IP命名访问列表。作用类似于一般访问列表中的“established”参数,它可创建一个动态的临时的相反方向的访问列表
自反访问列表创建语句:
1.使用一条permit语句创建一个扩展ip命名访问列表,并在每个permit语句中使用reflect关键字,用以表明访问表中使用一个自反向开启表项。格式:permit protocol source destination reflect name [timeout seconds]
2.使用evaluate语句将终止包含一条或多条自反向表项的扩展ip命名访问列表。格式:evaluate name
3.使用ip reflexive-list timeout 命令改变临时自反访问表表项的全局超时缺省值。格式:ip reflexive-list timeout seconds
解决方案一:
interface serial 0
ip access-group outfilter out
ip access-group infilter in
!

ip access-list extended outfilter
permit tcp any any eq 80 reflect my-packets timeout 240
permit tcp any any eq 23 reflect my-packets timeout 60
permit udp any any eq 53 reflect my-packets timeout 180
ip access-list extended infilter
evaluate my-packets
解决方案二:
interface serial 0
ip access-group infilter0 in
ip access-group outfilter0 out
!
ip reflexive-list timeout 180
react router拦截!
ip access-list extended infilter0
evaluate my-packets0
!
ip access-list extended outfilter0
permit tcp any any eq 23 reflect my-packets0
permit udp any any eq 53 reflect my-packets0
permit tcp any any eq 80 reflect my-packets0

interface serial 1
ip access-group infilter1 in
ip access-group outfilter1 out
!
ip access-list extended infilter1
permit icmp any host 205.131.175.12 echo request
permit tcp any host 205.131.175.12 eq 80
evaluate my-packets1
!

ip access-list extended outfilter1
permit tcp any any eq 23 reflet my-packets1
permit udp any any eq 53 reflect my-packets1
permit tcp any any eq 80 reflect my-packets1
一般在一个向外的 扩展ip命名访问列表中定义合适的方向语句。这样就可以使临时开启表项出现在向内的方向上
基于上下文的访问控制:
用过滤器控制数据流
抑制路由使它不在路由更新中被广播出去
router(config)# access-list 45 deny  10.1.2.0   0.0.0.255
router(config)# access-list 45 permit  any  any
router(config-line)#router eigrp 200
router(config-router)#distribute-list  45  out  serial0
在路由更新被广播出去的时候,10.1.2.0网段的地址路由信息不被广播,并在Serial0上将该
访问控制列表用于外出的EIGRP数据流进行过滤。
抑制从路由更新中收到的路由
router(config)# access-list 46  permit  10.2.0.0   0.0.255.255
router(config-line)#router eigrp 200
router(config-router)#distribute-list  46  in  serial0
配置一个访问列表只接收来自被信任网络10.2.0.0的路由更新,并在Serial0上将该访问控制列表施加于进入该接口的数据流。
抑制从路由更新使之不被从接口发出
阻止路由更新消息从某个指定路由器接口上发送出去的命令为“Passive-interface type number”( 该特性应用于除BGPEGP之外的所有基于IP的路由协议)
过滤路由信息的来源
可以利用管理距离参数让路由器智能地辩选路由信息的来源,过滤路由信息来源的命令为“distance  weight  [address  mask [access-list-number|name]][ip]”
用安全策略控制数据流实例:
例一:




安全策略:1、允许所有外出的数据流;
2、允许且只允许由内部发起的入数据流,防止IP欺骗造成的攻击
3、允许对已建立连接的外出数据流的入响应
4、拒绝所有其它入数据流,并记录这些非授权访问企图
router(config)#access-list  47  permit  10.1.2.0  0.0.0.255
router(config)#access-list  103  permit  tcp  any any established
router(config)#access-list  103  deny  ip  any  any  log
router(config)#interface  serial0
router(config-if)#ip access-group  47  out
router(config-if)#ip access-group  103  in
控制对路由器上HTTP服务器模块的访问
可以用“ip http server”全局配置命令让任何路由器能通过Cisco web浏览器接口被监控配置
可以用“ip http port”全局配置命令来设置一个将被客户端软件接口使用的端口(例如端口8080
可以用“ip http access-class”全局配置命令为将被使用的HTTP服务器分配一个访问控制列表
可以用“ip http authentcation”全局命令来指定一种对“IP HTTP”服务器用户的认证,以提供安全
ip http authentication {aaa | enable | local | tacacs}
配置路由器PAT
ip nat pool  mypat  172.16.1.100  172.16.1.100  netmask 255.255.255.0
ip nat  inside source  list 1 pool  mypat   overload
!
interface serial1/0
ip address 172.16.1.1 255.255.255.0
ip nat outside
!
interface ethernet1/0
ip address 192.168.0.1  255.255.255.0
ip nat inside
!
access-list 1 permit 192.168.0.0    0.0.0.255
在边界路由器上配置了PAT,它将动态地将所有符合访问列表1 (源地址在192.168.0.0/24网段内)的源地址转换为地址池 mypat 中的地址。该地址只有一个ip 地址:172.16.0.100 overload”命令参数使路由器能为许多本地地址使用一个全局地址:172.16.1.100  配置了复用(overloading)后,内部主机不同的TCPUDP端口号可以区分采用一个本地IP地址的不同会话。
配置路由器动态NAT
ip nat pool  mynat 172.16.1.100   172.16.1.199   netmask 255.255.255.0
ip nat inside source list 1  mynat
!
interface serial 1/0
ip address 172.16.1.1  255.255.255.0
ip nat outside
!
interface ethernet 1/0
ip address 192.168.0.1 255.255.255.0
ip nat inside
!
access-list 1 permit 192.168.0.0    0.0.0.255
在动态转换情况下,为接口定义并分配一个内部全局地址,路由器动态地将内部本地地址转换为全局地址池中可用的地址。在上述配置中合法的地址池是172.16.1.100~172.16.0.199 ,局域网内部地址为192.168.0.0也可以静态地进行NAT转换,这样就不需要地址池,用“static ....” 命令就可以实现。