HTML/JavaScript

2016年8月28日星期日

【Cisco】【安全】【CCNA】Cisco Unicast RPF 简单介绍

Cisco Unicast RPF 简单介绍

Cisco Unicast RPF 简单介绍

介绍

uRPF(Unicast reverse path forwarding),简称单播逆向路由转发,是一种防止IP欺骗的技术,通常情况下网络设备在转发数据的时候关心的是目的(Destination),并不关心源(Source),而uRPF技术就是关心源(Source)的一个技术。即,从某个接口进来的数据包,能否从此接口在返回到源(Source)上,如果可以从入接口返回到源,那么将通过uRPF检查完成数据转发,反之亦然。

  1. 严格uRPF检查
  2. 松散uRPF检查
  3. 默认路由uRPF检查
  4. 使用ACL免uRPF检查
  5. GRE Tunnel Keepalives uRPF检查
  6. Unicast RPF 实验

严格uRPF检查

RPF检查分为两种,一种是严格方式,另外一种是松散方式。严格方式要求,数据包从那个接口进来,那么指向源(Source)的路由下一跳也必须是数据包进来的接口。若不匹配则丢弃。(The rx option enables a Strict Mode uRPF on the router. This mode ensures that the router reaches the source address only via the interface on which the packet was received.)

配置命令:

R1(config-if)#ip verify unicast source reachable-via rx

松散的RPF检查

松散的RPF检查,只关心有没有去往源(Source)的路由,如果有那么就通过检查,如果没有则丢弃。与严格方式不同,严格方程除了关心有没有路由还关心流量进来的接口。(The any option enables a Loose Mode uRPF on the router. This mode allows the router to reach the source address via any interface.

配置命令:

R1(config-if)#ip verify unicast source reachable-via any 

默认路由uRPF检查

有的设备上为了避免环路,就会配置ip route 0.0.0.0 0.0.0.0 null 0 来避免网络环路对这样的路由是否也能参与到uRPF检查呢?那么可以通过allow-default 选项来完成。如果配置了此选项,那么默认路由将不适用于uRPF检查,必须使用明细路由来完成uRPF检查,反之亦然。(You can also use the allow-default option, so that the default route can match when checking source address.)

配置命令:

ip verify unicast source reachable-via { any | rx } allow-default 

使用ACL免uRPF检查

如果想让某些源不参与uRPF检查,可以使用挂载ACL,ACL中所匹配的条目不适用于RPF检查。
配置命令:

R1(config)#access-list 100 permit ip host 222.222.222.222 any
R1(config-if)#ip verify unicast reverse-path 100

GRE Tunnel Keepalives uRPF检查

了解GRE Tunnel keepalive机制

tunnel ip 192.168.1.5     +----------------Interface Tunnel----------------+tunnel ip 192.168.1.7     
tunnel source 5.5.5.5     |                                                |tunnel source 7.7.7.7     
tuneel destiantion 7.7.7.7|                                                |tuneel destiantion 5.5.5.5
                          |                                                |                          
                          |                                                |                          
                          |                                                |                          
                          |                                                |                          
                          |                                                |                          
                         +\-----+  56.1.1.0/24 +------+  67.1.1.0/24 +-----\+                         
                         |  R5  |--------------|  R6  |--------------|  R7  |                         
                         +------+.5          .6+------+.6          .7+------+                         

如上图所示。

R5
tunnel source 5.5.5.5
tuneel destiantion 7.7.7.7
R7
tunnel source 7.7.7.7
tuneel destiantion 5.5.5.5

那么以R5为例,R5发送的keepalive内容如下

+-----------++-----------++------------++----------------------------------+
|SRC 5.5.5.5||DST 7.7.7.7||GRE Head(IP)||SRC 7.7.7.7||DST 5.5.5.5||GRE Head|
+-----------++-----------++------------++----------------------------------+


Frame 4: 62 bytes on wire (496 bits), 62 bytes captured (496 bits) on interface 0
Ethernet II, Src: ca:01:1a:64:00:08 (ca:01:1a:64:00:08), Dst: ca:02:02:fc:00:08 (ca:02:02:fc:00:08)
Internet Protocol Version 4, Src: 5.5.5.5, Dst: 7.7.7.7
Generic Routing Encapsulation (IP)
Internet Protocol Version 4, Src: 7.7.7.7, Dst: 5.5.5.5
Generic Routing Encapsulation (Possible GRE keepalive packet)

当R7收到数据包之后对数据包进行检查,观察GRE tunnel 内层的信息,观察到内层的目的IP地址是去往R5的,于是乎就将GRE内层的信息在重新传回到R5上,数据包如下:

+-----------++-----------++--------+
|SRC 7.7.7.7||DST 5.5.5.5||GRE Head|
+-----------++-----------++--------+

Frame 5: 38 bytes on wire (304 bits), 38 bytes captured (304 bits) on interface 0
Ethernet II, Src: ca:02:02:fc:00:08 (ca:02:02:fc:00:08), Dst: ca:01:1a:64:00:08 (ca:01:1a:64:00:08)
Internet Protocol Version 4, Src: 7.7.7.7, Dst: 5.5.5.5
Generic Routing Encapsulation (Possible GRE keepalive packet)

R5收到了这个数据包即认为tunnel 链路还是存活的。就继续保持UP状态,反之亦然。

简单了解了GRE keepalive机制,如果uRPF的检查配置在R7的tunnel接口上会发生什么事情呢?
R7的tunnel 会DOWN掉。DOWN掉的原因就是因为R7在回送keepalive的时候出现了问题,即R7要回送如下报文的时候,进行uRPF检查
发现去往7.7.7.7的出接口并不是tunnel接口,所以RPF检查失败,导致回送的数据R5迟迟收不到,造成R5端认为tunnel keepalive 出现问题,即R5 tunnel 为DOWN状态。

R7#show ip route 7.7.7.7
Routing entry for 7.7.7.7/32
  Known via "connected", distance 0, metric 0 (connected, via interface)
  Routing Descriptor Blocks:
  * directly connected, via Loopback1
      Route metric is 0, traffic share count is 1

解决此问题的办法就是需要配置一条ACL,让7.7.7.7免于RPF检查,这样R7正常回送keepalive也就不会导致R5端tunnel为DOWN状态了。

配置命令:

access-list 1 permit 7.7.7.7
ip verify unicast source reachable-via rx 1

Unicast RPF 实验(视频)

参见:https://www.youtube.com/watch?v=a_CodGbH6vA

参考文献

  1. Understanding Unicast Reverse Path Forwarding
  2. Configuring Unicast Reverse Path Forwarding
  3. GRE Keepalive and Unicast RPF
  4. Unicast Reverse Path Forwarding(PDF)
  5. GRE Tunnel Keepalives
  6. GRE Tunnel Keepalives2

2017年10月12日更新

2016年8月26日星期五

【Cisco】【安全】【CCNA】配置802.1x EAP-MD5 radius认证

配置802.1x EAP-MD5 radius认证

配置802.1x EAP-MD5 radius认证

介绍

  1. 如何配置802.1x
  2. ACS5.3安装(视频)
  3. 采用radius方式进行802.1x认证(实验)

如何配置802.1x

  1. 全局下开启802.1x认证,接口下开启802.1x认证
  2. 配置AAA的Radius认证服务器

全局下开启802.1x认证,接口下开启802.1x认证

R12(config)#dot1x system-auth-control
R12(config-if)#dot1x port-control auto 

auto参数说明

R12(config-if)#dot1x port-control
auto                PortState will be set to AUTO
force-authorized    PortState set to Authorized
force-unauthorized  PortState will be set to UnAuthorized 

Auto —enables 802.1x authentication and causes the port to begin in the unauthorized state, allowing only EAPOL frames to be sent and received through the port. The authentication process begins when the link state of the port changes from down to up or when an EAPOL-start frame is received. The switch requests the identity of the client and begins relaying authentication messages between the client and the authentication server. Each client attempting to access the network is uniquely identified by the switch by using the client MAC address.

force-authorized —disables 802.1x authentication and causes the port to change to the authorized state without any authentication exchange required. The port sends and receives normal traffic without 802.1x-based authentication of the client. This is the default setting.

force-unauthorized —causes the port to remain in the unauthorized state, ignoring all attempts by the client to authenticate. The switch cannot provide authentication services to the client through the port.

配置AAA的Radius认证服务器

激活3A认证

R12(config)#aaa new-model

配置802.1x采用radius方式进行认证

R12(config)#aaa authentication dot1x default group radius

配置Radius Server

R12(config)#radius-server host 192.168.119.119 auth-port 1645 acct-port 1646 key cisco 

**注:**If auth-port and acct-port are not specified, the default value of auth-port is 1645 and the default value of acct-port is 1646

配置ACS Radius认证服务器
Network Resources—>Network Devices and AAA Clients ,在此添加AAA认证客户端(设备IP,不是PC的IP)

enter image description here

Users and Identity Stores—>Internal Identity Stores—>Users,在此创建用户

enter image description here

配置完成之后可以在设备上使用“test aaa group radius 用户名 密码 new-code” 命令来测试用户是否正常,详细信息请参考Enhanced Test Command

至此配置802.1x任务完成。

ACS5.3安装(视频)

参见:https://www.youtube.com/watch?v=C1iy2xiErj4

采用radius方式进行802.1x认证(实验视频)

参见:https://www.youtube.com/watch?v=MlpFnE6Lemc

参考文献

  1. Configuring IEEE 802.1x Port-Based Authentication
  2. RADIUS Commands
  3. Enhanced Test Command

2017年10月12日更新

2016年8月22日星期一

【Cisco】【安全】【CCNA】Cisco IOS设备登录管理

Cisco IOS设备登录管理

Cisco IOS设备登录管理

介绍

  1. Telnet Password管理设备
  2. Telnet Username+Password管理设备
  3. Telnet 无密码管理设备
  4. SSH 管理设备
  5. 依据不同的用户给予不同的命令行权限
  6. 远程登录惩罚特性

Telnet Password管理设备

首先需要关注的是,其实IOS设备默认就已经开放了23端口,只是因为设备默认没有配置vty密码所以无法登陆上去,为什么这么说呢?
enter image description here
在一个空配置的设备上,12.1.1.1 Telnet到12.1.1.2 我们发现TCP会话已经正常建立,并且了也传递了部分TCP(Telnet数据)之所以无法进入设备是因为我们没有给 line vty配置密码,所以被IOS 拒绝。

R1#telnet 12.1.1.2
Trying 12.1.1.2 ... Open
Password required, but none set
[Connection to 12.1.1.2 closed by foreign host]

那么进入正题,既然提示需要配置一个Password,那么就配置一个好了。配置方法如下。

R2(config)#line vty 0 15
R2(config-line)#password ccie43413
R2(config-line)#password ?
0 Specifies an UNENCRYPTED password will follow
7 Specifies a HIDDEN password will follow
LINE The UNENCRYPTED (cleartext) line password

在配置Password的时候可以配置“0” 明文方式,也可以配置“7”密文(HIDDEN)方式。
当然这里需要注意的是在配置 Password 7 的时候并不能直接输入字符的,这样配置是无法下发下去的,需要先将密码转换为密文的方式才能下发。(若不指定密码等级,那么将默认使用“0”级,明文方式进行配置下发)

R2(config)#line vty 0 15
R2(config-line)#password 7 ccie43413
Invalid encrypted password: ccie43413
R2(config-line)#password 7 020507520E525C751D1D

虽说是采用password 7 加密方式,其实这种方式也不安全,加密后的文本可以轻易被破解。可以去 Cisco Type 7 Password Tool 输入需要加密的Password或者输入要解密的Password ,就可以得到密码。
enter image description here

配置

R2
line vty 0 4
password 7 020507520E525C751D1D
login
line vty 5 15
password 7 020507520E525C751D1D
login
验证:
R1#telnet 12.1.1.2
Trying 12.1.1.2 ... Open
User Access Verification
Password: 
R2>

Telnet Username+Password管理设备

同样进行Telnet登录的时候也可以进行用户名和密码的方式来登录到设备上,需要在line vty 下配置login local 命令(默认是login)

R2(config)#line vty 0 15
R2(config-line)#login local

然后是在全局下创建用户名和密码

R2(config)#username ccie43413 password ?
0 Specifies an UNENCRYPTED password will follow
7 Specifies a HIDDEN password will follow
LINE The UNENCRYPTED (cleartext) user password
R2(config)#username ccie43413 secret ?
0 Specifies an UNENCRYPTED secret will follow
4 Specifies a SHA256 ENCRYPTED secret will follow
5 Specifies a MD5 ENCRYPTED secret will follow
LINE The UNENCRYPTED (cleartext) user secret

使用password创建密码,若不指定密码类型,则默认为“0”明文方式,若使用secret创建密码,在新版本的IOS中将使用secret 4 创建加密密码。若在老版本的IOS中则使用secret 5 创建加密密码。 需要注意的是,在新版的IOS 15.2的IOS中才支持secret 4,如果你使用的是老版的IOS 12.4,那么secret 4可能不支持。

secret 5 虽说是MD5加密但仍然不安全,在新版本的IOS中会提示此算法将被淘汰“Warning: MD5 encryption will be deprecated soon.Please move to SHA256 encryption.”

若要生成secret 5 密钥可以找一个老的IOS设备,配置username ccie43413 secret ccie43413,show run 就可以看到secret 5 的密钥了。
当然你可以通过Openssl去生成密钥,具体方法参见 Using the openssl Tool to Generate a Type 5 Password

配置

username ccie43413 secret 4 5eumjDyS.TauJikTRN0uboCxgj6pJEYb5tFrJ6efRUQ
!
line vty 0 4
login local
line vty 5 15
login local
!
验证:
R1#telnet 12.1.1.2
Trying 12.1.1.2 ... Open
User Access Verification
Username: ccie43413
Password: 
R2>

Telnet 无密码管理设备

不少人可能因为工作需要的关系,如每次Telnet到思科设备上都需要输入密码实在是烦人,所以在此我发现通过一种方式可以不输入用户名和密码就可以直接管理思科设备。
配置方法

R2(config)#line vty 0 15
R2(config-line)#no login
R2(config-line)#privilege level 15
R2(config-line)#exit
R2(config)#no aaa new-model

no login是无需密码就可以直接接入vty线路,但是这时候只能进入在用户模式中进行操作即“>”模式。这是因为如果vty线路默认不做权限等级限制默认的配置就是privilege level 1,权限比较低,所以我们需要补一个命令 “privilege level 15”进入的时候直接进入最高管理权限。另外需要注意的是,必须要关闭aaa new-model否则设备还是会去找用户名和密码。

配置

no aaa new-model
!
line vty 0 4
privilege level 15
no login
line vty 5 15
privilege level 15
no login
!
R1#telnet 12.1.1.2          !验证部分
Trying 12.1.1.2 ... Open

R2#

SSH 管理设备

配置SSH的方法如下,首先你需要配置一个主机域,ip domain-name 命令,这个主机域会用于生成RSA密钥文件。

R2(config)#ip domain-name ccie43413.blogspot.com

然后去创建一个密钥使用crypto key generate rsa命令,指定rsa强度

 R2(config)#crypto key generate rsa
The name for the keys will be: R2.ccie43413.blogspot.com
Choose the size of the key modulus in the range of 360 to 4096 for your
General Purpose Keys. Choosing a key modulus greater than 512 may take
a few minutes.
How many bits in the modulus [512]: 1024
% Generating 1024 bit RSA keys, keys will be non-exportable...
[OK] (elapsed time was 1 seconds)
*Aug 23 13:34:25.515: %SSH-5-ENABLED: SSH 1.99 has been enabled

创建完成之后可以通过 show crypto key mypubkey all 命令查看创建的密钥文件。

R2#show crypto key mypubkey all
% Key pair was generated at: 13:34:25 UTC Aug 23 2016
Key name: R2.ccie43413.blogspot.com
Key type: RSA KEYS
Storage Device: not specified
Usage: General Purpose Key
Key is not exportable. Redundancy enabled.
Key Data:
30819F30 0D06092A 864886F7 0D010101 05000381 8D003081 89028181 00A79598
E47CC2DB 10F21512 58FB525A 2D1124CA 0F023260 8F77517E 0305D087 7D4FBED5
D09B9D12 FBBA7B2E AC2C7FD2 0EAF5B80 718191C8 6C111E6B 32757EBC 3EDFF46F
9385B974 23947D5C 98BCB2EF F9484A9C 8916761E 62DCE0D6 8C2B223E 5574060E
5D30F00D 610A5A84 B37ADEDE CE5DB93C DA7BF4BF ED42D965 24F932B4 95020301 0001
% Key pair was generated at: 13:34:26 UTC Aug 23 2016
Key name: R2.ccie43413.blogspot.com.server
Key type: RSA KEYS
Temporary key
Usage: Encryption Key
Key is not exportable. Redundancy enabled.
Key Data:
307C300D 06092A86 4886F70D 01010105 00036B00 30680261 00ADCAE4 ACF8A0D1
C0C8F0B8 B27B8E6C B0D0F70B EC2AA537 50505AC2 21020871 842E0FE2 9D9311CE
023F8FB1 9E621E0E 90E77A32 A2F42179 F164C84C 5D3BBF76 AAC8F3C4 6864FDB1
1BEFDB20 93AB5729 DEF7D6EE CAF825CD CFCE9D87 81FC412C 87020301 0001

然后在vty线路下开启SSH功能,并且配置用户名密码方式认证

R2(config)#line vty 0 15
R2(config-line)#transport input ssh
R2(config-line)#login local
R2(config-line)#exit
R2(config)#username ccie43413 secret 4 5eumjDyS.TauJikTRN0uboCxgj6pJEYb5tFrJ6efRUQ

配置

关键配置:
ip domain name ccie43413.blogspot.com                                   !创建一个域
!
username ccie43413 secret 4 5eumjDyS.TauJikTRN0uboCxgj6pJEYb5tFrJ6efRUQ !配置用户名密码
!
crypto key generate rsa                                                 !此命令在show run 中不会显示
!
line vty 0 4
 login local
 transport input ssh                                                    !选择ssh登录方式
line vty 5 15
 login local
 transport input ssh
验证:
R1#ssh -l ccie43413 12.1.1.2
Password: 
R2>

依据不同的用户给予不同的命令行权限

思科设备提供了两种实现此功能的方式,一种是用户登录到line上的时候,提供一个level等级,再依据等级给予相应的操作权限,但是这样并不利于管理,所以笔者采用的是view的方式来进行。
首先需要开启aaa new-model

R2(config)#aaa new-model

然后配置parser view

R2(config)#parser view cisco1
R2(config-view)#secret cisco1
R2(config-view)#commands exec include ping
R2(config-view)#exit
R2(config)#parser view cisco2
R2(config-view)#secret cisco2
R2(config-view)#commands exec include traceroute

配置Telnet用户名和密码(开启了aaa new-model就相当于在vty链路下login local,只不过没有显示)

 R2(config)#username ccie43413 password 0 ccie43413

配置

关键配置:

aaa new-model
!
username ccie43413 password 0 ccie43413
!
parser view cisco1
secret 5 $1$21sD$LVag09YktIMdoYadE9fGy/
commands exec include ping
!
parser view cisco2
secret 5 $1$ot3I$2Ws704Ml7MXcAtEzmxSYI0
commands exec include traceroute
!

验证:
特定的用户只能执行特定的命令。
R1#telnet 12.1.1.2
Trying 12.1.1.2 ... Open
User Access Verification
Username: ccie43413
Password: (这里输入的是Telnet的用户名和密码)
R2>enable view cisco1
Password: (这里输入的是parser view的用户名和密码)
R2#ping 12.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 12.1.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 8/9/12 ms
R2#traceroute 12.1.1.1
% Invalid input detected at '^' marker. 

R1#telnet 12.1.1.2
Trying 12.1.1.2 ... Open
User Access Verification
Username: ccie43413
Password: 
R2>enable view cisco2
Password: 
R2#traceroute 12.1.1.1
Type escape sequence to abort.
Tracing the route to 12.1.1.1
VRF info: (vrf in name/id, vrf out name/id)
  1 12.1.1.1 12 msec 16 msec 8 msec
R2#ping 12.1.1.1
% Invalid input detected at '^' marker.
R2#

远程登录惩罚特性

配置一些惩罚特性可以降低密码被破解的可能性,如下是配置命令。

R2(config)#login block-for 600 attempts 3 within 60
R2(config)#login delay 2
R2(config)#login quiet-mode access-class ccie43413
ip access-list standard ccie43413
permit 192.168.1.1
R2(config)#login on-failure log
R2(config)#login on-success log

login block-for 600 attempts 3 within 60
如果有一个用户在60秒的时间内登录错误达3次,那么这个用户需要等待600秒的时间之后才可以重新连接Telnet会话

login delay 2
指定连续登录的时间间隔

login quiet-mode access-class ccie43413
只要是匹配了ACL是“ccie43413”的这些IP地址,不受 login block-for和login delay的影响。

login on-failure log 和 login on-success log
相应的login日志记录

log:

验证
略
*Aug 21 20:34:35.119: %SEC_LOGIN-4-LOGIN_FAILED: Login failed [user: 1] [Source: 1.1.1.1] [localport: 23] [Reason: Login Authentication Failed] at 20:34:35 UTC Sun Aug 21 2016
*Aug 21 20:34:35.123: %SEC_LOGIN-1-QUIET_MODE_ON: Still timeleft for watching failures is 23 secs, [user: 1] [Source: 1.1.1.1] [localport: 23] [Reason: Login Authentication Failed] [ACL: ccie43413] at 20:34:35 UTC Sun Aug 21 2016
*Aug 21 20:34:36.931: %SEC_LOGIN-5-QUIET_MODE_OFF: Quiet Mode is OFF, because block period timed out at 20:40:34 UTC Sun Aug 21 2016

参考文献

  1. Cisco IOS Terminal Services Command Reference, Release 12.2

2017年9月29日 更新