2018年1月,你们仍像往常同样忙忙碌碌,IT设备机房内设备轰隆隆的风扇声嘈杂而响亮,一切看似那么正常。
但是,若是换个视角看看设备里面的数字世界,风景彻底不一样。数据包暗流涌动,争先恐后抢着到达世界的尽头。
俗话说,有人的地方就有江湖。而被人操控的网络世界,免不了杀机四伏。
看看上面这张图,这可不是我我的PS上去的×××图。它是实实在在的世界级的网络 攻 击 流量图。各式各样的***流量跨越国界影响着每一台互联网设备。php
在我的电脑难逃网络 攻 击 魔爪的状况下,网络设备怎能独善其身??web
根本不可能,网络设备也是 攻 击 者的目标之一,并且是重要目标,除非你把电源线拔了。
这就比如打蛇打七寸, 攻 击 者若是想制造大范围的互联网故障,拿下网络设备相比尝试攻克各个终端目标划算得多。安全
怎么避免被×××者者攻陷,作安全加固啊!有本事咱就给它套上一个金钟罩铁布衫,刀枪不入。服务器
我相信不少朋友脑海里面首先浮现的是采用相似ACL访问控制列表的方法,只容许信任的管理员访问管理设备,限制特定的协议等。网络
这就够了么?
1.如何限制网络设备的带内带外安全?
2.如何只容许特定源地址链接设备协议,如BGP等?
3.是否关闭了没必要要的网络服务?
4.是否正确配置了设备日志记录,记录设备登录记录以及其余网络管理痕迹?
5.配置是否认期保存,以避免意外故障发生?session
或者,若是你是土财主,能够直接找第三方安全公司作安全扫描,并根据评估报告进行整顿。可是会花费一笔不小的费用。app
其实,除了花钱,咱们还能够选择本身动手解决问题,一方面节约了公司成本,也锻炼了我的技能。这么好的事情,何乐而不为呢?
故此,为了知足部分葛朗台土豪的需求,认真贯彻本身动手,丰衣足食的精神。本文特意总结了一套网络设备安全加固的思惟方法,供你们参考。运维
既然要讨论网络设备加固,咱们须要以一个特定的产品来做为展现对象, 由于本人长期使用Juniper设备,就以其产品为例给你们讲述。ssh
同时,须要说明的是,如下内容并不只是局限在Juniper设备,你们除了了解Juniper的加固方式之外,最重要的是理解这一套思惟方法,并应用到你身边对应的厂商设备。tcp
这一步尤为重要,可是又极其容易被忽略。
苍蝇不叮无缝蛋,网络 攻 击 亦然。若是 攻 击 者只是盯着你们都会去关注的网络安全,例如尝试碰运气telnet登陆设备等。那这个***者水平就值得怀疑了。
因此真正的 攻 击 者,是 攻 击 那些他知道而你不知道的系统Bug漏洞。很显然,实时掌握系统bug漏洞很是有必要,就拿我本身来讲。我隔一小段时间就要去看看当前Juniper设备运行的JUNOS软件是否爆出重大bug,而后提出修补建议。(领导会以为你很高瞻远瞩,涨工资哦!)
如何查看JUNOS系统漏洞
方法一:查看Juniper网站bug库: https://kb.juniper.net/InfoCenter/index?page=content&channel=SECURITY_ADVISORIES
方法二:查阅Juniper网站Problem Search 软件bug库:https://prsearch.juniper.net
经过按期查阅你所使用的JUNOS系统Bug信息并根据Juniper建议采起相关措施,从而大大避免由于系统bug从而致使网络瘫痪的问题。
这一步很是好理解,通常状况网络设备厂商会建议你使用某个版本的OS系统。它是根据厂商统计以及客户反馈汇总后,厂商认为此版本系统相对较稳定,bug相对较少。
Juniper厂商建议OS系统汇总
https://kb.juniper.net/InfoCenter/index?page=content&id=KB21476&actp=METADATA
什么是物理设备安全,物理设备安全包含但不只限于以下:
网络设备通常都安装于机房特定机架上。可是若是机房安全环境较差,随时能够有人员进入机房挪动已经在网的网络设备,或者实施断电,插拔线缆等操做。那其余的一切安全问题都是浮云。
正如恋爱中的女孩老是给男孩说:“若是连基本的安全感你都给不了我,还谈个屁的爱情啊!”
因此,工程师们,给大家的网络设备买套好点的“房子”,给他们点安全感吧。例如我以前OOB文章《构建带外OOB网络》中提到的,采用机架门锁+感应器的方式保障设备安全。
Console接口做为设备的管理接口。论重要性,没有任何其余带内带外管理方式可以与之相提并论。
平常运维中,总免不了须要去现场经过console调试设备。当工程师用console登录设备之后,每每忘了logout登出系统。而是直接拔出console线。其危害是,其余人员能够随后插线经过console登录设备无需任何验证,直接使用前一位用户的权限经过console对网络设备执行各类操做。
换而言之,假如前一位工程师使用root帐户登录,那随后的 攻 击 者一样也处于root模式下,能够随时对设备进行离线,重启,关机等重大操做。
安全设置建议
1.开启logout-on-disconnect功能,拔除console线之后直接登出当前用户。
[edit system ports]
GingerBeer@Juniper# set console log-out-on-disconnect2.禁止console接口上使用root帐户登录。
[edit system ports]
GingerBeer@Juniper# set console insecure
3.使狠招:关闭console接口。在某些特定状况,例如在没法保证设备的物理环境安全的状况下,为了不有人恶意使用console猜想密码或者执行其余任务,能够直接关闭console接口。
[edit system ports]
GingerBeer@Juniper# set console disable
Auxiliary Port 辅助接口
辅助接口,通常状况下没几我的用。它主要有两个功能。第一是能够链接一个外界modem,经过modem拨号后链接远端场所,远端能够经过此modem管理设备。辅助接口有时候能够做为第二个console使用。
既然你们平时都不用,因此最好把它关闭。以Junos为例,Junos默认状况下是关闭了Auxiliary接口,虽然配置里面看不出来。可是从安全角度出发,能够显式配置关闭Auxiliary辅助接口。
显式关闭辅助接口
[edit system ports]
GingerBeer@Juniper# set auxiliary disable
板卡诊断接口
对于高端路由器或者交换机而言,通常会存在两个Routing Engine路由引擎卡,两个交换矩阵板卡,多个业务板卡。
而就在交换矩阵板卡上,会存在一个相似于路由引擎的console接口的东西。其意义为如有一些故障须要从板卡层面诊断的话,能够经过链接交换板卡的诊断口来收集信息。
从安全角度而言,诊断接口通常没有密码。对你没看错,没-有-密-码。
以Juniper为例,某些SCB,SSB,SFM,FEB卡会存在此诊断接口。从安全角度,咱们应该给他设置密码验证。
诊断接口设置密码验证
设置方法以下:
[edit system]
GingerBeer@Juniper# set diag-port-authentication plain-text-password
New password: <password>
Retype new password: <password>
[edit system]
或
GingerBeer@Juniper# set pic-console-authentication plain-text-password
New password: <password>
Retype new password: <password>
[edit system]
GingerBeer@Juniper#
USB接口安全
USB提供了便捷的文件传输和存储扩展,基于你的安全需求,你能够考虑关闭它。
[edit chassis]
GingerBeer@Juniper# show
usb {
storage {
disable;
}
}
[edit chassis]
GingerBeer@Juniper#
设备显示屏安全
这一点颇有趣,在某些交换机上,会有一个小小的LCD的单色屏幕,旁边通常会有几个小小的按钮。可别小看了这个LCD显示屏。经过这个屏幕能够执行一些基本的系统维护和控制功能,例如离线板卡,重置系统配置等。因此若不经常使用其功能,咱们能够选择关闭LCD屏幕的操做功能。
锁掉LCD屏幕操做功能,只许看,不准摸!
[edit]
GingerBeer@Juniper# set chassis craft-lockout
总的来讲,相似于路由器,交换机甚至防火墙等设备。其安全性要高于服务器,缘由在于网络设备通常默认开启的服务远远少于服务器。
既然作安全加固,就须要一种鸡蛋里面挑骨头的精神,让咱们来看看在网络设备上还能关闭什么没必要要的服务。
不少Juniper设备初始环境下,为了迎合自动化需求,例如大批量配置设备。默认是开启了自动安装配置功能。从安全角度来讲,若是你不须要此功能,能够选择关闭它。
关闭自动安装
[edit]
GingerBeer@Juniper# delete system autoinstallation仅限Juniper SRX,关闭从USB自动安装
[edit]
GingerBeer@Juniper# set system autoinstallation usb disable
ICMP重定向是路由器向IP数据包的发送者发送的通知,以通知他们到达特定目标主机或网络的更好方式。 收到重定向后,源设备应修改其路由的方式,而后经过路由器建议的下一跳发送后续数据包。
攻 击 者能够利用ICMP重定向的特性,向路由器发送大量的非最优路由的数据包,促使路由器返回成千上万的ICMP重定向,从而实现DDOS***。
但是,在一个设计良好的网络环境里面,是不须要也不该该出现ICMP重定向的信息,为此咱们能够关闭它。
同其余厂商相似,Juniper的Junos默认是开启ICMP重定向的。
关闭ICMP重定向
[edit]
GingerBeer@Juniper# set system no-redirects
TCP恶意flag
先说说TCP恶意flag,你们知道正常TCP协商流程会用到SYN或FIN flag标记,SYN用于TCP创建,而FIN用于TCP会话拆除。
可是没有哪个正常数据包会同时把SYN和FIN放到标记flag里面,由于逻辑是矛盾冲突的。
但是,有人就会故意人为制造此数据包,并经过发送大量的无效数据包来制造DOS 攻 击 ,并获悉目标设备的操做系统信息等。
咱们能够配置JUNOS丢弃同时含有SYN和FIN字段的无效数据,不作回应。
配置以下:
{master:0}[edit]
GingerBeer@Juniper# set system internet-options tcp-drop-synfin-set
TCP探测
攻 击 者为了探测目标网络设备的端口打开范围和状态,能够发送大量的TCP-SYN链接请求,经过查看网络设备的回复信息来知晓端口打开状况。
在高强度扫描的状况下,网络设备的负载会增长,并形成DOS 攻 击 。
**配置JUNOS对未开启的端口不回复TCP-RST,从而让 攻 击 者没法知晓此端口是否开启。
{master:0}[edit]
GingerBeer@Juniper# set system internet-options tcp-drop-synfin-set
LLDP,相似于Cisco的CDP。不过是被IEEE标准化了的邻居发现协议而已。既然是邻居发现,天然会彻底暴露网络设备自己的详细信息。因此仅仅在须要的端口上开启LLDP,是网络安全的首选项。
案例以下:
以下案例,默认在全部接口关闭LLDP,除了须要的ge-0/0/0 & ge-0/0/3接口。
[edit]
GingerBeer@Juniper# edit protocols lldp
[edit protocols lldp]
GingerBeer@Juniper# set interface all disable
[edit protocols lldp]
GingerBeer@Juniper# set interface ge-0/0/0.0
[edit protocols lldp]
GingerBeer@Juniper# set interface ge-0/0/3.0
对于运维人员而言,咱们但愿可以看到用户登陆网络设备之后的一举一动,例如哪一个帐号登录的,登陆之后他都执行了哪些命令。
拥有这样的功能之后,就好似在网络设备上安装了一个无形的摄像头,监控登陆用户的一举一动。同时也起到了震慑做用。
Juniper的Junos在日志这方面作得很是好,它可以根据用户需求,从全部日志记录中挑出你须要的信息,并存放到特定文件或者syslog服务器上。
配置以下:
set system syslog file interactive-commands interactive-commands any
set system syslog file authorization authorization info
查看用户登录记录:
show log authorization
效果以下:
Jan 20 01:17:08 GingerBeer-RTR01 sshd[11590]: (pam_sm_acct_mgmt): DEBUG: PAM_USER: ro
Jan 20 01:17:08 GingerBeer-RTR01 sshd[11590]: (pam_sm_acct_mgmt): DEBUG: PAM_ACTUAL_USER: Gingerbeer
Jan 20 01:17:08 GingerBeer-RTR01 sshd[11590]: Accepted password for Gingerbeer from 1.2.3.4 port 12345 ssh2
Jan 20 01:21:10 GingerBeer-RTR01 sshd[11777]: (pam_sm_acct_mgmt): DEBUG: PAM_USER: ro
Jan 20 01:21:10 GingerBeer-RTR01 sshd[11777]: (pam_sm_acct_mgmt): DEBUG: PAM_ACTUAL_USER: Gingerbeer
Jan 20 01:21:10 GingerBeer-RTR01 sshd[11775]: Accepted keyboard-interactive/pam for Gingerbeer from 12345 port 12345 ssh2
Jan 20 01:21:10 GingerBeer-RTR01 sshd[11775]: Received disconnect from 1.2.3.4: 11: PECL/ssh2 (http://pecl.php.net/packages/ssh2)
Jan 20 01:21:10 GingerBeer-RTR01 sshd[11775]: Disconnected from 1.2.3.4
查看用户执行命令记录:
show log interactive-commands | last
效果以下:
Jan 20 07:52:30 GingerBeer-RTR01 mgd[30631]: UI_CMDLINE_READ_LINE: User 'Gingerbeer', command 'show interfaces terse '
Jan 20 07:53:03 GingerBeer-RTR01 mgd[30631]: UI_CMDLINE_READ_LINE: User 'Gingerbeer', command 'show route '
Jan 20 07:53:37 GingerBeer-RTR01 mgd[30631]: UI_CMDLINE_READ_LINE: User 'Gingerbeer', command 'show configuration | display set | no-more '
Jan 20 07:53:56 GingerBeer-RTR01 mgd[30631]: UI_CMDLINE_READ_LINE: User 'Gingerbeer', command 'show log interactive-commands | last
网络设备配置,毋庸置疑,最宝贵的资料莫过于它了。我见过不少工程师朋友在网络设备down掉后急的迫不及待,就是由于没有按期备份配置。想找设备顶替都没办法。
而在Juniper的Junos中,自动备份配置是一件很是简单的事情。
设置以下:
[edit system archival configuration]
GingerBeer@Juniper# show
transfer-interval 1440;
archive-sites {
"scp://Gingerbeer@1.2.3.4:/Configs" password "$9$EGCyMCVb1JGnev2aajPf359AO1"; ## SECRET-DATA
}
简单解读上述设置,每隔24小时此路由器会就经过SCP给1.2.3.4的服务器发送当前配置。
所谓的不安全系统服务,是指那些在传输过程当中是以明文传输。所以极其容易被中间人截获从而获取系统登陆权限等。
例如以下服务:
1.关闭 Berkeley “r”
[edit system services]
GingerBeer@Juniper# delete rsh
[edit system services]
GingerBeer@Juniper# delete rlogin
2.关闭 FTP:
[edit system services]
GingerBeer@Juniper# delete ftp
3.关闭 Finger:
[edit system services]
GingerBeer@Juniper# delete finger
4.关闭 Telnet:
[edit system services]
GingerBeer@Juniper# delete telnet
5.关闭 经过HTTP登陆的J-web:
[edit system services]
GingerBeer@Juniper# delete web-management http
6.关闭 Reverse Telnet:
[edit system services]
GingerBeer@Juniper# delete reverse telnet
7.关闭 clear-text Junoscript access:
[edit system services]
GingerBeer@Juniper# delete xnm-clear-text
8.关闭 TFTP server:
[edit system services]
GingerBeer@Juniper# delete tftp-server
这一步算是一个加分项,通常状况系统都会有默认值。而你们能够根据自身网络的需求修改成特定值。
用户登录参数设置案例
{master:0}[edit system login retry-options]
GingerBeer@Juniper# show
tries-before-disconnect 3; ##在断开链接以前最多尝试3次
backoff-threshold 1; #若是用户由于密码登陆失败一次之后,就会启动用户登陆等待时间。
backoff-factor 6; #此处定义了用户登陆等待时长。
minimum-time 30; #等待用户30秒键入密码
maximum-time 60; #当用户ssh或者其余方式登陆设备时,在用户未键入用户名和密码以前,等待60秒。超时后tcp链接终止。
lockout-period 10; #当用户登录失败超出上文限定次数之后,锁定用户名10分钟。
以上各项设置,仅仅起到了保护部分功能的效果,可是若要全盘保护整个路由器。仍是得靠一个复杂而全面的路由引擎保护机制。
别搞些名词来忽悠人了,还压轴大戏,说白了不就是套个ACL访问列表限制访问路由引擎的流量么。
哥别急,ACL也有它的高级套路,不然怎么好意思称之为“设计”呢。
首先,咱们须要把到达路由器的流量分为两大类:
1.管理类流量
2.协议类流量
其次,分别列出以上两类流量的全部协议。
举例说明:
管理流量,通常为SSH,SNMP,NTP,Radius,ICMP以及traceroute。
因为ACL是非状态化的。换而言之,对于路由器发往外界的流量,也须要有一个条目来容许其返回流量。例如Radius请求回复。(很重要)
协议类流量,通常为OSPF,RIP,BGP。或者MPLS类的LDP,RSVP等。
根据协议端口特性,在条目中写出开放的源和目标端口。
分析完毕之后,让咱们来看个编写案例,看案例最实在了。
条目注释:第一条为防止TCP SYN 洪泛 攻 击 ,首先匹配全部BGP邻居地址,以及管理地址。而后匹配TCP字段是SYN 或者Fin 或者RST,可是不包含SYN ACK的TCP包,最后用QOS的Policer限制突发最多100k。
set firewall family inet filter protect-re term synflood-protect from source-prefix-list bgp-neighbors
set firewall family inet filter protect-re term synflood-protect from source-prefix-list mgmt-nets
set firewall family inet filter protect-re term synflood-protect from protocol tcp
set firewall family inet filter protect-re term synflood-protect from tcp-flags "(syn & !ack) | fin| rst"
set firewall family inet filter protect-re term synflood-protect then policer limit-100k
set firewall family inet filter protect-re term synflood-protect then accept
附加配置:
set policy-options prefix-list bgp-neighbors apply-path "protocols bgp group <> neighbor <>"
此命令用于自动匹配全部全局下BGP邻居的IP地址,妈妈不再用担忧我须要一个个配地址啦!
set policy-options prefix-list ipv4-interfaces apply-path "interfaces <> unit <> family inet address <*>"
此命令用于自动匹配路由器设备上配置的全部IPv4地址。
PS,可能有些朋友对于Junos的这些好玩而高效的特性不太理解,那请移步我以前写的另一篇Juniper JUNOS技术文:回车恐惧症?13个 JUNOS 技巧助你轻松无忧配置网络
条目注释:第二条为容许隔壁邻居老王主动发起BGP到此路由器,目标地址范围为全部本地路由器的IP地址。请注意有一条是“destination-port”,目标端口179。由于这个Firewall Policy最终是应用于路由引擎的入方向,因此目标端口179是朝向路由器自己。
set firewall family inet filter protect-re term allow-bgp from source-prefix-list bgp-neighbors
set firewall family inet filter protect-re term allow-bgp from destination-prefix-list ipv4-interfaces
set firewall family inet filter protect-re term allow-bgp from protocol tcp
set firewall family inet filter protect-re term allow-bgp from destination-port bgp
set firewall family inet filter protect-re term allow-bgp then accept
条目注释:第三条为容许OSPF协议
set firewall family inet filter protect-re term allow-ospf from source-prefix-list ipv4-interfaces
set firewall family inet filter protect-re term allow-ospf from destination-prefix-list ospf-allrouters
set firewall family inet filter protect-re term allow-ospf from destination-prefix-list ipv4-interfaces
set firewall family inet filter protect-re term allow-ospf from protocol ospf
set firewall family inet filter protect-re term allow-ospf then accept
条目注释:第四条为容许SSH协议,并且经过Policer限速最高10Mbps的SSH流量,正常ssh管理流量通常都不会超过此数值
set firewall family inet filter protect-re term allow-ssh from source-prefix-list mgmt-nets
set firewall family inet filter protect-re term allow-ssh from protocol tcp
set firewall family inet filter protect-re term allow-ssh from destination-port ssh
set firewall family inet filter protect-re term allow-ssh then policer limit-10m
set firewall family inet filter protect-re term allow-ssh then accept
条目注释:第五条为容许SNMP协议,限速1Mbps
set firewall family inet filter protect-re term allow-snmp from source-prefix-list snmp-servers
set firewall family inet filter protect-re term allow-snmp from protocol udp
set firewall family inet filter protect-re term allow-snmp from destination-port snmp
set firewall family inet filter protect-re term allow-snmp then policer limit-1m
set firewall family inet filter protect-re term allow-snmp then accept
条目注释:第六条为容许NTP协议,限速32kbps
set firewall family inet filter protect-re term allow-ntp from source-prefix-list ntp-servers
set firewall family inet filter protect-re term allow-ntp from source-prefix-list localhost
set firewall family inet filter protect-re term allow-ntp from protocol udp
set firewall family inet filter protect-re term allow-ntp from destination-port ntp
set firewall family inet filter protect-re term allow-ntp then policer limit-32k
set firewall family inet filter protect-re term allow-ntp then accept
条目注释:第七条为容许Radius协议,限速32kbps
set firewall family inet filter protect-re term allow-radius from source-prefix-list radiusservers
set firewall family inet filter protect-re term allow-radius from protocol udp
set firewall family inet filter protect-re term allow-radius from source-port radius
set firewall family inet filter protect-re term allow-radius then policer limit-32k
set firewall family inet filter protect-re term allow-radius then accept
条目注释:第八条为限制ICMP分片包
set firewall family inet filter protect-re term icmp-frags from is-fragment
set firewall family inet filter protect-re term icmp-frags from protocol icmp
set firewall family inet filter protect-re term icmp-frags then syslog
set firewall family inet filter protect-re term icmp-frags then discard
条目注释:第九条为容许常见ICMP消息,并限速1Mbps
set firewall family inet filter protect-re term allow-icmp from protocol icmp
set firewall family inet filter protect-re term allow-icmp from icmp-type echo-request
set firewall family inet filter protect-re term allow-icmp from icmp-type echo-reply
set firewall family inet filter protect-re term allow-icmp from icmp-type unreachable
set firewall family inet filter protect-re term allow-icmp from icmp-type time-exceeded
set firewall family inet filter protect-re term allow-icmp then policer limit-1m
set firewall family inet filter protect-re term allow-icmp then accept
条目注释:第十条为容许常见Traceroute消息,并限速1Mbps
set firewall family inet filter protect-re term allow-traceroute from protocol udp
set firewall family inet filter protect-re term allow-traceroute from destination-port 33434-33523
set firewall family inet filter protect-re term allow-traceroute then policer limit-1m
set firewall family inet filter protect-re term allow-traceroute then accept
条目注释:第十一条为容许路由器发起的SSH,BGP可以被容许返回路由器,正如以前所说,Juniper的Firewall policy就是Cisco 的ACL,是没有session状态化,因此返回路由器的流量还须要明确指定。并限速10Mbps
set firewall family inet filter protect-re term tcp-established from protocol tcp
set firewall family inet filter protect-re term tcp-established from source-port ssh
set firewall family inet filter protect-re term tcp-established from source-port bgp
set firewall family inet filter protect-re term tcp-established from tcp-established
set firewall family inet filter protect-re term tcp-established then policer limit-10m
set firewall family inet filter protect-re term tcp-established then accept
条目注释:第十二条就很容易理解了,除了以上全部指定的流量,其余流量所有丢弃。不回应ICMP unreachable消息。
set firewall family inet filter protect-re term default-deny then log
set firewall family inet filter protect-re term default-deny then syslog
set firewall family inet filter protect-re term default-deny then discard
在Juniper设备上,lo0接口设计比较巧妙,他除了你们知道例如router-id,或者永不down的接口等经常使用功能之外。更重要的是,它是通往路由引擎的特殊通道。若是你想限制到达路由引擎的流量,相比Cisco使用control-plane policy,你只须要在Juniper的lo0上绑定一个Firewall policy便可。
完成firewall policy的配置之后,让咱们把策略应用到还回lo0接口,从而限制了到达路由引擎的流量。
set interfaces lo0 unit 0 family inet filter input protect-re
除了以上描述的安全加固之外,你们平常工做中应该针对路由器上的二层冗余网关协议,三层路由协议以及其余协议经过md5等密码加固:
1.设定VRRP认证密码。
2.设定OSPF,RIP,BGP认证密码。
3.设定ldp,rsvp等MPLS协议认证密码。
这篇文章,咱们一块儿讨论了如何在网络 攻 击 日益猖獗的今天,针对网络设备进行安全加固的经验分享和案例分析。
固然,每个设备厂家对于自身设备都有相关的安全加固方法,Juniper的加固方式并不彻底适用于Cisco和华为。
可是,咱们作网工的,重要的在于思路两字。配置是不同的,可是思路都是相通的。
我话多,还密密麻麻的放了一堆命令行。能看到这里的朋友们耐心可不是通常的好啊,往后必成大器!