0x01 前言

生产环境中的网络设备对安全性和配置统一性较高,在设备上架后需要进行诸如配置清空、用户调整及权限控制等。如果涉及高可用,针对路由器与交换机可能还需要进行堆叠或配置HSB与VRRP等操作。

这篇文章里主要涉及一些通用配置,针对路由器的HSB与VRRP则不在此列。在我的工作中少有涉及,因为架构中涉及OSPF、IBGP、EBGP、静态路由及诸多NAT规则,因此需要根据实际的架构选用合适的技术。针对网关,可以使用HSB+VRRP;而诸如EBGP等协议则使用双路由双转发,但这需要ISP支持双线冗余。

0x02 权限控制

我一直都有个疑惑,为什么华为新设备的console初始密码总是不对的?每次都需要重启设备,然后进入BootROM删除密码并引导后再重新设置密码。

0x02.1 重置密码

先用console线连接设备与电脑,打开putty或其他支持Serial通讯方式的软件,选择正确的COM口及填入9600 Speed后单击连接:

 

然后接通电源,此时即可看到输出的内容。当出现以下语句时按下组合键:

Press Ctrl+B or Ctrl+E to enter BootLoad menu : 2

然后输入密码,密码输入时不会显示任何字符。另外,路由器与交换机的默认密码也不一样,一般有以下两种:

路由器:Admin@huawei
交换机:[email protected]

登入BootROM后选择7以清除密码:

          BootROM  MENU

    1. Boot with default mode
    2. Enter serial submenu
    3. Enter startup submenu
    4. Enter ethernet submenu
    5. Enter filesystem submenu
    6. Enter password submenu
    7. Clear password for console user
    8. Reboot
    (Press Ctrl+E to enter diag menu) 

Enter your choice(1-8): 7

Note: Clear password for console user? Yes or No(Y/N): y

Clear password for console user successfully. Choose "1" to boot, then set a new password.
Note: Do not choose "8. Reboot" or power off the device, otherwise this operation will not take effect.

清除后不要选择8的Reboot,而需要选择1,因为此时配置还没保存,待完成启动后再执行save以避免意外情况的发生导致需要再次重置密码。

以上步骤是所有设备都需要进行的操作,如果交换机需要进行堆叠,则后续的步骤可以只在master slot上进行。

这里有个点需要切记:堆叠后的设备,密码务必要记住!一旦忘记则需要滚动重置,在无法停机维护的情况下进行这项工作是极其困难的。

0x02.2 用户及权限

一般情况下我都会将默认的admin用户禁用,然后创建一个高权限与低权限用户:高权限用户主要用于配置管理,低权限用户则用于巡检。因为设备一般支持console、ssh、http与ftp等协议,所以需要一并调整。

这里我并没有写上telnet,不久之前我已经全面转向使用ssh; http主要用于巡检,一般情况下请勿用于配置,我总感觉web ui与CLI之间的转换不太可靠; ftp只在下载日志或日志文件的时候打开,平常处于关闭状态,ftp还有一个问题:上传固件的时候会有很大几率导致坏包。

首先进入aaa视图,然后禁用默认的admin用户:

aaa
undo local-user admin

紧接着添加高权限和低权限用户:

local-user ngxhk password irreversible-cipher ****** idle-timeout 60 0
local-user ngxhk privilege level 15
local-user ngxhk service-type terminal ssh ftp http

local-user ngxhk-ro password irreversible-cipher ****** idle-timeout 60 0
local-user ngxhk-ro privilege level 1
local-user ngxhk-ro service-type terminal ssh

上面的配置中包含idle-timeout 60 0这个配置项,单位为分钟,因为在我是用的环境中经常要联调好几个设备,需稍微延长超时时间。如果设为0,则为禁用超时,但极其不建议设为0且不要将这个数值设得太大,以免引起安全问题。

在上面完成密码初始化的工作后,如果是用初始密码登入WEB GUI就会强制修改密码,在使用SSH协议登入的时候也会提示修改密码,但不强制。修改密码的同时还不能与此前的密码一致,因此需要修改策略。在aaa视图下进入对应的策略视图并进行调整:

local-aaa-user password policy administrator
password history record number 0
undo password alert original
password expire 0

完整的aaa配置如下:

#
aaa
authentication-scheme default
authentication-scheme radius
authentication-mode radius
authorization-scheme default
accounting-scheme default
local-aaa-user password policy administrator
password history record number 0
undo password alert original
password expire 0
domain default
authentication-scheme radius
radius-server default
domain default_admin
authentication-scheme default
undo local-user admin
local-user ngxhk password irreversible-cipher ****** idle-timeout 60 0
local-user ngxhk privilege level 15
local-user ngxhk service-type terminal ssh ftp http

local-user ngxhk-ro password irreversible-cipher ****** idle-timeout 60 0
local-user ngxhk-ro privilege level 1
local-user ngxhk-ro service-type terminal ssh
#
return

0x02.3 验证方式

在继续前需要添加一个acl用于控制访问这些重要服务的IP:

<ngx-hk-sw-1>dis acl 2000
Basic ACL 2000, 1 rules
acl for mgmt
Acl's step is 5
rule 5 permit source 10.0.0.1 0 (2035906 matches)
rule 1001 deny

user-interface视图中使用上面的ACL控制入站流量,放行SSH协议并启用AAA验证模式

#
user-interface con 0
authentication-mode aaa
user-interface vty 0 4
acl 2000 inbound
authentication-mode aaa
protocol inbound ssh
#
return

0x03 服务配置

0x03.1 IP配置

设备的管理IP可以配置在Vlanif或OOB MGMT端口中,需要根据具体的情况进行配置。我一般会在OOB交换机中配置特定的VLAN及Vlanif,其他设备都通过MEth MGMT端口接入且将OOB MGMT IP配置在该端口中。

# OOB MGMT交换机
<ngx-hk-sw-1>dis cu int Vlanif 999
#
interface Vlanif10
ip address 10.0.0.1 255.255.255.0
#
return

# MEth
<ngx-hk-sw-2>dis cu int MEth 0/0/1
#
interface MEth0/0/1
description ngx-hk-sw-1> GE 1/0/1
ip address 10.0.0.2 255.255.255.0
#
return

如果使用特定的vlan,还需要确认OOB交换机中各个端口的默认vlan,同时建议修改OOB交换机端口的默认VLAN而不是修改设备MEth MGMT端口的VLAN,这样方便随时接入其他设备。

0x03.2 SSH

紧接着启用SSH服务

stelnet server enable

如果需要下载日志、配置文件或上传固件,建议使用SFTP:

sftp serve创建公钥
[ngx-hk-sw-1]rsa local-key-pair create
The key name will be: Host
RSA keys defined for Host already exist.
Warning: Confirm to replace them! Continue? [Y/N]y
The range of public key size is (512 ~ 2048).
NOTES: If the key modulus is less than 2048,
It will introduce potential security risks.
Input the bits in the modulus[default = 2048]:
Generating keys...
........................................................+++
...............+++
....................++++++++
..............++++++++

添加SSH用户及配置验证方式

[ngx-hk-sw-1]ssh user ngxhk authentication-type password
Info: Authentication type setted, and will be in effect next time

在交换机上还需要执行以下命令:

ssh user ngxhk service-type stelnet

0x03.3 HTTP

HTTP服务主要用来做巡检,方便一线人员使用,在实际配置的过程中还是以CLI为主,主要是担心WEB GUI界面的配置项及描述和实际的有差异。

启动服务前务必要先通过ACL控制入站流量,另外需要打开HTTPS协议:

http acl 2000
http timeout 60
http secure-server ssl-policy default_policy
http server enable
http secure-server enable

0x03.4 SNMP

SNMP是监控设备状态必用的协议,但配置不当会很容易泄漏配置信息,一般只打开read only权限:

snmp-agent community read ****** acl 2003
snmp-agent sys-info version v2c
snmp-agent

这里使用v2c版本,主要是匹配zabbix模版中的配置,方便在大集群中实现自动发现。

0x03.5 sFlow

针对一些上联口,建议配置使用sFlow进行监控出入站的流量信息。上面的SNMP协议只能监控端口流量大小,而sFlow则可以根据采样间隔的不同输出不同精度的流量详情,在出现攻击的时候可以借助自动化脚本进行分析预警,联动其他安全设备进行防控。

首先配置一个collector:

sflow collector 1 ip 10.0.0.254

然后到需要监控的端口下启用即可:

sflow counter-sampling collector 1
sflow counter-sampling interval 6
sflow flow-sampling collector 1

最后可以查看相关信息:

<ngx-hk-sw-2>dis sflow slot 0
sFlow Version 5 Information:
--------------------------------------------------------------------------
Agent Information:

     IP Address: 10.0.0.2(Auto)
 Address family: IPV4
   Vpn-instance: NA
 Related collector: 1
--------------------------------------------------------------------------
Collector Information:

   Collector ID: 1
     IP Address: 10.0.0.254
 Address family: IPV4
   Vpn-instance: NA
           Port: 6343
  Datagram size: 1400
       Time out: NA
    Description: NA
--------------------------------------------------------------------------
Port on slot 0 Information:

Interface: GE0/0/1
 Flow-sample collector: 1            Counter-sample collector  : 1
 Flow-sample rate(1/x): 2048         Counter-sample interval(s): 6
 Flow-sample maxheader: 64
 Flow-sample direction: IN,OUT

这部分的内容后续会通过其他文章进行说明。

0x03.6 堆叠

针对交换机堆叠的情况,只需要配置第一台交换机,后续所有的交换机只需要renumber即可,无需进行上述的所有配置。但一般情况下都是完成堆叠后再进行上面的配置,一旦完成堆叠即可将它们看成是一个整体,配置一次即可。

完成第一台的配置后,后续的交换机需要renumber,这个操作会修改交换机端口编号的第一位数字。端口编号的命名规则如下:

端口类型 槽位号/子卡号/端口号

比如双机堆叠后的千兆口、万兆口及支持多种带宽的端口:

GigabitEthernet0/0/1
GigabitEthernet1/0/1

XGigabitEthernet0/0/1
XGigabitEthernet1/0/1

MultiGE0/0/1
MultiGE1/0/1

这里使用renumber修改的就是槽位号,默认都是0。因为堆叠情况下的槽位号不能相同,所以需要改为其他数字。在第二台交换机上执行:

stack slot 0 renumber 1

注意!所有所有堆叠的命令都会即时写入配置文件,但保险起见,建议手动保存一次配置。

修改slot编号不需要重启交换机,紧接着配置堆叠口。如果交换机支持iStack则可以使用业务口进行堆叠,如果需要使用光口或QSFP端口进行堆叠,务必要选购正确的线缆或模块。具体信息可以到这里查询:

交换机堆叠还有一个细节需要注意的,就是逻辑口的port number必须要错开,如下:

[ngx-hk-sw-2]dis stack channel
!     : Port have received packets with CRC error.
L-Port: Logic stack port
P-Port: Physical port
Slot  L-Port  P-Port        Speed  State  ||  P-Port        Speed  State  L-Port  Slot
---------------------------------------------------------------------------------------
0     0/1     XGE0/0/29     10G    UP         XGE1/0/29     10G    UP     1/2     1
0     0/1     XGE0/0/30     10G    UP         XGE1/0/30     10G    UP     1/2     1
0     0/1     XGE0/0/31     10G    UP         XGE1/0/31     10G    UP     1/2     1
0     0/1     XGE0/0/32     10G    UP         XGE1/0/32     10G    UP     1/2     1
---------------------------------------------------------------------------------------

请注意L-Port,主要包含槽位号和端口号,其中槽位号需要与交换机的槽位号一致,而端口号则不能使用同样的数字。在继续之前需要清空堆叠口下的所有配置,然后使用命令进入逻辑口:

interface stack-port 0/1
port interface XGigabitEthernet 0/0/29 to XGigabitEthernet 0/0/32 enable

然后在另一台交换机参照上述配置进行配置即可,最后连接堆叠线缆即可完成堆叠,最终的配置如下:

[ngx-hk-sw-2]dis stack configuration
*    : Invalid-configuration
#    : Unsaved configuration
---------------Configuration on slot 0 Begin---------------
stack enable
stack slot 0 renumber 0
stack slot 0 priority 255
stack reserved-vlan 4093
stack timer mac-address switch-delay 10

interface stack-port 0/1
 port interface XGigabitEthernet0/0/29 enable
 port interface XGigabitEthernet0/0/30 enable
 port interface XGigabitEthernet0/0/31 enable
 port interface XGigabitEthernet0/0/32 enable

interface stack-port 0/2
---------------Configuration on slot 0 End-----------------

---------------Configuration on slot 1 Begin---------------
stack enable
stack slot 0 renumber 1
stack slot 1 priority 100
stack reserved-vlan 4093
stack timer mac-address switch-delay 10

interface stack-port 1/1

interface stack-port 1/2
 port interface XGigabitEthernet1/0/29 enable
 port interface XGigabitEthernet1/0/30 enable
 port interface XGigabitEthernet1/0/31 enable
 port interface XGigabitEthernet1/0/32 enable
---------------Configuration on slot 1 End-----------------

注意上面的第8行,一般情况下的vlan id 4093是不会被占用的,但我就发现过被占用的情况,此时可以手动调整vlan id。在连接堆叠线后,可以将console线接入从交换机,可以看到启动信息,方便排查问题。

0x04 其他

我一般情况下都使用双机堆叠做冗余,此时需要关注脑裂的问题,如果对可靠性要求较高,可以使用双主检测。在有独立MEth的交换机中配置双主检测较为便捷,没有的话也可以在配置了Eth-Trunk的端口中配置。

交换机名称的命名规范很重要,尤其在大型集群中,交换机数量一多会很容易弄混。

除交换机互联外,不建议对终端配置Eth-Trunk,配置维护起来极其麻烦。诸如vSphere这类虚拟化一般支持双线冗余,使用冗余配置即可。

针对上面说到的端口命名格式,其实路由器可以更好地说明问题,比如AR3260:

可以使用一下地址对路由器进行配置:

有主控的一面(上图)是屁股,而插板卡的一面(下图)是前脸。主控的右侧是风扇,可以看到风扇的上面会有槽位的数字,以下是后面的:

以下是前面的:

上图中的主控是SRU200,那么主控上的端口编号是:

XGigabitEthernet0/0/0
GigabitEthernet0/0/0

可以看到主控的槽位是0。而前面板卡的编号则是:

GigabitEthernet5/0/0
GigabitEthernet5/0/1