XieJava's blog

记录最好的自己


  • 首页

  • 分类

  • 标签

  • 归档

  • 关于

网络信息安全管理之资产、脆弱性、威胁、风险

发表于 2021-08-19 | 更新于: 2025-08-10 | 分类于 技术 , 网络安全 | | 阅读次数:
字数统计: 2.5k | 阅读时长 ≈ 8

​
网络信息安全管理是指对网络资产采取合适的安全措施,以确保网络资产的可用性、完整性、可控制性和抗抵赖性,不致因网络设备、网络通信协议、网络服务、网络管理受到人为和自然因素的危害,而导致网络中断、信息泄露或破坏。网络信息管理对象主要包括网络设备、网络通信协议、网络操作系统、网络服务、安全网络管理等在内的所有支持网络系统运行的软、硬件总和。网络信息安全管理的目标就是通过适当的安全防范措施,保障网络的运行安全和信息安全,满足网上业务开展的安全要求。

网络信息安全管理要素由网络管理对象、网络威胁、网络脆弱性、网络风险、网络保护措施组成。由于网络管理对象自身的脆弱性,使得威胁的发生成为可能,从而造成了不同的影响,形成了风险。网络安全管理实际上就是风险控制,其基本过程是通过网络管理对象的威胁和脆弱性进行分析,确定网络管理对象的价值、网络管理对象威胁发生的可能性、网络管理对象的脆弱程度,从而确定网络管理对象的风险等级,然后据此选取合适的安全保护措施,降低网络管理对象的风险。

安全风险管理的三要素分别是资产、威胁和脆弱性,脆弱性的存在将会导致风险,而威胁主体利用脆弱性产生风险。网络攻击主要利用了系统的脆弱性。由于网络管理对象自身的脆弱性,使得威胁的发生成为可能,从而造成了不同的影响,形成了风险。

网络信息安全管理要素

网络信息安全管理对象是企业、机构直接赋予了价值而需要保护的资产。它的存在形式包括有形的和无形的,如网络设备硬件、软件文档是有形的,而服务质量、网络带宽是无形的。

常见的网络信息安全管理对象信息安全资产分类如下:

分类 示例
数据 保存在信息媒介上的各种数据资料,包括源代码、数据库数据、系统文档、运行管理规程、计划报告、用户手册、各类纸质的文档等
软件 系统软件:操作系统、数据库管理系统、语句包、开发系统
应用软件:办公软件、数据库软件、各类工具软件等
源程序:各种共享源代码、自行或合作开发的各种代码等
硬件 网络设备:路由器、网关、交换机等
计算机设备:大型机、小型机、服务器、工作站、台式计算机、便携计算机等
存储设备:磁带机、磁盘阵列、磁带、光盘、软盘、移动硬盘等
传输线路:光纤、双绞线等
保障设备:UPS、变电设备、空调、保险柜、文件柜、门禁、消防设施等
安全设备:防火墙、入侵检测系统、身份鉴别等
其他:打印机、复印机、扫描仪、传真机等
服务 信息服务:对外依赖该系统开展的各类服务
网络服务:各种网络设备、设施提供的网络连接服务
办公服务:为提高效率而开发的管理信息系统,包括各种内部配置管理、文件流转管理等服务
人员 掌握重要信息和核心业务的人员,如主机维护主管、网络维护主管及应用项目经理等
其他 企业形象、客户关系等

脆弱性:脆弱性也可称为弱点或漏洞,是资产或资产组中存在的可能被威胁利用造成损害的薄弱环节。脆弱性一旦被威胁成功利用就可能对资产造成损害。脆弱性可能存在于物理环境、组织、过程、人员、管理、配置、硬件、软件和信息等各个方面。

脆弱性是与资产紧密相连的,是其固有的属性,客观存在是绝对的,但存在脆弱性不一定就绝对造成安全事件。如果没有被相应的威胁利用,单纯的脆弱性本身不会对资产造成伤害。

类型识别对象脆弱性子类
技术脆弱性 物理环境 机房场地、机房防火、机房供配电、机房防静电、机房接地与防雷、电磁防护、通讯线路的保护、机房区域防护、机房设备管理等
网络结构 网络结构设计、网络传输加密、网络设备安全漏洞、边界保护、外部访问控制策略、内部访问控制策略、网络设备安全配置等
服务器/系统软件 补丁安装、物理保护、用户帐号、口令策略、资源共享、事件审计、访问控制、新系统配置(初始化)、注册表加固、网络安全、系统软件安全漏洞、软件安全功能管理等
数据库 补丁安装、鉴别机制、口令机制、访问控制、网络和服务设置、备份恢复机制、审计机制等
应用系统 审计机制、审计存储、访问控制策略、数据完整性、通讯、鉴别机制、密码保护等
应用中间件 协议安全、交易完整性、数据完整性等
管理脆弱性 技术管理 物理和环境安全、通讯和操作管理、访问控制、系统开发与维护、业务连续性等
组织管理 安全策略、组织安全、信息资产分类与控制、人员安全、符合性等
威胁:对资产或组织可能导致负面结果的一个事件的潜在源。威胁利用管理对象自身的脆弱性,采用一定的途径和方式,对评估对象造成损害或损失,从而形成风险。

威胁源分三类:自然威胁、人为威胁和环境威胁。

种类 描述 威胁子类
软硬件故障 对业务实施或系统运行产生影响的设备硬件故障、通讯链路中断、系统本身或软件缺陷等问题 设备硬件故障、传输设备故障、存储媒体故障、 系统软件故障、应用软件故障、数据库软件故障、开发环境故障等
物理环境影响 对信息系统正常运行造成影响的物理环境问题和自然灾害 断电、静电、灰尘、潮湿、温度、洪灾、火灾、地震、暴风雨、潮汐、污染、空调设备故障、鼠蚁虫害、电磁干扰等
操作失误 应该执行而没有执行相应的操作,或无意执行了错误的操作 维护错误、操作失误、提供错误的指南或操作信息等
管理不到位 安全管理无法落实或不到位,从而破坏信息系统正常有序运行 管理制度和策略不完善、管理规程缺失、职责不明确、监督控管机制不健全等
恶意代码 故意在计算机系统上执行恶意任务的程序代码 病毒、特洛伊木马、蠕虫、陷门、间谍软件、窃听软件、携带恶意软件的垃圾邮件、流氓安全软件、即时消息垃圾邮件等
越权或滥用 通过采用一些措施,超越自己的权限访问了本来无权访问的资源,或者滥用自己的权限,做出破坏信息系统的行为 非授权访问网络资源、非授权访问系统资源、滥用权限非正常修改系统配置或数据、滥用权限泄露秘密信息、非授权使用存储介质等
网络攻击 利用工具和技术通过网络对信息系统进行攻击和入侵 网络探测和信息采集、漏洞探测、嗅探(账号、口令、权限等)、用户身份伪造和欺骗、用户或业务数据的窃取和破坏、系统运行的控制和破坏、拒绝服务攻击、僵尸网络、隐蔽式下载、名誉劫持、网络黑客的入侵等
物理攻击 通过物理的接触造成对软件、硬件、数据的破坏 物理接触、物理破坏、盗窃、勒索、罢工、内部员工蓄意破坏等
泄密 信息泄露给不应了解的他人 内部信息泄露、外部信息泄露等
篡改 非法修改信息,破坏信息的完整性使系统的安全性降低或信息不可用 篡改网络配置信息、篡改系统配置信息、篡改安全配置信息、篡改用户身份信息或业务数据信息等
抵赖 不承认收到的信息和所作的操作和交易 原发抵赖、接受抵赖、第三方抵赖等

在这里可以看出威胁与攻击的区别和关系。攻击是威胁的一种类型,攻击是人为的蓄意的有计划采取的恶意破坏的行动。一般来说攻击比较容易检测到。

网络信息安全风险是指特定的威胁利用网络管理对象所存在的脆弱性,导致网络管理对象的价值受到损害或丢失的可能性。简单的说,网络安全风险就是网络威胁发生的概率和所造成影响的乘积。

网络安全风险分析

本文整理自《信息安全工程师教程第2版》

作者博客:http://xiejava.ishareread.com/

​

初识威胁情报

发表于 2021-06-25 | 更新于: 2025-08-10 | 分类于 技术 , 网络安全 | | 阅读次数:
字数统计: 3.2k | 阅读时长 ≈ 10

初识威胁情报

随着网络空间的广度和深度不断拓展,当今网络攻击的多样化、复杂化、专业化,安全对抗日趋激烈,传统的安全思维模式和安全技术已经无法有效满足政企客户安全防护的需要,新的安全理念、新的安全技术不断涌现。业界普遍认同:仅仅防御是不够的,更加需要持续地检测与响应。而要做到更有效的检测与更快速的响应,安全情报必不可少。有效的威胁情报可以提高安全产品的对恶意攻击识别能力,提高溯源效率,并及时采取应对措施,减少甚至消除攻击的危害。

本文收集了互联网上的威胁情报的相关知识信息,试图从威胁情报的定义、分类、应用三个方面对威胁情报进行初步的认识。

一、什么是威胁情报

安全情报包含漏洞、资产、威胁、风险、运行和事件等多维度安全知识在内的知识集合。安全情报是一个宽泛的概念,主要包括了威胁情报、漏洞情报、事件情报以及基础数据情报。

根据Gartner对威胁情报的定义,威胁情报是一种基于证据的知识,包括了情境、机制、指标、影响和操作建议。威胁情报描述了现存的、或者是即将出现针对资产的威胁或危险,并可以用于通知主体针对相关威胁或危险采取某种响应。简单来说威胁情报是可以针对相关威胁采取行动的知识,可以帮助企业和组织快速了解到敌对方对自己的威胁信息,从而帮助他们提前做好威胁防范、更快速地进行攻击检测与响应、更高效地进行事后攻击溯源。

从严格意义上来讲,威胁情报和漏洞情报是不同的两种安全情报,不应该将它们混淆。从防御者的角度来看,获取漏洞情报是为了知己,而获取威胁情报是为了知彼。

二、威胁情报分类

根据使用方法不同,威胁情报可分为三类

战略情报
包括安全调查报告、趋势分析、行业状况等战略层面的情报,可供企业CISO或安全负责人制定安全规划和投资策略,将有限的资源投入到最需要的地方。

技术情报
包括各种威胁的丰富化情报,以及相关信息。通过攻击事件相关的IP和域名的详细信息,以及攻击者相关的攻击事件及样本,安全分析师可以对重要安全事件做准确的分析,包括报警确认、攻击影响范围、攻击链以及攻击目的、技战方法等,并进行相应的安全预测和防范。

战术情报
包括各种面向安全设备或系统的,易于执行的高可信度威胁IOC (Indicator of Compromise)。安全运营团队利用高质量的威胁IOC可帮忙安全系统自动检测未知威胁,及早产生预警和通知,快速响应恶意攻击,提高企业安全防护能力。

根据数据本身威胁情报可以分为HASH值、IP地址、域名、网络或主机特征、TTPs(Tactics、Techniques & Procedures,工具、技术、过程)等
威胁情报

HASH值:一般指样本、文件的HASH值,比如MD5和SHA系列。由于HASH函数的雪崩效应,文件任何微弱地改变,都会导致产生一个完全不同也不相关的哈希值。这使得在很多情况下,它变得不值得跟踪,所以它带来的防御效果也是最低的。

​​IP地址:常见的指标之一,通过IP的访问控制可以抵御很多常见的攻击,但是又因为IP数量太大,任何攻击者均可以尝试更改IP地址,以绕过访问控制。

​​域名:有些攻击类型或攻击手法也或者出于隐藏的目的,攻击者会通过域名连接外部服务器进行间接通信,由于域名需要购买、注册、与服务器绑定等操作使得它的成本相对IP是比较高的,对域名的把控产生的防御效果也是较好的。但是对于高级APT攻击或大规模的团伙攻击,往往会准备大量备用域名,所以它的限制作用也是有限。

​​网络或主机特征:这里指的特征可以是很多方面,比如攻击者浏览器的User-Agent、登录的用户名、访问的频率等,这些特征就是一种对攻击者的描述,这些情报数据可以很好的将攻击流量从其他的流量中提取出来,就会产生一种较好的防御效果。

​​攻击工具:这里是指获取或检测到了攻击者使用的工具,这种基于工具的情报数据能够使得一批攻击失效,攻击者不得不进行免杀或重写工具,这就达到了增加攻击成本的目的。

​​TTPs:Tactics、Techniques & Procedures的缩写,指攻击者所使用的攻击策略、手法等,掌握了些信息就能明白攻击者所利用的具体漏洞,就能够针对性的布防,使得攻击者不得不寻找新的漏洞,所以这也是价值最高的情报数据。

从应用领域分类可以分为,机读情报(MRTI)、人读情报(PRTI)、画像情报和知识情报四类

机读情报:可供机器理解和使用的情报,侧重于高频次、高准确性、强实效的应用场景。
人读情报:信息量更大,需要更多的上下文、背景信息支持人工分析研判和应急响应。
画像情报:针对单一的威胁、资产、漏洞、事件进行分析,形成相应的知识集,概念上类似于用户画像。
知识情报:基于先验知识的规则模型和算法。这些模型和算法与平台之间高度匹配,可以快速导入平台,结合平台获得的各类数据、信息和情报,实现对某类特定类别的威胁、风险或特定事件的感知、分析、决策和处置。消费对象和应用场景集中于态势感知、SOC/SIEM类分析平台。

其中机读情报应用最广,基本已经被各大安全厂商在设备中集成,多以IoC或者Yara的形式存储。人读情报的格式比较宽泛,包括安全公告、漏洞预警、病毒/APT分析文章都属于这个类别。画像情报则是介于机读和人读情报中的一种,通常用结构化的标签和非结构化的备注来描述,针对单一的威胁、资产、漏洞、事件进行分析形成的知识集,也可以加入场景标注。而知识情报的提法主要是针对态势感知、SOC、SIEM类平台产品的,平台内置的先验规则如关联规则和知识图谱都属于这一类。

从情报市场来源来分可分为开源情报(OSINT)、商用情报

开源情报:Open Source Threat Intelligence 开源情报,免费从公开信息来源进行数据采集和分析后形成的情报。
商用情报:Commercial Threat Intelligence 商业情报,在威胁情报领域,根据用户需求提供的付费情报。一般来说付费的准确度要稍高。

三、威胁情报有什么用

溯源分析
威胁情报记录了外部攻击的大量信息,可以让安全分析师了解攻击方的情报,解决攻防战中信息不对称的困境。特别是在分析告警、进行溯源分析时,往往会在威胁情报系统中查询相关攻击 IP、Domain 等的具体信息,看看有没有攻击线索和方式,可以用作告警确认和进一步处理的依据。

检测告警
数字化时代的黑客的攻击也逐渐自动化、智能化,每天企业都会受到大量的外部攻击,依靠人去一个个分辨是不现实的,企业往往部署了可以对外部流量或外部日志进行自动化分辨的安全设备和系统,比如 FW 、 IDPS 、 SIEM 或大数据安全分析平台。如果将最新的威胁情报传输到这些 安全设备和系统中,就可以极大的提高这些设备系统对新型攻击的检测能力。
情报厂商往往将这些有价值的情报以IOC 的形式发布出来,用户可以将这些 IOC 导入到部署的安全设备系统中,从而可以快速实现对新型威胁攻击的识别、告警和处理。

安全预防
防守不是最好的策略,在如今企业每日都面对各式各样的网络攻击,单纯的被动防守已经无法阻挡黑客的攻击。如果能预知攻击并提前预防就可以减小不少攻击的损失。
通过漏洞情报可以在攻击到来之前获悉攻击的信息,事先做好准备,修复相关漏洞,加强安全防护,避免威胁攻击带来的危害。

安全规划
安全工作是一个系统性的工程,需要方方面面的知识和信息。为了做好安全规则,需要了解威胁攻击的总体现状和未来发展趋势,同时还要提供相关信息用以说明管理层提供相关投资。高级威胁情报信息可以帮助安全团队领导了解威胁攻击的状况以及预测,方便企业制定好相应安全规划和投资。

实用的情报才是最好的情报
情报的“ART”原则,符合“ART”原则的才是对企业有用的情报。
Accuracy(准确性):情报是否足够详细和可靠
威胁情报的作用是为安全团队提供相关信息并指导决策,如果情报不准确,不但没有产生价值,反而会对组织的安全决策会造成负面影响。
Relevance(相关性):情报是否可适用于你的业务或行业
不是所有的信息都是适用的,相关性较弱的情报会导致分析人员的繁重任务,并且会导致其他有效情报的时效性失效。
Timeliness(时效性):在你利用些情报前,情报是否已经失效
威胁情报是信息的集合,凡是信息,都具有时效性。往往情报的有效时间会很短,攻击者会为了隐藏自己的踪迹不断的更换一些特征信息,比如说IP地址、手法等等。

威胁情报要发挥价值,核心在于情报信息的共享。只有建立起一套威胁情报共享的机制,让有价值的威胁情报流动起来,才能真正加速安全防御的效率、效能,取得切实的防御效果。
威胁情报的生态系统包括两个方面:威胁情报的生产和威胁情报的消费。
威胁情报的生产就是通过对原始数据/样本的采集、交换、分析、追踪,产生和共享有价值的威胁情报信息的过程。
威胁情报的消费是指将企业和客户网络中的安全数据与威胁情报进行比对、验证,以及企业和客户方的安全分析师利用威胁情报进行分析的过程。
威胁情报的生产和消费构成了一个情报生态系统的闭环。只有生产没有消费,威胁情报的价值无法实现;而只有消费没有生产,威胁情报就成了无源之水。

对于政企客户而言,威胁情报的应用/消费是实现情报价值的关键。各类安全设备都应该能够消费威胁情报,但最关键的是安全管理平台/SOC对威胁情报的应用


博客地址:http://xiejava.ishareread.com/


“fullbug”微信公众号

关注:微信公众号,一起学习成长!

如何理解企业安全能力框架(IPDRR)

发表于 2021-06-17 | 更新于: 2025-08-10 | 分类于 技术 , 网络安全 | | 阅读次数:
字数统计: 1.6k | 阅读时长 ≈ 5

企业安全能力框架(IPDRR)是美国国家标准与技术研究所(National Institute of Standards and Technology)的网络安全框架(简称NISTCSF )。第一个版本于2014年发布,旨在为寻求加强网咯安全防御的组织提供指导。企业可以根据自身需求加强网络安全防御。
企业网络安全系统框架
企业网络安全系统框架(参考IPDRR)

随着社会数字化转型的深入,网络攻击事件日益增多、破坏力逐步增强。安全方法论也正逐步从”针对威胁的安全防御”向“面向业务的安全治理”(IPDRR)等演进。

IPDRR能力框架模型包括风险识别(Identify)、安全防御(Protect)、安全检测(Detect)、安全响应(Response)和安全恢复(Recovery)五大能力,从以防护为核心的模型,转向以检测和业务连续性管理的模型,变被动为主动,最终达成自适应的安全能力。

IPDRR模型体现了安全保障系统化的思想,管理与技术结合来有效保障系统核心业务的安全。通过持续的安全检测来实现IPDRR的闭环安全,为用户提供完善的安全能力框架和支撑体系。

具体来说IPDRR主要包含了五个部分:
识别(Identify):识别网络资产及风险,是指对系统、资产、数据和网络所面临的安全风险的认识及确认
保护(Protect):保护网络,是指制定和实施合适的安全措施,确保能够提供关键基础设施服务。
检测(Detect):发现攻击,在攻击产生时即时监测,同时监控业务和保护措施是否正常运行,制定和实施恰当的行动以发现网络安全事件
响应(Respond):响应和处理事件,指对已经发现的网络安全事件采取合适的行动。具体程序依据事件的影响程度来进行抉择,主要包括:事件调查、评估损害、收集证据、报告事件和恢复系统
恢复(Recover):恢复系统和修复漏洞,将系统恢复至正常状态,同时找到事件的根本原因,并进行预防和修复

可以参考大家对实体财物是怎么保护的就很容易理解了。举个例子,大家如何对自己的私有财产是怎么保护的呢?
第一步识别(Identify)肯定是识别出有哪些资产分别都有什么风险吧,比如家里的现金、金银珠宝、贵重电器、房产证、82年的拉菲、92年的茅台等等对于我们来说都是属于我们要保护的资产,这些都有被小偷偷走,被破坏等风险。所以我们需要采取一定的措施将这些资产给保护起来。
比如现金、金银珠宝、房产证等放在保险柜里,82年的拉菲、92年的茅台等搞个酒窖上好锁,家里的房子装好防护门、防盗窗等,这些就是第二步保护(Protect),对需要保护的资产做好基本的防护。做到了这些够不够呢?显然是不够的,这只是做好被动防御,我们还要做好主动防御,也就是第三步检测(Detect),这时候我们可以装一些监控设备摄像头、传感器等等,看时时刻刻监控我们所要保护的资产看有没有什么情况,还可以雇佣一批保安7*24小时巡逻实时监测。响应(Respond)也就是发现了什么风吹草动,就采取响应的措施,比如如果是有人破门而入就及时的告警,制止,报警。恢复(Recover)就是对易发生的损失进行恢复,如有人破门而入把门给搞坏了,就得把门重新修好或换一个新的级别更高更安全的门。

企业的网络安全也是一样的。首先要识别自己企业的网络安全资产如重要系统、服务器等都部署在哪里,有没有漏洞,基线配置有没有合规。然后需要做好基本的防护,比如在出入口部署防火墙、主机装EDR、Web服务器要在WAF的保护下、做好访问控制、部署IPS设备等等。有了基础的防护设备以后要做好检测响应比如部署NTA做好流量检测分析、部署SIEM或日志分析系统将这些基础防护设备的告警精心接入做好安全告警的检测分析。通过检测设备发现网络安全事件以后要采取响应的响应措施,比如发现漏洞要进行补洞加固等、发现攻击封堵IP等,可以通过SOAR安全编排与自动化响应平台对人、工具、流程进行协同提高对于安全事件的响应能力。最后是恢复,也就是对已经造成的破坏进行恢复至正常状态,对于失陷的主机进行离网、杀毒、重装、恢复等。

本文试图对市面上常见的安全产品进行分类来映射到IPDRR的五大能力
识别(Identify)提供识别能力的产品包括资产管理平台、资产测绘平台、基线管理平台、漏洞扫描工具等。
保护(Protect)提供保护能力的产品包括主机防御类EDR、VPN、4A、防火墙、IPS、WAF、抗DOS等
检测(Detect) 提供威胁检测能力的产品包括IDS、NTA、蜜罐、恶意代码检测、用户异常行为检测等。
响应(Respond):提供响应能力的产品包括SIEM、安全审计、态势感知、SOAR等
恢复(Recover):提供恢复能力的产品包括NG-SOC,NG-SOC理论上应该是覆盖了IPDRR所有的能力。
IPDRR产品能力映射

当然企业安全能力不能够仅仅的依靠工具,是人、策略、流程、工具综合能力的体现。企业可以根据自身需求参考IPDRR能力框架模型加强网络安全能力建设,哪里欠缺补哪里,通过管理与技术结合来有效保障系统核心业务的安全。


博客地址:http://xiejava.ishareread.com/


“fullbug”微信公众号

关注:微信公众号,一起学习成长!

再见2020,2021我来了!

发表于 2021-01-01 | 更新于: 2025-08-10 | 分类于 人生 | | 阅读次数:
字数统计: 936 | 阅读时长 ≈ 3

今天是2021年1月1日,按照惯例应该是回忆过去展望未来的一天。

回忆过去:

在过去的一年里,曾今在2020年立下的flag是否都实现了呢?

2020的flag:

  • 看完10本英文原著。
  • 爱分享网站运营PV要达5W,UV达5千
  • 每周至少发一篇微信公众号文章
  • 开通自己的博客
  • 每周至少跑步3次

2020年完成得最好的是看完了10本英文原著,因为2020过春节到第一季度受疫情影响,老老实实待在家里。在5月份就看完了10本英文原著。但是后来却没有坚持下来。看英文原著的热情慢慢的消退下来。一是看了这么多本原著似乎英文还是那么的菜打击了自己的信心,二是看英文原著比较耗时间4、5月份开始正常上班后时间就显得比较紧张了。后来7月份的时候准备考通信工程师的考试,时间更加紧张。所以继续看英文原著的事情就放下来了。英文很重要,学习英文2020年还是要继续坚持。

爱分享网站因为各种原因在7月份的时候基本上已经停了,但是服务器还在续费。其实在5,6月份以前网站的访问量等各方面指标都一直在上升,因为疫情大家可能待在家里看书的需求量大增,网站的访问量一直都在持续的上升。如果网站不停基本上运营的flag还是可以达到的。现在的环境对于个人网站来说很艰难了。网站还会继续下去主要内容会以自己的博客为主了。

因为网站基本停了,一直在想网站生存的方向。微信公众号的文章也比较少更新了。还是自己肚子里的货太少了,写了一段时间以后发现没啥东西写了,坚持不下去了。真佩服那些现在还在每天更新的微信公众号。

经过多方比较决定用hexo来搭建自己的博客。写博客已经被认为是很古老的方式了,一直以来都很羡慕那些一直坚持下来的优质博主。想通过博客的方式记录自己的学习、生活、工作。2020年共写了24篇博客,产量不是很高,说明思考和积累还是不够。

跑步锻炼,在夏天天气好的时候还是坚持得不错,每周基本上坚持了一次。天气渐渐冷了起来以后懒筋发作很少出去跑步了。看着自己日益发胖的体重,要深刻的检讨一下。

2020年全年阅读量有所减少在豆瓣上标记只读了29本书。因为2020年中旬的时候决定考通信工程师和信息安全工程师,所以其他书看得比较少了。经过几个月的努力,顺利通过了通信工程师和信息安全工程师的考试。虽然2020年年初立的flag很多都没有完成,完成了的效果也不是特别好,但是过了通信工程师和信息安全工程师心里稍微有点宽慰。毕竟2020年努力过。

展望未来:

不管怎么样,2020年已经成为过去式了。崭新的2021已经来到,先立下2021年的flag。

2021年flag:

  • 考CISP
  • 考一建
  • 发两篇论文
  • 至少写30篇博客文章
  • 完成12本英文原著
  • 完成50本书籍的阅读量

2021加油!

工作这么多年了,我为什么还在考证

发表于 2020-12-21 | 更新于: 2025-08-10 | 分类于 人生 | | 阅读次数:
字数统计: 1.1k | 阅读时长 ≈ 3

学习学习

工作这么多年了,我为什么还在考证?

因为以前一直没有考过啊!

毕业以来参加工作后,一直以来认为考证没有啥用处。一方面,因为找工作太过顺利,那会儿找工作也没有看到别人拿什么证去找工作,也没有看到那家公司的招聘广告上写需要什么什么证书。另一方面,由于才从学校出来对于学习考试有种天然的排斥。想想这么多年以来一直都是在学习考试。好不容易毕业了那还不好好放松一下。现在回想起来真是too young,too simple。

工作这么多年,都是在从事研发相关的工作。一开始写代码,要学的东西挺多的,从毕业时候的ASP到Java。能够完成工作任务,能够做出东西来才是硬道理。后来做项目经理,产品经理也是没有经过系统的培训和学习,在项目中磨练在项目中成长。在公司也带了几个重点大项目,项目也交付得令公司和客户比较满意。想想这研发和项目管理就那么回事。貌似所有的公司都是一样,不管你用什么办法,能够搞定项目的就是好的项目经理。至于有没有证没人关注。甚至公司过CMMI5的时候,我带的项目被抽为参审项目,我还没有系统的学过项目管理。虽然CMMI5已经过了,但是总感觉过得挺虚的。基本上就是在咨询公司的指导下,要你干什么就干什么,要你准备什么就准备什么。至于为啥是这样完全是懵逼。

人过中年,似乎不管到哪里都充满着危机感。以前自以为自己技术很牛逼,项目管理方面也是相当的OK。随着时间的推移这种自信心慢慢的越来越消退。大家都说搞IT的就是吃青春饭。就像随着年龄的增长,身体越来虚一样,心里也是越来越虚。心里虚了以后就想自己应该多学习提高自己。但是一段时间发现要学的东西实在是太多了,技术的、管理的。东一下西一下的,也没有什么效果。后来自己总结了一下,没有目标的学习都是假装在学习,只不过是安慰自己罢了。一定要给自己定个目标要学哪个方向,而检验学习效果的办法非常简单粗暴–考证。以考促学。能够考证通过不能说明你学得有多么的精深,至少也说明你达到了基本的平均水平。没有考试就没有压力,一本书拖拖拉拉看了一年还在看。而考试时间临近的压力对于深度拖延症患者也是一个很好的治愈方式。

就这样,我给自己制定的第一个学习目标就是系统的学习项目管理的理论体系,所以报了软考的信息系统项目管理师。经过半年多的学习顺利的拿到了信息系统项目管理师的证。学习的时候还是有一些感触,原来自己在平时的项目管理工作中还是有理论支撑的,人家在书中就已经写了。一些平时没有注意考虑到的点书上也有总结。回想起自己带的项目过CMMI5和过ISO认证等,以及公司的项目管理体系和质量管理体系结合书中的知识点,至少把我零散的一些项目管理知识和经验给系统化、体系化的联系起来了,让我对项目管理有了更深切的理解。尤其是在后来信息系统项目管理师考试写论文的时候,就能够可以很好的理论联系实践。

嗯,工作这么多年,我终于可以持证上岗了!


作者博客:http://xiejava.ishareread.com/


“fullbug”微信公众号

关注微信公众号,一起学习、成长!

网络信息安全管理要素和安全风险评估

发表于 2020-12-04 | 更新于: 2025-08-10 | 分类于 技术 , 网络安全 | | 阅读次数:
字数统计: 1.6k | 阅读时长 ≈ 5

网络信息安全管理要素由网络管理对象、网络威胁、网络脆弱性、网络风险、网络保护措施组成。
网络信息安全管理要素
由于网络管理对象自身的脆弱性,使得威胁的发生成为可能,从而造成了不同的影响,形成了风险。

网络安全管理实际上就是风险控制,其基本过程是通过网络管理对象的威胁和脆弱性进行分析,确定网络管理对象的价值、网络管理对象威胁发生的可能性、网络管理对象的脆弱程度,从而确定网络管理对象的风险等级,然后据此选取合适的安全保护措施,降低网络管理对象的风险。

所有的安全管理、安全服务、安全技术等都是围绕网络信息安全管理要素来的。

网络安全风险评估是评价网络信息系统遭受潜在的安全威胁所产生的影响。

网络安全风险,是指由于网络系统所存在的脆弱性,因人为或自然的威胁导致安全事件发生所造成的可能性。网络风险评估就是评估威胁者利用网络资产的脆弱性,造成网络资产损失的严重程度。

网络安全风险评估过程,主要包括网络安全风险评估准备、资产识别、威胁识别、脆弱性识别、已有的安全措施分析、网络安全风险分析、网络安全风险处置与管理等。
网络安全风险评估过程
资产识别包含“网络资产鉴定”和“网络资产价值估算”。前者给出评估所考虑的具体对象,确认网络资产种类和清单,是整个评估工作的基础。常见的网络资产主要分为网络设备、主机、服务器、应用、数据和文档资产等六个方面。

“网络资产价值估算”是某一具体资产在网络系统中的重要程度确认。

威胁是指可能对评估对象造成损害的外部原因。威胁利用评估对象自身的脆弱性,采用一定的途径和方式,对评估对象造成损害或损失,从而形成风险,威胁识别是对网络资产有可能受到的安全危害进行分析,一般从威胁来源、威胁途径、威胁意图等几个方面来分析。

脆弱性是指评估对象存在一个或多个脆弱的管理、技术、业务方面的漏洞,这些漏洞可能会被威胁所利用。脆弱性识别是指通过各种测试方法,获得网络资产中所存在的缺陷清单,这些缺陷会导致对信息资产的非授权访问、泄密、失控、破坏或不可用、绕过已有的安全机制,缺陷的存在将会危及网络资产的安全。

任务 输出文档 文档内容
风险评估准备 会议记录并确认需要评估的系统、评估计划和评估程序 评估系统、评估计划和内容安排,双方负责人及需要明确的协调工作
访谈 针对业务系统进行技术安全和管理安全评估的访谈表 业务系统描述、运营情况和用户群体,并了解业务管理流程
文档审查(资产识别) 资产审查记录和业务系统审查记录 资产管理台账、网络拓扑图、业务运营管理制度和责任人
威胁识别 技术安全测评的网络、主机、应用测评结果记录,工具测试完成后的电子输出记录 漏洞扫描、渗透性测试、性能测试、入侵检测和协议分析等内容的技术测试结果
脆弱性识别 根据威胁识别结果,技术安全测评的网络、主机、应用测评 检查检查内容的记录,并根据威胁对业务系统脆弱性进行识别
风险处置 风险处置措施记录 对已识别的风险进行评估和处置,并评估是否存在残余风险
风险管理 对可接受的残余风险进行风险管理并出具风险评估报告 风险评估过程中发现的问题、问题的证据和证据源、每项检查活动中测评委托单位配合人员的书面认可

网络安全风险分析是指在资产评估、威胁评估、脆弱性评估、安全管理评估、安全影响评估的基础上,综合利用定性和定量的分析方法,选择适当的风险计算方法或工具确定风险的大小与风险等级,即对网络系统安全管理范围内的每一个网络资产因遭受泄露、修改、不可用和破坏所带来的任何影响做出一个风险测量的列表,以便识别与选择适当和正确的安全控制方式。通过分析所评估的数据,进行风险值计算。

网络安全风险分析

网络安全风险分析的主要步骤如下:
一、对资产进行识别,并对资产的价值进行赋值。
二、对威胁进行识别,描述威胁的属性,并对威胁出现的频率赋值。
三、对脆弱性进行识别,并对具体资产的脆弱性的严重程度赋值。
四、根据威胁及威胁利用脆弱性的难易程度判断安全事件发生的可能性
五、根据脆弱性的严重程度及安全事件所作用的资产价值计算安全事件的损失。
六、根据安全事件发生的可能性及安全事件出现后的损失,计算安全事件一旦发生对组织的影响,即网络安全风险值。其中,安全事件损失是指确定已经鉴定的资产受到损害所带来的影响。


作者博客:http://xiejava.ishareread.com


“fullbug”微信公众号

关注:微信公众号,一起学习成长!

pyinstaller打包exe后不能运行报Failed to execute script XXXX问题分析与处理

发表于 2020-11-03 | 更新于: 2025-08-10 | 分类于 技术 , 开发 | | 阅读次数:
字数统计: 362 | 阅读时长 ≈ 1

最近用python的tkinter写了个小工具,发现用pyinstaller打包成exe后运行出错。报Failed to execute script XXXX

1
pyinstaller -F -w worksubmit.py

报错

为了搞清楚报错的原因,想看到程序具体执行的情况。可以通过不带-w的参数打包在控制台看程序执行情况。
pyinstaller -F worksubmit.py 可以通过不带-w的参数打包,这时打包的exe运行是带控制台的命令行

运行情况

可以清楚的看到

ModuleNotFoundError:No module named ‘xlrd’

这时就要解决打包时xlrd模块没有打进去的问题,找到xlrd模块的位置,并将该模块打到运行程序包里。
先找到程序依赖的xlrd模块的位置,在PyCharm中通过”File”->”Setting”,在项目设置里查看Project interpreter,可以看到xlrd的目录位置。

找包路径

用pyinstall打包的时候通过加-p的参数将依赖的模块打进去。

1
pyinstaller -F -p J:\study\python\testsubmit\venv\Lib\site-packages worksubmit.py

在这里插入图片描述
这样就可以顺利将依赖的模块打进去,再执行exe文件不再报错了。

总结一下,碰到打包成exe后运行有问题,可以通过不带-w的参数打包,这时打包的exe运行是带控制台的命令行。基本上所有的运行问题都可以通过控制台的命令定位和排查。


博客地址:http://xiejava.ishareread.com/


“fullbug”微信公众号

关注:微信公众号,一起学习成长!

等级保护与分级保护的关系和区别

发表于 2020-10-24 | 更新于: 2025-08-10 | 分类于 技术 , 网络安全 | | 阅读次数:
字数统计: 932 | 阅读时长 ≈ 3

等级保护与分级保护既有联系又有区别:

国家安全信息等级保护,重点保护的对象是非涉密的涉及国计民生的重要信息系统和通信基础信息系统;涉密信息系统分级保护是国家信息安全等级保护的重要组成部分,是等级保护在涉密领域的具体体现。

国家安全信息等级保护重点保护的对象是涉及国计民生的重要信息系统和通信基础信息系统,而不论它是否涉密。涉密信息系统分级保护保护的对象是所有涉及国家秘密的信息系统,重点是党政机关、军队和军工单位,由各级保密工作部门根据涉密信息系统的保护等级实施监督管理,确保系统和信息安全,确保国家秘密不被泄漏。

国家信息安全等级保护是国家从整体上、根本上解决国家信息安全问题的办法,进一步确定了信息安全发展的主线和中心任务,提出了总体要求。对信息系统实行等级保护是国家法定制度和基本国策,是开展信息安全保护工作的有效办法,是信息安全保护工作的发展方向。而涉密信息系统分级保护则是国家信息安全等级保护在涉及国家秘密信息的信息系统中的特殊保护措施与方法。

等级保护与分级保护本质的区别是等级保护适用的对象为非涉密信息系统,分级保护适用的对象为涉密信息系统。

具体区别如下:

项目 等级保护 分级保护
管理体系 公安机关 国家保密部门
标准体系 国家标准(GB、GB/T) 国家保密标准(BMB,强制执行)
适用对象 非涉密信息系统 涉密信息系统
定级依据 等级保护定级是依据重要业务系统与承载业务运行的网络、设备、系统及单位属性、遭到破坏后所影响的主、客体关系等。 分级保护定级是依据信息的重要性,以信息最高密级确定受保护的级别。
级别划分 第一级:自主保护级
第二级:指导保护级
第三极:监督保护级
第四级:强制保护级
第五级:专控保护级
秘密级
机密级
绝密级
工作内容 信息系统等级保护工作包括:
系统定级、系统备案、安全建设整改、等级测评和监督检查五个环节。
涉密信息系统分级保护工作包括:
系统定级、方案设计、工程实施、系统测评、系统审批、日常管理、测评与检查和系统废止八个环节。
测评频率 第三级信息系统:应每年至少进行一次等级测评;
第四级信息系统:应每年至少进行一次等级测评;
第五级信息系统:应当根据特殊安全要求进行等级测评。
秘密级、机密级信息系统:应每两年至少进行一次安全保密测评或保密检查;
绝密级信息系统:应每年至少进行一次安全保密测评或保密检查。
评测机构 国家信息安全等级保护工作协调小组办公室授权的信息安全等级保护测评机构 由国家保密工作部门授权的系统测评机构

Supervisor离线安装及使用

发表于 2020-05-18 | 更新于: 2025-08-10 | 分类于 技术 , 开发 | | 阅读次数:
字数统计: 2.2k | 阅读时长 ≈ 8

Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警

supervisor的安装有多种方式
配置好yum源后,可以直接安装

1
yum install supervisor

Debian/Ubuntu可通过apt安装

1
apt-get install supervisor

pip安装

1
pip install supervisor

easy_install安装

1
easy_install

这几种安装方式都需要在线联网。但大部分的生产环境都是离线环境,是封闭的网络没有办法在线安装。

这里整理了Supervisor的离线安装包和安装脚本,可以进行离线安装并能指定安装目录。

一、整理Supervisor安装需要的工具和依赖包

包括有:
setuptools
elementtree
meld3
supervisor

二、编写离线安装脚本

整体思路:依次解压并安装Supervisor所需要的工具和依赖包,将Supervisor的配置文件的默认安装目录路径替换成制定的目录路径

1
vi install_supervisor.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/env bash
function Install_Supervisor()
{
#Install supervisord
tar -zxvf setuptools-24.0.2.tar.gz 2>&1 >/dev/null
cd setuptools-24.0.2/
python setup.py install >/dev/null 2>&1
cd ..
easy_install elementtree-1.2.7-20070827-preview.zip >/dev/null 2>&1
easy_install meld3-0.6.5.tar.gz 2>/dev/null 2>&1
easy_install supervisor-3.3.0.tar.gz >/dev/null 2>&1
mkdir -p ${INSTALL_DIR}/etc/
mkdir -p ${INSTALL_DIR}/tmp/
mkdir -p ${INSTALL_DIR}/logs/
cp etc/supervisord.conf ${INSTALL_DIR}/etc/
sed -i "s#__install_dir__#${INSTALL_DIR}#g" ${INSTALL_DIR}/etc/supervisord.conf
sed -i "s#__user__#${USER}#g" ${INSTALL_DIR}/etc/supervisord.conf
ln -s /usr/bin/supervisorctl ${INSTALL_DIR}/commandctl
cp run_supervisor.sh ${INSTALL_DIR}/
sed -i "s#__install_dir__#${INSTALL_DIR}#g" ${INSTALL_DIR}/run_supervisor.sh
chmod +x ${INSTALL_DIR}/run_supervisor.sh
}

USER='root'
if [ ! -n "$1" ]; then
INSTALL_DIR='/app/supervisor'
else
INSTALL_DIR=$1
fi
Install_Supervisor

安装脚本中默认的安装路径是/app/supervisor,可以根据实际情况进行调整。

另外整理了一个run_supervisor.sh的脚本,在安装以后根据安装目录来生成这个启动脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/env bash
cd __install_dir__
if [ ! -d "tmp" ];then
mkdir tmp
else
echo "tmp文件夹已经存在"
fi
if [ ! -d "logs" ];then
mkdir logs
else
echo "logs文件夹已经存在"
fi
/usr/bin/supervisord -c __install_dir__/etc/supervisord.conf
echo "supervisord 已执行。"

三、将所有的安装包脚本等打成离线安装包

1
tar -czvf  supervisor_install_pack.tar.gz  supervisor

已打好的离线安装包下载 https://545c.com/file/21165215-443895501
城通网盘下载 https://545c.com/file/21165215-443895501
CSDN下载 https://download.csdn.net/download/fullbug/12434225

四、离线安装包使用

下载离线安包,解压

1
tar -zxvf supervisor_install_pack.tar.gz

解压后看到supervisor的目录,在supervisor的目录中找到install_supervisor.sh的脚本
supervisor离线包安装目录
执行install_supervisor.sh的脚本,默认安装/app/supervisor下,可以带参数指定安装目录。也可以修改install_supervisor.sh脚本自定义默认的安装路径。
执行完安装脚本,就可以在/app/supervisor目录下看到有相应的启动脚本、配置文件目录、日志目录及临时文件目录。
supervisor运行目录
执行run_supervisor.sh就可以启动supervisor

1
./run_supervisor.sh

五、验证和使用supervisor

ps -ef|grep supervisor 查看supervisor是否已经启动

查看supervisor是否已经启动

通过web界面的9001看web界面控制台http://127.0.0.1:9001

web界面控制台

  • supervisord
    运行 Supervisor 时会启动一个进程 supervisord,它负责启动所管理的进程,并将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现崩溃时自动重启。
    supervisord -v 查看supervisor版本号

  • supervisorctl
    是命令行管理工具,可以用来执行 stop、start、restart 等命令,来对这些子进程进行管理。
    supervisor是所有进程的父进程,管理着启动的子进展,supervisor以子进程的PID来管理子进程,当子进程异常退出时supervisor可以收到相应的信号量。

supervisor常用管理命令
supervisorctl restart < application name> ;重启指定应用
supervisorctl stop < application name> ;停止指定应用
supervisorctl start < application name> ;启动指定应用
supervisorctl restart all ;重启所有应用
supervisorctl stop all ;停止所有应用
supervisorctl start all ;启动所有应用

六、配置文件说明

supervisor.conf配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
[unix_http_server]
file=/tmp/supervisor.sock ;UNIX socket 文件,supervisorctl 会使用
;chmod=0700 ;socket文件的mode,默认是0700
;chown=nobody:nogroup ;socket文件的owner,格式:uid:gid

;[inet_http_server] ;HTTP服务器,提供web管理界面
;port=127.0.0.1:9001 ;Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性
;username=user ;登录管理后台的用户名
;password=123 ;登录管理后台的密码

[supervisord]
logfile=/tmp/supervisord.log ;日志文件,默认是 $CWD/supervisord.log
logfile_maxbytes=50MB ;日志文件大小,超出会rotate,默认 50MB,如果设成0,表示不限制大小
logfile_backups=10 ;日志文件保留备份数量默认10,设为0表示不备份
loglevel=info ;日志级别,默认info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ;pid 文件
nodaemon=false ;是否在前台启动,默认是false,即以 daemon 的方式启动
minfds=1024 ;可以打开的文件描述符的最小值,默认 1024。注意托管ES进程,这里要进行调整至65535
minprocs=200 ;可以打开的进程数的最小值,默认 200。注意托管ES进程,这里要进行调整至4096

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ;通过UNIX socket连接supervisord,路径与unix_http_server部分的file一致
;serverurl=http://127.0.0.1:9001 ; 通过HTTP的方式连接supervisord

; [program:xx]是被管理的进程配置参数,xx是进程的名称
[program:xx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run ; 程序启动命令
autostart=true ; 在supervisord启动的时候也自动启动
startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3 ; 启动失败自动重试次数,默认是3
user=tomcat ; 用哪个用户启动进程,默认是root
priority=999 ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
stopasgroup=false ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false ;默认为false,向进程组发送kill信号,包括子进程

;包含其它配置文件
[include]
files = supervisord.d/*.ini ;默认放在安装目录的supervisord.d目录下,可以指定一个或多个以.ini结束的配置文件。

子进程配置文件

需要给托管的子进程配置相应的配置文件,每个进程的配置文件都可以单独分拆也可以把相关的脚本放一起。目录及文件后缀可以在
supervisor.conf配置文件中进行自定义。见supervisor.conf的

1
2
[include]
files = supervisord.d/*.ini #目录路径及文件后缀名都可以自定义。

logstash.ini 样例说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#项目名
[program:logstash-test]
#脚本目录
directory=/app/elk/logstash-7.6.0
#脚本执行命令
command=/app/elk/logstash-7.6.0/bin/logstash -f /app/elk/logstash-7.6.0/bin/test-pipeline.conf
#进程数
numprocs=1
#supervisor启动的时候是否随着同时启动,默认True
autostart=true
#当程序exit的时候,这个program不会自动重启,默认unexpected,设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的
autorestart=false
#这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了。默认值为1
startsecs=1
#脚本运行的用户身份
user = root
#把stderr重定向到stdout,默认 false
redirect_stderr = true
#stdout日志文件大小,默认 50MB
stdout_logfile_maxbytes = 10M
#stdout日志文件备份数
stdout_logfile_backups = 10
#日志输出
stderr_logfile=/app/elk/logstash-7.6.0/logs/logstash_test_error.log
stdout_logfile=/app/elk/logstash-7.6.0/logs/logstash_test_out.log

作者博客:http://xiejava.ishareread.com


“fullbug”微信公众号

关注:微信公众号,一起学习成长!

logstash简明实用教程

发表于 2020-04-14 | 更新于: 2025-08-10 | 分类于 技术 , 开发 | | 阅读次数:
字数统计: 3.3k | 阅读时长 ≈ 13

一、logstash是什么

Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。
官方介绍:Logstash is an open source data collection engine with real-time pipelining capabilities。简单来说logstash就是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端;与此同时这根管道还可以让你根据自己的需求在中间加上滤网,Logstash提供里很多功能强大的滤网以满足你的各种应用场景。
Logstash 能够动态地采集、转换和传输数据,不受格式或复杂度的影响。利用 Grok 从非结构化数据中派生出结构,从 IP 地址解码出地理坐标,匿名化或排除敏感字段,并简化整体处理过程。

Logstash常用于日志关系系统中做日志采集设备;
logstash
系统结构
logstash系统结构
Logstash的事件(logstash将数据流中等每一条数据称之为一个event)处理流水线有三个主要角色完成:inputs –> filters –> outputs:

输入(inpust):必须,负责产生事件(Inputs generate events),常用:File、syslog、redis、beats(如:Filebeats)
Logstash 支持 各种输入选择 ,可以在同一时间从众多常用来源捕捉事件。能够以连续的流式传输方式,轻松地从日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据。

过滤器(filters):可选,负责数据处理与转换(filters modify them),常用:grok、mutate、drop、clone、geoip
过滤器能实时解析和转换数据
数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便更轻松、更快速地分析和实现商业价值。

  • 利用 Grok 从非结构化数据中派生出结构
  • 从 IP 地址破译出地理坐标
  • 将 PII 数据匿名化,完全排除敏感字段
  • 简化整体处理,不受数据源、格式或架构的影响

输出(outpus):必须,负责数据输出(outputs ship them elsewhere),常用:elasticsearch、file、graphite、statsd
Logstash 提供众多输出选择,可以将数据发送到指定的地方,并且能够灵活地解锁众多下游用例

其中inputs和outputs支持codecs(coder&decoder)在1.3.0 版之前,logstash 只支持纯文本形式输入,然后以过滤器处理它。但现在,我们可以在输入 期处理不同类型的数据,所以完整的数据流程应该是:input | decode | filter | encode | output;codec 的引入,使得 logstash 可以更好更方便的与其他有自定义数据格式的运维产品共存,比如:graphite、fluent、netflow、collectd,以及使用 msgpack、

二、为什么是logstash

Logstash和Flume对比
1、Logstash比较偏重于字段的预处理,在异常情况下可能会出现数据丢失,只是在运维日志场景下,一般认为这个可能不重要;而Flume偏重数据的传输,几乎没有数据的预处理,仅仅是数据的产生,封装成event然后传输;传输的时候flume比logstash多考虑了一些可靠性。因为数据会持久化在channel中,数据只有存储在下一个存储位置(可能是最终的存储位置,如HDFS;也可能是下一个Flume节点的channel),数据才会从当前的channel中删除。这个过程是通过事务来控制的,这样就保证了数据的可靠性。
2、Logstash有几十个插件,配置比较灵活,flume强调用户自定义开发;
3、Logstash的input和filter还有output之间都存在buffer,进行缓冲;Flume直接使用channel做持久化
4、Logstash性能以及资源消耗比较严重,且不支持缓存;
Logstash和Flume对比
详见参考:https://blog.csdn.net/songfeihu0810232/article/details/94406608

三、logstash安装与配置

1、logstash安装

环境要求:jdk1.8或以上
下载logstash软件包 logstash官方下载地址https://www.elastic.co/cn/downloads/logstash
下载后直接解压就可以用
如:tar zxvf logstash-7.6.0.tar.gz
解压后目录如下:
logstash目录
目录结构说明见官方文档:https://www.elastic.co/guide/en/logstash/7.1/dir-layout.html
解压以后可以对logstash进行简单的测试。

1
bin/logstash -e 'input { stdin { } } output { stdout {} }'

这条命令表示通过命令的方式指定logstash的输入输出分别是标准的输入输出,什么是标准的输入输出呢?就是控制台的输入输出。
等待启动成功,直接输入“hello world”
将会在控制台会有相应的输出
出现这些信息就表示logstash安装成功并且可以使用了。
logstash测试

2、在线安装logstash插件

虽然logstash默认安装了大部分的插件,但是有些插件没有默认安装,如logstash-output-syslog、logstash-output-jdbc

2.1. 安装Gem并更新

1
2
3
4
5
6
# yum install -y gem
# gem -v
2.0.14.1
# gem update --system
# gem -v
3.1.2

2.2 检查并修改镜像源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# gem sources -l
*** CURRENT SOURCES ***

https://rubygems.org/

# gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
https://gems.ruby-china.com/ added to sources
https://rubygems.org/ removed from sources

# cat ~/.gemrc
---
:backtrace: false
:bulk_threshold: 1000
:sources:
- https://gems.ruby-china.com/
:update_sources: true
:verbose: true
:concurrent_downloads: 8

请注意:国内的镜像站从https://gems.ruby-china.org 换成了 https://gems.ruby-china.com
!!!现在很多网上的资料就都是写的https://gems.ruby-china.org,导致很多人换了镜像源也装不上。

2.3. 修改 logstash的 gem 镜像源

cd到logstach的安装目录,可以看到Gemfile文件 vi Gemfile

1
2
3
4
5
6
# This is a Logstash generated Gemfile.
# If you modify this file manually all comments and formatting will be lost.

source "https://rubygems.org"
gem "logstash-core", :path => "./logstash-core"
......

更改默认的 https://rubygems.org 为https://gems.ruby-china.com

2.4、安装插件

安装插件

3、离线安装logstash插件

在实际应用过程中有些生产环境是封闭的网络环境,没法连接外网。这时候就需要离线安装插件。
说离线安装实际就是在一个有网络的环境下将插件装好,然后再装到离线环境中。
这里有两种方式,
一种就是在有网络的环境下将插件装好,将整个logsash包离线拷到生产环境。
另一种方式就是在有网络的环境下将插件装好后,将logstash的需要离线安装的插件打个离线包,然后再在生产环境进行离线安装。
离线插件包打包安装具体操作如下:

3.1 通过logstash-plugin prepare-offline-pack 命令将插件打成zip包

1
./logstash-plugin prepare-offline-pack --output logstash-output-syslog.zip logstash-output-syslog

打包
打包命令执行成功以后,可以看到在logstash的bin目录下有打成的离线插件zip包
打包后生成的离线包

3.2 通过logstash-plugin install 进行离线安装

1
bin/logstash-plugin install file:///home/logstash/logstash-7.6.2/tools/logstash-output-syslog.zip

安装后成功会有如下提示

1
2
Installing file: /home/logstash/logstash-7.6.2/tools/logstash-output-syslog.zip
Install successful

3.2 通过logstash-plugin list命令检查插件是否安装成功

logstash-plugin list

4、logstash简单配置说明

语法

Logstash 设计了自己的 DSL ——包括有区域,注释,数据类型(布尔值,字符串,数值,数组,哈希),条件判断,字段引用等。

区段(section)

Logstash 用 {} 来定义区域。区域内可以包括插件区域定义,你可以在一个区域内定义多个插件。插件区域内则可以定义键值对设置。示例如下:

1
2
3
4
input {
stdin {}
syslog {}
}

数据类型

Logstash 支持少量的数据值类型:

  • bool
    1
    debug => true
  • string
    1
    host => "hostname"
  • number
    1
    port => 514
  • array
    1
    match => ["datetime", "UNIX", "ISO8601"]
  • hash
    1
    2
    3
    4
    options => {
    key1 => "value1",
    key2 => "value2"
    }

    字段引用(field reference)

    如果想在 Logstash 配置中使用字段的值,只需要把字段的名字写在中括号 [] 里就行了,这就叫字段引用。
    对于 嵌套字段(也就是多维哈希表,或者叫哈希的哈希),每层的字段名都写在 [] 里就可以了。比如,你可以从 geoip 里这样获取 longitude 值:
    [geoip][location][0]
    logstash 的数组也支持倒序下标,即 [geoip][location][-1] 可以获取数组最后一个元素的值。
    Logstash 还支持变量内插,在字符串里使用字段引用的方法是这样:
    “the longitude is %{[geoip][location][0]}”

条件判断(condition)

表达式支持下面这些操作符:
equality, etc: ==, !=, <, >, <=, >=
regexp: =, !
inclusion: in, not in
boolean: and, or, nand, xor
unary: !()
通常来说,你都会在表达式里用到字段引用。比如:
if “_grokparsefailure” not in [tags] {
} else if [status] !~ /^2\d\d/ and [url] == “/noc.gif” {
} else {
}

命令行参数

Logstash 提供了一个 shell 脚本叫 logstash 方便快速运行。它支持一下参数:
-e
意即执行。我们在 “Hello World” 的时候已经用过这个参数了。事实上可以不写任何具体配置,直接运行 bin/logstash -e ‘’ 达到相同效果。这个参数的默认值是下面这样:
input {
stdin { }
}
output {
stdout { }
}
–config 或 -f
意即文件。真实运用中,我们会写很长的配置,甚至可能超过 shell 所能支持的 1024 个字符长度。所以我们必把配置固化到文件里,然后通过 bin/logstash -f agent.conf 这样的形式来运行。
此外,logstash 还提供一个方便我们规划和书写配置的小功能。你可以直接用 bin/logstash -f /etc/logstash.d/ 来运行。logstash 会自动读取 /etc/logstash.d/ 目录下所有的文本文件,然后在自己内存里拼接成一个完整的大配置文件,再去执行。
–configtest 或 -t
意即测试。用来测试 Logstash 读取到的配置文件语法是否能正常解析。Logstash 配置语法是用 grammar.treetop 定义的。尤其是使用了上一条提到的读取目录方式的读者,尤其要提前测试。
–log 或 -l
意即日志。Logstash 默认输出日志到标准错误。生产环境下你可以通过 bin/logstash -l logs/logstash.log 命令来统一存储日志。
–filterworkers 或 -w
意即工作线程。Logstash 会运行多个线程。你可以用 bin/logstash -w 5 这样的方式强制 Logstash 为过滤插件运行 5 个线程。

四、logstash使用的几种典型的应用场景

1、通过logstash将syslog日志原始日志转发

syslog日志原始日志转发
在logstash的bin目录下新建配置文件

1
vi test-pipeline.conf

编辑input和output

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
input {
stdin{
type => "test-log"
}
syslog{
type => "test-log"
port => 514
}
}
output
{
stdout {
codec => rubydebug
}
syslog{
host => "192.168.2.185"
port => 514
}
}

这样就相当于把日志转发到了192.168.2.185这台机器的514端口
编辑好配置文件以后执行
./logstash -f test-pipeline.conf --config.test_and_exit 对配置文件进行检查,如果配置文件写得有问题,将会有错误提示。
配置文件检查没有问题后就可以启动logstash执行了./logstash -f test-pipeline.conf --config.reload.automatic
用udpsender工具往这台机器上发送日志信息,可以看到日志转发到192.168.2.185这台机器上了。

updsend发送日志

在控制台可以看到192.168.2.185,接收到了192.168.2.173转发过来的日志
控制台日志

2、通过rsyslog、logstash采集nginx等中间件的日志送到ES

logstash可以与rsyslog、filebeat等无缝结合采集nginx等中间件日志,送给数据存储。
通过rsyslog、logstash采集nginx等中间件的日志送到ES

具体参见:https://xiejava.gitee.io/posts/f3e97829/

3、通过logstash将日志入kafka再入mysql或ES

数据先放到kafka队列里缓存削峰,然后从kafka队列里读取数据到mysql或其他存储系统中进行保存。logstash将日志入kafka再入mysql或ES
具体参见:https://xiejava.gitee.io/posts/54e4fd14/

4、通过logstash进行日志补全后再转发或入库

采集原始日志以后,需要对原始日志进行调整合补齐,比如最常见的是根据IP来补齐IP的经纬度等信息。

logstash进行日志补全

这里就可以用logstash的geotip,也可以用其他的外部API接口,为了更具代表性的说明,这里调用的是第三方的http接口(http://ip-api.com/json/),这个接口也是可以自己定义的。
参考配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
input {
stdin { }
syslog {
port => "514"
}
}
filter {
grok{
#匹配获取IP
match => {"message" => "%{IPV4:ip}"}
}
http {
#调用外部接口获取IP的详细信息
url => "http://ip-api.com/json/%{ip}"
verb => "GET"
add_field => {
"new_field" => "new_static_value"
}
}
mutate {
replace => {
#这里对原始日志数据进行补全,如加了新的字段及从接口中获取的信息
"message" => "%{message}|%{ip}: My new message|%{new_field}|%{[body][as]}"
}
}
}
output {
stdout { }
syslog {
host => "192.168.2.173"
port => "7514"
}
}

通过http接口调用API取得数据,然后通过mutate重新组合补全信息,这里通过调用获取IP地址信息的API获取IP的信息,然后补全到原始日志中。
在这里插入图片描述

可以看出logstash是一个非常灵活好用的数据采集框架工具,可以通过简单的配置满足绝大多数数据采集场景的需求。


作者博客:http://xiejava.ishareread.com


“fullbug”微信公众号

关注:微信公众号,一起学习成长!

<1…18192021>
XieJava

XieJava

208 日志
11 分类
27 标签
RSS
GitHub
友情链接
  • 爱分享读书
  • CSDN
  • 豆瓣
© 2025 XieJava | Site words total count: 426.6k

主题 — NexT.Muse
0%