Internet Vending Network Service Site       
  • IVNSS项目
  • 项目进展
  • 网页邮箱
  • 技术文摘
  • GIT仓库
  • 常见问题
  • 关于站点
  • 联系我们
  •         

技术文摘列表

GNU 与 Linux 相关

  • 理清 GNU 与 Linux 项目间的关系

FreeCAD 软件相关

  • FreeCAD 中的 FEM 工作台简介

网络安全相关

  • 使用 Linux 下的 TC 工具控制网络攻击带宽
  • 3月11日谈谈信息系统的灾难备份与业务可持续话题
  • 偶遇来自天津移动的火星来客
  • 互联网服务安全的基础---域名服务器安全管理
  • 确信 SSH 是你服务器的安全锁?

使用 VIM 编辑器技巧

  • 新手如何开始学习使用VIM?
  • VIM 编辑器的几种工作模式
  • 使用 VIM 的 HTML 插件

MacOS 维护笔记

  • 升级古董级 MacBook Pro 的操作系统

【GNU 与 Linux 相关】


2025-08-22
技术文摘

理清 GNU 与 Linux 项目间的关系

很多简体中文的文章中,都滥用 Linux 操作系统与 GNU/Linux 操作系统这两个概念。其实,GNU 与 Linux 在计算机领域内,是两个不同的软件项目。在计算机发展的历史中,在 1990 年代, GNU 与 Linux 之间,是相互成就,相互发展结果,并且,在两者结合之后,共同得到了其大的发展。

Linux 操作系统内核项目,与众多参与 GNU 自由软件项目的程序,共同构成了一些简体中文文章中所误用的 "Linux” 操作系统。其实,被误用的 "Linux" 操作系统的正确叫法应该是 "GNU/Linux" 操作体系统。我们之前常见的美国 RedHat 软件发行套件以及由其衍生出的 Fedora 发行套件;欧洲 Debian GNU/Linux 软件发行套件,以及由其衍生出的 Ubuntu 发行套件;另外,还有 OPENSUSE 等等不同软件发行版本套件,其中都含有 Linux 内核以及部分 GNU 项目的软件程序安装包。

上文提到的基于 Linux 内核与部分 GNU 项目 软件包的不同软件发行套件,是将 Linux 内核软件,以及 GNU 项目的软件源代码,按指定 CPU 架构进行编译,打包后,能在指定 CPU 架构上运行的整个操作系统安装软件套件。这些发行版本的区别,主要是软件安装包的打包方式,文件系统组织等技术细节有所不同。

另外,不同的 GNU/Linux 软件套伯发行版本,选择的软件包也所不同。造成不同的原因,是由于有些发行版本,使用 GNU 项目不同许可协议。有些软件套件发行版本,根据目标用户的使用需求,以及软件许可协议来选择发行的软件包。如侧重于服务器上运行的终端用户接口的软件发行套件;供用户在图形环境中使用的桌面图形环境发行软件包。

GNU 项目与 Linux Kernel 项目,是两个不同的软件项目。如果我们用一颗树来类比 Linux 与 GNU 项目之间的关系。我们可以将 Linux Kernel 看作是地面之下的树根部分。GNU 项目中的网络管理,电子邮件,WEB服务,域名服务,用户管理,文件系统管理,数据加密处理,对正在运行的程序所产生的进程进行管理的操作系统工具软件,等等这些不同的软件项目,可类比为树根之上的树干分支。而我们常见的 Android 系统手机上的所有 App,以及所有 GNU/Linux 图形/终端应用程序,都可以类比为树上更细的分支及树叶。这样,由树叶,细分枝,树干,树主干、树根,共同构成了 GNU/Linux 操作体系统。

Linux Kernel 项目,是 Linus Benedict Torvalds (1969年12月28日生于芬兰 Helsinki 市,现移民美国) 在 1991 年,在大学学习期间,使用 GNU 开发工具,开发并编译构建的一个可运行于 80386 CPU 架构的 IBM 兼容机上的操作系统内核。起初,Linux 项目源代码存放在 Linus 当时学习的大学的 FTP 服务器上。之后一段时间,Linux 在互联网上快速流行起来。1994年3月14日,Linux 版本 1.0 正式发行。当 GNU 软件包与 Linux 相结合,在互联网上自由发布后,GNU/Linux 组合,在计算机世界中快速流行起来。

GNU 项目,是由 Richard Matthew Stallman (1953年3月16日,出生于美国 New York 市) 在1983年9月开始发起的自由软件项目。这在当时是开创性的项目。因为,在那个件代,Unix 操作系统运行于特定 CPU 之上,并且整个系统的软件,硬件都非常昂贵。GNU 是一个 Unix 类计算机操作系统。GNU 构成的计算机操作系统是由自由软件构成的。

Richard Matthew Stallman 在他 14-16 岁这段时间,通过阅读 IBM 7094 的手册接触到计算机操作系统。1970 年,在他 17 岁时,使用 Fortran 语言编写了数值分析程序。Richard Matthew Stallman 在大学期间,深受 Hack 文化影响。由于不满当时计算机软件由于竟争造成的向普通人封闭的状况,他发起了 GNU 操作系统项目。GNU 代表 "GNU's Not Unix" (中文意思是:GNU 不是 Unix)。GNU 的理想,是软件在 GNU 许可协议条款下,实现自由的开发、自由分发、自由使用。很快,他设立了非盈利组织---自由软件基金会。该组织雇佣自由软件程序员,并为自由软件运动提供合法的基础构架(如软件许可协议等)。

为了实现 GNU 项目的理想,Richard Matthew Stallman 着手编写了基础性软件:文件编辑器 Emacs,程序编译器 GCC 套件,编程调试器软件 GNU Debugger,软件编译自动化构建器 GNU make。但在 GNU 项目发展的早期阶段。由于忽略了操作系统内核的开发工作,在 1990 年,GNU 项目开始使用 Carnegie Mellon (卡内基.梅隆大学) 名为 GNU Hurd 的微内核。但该内核项目尚未达到完全符合 POSIX 标准的成熟度级别。恰在此期间,Linus 使用 GNU 编辑器,GCC 编译器等 GNU 基础软件工具,完成了 Linux 内核的开发工作。Linus 将其开发成果的源代码,通过其所在的大学的 FTP 服务器,向互联网用户开放访问。机源巧合之下,GNU/Linux 这两个项目结合在一起,在软件功能相互促进,并且共同得到了发展。自此之后,参与 GNU 项目的自由软件开发工作,也得以蓬勃发展。

在 Richard Matthew Stallman 个人网站 上,有与其相关的活跃内容。正是由于 Richard 与 Linus 这样的 Hack 文化的践行者知行合一不断努力,才成就现代普罗大众,共享近现代计算机技术的发展成果。

【FreeCAD 软件相关】


2025-07-08
技术文摘

FreeCAD 中的 FEM 工作台简介

版本号: v0.03

FreeCAD 是一款开源自由的工业计算机辅助设计软件。FreeCAD 的不同功能由对应的工作台来实现的。其中 FEM 工作台是FreeCAD 软件中,使用有限元分析方法,对设计对象进行有限元分析的工作台。在此工作台中,使用不同的第三方有限元分析工具软件,可对设计零件进行静态力学,流体力学,电磁场,热传导过程,振动频率等物理特性,进行有限元分析。通过分析不同的给定设计条件与工作条件,计算产生设计对象的力学、电学、热学、抗共振的不同受力结果。通过对比不同设定工作条件的力学计算结果,可以优选出最佳成本与效用比的设计方案。在满足设计对象功能的前题下,最大程度地减少原料成本。

【注意】 本文中关于 FreeCAD 中有限元分析的内容,不是 FreeCAD 官方文档。本网站及该文作者,不对文章内容的有效性以及模仿本文内容操作,对任何计算机系统可能的任何损害,进行明确或暗示性担保。

要掌握与理解 FreeCAD 有限元分析的操作原理,首先需要有以下相关领域的知识。

  • FreeCAD 机械零件设计知识
  • 物理牛顿力学知识
  • 物理电磁力学知识
  • 材料力学基础知识
  • Gmsh 等网格生成原理的基础知识
  • 有限元分析原理
  • 高等数学中线性代数等数学工具的知识
  • 高等数学中微分与积分数学工具的知识

FreeCAD 官方论坛中,使用 FreeCAD 的 FEM 示例,一篇是日文编写的对带圆形孔的板材的静态受力变形分析。另一篇是英文,对使用混凝土材质的大桥桥墩,加强承重能力进行设计时,采用 FEM 工具进行分析的过程加以说明。上述两篇文章,对于中文读者理解有些困难。

为便于读者理解,现简单介绍一下有限元分析的原理。为简化说明,我们以一个 20mm × 20mm × 30mm 材料为普通ABS工程塑料的长方体为例,通过对长方体两个相对面固定,一个受力面施以 5K牛顿的力,通过 FEM 工具进行长方体变形分析,对有限元工作台的使用加以说明。

根据上面的长方体示例对象为例,我从原理上解释一下有限元分析的原理及工作过程。 首先,在示例长方体的任一边界线上的任一点开始,使用网络生成软件工具,按设定好的网格生成约定(如由处于三维空间,且不在同一平面的四个点构成的一个四面体作为最小网格单位),在长方体内部,生成有限数量的,紧密相连的四面体组成的网格。这些网格近似构成长方体的空间对象。因为在网格生成过程中,有少量的网格中的顶点,可能超过长方体的理论设计边界(这种顶点超出现象,与现实零件加工过程中,加工表面粗糙度的情况非常相似),如果四面体足够小,微小到四面体中四个顶点之间主要受电磁力影响的程度,即不同相邻顶点之间,距离小于平衡点相邻距离时,两者产生相排斥的力;当上述两个顶点距离远于平衡点距离时,两点相吸引。通过对示例长方体内所有这些四面体顶点之间打破平衡时受力状态的变化,使用线性代数等数学工具进行计算,可以近似估算出示例长方体宏观整体受力变形的工作情况。

如果读者数学能力足够强,可以参考清华大学曾攀的《有限元分析及应用》的课程材料。

由于使用 FreeCAD 的 FEM 工作台之前,所涉及的相关工具软件的安装,运算环境的设定等工作,操作步骤及相关知识,足以需要另一篇文章进行介绍。因其内容繁杂,在本文中就不做介绍。在这里,我们只对示例长方体,进行静态受力变形的简单有限元分析过程,进行简单介绍,便于读者理解 FreeCAD 中如何使用 FEM 工作台进行优化设计工作。

因为 FreeCAD 可以使用不同的有限元分析工具软件 ( 如Calculix,z88,elmerfem ) 进行有限元分析计算处理。 同时,还可以使用不同的网络生成工具软件( Gmsh,netgen)生成网格。作为示例,我选用 Calculix 软件作为有限元分析软件工具,使用 Gmsh 作为网格生成软件工具,对整个 FreeCAD 的 FEM 工作台的操作流程,加以简单说明。

FreeCAD 的 FEM 工作台示例操作的整个流程,如下所示:

  1. 在 PartDesign 工作台中完成长方体参数设定
  2. 进入 FreeCAD 的 FEM 工作台
  3. 选定长方体对象,生成 FEM 处理对象
  4. 选定长方体对象,分配指定普通ABS材料
  5. 选定长方体对象,使用 Gmsh 为长方体产生网格
  6. 选定长方体对象,设定固定条件约束面
  7. 选定长方体对象,指定受力,受力大小,方向等约束条件
  8. 选定 FEM 处理对象,使用 Calculix 进行有限元分析计算
  9. 查看有限元分析结果

【 在 PartDesign 工作台中完成长方体参数设定 】
在 FreeCAD PartDesign 工作台设计完成长方体后,FreeCAD 工作界面如下图所示: FreeCAD 完成长方体设计

【 进入 FreeCAD 的 FEM 工作台 】 【 选定长方体对象,生成 FEM 处理对象 】
进入 FreeCAD 的 FEM 工作台后,用户界面如下图所示: FreeCAD FEM 工作台界面 在上图中,首先点击选取长方体设计对象「Body」;然后点击第二步指示的按钮,产生有限元分析容器。

【 选定长方体对象,分配指定普通ABS材料 】
在进行 FreeCAD 的 FEM 工作台后,首先指定长方体对象在 FEM 容器中使用的材料。 FreeCAD
有限元分析,指定材料第一步示意图 按上面中指示的步骤,先选择长方体对象;然后点击图中 2 指示的按钮,为长方体分配材料。之后进入下图:

FreeCAD 中 FEM
工作台为设计对象指定材料 在上图中,按编号指示顺序操作,完成后按图中 OK 按钮。在上图中,数值小数点后保留 8 位,这是为了能显示出材质的物理参数值。如果小数点后保留的数位较小,在上图中文本框中将不会显示出有效的材料参数值。

【 选定长方体对象,使用 Gmsh 为长方体产生网格 】
在 FreeCAD 的 FEM 工作台中,如下图所示,依编号顺序操作,进入为长方体生成网格的操作: FreeCAD 中 FEM
工作台使用 Gmsh 创建网格

在完成上图的操作后,进入下图所示的界面: FreeCAD 中 FEM
 工作台中,为长方体生成网格 在这上图中,先点击 Apply 按钮,成生网格。然后点击图中的"OK"按钮,完成为长方体生成网络的操作。

【 选定长方体对象,设定固定条件约束面 】
下面在 FreeCAD 的 FEM 工作台中,为长方体设定固定约束条件。在这里,通过下面连续两图的操作,将长方体的顶面与底面设定为力学固定约束面。 FreeCAD 中 FEM  
 工作台中为长方体设定固定约束条件 按上图中编号顺序操作,进入下图:

按下图所示的编号顺序操作,得到最终的长方体固定面约束条件。 FreeCAD 中 FEM  
 工作台中为长方体设定固定约束条件

【 选定长方体对象,指定受力,受力大小,方向等约束条件 】
下面开始在 FreeCAD 的 FEM 工作台中,为长方体设定受力面约束条件。按下图数字编号顺序操作: FreeCAD 中 FEM  
 工作台中为长方体设定受力面约束条件

如下图所示,按编号顺序操作。 FreeCAD 中 FEM  
 工作台中为长方体设定受力面约束条件 注意:在上图中的 2 指向的文本输入框中,输入值:"5000.00 N" (实际输入时,不用双引号),输入值会被 FreeCAD 自动转换成其它形式的值,来表示 5000 牛顿的力。

【 选定 FEM 处理对象,使用 Calculix 进行有限元分析计算 】
下面开始进行有限元分析的解析计算工作。如下图所示,依数字编号操作,开始为长方体进行有限元解析: FreeCAD 中 FEM  
 工作台中为长方体指定有限元解析器

按下图中编号顺序操作。由于在这里是静态力学分析的演示。所以在下图中,需选编号 1 所指向的“静态”;依下图所示,第 2 步操作,是点击"Write .inp file"按钮。产生有限元分析所需的 inp 文件;在下图中的第 3 步操作,是点击"运行 CalculiX"按钮。根所分析对象网络节点数的不同,以及当前运行有限元分析的计算机的 CPU 速度的不同,这个运算过程所需的时间差异很大。 FreeCAD 中 FEM  
 工作台中为长方体指定有限元解析器

如果上图中的操作没有错误,会产生如下图所示的结果。注意在左边的信息提示框中,如果有绿色字体的一行文字,提示 "CalculiX done without error!",这说明运行 CalculiX 解析器正常输出了数据结果。 FreeCAD 中 FEM  
 工作台中为长方体时行有限元分析计算

【 查看有限元分析结果 】
经过上面八个阶段的操作,现在终于来到显示有限元分析结果的时刻。按下图中编号顺序操作,开始查看最终的计算结果。 FreeCAD 中 FEM  
 工作台中为长方体时行有限元分析结果

在下图中,在右边的主窗口部分,在彩色形式显示长方体受力变形的结果。在下图中,编号 1 指出当前选择显示的是长方体三维整体变形的结果。在彩色长方体中,色彩越红,表示变形越大的正数值;色彩越绿,表示变形越小;色彩越蓝,表示变形越大的负值。在物理学中的力,是有大小与方向的矢量。因此在这里静态受力分析时,变形正方向是以施加力的方向设为正的。 FreeCAD 中 FEM  
 工作台中为长方体时行有限元分析最终结果 在上图中,数字 2 指向的位置,表示长方体最大变形长度值为:0.10275 毫米。
数字编号 3 指向的位置,如钩选该框,并在之后向右拖动控制条,可以在主窗口中看到放大形式的变形示意图。由于有时变形非常微小,人眼直观查看不明显,因此通过拖动控制条来控制放大因子,产生明显的变形。来让设计人员直观看到受力后物体的变形结果。

对于 FEM 分析来说,如果被分析对象网格划分的越多,越密,其内部节点越多,在进行 FEM 解析时所需运算量越大。但运算结果更为精确。 FreeCAD 中 FEM  
 工作台中为长方体产生更细网格时,进行有限元分析最终结果 与上一次对长方体划分较粗网格相比,上图中的长方体网格划分更细。所产生的内部节点越多。因此上图中 1 所指向的最大变形值:0.103005 毫米,大于上次计算的结果:0.10275 毫米。这两个结果有少许差异。但这种差异随着对被分析对象划分网格的增多,不会出现数量级差异。因此,为减少 FEM 分析的计算量,可以适当减少对分析对象划分网格的密度。

2025年7月 FreeCAD 当前开发版本中,还提供动态显示长方体弹性变形的动图。通过点击“Start Animation"按钮,可以依按钮上面的设定,产生弹性变形的动态效果图。通过这个图,可以很好的理解组装后的长方体,在受力时,占用周围空间的范围。这对于机械设计过程中,零件组装后,受力变形情况所占用的空间,以及可能与相邻零件摩擦的可能性大小,有一个直观的判断。

在完成上图操作后,如果按下图所示,点击"直方图"按钮,可以得到长方体变体节点数与变形大小的统计图表。 FreeCAD 中 FEM  
 工作台中为长方体时行有限元分析直方图结果 在上图的主窗口中的"直方图"窗口中,从图表中,可以知道超过 1100 多个网格节点,变形量为:0;只有几十个节点,变形超过 0.10 毫米。 通过"直方图"可以看到变形节点的统计结果,通过图表中的极值占比,可以判断设计对象的强度如何。

下面讨论另一种受力情况。如果在上图中,选择"Displacement magnituide"右边的“Maximum shear stress (Treca)",在得到计算结果之后,点击"直方图"按钮,在新弹出的「直方图」窗口中,图表会显示的信息,是节点与剪切力之间的统计关系。 如果此时「直方图」窗口内的图表中,发现有节点受力值,超过材料"缩颈"变形时的力大小,那么必需对设计对象进行修改,以加强出问题节点附近材料的强度。因为这些节点,当受到超过材料能恢复形变状态(弹性变形)最大力时,节点附近材料会发生塑性变形,并不能恢复原始形状。在实际受力过程中发生上述情况时,设计对象会逐渐产生不可恢复的变形,最终可能造成整体撕裂。

为了直观地了解长方体受力变形情况,将观察者位于正视图相对位置,来观察经过放大 50 倍的变形示意图。其结果如下图所示: FreeCAD 中 FEM  
 工作台中为长方体时行有限元分析后,整体变形的放大效果图 通过对主窗口中,长方体的观察可知,受力面的中间部分,相对未变形部分,整体变窄,而左、右两面,向内收缩。而固定面附近的网络节点,没有变形。

由于 FreeCAD 处于不间断开发的状态。本文中的有些功能,不能确保在读者实验的 FreeCAD 版本上也能实现。编写文本时,使用的是 conda 的 freecad/laeble/dev 通道的 freecad_1.1dev_py311h27ea156_92 版本,以及相关 Gmsh 与 CalculiX 软件包。本文只通过对长方体的简单受力分析,通过有限元方法,得到最终受力变形状态的直观数据结果。对于长方体内部应力分析,限于文章篇幅,在本文中没有涉及。另外对于 FreeCAD 一些细节参数调整以及配置参数变更,在文中也没有涉及。本文的写作意图,是通过简单的使用 FEM 工作台,来让读者了解一些关于 FreeCAD 使用 FEM 工作台的基础知识。并努力让读者理解 FEM 计算结果的数据含义。由于有限元方法涉及太多不同领域的知识,本文作者不可能都精通,因此本文中错误在所难免,如读者发现文中错误,敬请指正。本文指正错误邮箱:fem@ivnss.com

【网络安全相关】


2025-06-23
技术文摘

使用 Linux 下的 TC 工具控制网络攻击带宽

想通过 TC 工具控制网络流入带宽的原因,原于2025年6月20日发现网络流量异常行为。当时,在互联网上有一台服务器持续通过 UDP 协议,向本服务器的 1701 端口,发送认证数据包,并且此行为不间断地持续了几天。Felix Lee 通过技术工具查询,得知发起网络攻击行为的服务器,从域名注册,域名解析信息,以及发起网络攻击行为的服务器的托管IP地址等,都是蓄意准备,并且对方技术管理人员,不留有效的联系方式。种种迹象表明,对方的网络攻击行为,短期内不想停止。因此,Felix Lee 决定使用 Linux 下的网络流控工具 TC 来解决定个网络攻击行为。

【注意】 在本文中,只对网络流控的原理与操作重点简明扼要的说明。理解本文的相关 Linux 内核、网络架构方面的背景知识,需读者查找相关资料。本文不担保、不暗示任何依本文内容,对用户计算机系统的操作,也可成功实现网络流控的功能。用户需自行承担对计算机系统操作失败的后果。

通常情况下,Linux 下的 TC 工具,处理对于从网卡设备流出的网络数据包的控制功能。如果想实现对流入运行 Linux 机器的网络流量的控制,需要用到 Linux 内核中网络系统的 IFB 内核模块。通过阅读 Linux 内核源代码树中文件 drivers/net/ifb.c 的内容,可知 ifb 是 Intermediate Functional Block (ifb) netdevice driver for sharing of resources and ingress packet queuing 的缩写。其中文直译是跨媒介功能块网络设备驱动。该设备驱动主要用于网络资源的限速,以及入口(ingress)包队列调度策略执行。

作为网络框架设计原则,Linux 只对从其内核所控制的网络设备上流出(engress)的网络数据包进行限速等操作,对于从其它机器上流入(ingress)网卡的网络数据包,无法直接进行流量控制。但通过引入 IFB 网络设备,可以将进入 Linux 机器的网络设备上的入口(ingress)流量,重定向到 IFB 网络设备上,之后通过控制 IFB 网络设备出口(engress)流量,并将处理后的数据包通过 Linux 内核网络框架,发送到 Linux 机器上的网络出口设备,在不违反 Linux 网络流控制设计原理的基础上,实现对于 Linux 机器网络设备入口流量的限速处理。

通过对网络设备入口流量的控制,可以在网络数据包进入 Linux 内核网络防火墙处理框架之前,决定网络数据包的命运,实现通常高级路由器才具的功能。这样的技术实施方案有以下优点:

  • 减轻防火墙系统的处理负载
  • 无需协调互联网接入服务商技术人员,控制非法流量
  • 由于在 IP 协议层决定网络数据包命运,规则执行高效且灵活
当然,这个技术方案也有其缺点:
  • 方案执行者需对 Linux 内核很熟悉
  • 方案设计者需具有 Linux 内核内部网络数据包流向的背景知识
  • 方案设计者需具有 Linux 内核防火墙框架的背景知识
  • 如需自动执行流量控制,执行者还需编写执行脚本

在阅读本文之后内容之前,建议读者阅读以下两个网址的内容:

  • 流控技术背景论文,该文介绍了 Linux 高级路由与流控的理论知识
  • 华为BBS文章,该文对相关概念定义,用中文进行了较明确的翻译

服务器当前需要解决的问题,是限制来自 142.4.222.182 的 UDP协议,向本服务器的 1701 端口发送的数据。我在这里要实现的目标,是限制从 142.4.222.182 发送网络数据包的传输速率,并将超过限制速度的网络数据包丢弃,不予处理。

以root身份按顺序执行以下操作:

  1. 加载ifb内核驱动模块,启用一个ifb网络设备。
    modprobe ifb numifbs=1
  2. 启用 ifb0 网络设备
    ip link set dev ifb0 up
  3. 为服务器网卡 eth0 的入口(ingress) 设置处理句柄
    tc qdisc add dev eth0 handle ffff: ingress
  4. 使用过滤器将 eth0 的所有入口流量重定向到 ifb0
    tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
  5. 为 ifb0 设备设定 HTB 限流策略
    tc qdisc add dev ifb0 root handle 2: htb default 22
  6. 对 ifb0 的 classid 2:22 子类设定限速参数(10000mbit)
    tc class add dev ifb0 parent 2: classid 2:22 htb rate 10000mbit ceil 10000mbit burst 10000mbit cburst 10000mbit
  7. 对 ifb0 的 classid 2:1 子类设定极低的传输速率参数(限制 8 比特)
    tc class add dev ifb0 parent 2: classid 2:1 htb rate 8 ceil 8 burst 8 cburst 8
  8. 通过 filter 对象,选定 142.4.222.182 的 IP 应用 classid 为 2:1 的子类设定的传输速率。
    tc filter add dev ifb0 protocol ip parent 2: prio 0 u32 match ip src 142.4.222.182 flowid 2:1

通过上面的按序操作,可以将 142.4.222.182 向本服务器网络发送数据包的速度限定到每秒8比特。通过以下命令可以查看 classid 为 2:1 的子类的包传输信息:

tc -s -d class show dev ifb0 2:1
上面的命令,输出的有用信息的示例如下:
class htb 2:1 root prio 0 quantum 1000 rate 8bit ceil 16bit linklayer ethernet burst 8b/1 mpu 0b cburst 8b/1 mpu 0b level 0
Sent 109388 bytes 943 pkt (dropped 1617742, overlimits 943 requeues 0)
backlog 3712b 32p requeues 0
lended: 943 borrowed: 0 giants: 0
tokens: -937500000 ctokens: -843750000

上面的信息显示,classid 2:1 的子类,用 8 比特每秒的传输速度,最高传输速度被限定于 16 比特每秒。有 1617742 个匹配的网络数据包,被丢弃。并且该子类网络数据包过度使用的大量的令牌(tokens: -937500000 )。

上面的内容,通过解决现实工作中的问题,来概要说明了如何通过 Linux 下的 TC 工具来实现对服务器流入网络数据的传输速率的控制。用户实际设计方案并在 Linux 服务器上进行类似操作时,取决于许多先决条件:

  1. 用户选用的 Linux 发行版本内核是否以模块方式提供 IFB?
  2. 用户选用的 Linux 发行版是否提供 iproute2 软件包
  3. 用户选用的 Linux 发行版是否提供 iproute2-doc 包
  4. 用户选用的 Linux 内核是否支持设计的包调度策略
  5. 用户选用的 Linux 发行版中的 TC 分类器及过滤器的种类
建议用户在操作前,阅读并理解服务器随机附带的 man8 目录下,与 tc 相关的手册页内容。这些信息对于对应工具的使用参数,有详细的说明。

2025-03-11
技术文摘

3月11日谈谈信息系统的灾难备份与业务可持续的话题

今天是2025年3月11日。在2011年3月11日,发生了震惊全球的东日本大地震。这次地震,同美国2001年9月11日的恐怖袭击事件一样,在信息安全领域,有许多值得思考的问题。作者通过分析这两次重要事件对信息系统的影响,总结与讨论一下信息系统建设与维护中需要注意与思考的问题。

上面提到的9.11与3.11事件,在信息系统的灾难备份与业务可持续研究领域,占有重要的位置。9.11事件发生后,促成信息系统研究领域的专业人员,开始认真研究如何应对各种人为,自然,及社会灾难事件,对信息系统造成的影响。CISSP(Certified Information Systems Security Professional)学习教材中,专门将灾难备份(disaster recovery)与业务可持续(business continue)的计划,单独作为一个领域来研究。3.11事件,向人们展示了灾难规模超过9.11时,对信息系统造成的各种破坏与影响。

信息系统需要理清的概念

信息系统所涉及的知识面非常宽泛。国外有种分类方法,是将信息息统分为ICT三大类。在这里I代表Information(信息),C代表Computer(计算机),T代表Telephpny(电话通信)。

上面提到每一大类,都有其业务侧重点:

  • Information: 主要关注信息管理方面的技术。如信息添加,删除,查找,分发。信息存储介质等
  • Computer: 主要关注计算数值速度,处理数值的范围,处理数据的方法,处理信号的方法等
  • Telephony: 主要关注处理语音传输业务,并围绕如何传输语音,需解决的网络管理相关技术等

信息系统近代发展简史

自从上个世纪60年代开始,数字技术出现并发展起来,Information,Computer 与 Telephony 三大领域,逐渐采用数字技术,推进本领域业务的发展。 如在信息管理领域,由于使用数字化技术,传统的纸质媒介信息记录载体,通过光电转换后,将信息数字化,并通数字计算机来管理,通过硬盘、光盘、磁带等数字化信号记录载体,进行存储。 在同一时期,计算机引入数字化技术,其运算速度、数据处理能力快速提高。在相同运算能力情况,新产品价格与能耗迅速降低,计算机作为商品的成本也快速下降。随后,由计算机相互连接组成的计算机网络,也就是互联网络,其中的计算机规模,随着单位计算机成本的降低,增长迅猛。数字计算机在社会各行业得以快速普及。在数字技术出现之前,处理语音传输业务的电话技术,已经发展了80多年,电话网络用户在全球已经具有一定的规模。但随着数字技术用于电话传输业务,电话语音传输业务运维,由人工,发展到机械与电子技术结合,在上世纪70年代后,随着语音信号数字化处理,电话语音传输业务运维开始使用计算机技术管理。电话语音传输业务的运营效率大大提高,支撑电话语音业务的传输网络,使用数字化技术后,可以实现原有单条物理线路上,复用传输多路语音数据。整个网络的运营成本由于传输效率的提高,成本相对降低。使用数字化技术的语音传输业务,随着成本的降低和效率的提高,业务规模也快速扩张。

互联网出现之初,计算机之间的数字数据,是信赖传输语音业务的公共交换电话网络(PSTN)进行传输。2000年始,公共交换电话网的骨干承载网络,引入光传输技术传送数字信号,随着光纤技术发展,光纤复用技术,也应用于骨干传输网络。光传输新技术带来的直接成果,是远距离传输数据信号的成本极大降低。伴随着计算机技术的发展,公共交换电话网络的智能终端用户数量大增,网络业务种类丰富多彩,图象,视频,计算机之间网络传输数据等业务流量大幅增长。经过几十年的技术发展,现在的语音传输的业务数据,也可以在互联网上进行传输。随着网络终端移动化的演变,通过软件实现传统语音交换业务功能,目前基于互联网,从事语音传输业务,已经没有什么技术上的障碍。

灾难备份与业务可持续的概念及发展简史

灾难备份,是应对不同的可预知灾难时,提前采取的不同应对措施。业务可持续是当预知灾难发生时,按计划高效实施应对措施,以实现损失最小化的目标。

在进行灾难备份之前,先要对信息安全的各种危害事件,按对业务造成损害的大小,发生可能性的大小,进行分类。针对不同分类,设计不同的灾难备份方案与执行计划。例如,下面列举的一些事件,可对信息系统(由信息处理、计算机及网络系统、电话网络系统)造成危害的一些事件:

  • 供电失效,造成信息系统失效
  • 网络传输物理链路失效,造成信息系统对外服务中止
  • 计算机硬件失效,造成信息系统部分业务服务失效
  • 管理人员配置操作失误,造成信息系统功能失效
  • 管理人员误删数据,造成信息系统业务服务停止
  • 因盗窃、恶意损坏,造成信息系统停止
  • 因骇客发动的网络攻击,造成信息系统功能失效
  • 因司法执法,造成信息系统被监管部门强行停止服务
  • 因爆炸、火灾、洪水等人为或自然灾难,引起信息系统服务停止
  • 因生物、核、化学攻击事件,造成管理人员无法进入信息系统设备存放场所,危及信息系统可用性
  • 因社会恐怖事件,造成整个地区封闭管理,引起整个地区信息系统失效
  • 类似3.11强震,造成大范围地域信息系统失效
  • 因国家间战争,造成信息系统设备硬件损坏,软件失效

9.11事件发生后,灾难备份这个概念,在信息系统应用中被重视起来。由于在9.11事件中,不少中、小金融公司的业务数据,伴随着事件中大楼的倒塌,而消失殆尽。9.11事件中涉事公司,其业务在事件发生后,基本无法恢复。因此,信息系统的灾难备份相关技术得到发展,相关灾备制度,也开始在不同单位中变得普及起来。

随着整个社会信息化发展,信息安全在社会生产活动中的重要性也日益增高。2011年3月11日,发生在日本的大地震事件,对信息系统造成损害的区域与规模,都远远超过2001年9月11日发生在美国的恐怖攻击事件。2011年3月11日大地震事件发生后,引发国家级信息系统灾难备份课题,被相关从业人员思考。

随着我们国内经历了非典,天津港爆炸事件,新冠疫情三年等事件,证明 CISSP 学习资料中,提到的各种对信息系统可能的危胁可能性,都有机会发生。因而,针对 CISSP 中灾难备份需要应对的各种事件,每个信息系统的用户,都需要设计相应的对应措施。

信息安全的核心要素是:机密性、完整性、可用性、可控性和不可否认性。灾难备份时,要同时保持信息的机密性、完整性、可控性和不可否认性同时,通过不同备份方案的实施,来保证快速恢复业务的可用性。灾难备份的终极目标,是保证业务可持续时间的最大化。

为了应对不同频次与规模的灾害,可以设计不同等级的灾难备份计划。如每小时本地备份极活跃业务数据,每天通过网络异地备份当天业务数据。每月备份支持业务应用程序运行的操作系统配置数据(本地外置存储设备离线备份),每季度备份支持业务应用程序运行的操作系统数据。

2024-08-02
技术文摘

确信 SSH 是你服务器的安全锁?

本文内容引用自 Linux Journal 的一篇极客指南系列的 旧文。原文作者具有丰富的网络安全经验,在文章中列举并解释了 SSH 所面 对的安全风险,在工作实践中,如何采取有效措施降低这些 SSH 所面对的安全风 险。Felix Lee 将原文部分内容,译成简体中文内容,以供中国大陆地区 Linux 网络客理技术人员,作为实际网络安全管理工作中的参考信息,并使用原文作者 提供的信息,与安全方案的解决思路,来强化其所管理的 Linux 机器的信息安全。

原文分为以下几部分:

  • 简绍
  • 在介绍部分,强调现代计算机系统,隐私与安全是强制性的要求。然而,从外部网络自动的网络连接,就隐含着风险。为了防止第三方窃听信息传输内容,SSH 是一种有效的应对手段,并且到目前为止,SSH 已经被广泛采用了三十多年,并且在互联网上,SSH 也成为骇客们明确的攻击目标。因此必须通过正确的 SSH 配置来强化你的 Linux 系统的安全。原文作者在文中讨论了 SSH 及如何配置与管理它,来确保你使用的网络的安全,你数据的安全,以使你遵守规定。

  • 什么是 SSH?
  • SSH 是指 Secure Shell (安全Shell),它是一个被加密的协议,在不安全的网络上,被用来提供安全的网络连接。它被创建用于在服务器与客户机之间,采用加密手段来传输数据,因此攻击者不可能通过测试的方式,来访问通过 SSH 协议传输的私有数据。

    SSH 是由互联网工程任务组 (IETF: http://www.ietf.org) 首先提议的标准。SSH 由 Tatu Ylönen,一位芬兰的研究员开发,用于替换早期不能确保机密性的协议。SSH 可以被用于用户到机器的会话,以及机器到机器 (M2M) 连接。SSH 有两个版本:SSh-1(开始于1995年) 与 SSH-2 (2006年开始成为一个标准)。SSH-1 现在被弃用了,因为不能应对某些攻击。如果你的信息架构中还使用 SSH-1 协议,立即停用它!

  • SSH 是不可攻破的吗?
  • SSH 安全是性,从数学原理而言,是在非常大范围整数集合内找出一对匹配密钥的数学难题,并由该数学难题的解决难度来保证加密数据的安全的。在实践中,系统逐一尝试在整数范围内的每对可能组成密钥的数,进而来确认该组数是否为密钥,这是一个不可能完成的任务。当然,随着计算机运算能力的提高,或者高效破解算法的出现,这意味着今天不能被破解的密钥加密信息,在明天可能会被读取出解密内容。

    如果不考虑应用与配置方面的问题,SSH 安全性讨论可以演变成相关话题的研讨。如果对手有足名够的计算机及运算能力,事实上对手可以攻破你的通信安全防护。据维基解密披露,美国国家安全局 (NSA) 有时可以对 SSH 通信进行解码,Edward Snowden 对 NSA 的攻击,是利用未被管理的 ssh 密钥,来提供未被探测的访问。对于 Edward Snowdoen 的这种坆击弱点,不是 SSH 协议的问题,而是对 SSH 服务管理不善而产生的问题。原文中的引用链接提到,NSA 每年有几百亿美金的预算用于网络窃听与破解密码的业务。

  • 强化 SSH 安全的提示
  • 一旦你安装了 SSH,你需要确保配置的安全,并且不要为入侵者提供进入你计算机系统的入口。下面的提示,是提高入侵者对于你系统入侵技术难度。原文作者强调,现实中对于安全问题,没有包治百病的"大力丸",可用来增强你计算机系统的安全性;对于安全问题,你决不要轻视,并使用少许预防措施。

    下面的内容,是关于 SSH 安全配置的几点提示:

    • 改变SSH网络服务默认服务端口
    • 标准的 SSH 服务端口号是 22,因此,在互联网上开放端口号为 22 的访问,将变为攻击者的目标,通过合理改变 SSH 服务端口号,可以少许影响攻击者的攻击难度。通常将 S 服务端口号变更为 1000 以上的端口号,是一个安全选择,但在确保你为 SSH 服务新选用的服务端口号不要与 IANA 组织分配的其它公共服务的端口号相冲突,或者使用被网络运营商防火墙默认策略所屏蔽的端口。

      根据你使用的 SSH 服务器软件及该软件的版本的不同,你可以依据软件配置手册,来调整相关参数,以修改 SSH 服务默认服务端口。修改 SSH 服务端口,从技术上来说,不能增强 SSH 服务的安全性;但这种措施可以降低网络自动扫描器,直接发现你使用的服务器参用 SSH 腿务的机会。

      修改 SSH 服务端口的措施,也有弊端。首先这种非标 SSH 端口会使得用户比较迷糊。另外,有些监测工具,会认为这些被探测到的非标准端口流量是值得怀疑的,进而被防火墙限制。

    • 让用户敲门而入的访问模式
    • 当运行一个对整个互联网用户开放的服务器,如果你放弃保护监测,你更愿意隐藏用效用户。然而,当开放服务器只对少许几个用户使用时,你可以隐藏 SSH 端口,这里的隐藏是指除非用户知道如何让 SSH 端口显现,否则 SSH 服务端口将不对外开放。

      该方案的想法非常简单。首先关闭所有网络端口,但监视连接尝试行为。当一个特定的连接尝试行为序列被探测到,系统打开 SSH 服务端口供用户访问。这个特定的"敲门序列"可以非常简单 (例如,首先尝试 TCP 7060 端口的访问,然后是 UDP 7009 的访问,最后是 TCP 7022 的访问),或者是从一个一次一密列表中,使用用过作废的一次性密,就如同被加密的高度安全的”一次性使用的平板电脑“。

      另外的选项是提供超时,因此在 SSH 服务端口被打开后,用户必须快速连接,甚至在此之后,端口被打开的情况下,也不再为其它用户提供服务,所以其它人不可能利用此访问窗口。为什么这样做?因为这里有多于64,000个可用端口,并且放弃被分配的端口后,还剩多于50,000个端口,要猜口五个敲门序列,意味着在五组几百万相乘后的组合可能性中,找到正确的组合序列。这是非常困难的操作。

      从管理的解度来看,将每组敲门序列,当作一个密码口令来管理(过期强制修改)。端口敲门序列不能作为你仅有的安全保护手段,但这个措施可以增加对手攻击你的系统的难度。

    • 避免弱化安全的 SSH 服务配置选项
    • 原文中提到一些弱化 SSH 安全的技术选项。首先,SSH 协议版本1 (SSH-) 成为"中间人"攻击的牺牲品,因此,窃听者可以劫持你的通信并读取你 (据说安全) 的传输数据。最好是在配置文件确认你的 SSH 服务只使用 SSH-2 协议。另外,这里还有以下几个与安全相关的配置选项需要被禁用。

      • IgnoreRhosts 选项
      • X11Forwadring 选项
      • DSAAuthenitcation 选项
      • PermitEmptyPassowrd 选项
      • PermitRootLogin 选项
      • 安全弱点不仅来自坏的参数;用户也是一个安全风险产生因素,无人看管的 SSH 会话可以提供近乎荒诞地未被授权访问。要最小化这种问题,修改如下配置选项:

      • ClientAliveItnerval
      • ClientAliveCountaMx
      • 宁选密钥而不选密码进行 SSH 认证
      • 限制基于密码的登录访问
      • 使用访问规则
      • 使用 PAM (Pluggable Authenticatino Modules) 机制来进行检查
      • 对抗蛮力网络攻击
    • 更新锁:SSH 管理

    上面提到几种强化 SSH 正常使用安全的方法。然而,在更高层次的商业行为中,必需保证拥有更有效的保证安全的方法,以及自动化工具来预防安全问题的产生。让我们更为深入考虑 SSH 安全管理问题。这时需要考虑标准化,使用策略以及遵从行业要求:在现实生活中,遵从行业要求正变得越来越重要,并且有许多与安全相关的标准已经存在。(相关标准列表在这里略去,请参考原文) 这些标准与法律包含出于安全考量的最小配置需求,然而,这些安全措施的失效,也意味着牢狱之灾的到来,通常,这危机离管理层的 CTO/CISO 们更近。

    SSH 用于大多数网络架构中,但 SSH 管理也需面对许多风险。不是所有的公司都有足够的访问控制措施,来防止入侵者利用你的服务器进行非法访问。密码不能被看作最安全的访问控制方法,并且未过期的 SSH 密钥或许不在安全团队的监管之下。所以 SSH 管理面对大理安全见险:如可监管性,如何知道 当前所有使用 SSH 的可访问?SSH 被如何使用,它安全吗?没有中心化管理的 SSH 服务器,私有的 SSH 密钥可能召至几百个未经授权的用户,在没有通知安全团队的情况下,访问你的系统。其它如审计问题的风险,软件安全更新的风险,人为错误操作引入的安全风险,密钥未吊销产生的风险,密钥未周期更新产生的风险,安全分级不当产生的安全风险。

    原文中对于上述风险,进行了概要式描述。另外,通过第三方调查报告得出的结论,证明上述风险的普遍性。

    2024-12-30
    技术文摘

    互联网服务安全的基础---域名服务器安全管理

    互联网上的域名,是互联网上每个组织单元都使用门牌号码。就如同现实社会中,几乎每个有责任感实体,都对金字招牌时常不停地打理与维护,以确保招牌的含金量。互联网世界中的域名也如同现实世界中的招牌,需要及时维护与打理。

    这篇文章的内容,聚焦于如何使用数字证书技术,来配置域名服务器上,与管理域相关的参数。使用这些参数,由管理域官方域名服务器,来向整个互联网上所有用户,发布该网络域下,各个授权网络服务与域名相关的信息。通过使用数字证书技术,从技术上可以对抗互联网上非法用户对于本域发动的仿冒,伪造等攻击行为。在这里与域名安全技术相关的内容,不涉及域名服务器安装,配置,安全管理等技术;域名服务器用户安全认证等社会管理的安全话题。

    在管理域名服务之前,建议读者先阅读由 O'Relly 出版公司出版的《DNS and BIND》,该书最新版本为第五版。另一本推荐读者参考的书籍,是 Apress 公司出版的《Pro DNS and BIND 10》。《DNS and BIND》一书,是学习互联网技术的基础服务管理重要著作。建议有兴趣的读者,花时间学习一下该书的内容。 《Pro DNS and BIND 10》是一本介绍较新 DNS 服务器安装、配置,以及新技术参数设置的书籍。还有一本,与 DNS 技术有关,由向读者推荐的书籍,是由 O'Relly 公司出版的《Sendmail》第四版。这是一本大部头的,关于 Sendmail 这个邮件服务器管理相关的技术书籍。该书中,介绍了电子邮件的发展历史,电子邮件服务技术管理的技术细节问题。其中,关于如何配合 DNS 服务,来实现 Sendmail 提供安全的电子邮件服务的技术细节信息,在该书中有涉及。建议有兴趣的读者,花些时间来阅读并了解相关的内容。

    一般来说,首先要正确配置域名管理者的电子邮件地址。在进行 DNS 的 zone 配置时,该电子邮件地址的正确格式,与常见的由@将用户名与域名分隔的电子邮件格式不同。其正确的格式,是由.(英文的点符号)将电子邮箱用户名与域名部分分开。这个电子邮箱地址,在未受 DNS 数据污染的情况下,可以用 DNS 管理工具,在整个互联网上被用户查询到。这个电子邮箱的最主要的用途,是接收所管理域下的网络技术投诉邮件。例如,其它网络的技术管理者,投诉声称来自你所管理的网络内的 IP 地址,向其所管理的网络上的计算机发送的非常流量。由于存在 IP 地址伪造,路由器配置错误等不同的原因,这类技术投诉信息,通常需要及时确认并处理。 如果确认本网络日志上,未发现非法流量的日志信息,要及时与对方确认沟通,以便对方网络管理人员,从下一跳的路由管理者那里,确认非法网络流量制造者的来源。

    因此,这个电子邮箱所在的邮件服务器,需要功能正常,并且该邮箱的信息,需要及时被处理。

    遗憾的是,目前中国大陆地区,有头有脸的互联网运营商,对于此电子邮箱的设置与管理,流于形式。或处于根本无人管理的状态。这种状态形成,在技术层面上,影响该运营商所管理的网络 IP 地址段声誉。最终影响该运营商所服务用户的网络应用的功能。例如,网络上反垃圾邮件黒名单系统,会通过 DNS 解析服务信息,列出网络上声名不佳的 IP 地址段的信息,以供电子邮件服务器,在技术上拒收该类 IP 地址,向本地邮件服务器发送的邮件。

    在技术管理层面上,中国大陆地区域名管理服务商,存在的一个重大安全问题,是允许用户设置其域名管理者的邮箱地址。这个技术上的安全问题,造成的结果,是实际域名管理者(域名解析服务商)无法及时收到被管理的域的相关投诉信息。从而无法及时发现与中断非法网络服务的影响。

    本网站使用的 DNS 解析服务提供商,不允许用户设置域管理者电子邮箱地址,并且默认设定为域名解析服务商所使用的电子邮件地址。这从技术管理层面,堵上域名管理上的风险。

    在配置域名服务 zone 技术参数时,授权域的 TTL 时间值的设定,其中也有学问。这个时间值的单位是秒。在 BIND 这款域名服务器上,也可以用其它代表星期、天、小时有特定字符,来代表对应的秒数。这个 TTL 参数的时间值,代表整个互联网上所有域名服务器上缓存中,每隔这个时间长度,需要向此域的授权 DNS 服务器上,同步更新域名解析信息。

    一般来说,神智正常的网络管理员,会将这个时间值设定为一周。这个长缓存周期,可以减小整个互联网上的域名解析更新流量。另外,也照顾互联网上,带宽资源不足的网络用户,对于本域名下的网络服务的使用感受(由于减少 DNS 解析更新数据的流量,较小的网络出口带宽资源,可以更多地用于网络服务业务数据的传输)。 如果网络服务的 IP 地址段需要变动,在 IP 地址变动前一周时间,分几次减小该 TTL 的时间周期值。这样,可以平缓调整互联网上,所有用户对于该域名下网络服务业务的影响。

    如果在授权 DNS 服务器上,设定较短的 TTL 值,说明有以下几种情况存在:

    1. 预示该域下的网络结构,近期要发生变化。
    2. TTL 值长期设置过短,说明该域名服务变动过于频繁。贼眉鼠眼的戏份过足;
    3. 如果知名网络使用过短 TTL 值,通常也有不可明言的想法。如增大流向该域的服务器数据流量;体现该网络硬件设备多金的特质;

    总之,对于域名服务器上过短的 TTL 设定值,对该问其所管理的网络用户来说,可能引起访问该域名网络服务的最终用户,产生软件Bug,造成用户侧所访问的网络服务长期无响应的现象。从宏观方面来说,过短的 TTL 值,会造成互联网上,所有 DNS 服务器过于频繁更新域名解析信息。而这些更新行为,都需要消耗一定的电力。以当前互联网的规模,这种行为集腋成裘,最终会造成大量的能源浪费现象。因此,建议域名管理技术人员,根据业务需要,合理调整 TTL 值的大小。

    2025-02-16
    技术文摘

    偶遇来自天津移动的火星访客

    今天上午远程登录服务器顺,习惯性打了一下dmesg命令,发现以下两条有趣的信息:

    IPv4: martian source 74.222.24.68 from 111.32.121.220, on dev eth32
    ll header: 00000000: 00 0c 29 74 0e f3 cc 46 d6 6d 6e fb 08 00


    2025年2月16下午,又出现来自常州移动的IPv4地址:
    martian source 74.222.24.68 from 223.66.104.76, on dev enth32
    ll header: 00000000: 00 0c 29 74 0e f3 cc 46 d6 6d 6e fb 08 00
    2025年2月17下午,又出现来自南京移动的IPv4地址:
    IPv4: martian source 74.222.24.68 from 183.206.22.13, on dev eth32
    ll header: 00000000: 00 0c 29 74 0e f3 cc 46 d6 6d 6e fb 08 00
    (看来移动网络发射了不少运载火箭到火星!这是大鸣大放呀!)
    (注意:为了不泄漏不想公开的网络信息,我修改了我的网卡的MAC地址数据)
    上面两条信息的意思是:IPv4: 火星人 源自 74.222.24.68 从 111.32.121.220 于网卡 eth32,第二条信息,提示了访客给出的网卡的 MAC 地址。但不幸的是,访客给出 的网卡地址,数据格式不合法。因此在日志信息中暴漏了非法目的。

    从网络通信原理来说,如果同在一个网络内的两台机器上,使用上面的网络二层数据声明, 是有可能将合法网络主机的以太网数据,发送到非法用户的网络主机上的。但前题条件是, 合法用户主机上使用的网络协议栈的代码足够健壮;另外一个前题,是网络管理技术 人员装聋作哑不对此类行为进行处理。但目前,声明的两个IPv4地址的机器,物理 上位于地球的相隔万里的地点,显然,这两条内核提示信息,说明访客想将当前服务器的网 络数据路由到其指定的网络地址。

    当然,这个声明的111.32.121.220地址,是不是真实的路由目标网络IPv4地址,还值得怀疑?但如果从技术上深揪下去,还是可以发现访客的一些真实网络行径。

    因为合法的以太网卡的MAC地址,前三个比特显示的是生产厂商的信息。 如果通过路由器以太网卡数据记录信息,是可以对应查到所声称的IPv4地址的真实路由信 息,以及真实地理位置的。

    查询IPv4地址的物理位置,可以使用geoiplook这个工具。当然, 你需要为该工具安装记录IPv4地理位置信息的数据库。这方面的信息,超出了本文的知 识范围。

【使用 VIM 编辑器技巧】


2024-12-27
技术文摘

新手如何开始学习使用VIM?

作为一个使用 VIM 编辑器的新手,当打开 VIM 后,对于终端界面,往往不知道接下来如何操作。下面,我在这里介绍一个,作为新手使用 VIM 时,如何从帮助文档中,找到答案。

对于新打开的 VIM 程序,首先,可以依次按这几个按键:

  1. Esc (这是 PC 键盘上左上角的键)
  2. : (这是 PC 键盘上同时按 shift 与 ; 得到的键)
  3. help (这是连续输入的 help 这个单词,外加一个空格
  4. 回车键 (这是 PC 键盘上的 return 或 Enter 键)

在输入上面的键后,你可以在新打开窗口右上角,看到由h,j,l,k组成的菱形图案,这个图案代表按图案上每个角的字符时,光标在窗口中移动的方向。

在这个帮助信息窗口中,按j按,光标可以向上移动。可以看到帮助信息在窗口中的其它部分。

2024-11-15
技术文摘

VIM 的几种工作模式

这是一篇介绍 VIM 不同工作模式的短文。当我反思自己作为新手,学习 VIM 时所遇到的困难时,决定写一些文字来帮助后来的 VIM 新手用户,来有效学习 VIM 的 使用方法。

记不清某本介绍编辑器的书籍中,作者用手工锯与电锯来对比 VIM 与行编辑工具软件之间的关系。那本书的作者认为 VIM 等似手工锯,使用时受限制的情况大多,不如行编辑工具软件功能强大,效率高。通过笔者多年学习与思考后,才渐渐理解那位作者论断的准确性。这些效率的差异,是取决于 VIM 工作于不同的模式。

VIM 使用不同的工作模式,来以不同的效率辑编文件。通常用户在使用 VIM 时,是在命令模式,编辑模式,查看模式,行编辑模式之间,根据需要,进行切换,从而完成编辑文件的任务。注意,在这里,没有使用文本文件这个术语,因为 VIM 可以编辑二进制文件,这个功能是大多数基于文本编辑的工具所不具备的。

如果在终端程序中,用户运行 VIM 程序时,在 VIM 程序运行,并显示欢迎信息屏信息时,此时,VIM 用于命令模式。从命令模式切换到编辑模式,是在键盘上输入i或a这两个字符中的任意一个。i代表进入插入编辑模式,a代表进入追加编辑模式。在这两种编辑模式下,VIM 用户可以输入想要的文本。

如果用户想退出编辑模式,可以在编辑模式下,按键盘左上角的esc键。通过按这个键,用户可以在编辑模式与命令模式进行切换。

在命令模式下,用户可以执行一些移动位置的命令,对指定行,或指定行范围进行中的部分内容进行替换的任务。在命令模式下,还可以调用shell来执行操作系统中的一些工具命令。另外,还可以从命令模式下,进入行编辑模式,在行编辑模式下,通过正则表达式的形式,对大型文件,以逐行进行编辑的机制,高效地进行编辑处理工作。

VIM 使用不同的模式,来完成不同的任务。并且这几个不同模式之间,通过特定的方式进行转换。如果读者了解状态机的概念,那么其很容易体悟到 VIM 这个软件设计的优雅与严谨。
简单来说,如果用户对少许内容进行编辑时,可使用插入或追加编辑模式。这种模式相对于行编辑模式,效率比较低。但在这两种工作模式下,进行编辑时,可以通过不同的内存缓存,来实现编辑过程的内容回退功能。但这种功能的代价,是大量使用计算机的存储空间。如果编辑大型数据库中导出的 CVS 格式文件时,如果使用回退功能时,用户会发现 VIM 响应速度会明显的降低。这是由于对每个变动进行缓存时,都需存储与比较与检索的计算过程。这种操作十分占用计算机资源。
相反,行编辑模式,只需要编写需修改内容的特征的正则表达式,并将这些编辑指令存入一个文件中,使用行编辑模式,以逐行查找特征字符处理的机制,对要被处理的大型文件,只需从头到尾过一次,就可以完成编辑任务。这种处理过程,占取少量的存储与计算机资源。所以说是高效的编辑模式。

2024-11-12
技术文摘

使用 VIM 的 HTML 插件

这是一篇关于如何使用 VIM 编辑器的 HTML 插件的短文。该文章是为了用户快速上手与使用 VIM 编写 HTML 源文件。在这里,我将简单介绍如何安装,配置与使用 VIM 的 HTML 的 emmet 插件。

首先,在这里说明安装 emmet 插件所需的条件,以及如何使用 VIM 的插件管理来安装 emmet 插件。在这里我假设读者已经知道如何创建隐含目录,还有用户家目录的概念。如果要安装 emmet 插件,VIM 的版本号,最好使用最近发布的 9 系列的版本。另外,还需要安装 vim-plug 插件。还需要配置用户家目录下的.vimrc文件。最后,用户还需要运行PlugInstall命令来安装所需的插件。

首先在用户家目录下,创建 .vim 这个隐含目录。这个目录中的内容,当 VIM 运行时,将会从中读取相关的配置信息以及插件功能代码。在类 UNIX 平台的终端这个程序中,运行如下命令:

$ mkdir .vim

下面,使用如下的命令,来下载并安装 VIM 插件管理这个特殊插件。这个特殊插件,可以通过用户家目中的.vimrc文件,来自动安装其它被配置要求被安装 VIM 插件。

$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

在执行完上面的命令,安装好 vim-plug 插件后,编辑用户家目中的 .vimrc文件,添加以下内容:

set nocompatible
filetype indent plugin on
call plug#begin()
Plug 'tpope/vim-sensible'
Plug 'lervag/vimtex'
Plug 'mattn/emmet-vim' "html plugin
call plug#end()
let g:user_emmet_expandabbr_key=''

在编辑完成.vimrc文件之后。关闭 VIM 程序。之后再次运行 VIM 程序。VIM 在这次运行时,会加载刚才在.vimrc文件中的新配置选项。在 VIM 程序正常运行后,还需要 VIM 命令行模式下,运行以下命令,来自动安装 emmet 与另外的插件:

:PlugInstall

在命令行模式下,上面的 PlugInstall 命令后,默认使用回车确认命令开始运行。此时,用户会在新窗口中,显示安装的过程与结果。这个安装过程需要使用 github 上的一些网络链接。有些不幸运的用户在这个过程中,可能过不了长城脚下的关口。此时,用户可使用合法的代理服务,来安装上述的插件。

如果用户的网络与 github 通信正常,并且通过上面的命令,下载并安装了上面的插件,此时,用户可以在打开的 VIM 程序中使用 HTML 撰写插件了。通过上面的.vimrc文件中的配置,我们设定用户同时按ctrl与c这两个键,是使用插件来扩展 HTML 标记的开关。为了表述清晰,我在这里使用||来代表同时按下ctrl与c键。在 VIM 编辑模式下,在编辑窗口中,输入以下几个字符后,你可以看到插件扩展的结果

p.abc||
扩展后的结果: <p class="abc"></p>

通过上面的介绍,VIM 用户可以安装并使用 HTML 插件。关于该插件中护展语法的说明,请参考插件的说明文档。用户可以在 VIM 的命令行模式下,运行:help emmet,来查看相关的说明。

【MacOS 维护笔记】


升级古董级 MacBook Pro 的操作系统

2024-11-20
技术文摘

进入 2024 年 10 月,作者正式开始了职业空窗期,并决定利用这个空窗期做一些自己感兴趣的事情。由于手头有一台 2015 年产的 13 英吋的 MacBook Pro 因屏幕出现花屏现象,长期无法正常使用,因此作者决定对动手进行维修,并升级其上运行的 macOS 操作系统版本。
另外,由于还有一台 2013 年产的 iMac 一直用于工作。其上有大量电子书籍,文档,代码仓库等需要重整理,同时用于开发的 KiCAD 新版本软件也不能在原有的 macOS 上运行。由于操作系统长期没有升级,iMac 时常由于看门狗引起系统崩溃。因此,作者决定,同时对这台 iMac 也进行操作系统软件升级。以满足工作需求。

因为上面提到的机器过于古老,现的 macOS 12 系列以上的操作系统软件安装包格式,无法被机器原装的操作系统所识别,因此,只能依从旧到新的原则,从机器原装的操作系统开始,依次升级到新的操作系统安装包格式,可被当前安装的操作系统识别时为止。

由于 MacBook Pro 笔记本屏幕的更换,网上可以找到视频教程。所以,换屏的工作,只需在网上购买 MacBook Pro 的屏幕组件。为了保险起见,作者还花了一些时间,在网上找到了该款 MacBook Pro 的电路原理图。2015年的机器,原理图是2012年发布的,并且原理图的器件标示地非常详细,在这里不得不为 MacBook Pro 的电路设计工程师点个赞。其工作之细致,是很值得我等学习。由于作者的 MacBook Pro 出现的状态,只是屏幕花屏。之前到官方维修点检查,官方维修点得出结论是屏幕损坏,需要整体换屏。报修需2000多元,作者根据工作经验,以及国外英文网站上相同产品显示线缆设计过短造成屏幕工作不正常的的投诉信息,作者认为屏幕不正常工作的原因,更可能是连接线缆的问题。 因为在此之前,该 MacBook Pro 的触控板的线缆,就出过问题,经购买线缆并更换后,触控板功能得以恢复正常工作状态。有此前科的机器,外加作者认为过于高的维修费用,因此,当时没有在官方维修点修理。

现在决定自己动手维修,出于料敌从宽的原则,还是从网上花 700 元,购买了该款机器的新的屏幕模组。但经过作者动手更换屏幕模组后,更认定原来屏幕的问题,出在该款笔记本电脑的屏幕连接线缆上。由于该款线缆在台湾一家专卖苹果线缆的网站上有售,但由于作者想从该网站购买时,支付方式有问题,因此只能作罢。其实,如果可以方便的购买到配件的话,维修成本,只需人民币 100 多元。

下面来谈谈如何升级 macOS 操作系统。要完成升级 macOS,首先要具备以下条件:

  1. 可以访问互联网 Wi-Fi 网络环境
  2. 32G 以上容量空白 USB 2.0 接口电子盘
  3. 可访问 github 的代理服务器
  4. OpenCore 图形化应用
  5. 一个 USB 2.0 接口三键鼠标 ( 为 iMac 升级操作系统时会用到 )

下面先介绍如何升级 2013 款 MacBooK Pro 到最新的 macOS 操作系统。整个升级过程按如下操作流程执行:

  1. 恢复原厂随机安装的操作系统版本
  2. 从原厂版本操作系统升级到官方最后支持的操作系统版本
  3. 下载 macOS 12 的安装包,并安装 macOS 12 到 MacBook Pro
  4. 在 macOS 12 环境中,下载 OpenCore 安装包
  5. 从安装的 OpenCore 程序中,创建 macOS 15.1.1 安装盘

按上述流程执行升级任务工作的原因,是由于原厂安装的操作系统版本中,应用程序安装器不支持最新操作系统安装包 (macOS 15.1.1) 的文件格式,无法直接升级到 macOS 15.1.1 操作系统版本。另外,由于原厂安装的操作系统版本的中 ssh 应用程序所使用的加密通信协议版本,已经不被现有的 ssh 工具所支持。使用现有 ssh 工具无法连接原厂 sshd 服务。因此,有一个能访问的 Wi-Fi 环境是十分必要的。

下面我来介绍整个升级与安装频骤。首先,我介绍一下如何恢复原厂随机安装的操作系统。注意: 在执行恢复工作流程前,请将你现有重要数据文件进行外部备份。 之后,我说明升级操作系统的操作过程,以及安装过程中的注意事项。

下面先谈谈关于恢复原厂操作系统的过程。恢复原厂操作系统的操作流程如下 ( 这个操作流程仅适用于 2015 款 MacBook Pro,其它款的 MacBook Pro 的恢复工作,按键组合可能不同。相关信息,请访问苹果官方技术支持网站 https://support.apple.com ) :

  1. 退出现有操作系统,关闭 MacBook Pro 电源。
  2. 在 MacBook Pro 键盘上,同按option与R这两个按键。
  3. 保持上一步骤对所有键按压状态,按 MacBook Pro 键盘右上角的电源开关按键,之后抬起对电源键的按压,保持对另外两个按键的按压状态。
  4. 在 MacBook Pro 的屏幕上出现转动的小地球图标,以及下拉选择 Wi-Fi 网络框后,松开对所有铵键的按压。
  5. 从 Wi-Fi 网络选择框中,选择自己所使用的 Wi-Fi 的 SSID 名称
  6. 输入 SSID 所使用的密码,连接到 Wi-Fi 网络
  7. 之后,是从苹果官方服务器上,下载原厂操作系统安装包的软件包(依访问境外网络的速度不同,该过程可以需要数十分钟或数小时)
  8. 在下载完成后,进入安装操作系统的图形安装界面
  9. 在不同工具选择窗口中,先选择最下面的磁盘工具
  10. 在磁盘工具应用程序窗口的左侧栏中,选择最上级的磁盘
  11. 然后在磁盘工具窗口右上部的操作图标中,找到抹掉并点击抹掉图标。
  12. 在磁盘工具窗口右下部分,为磁盘填写卷宗名以及分区大小,还需要选择文件系统格式等信息。建议选择区分大小写的文件系统格式。
  13. 在设定完成磁盘设定信息后,在磁盘工具的右下,按完成按钮。完成磁盘分区,并退回上一级安装器主窗口。
  14. 在安装器主窗口中,一般选择从上到下的第二项,安装XXXX系统(这里用XXXX代替操系统名)
  15. 之后的步骤,按图形环境的提示操作,这里略去相应操作说明。只是注意,在为新安装的系统添加新用户时,注意记清用户名与密码的设定。
在完成上面的操作过程(包括略过说明的过程)。你的 MacBook Pro 会重新启动,并运行原厂提供的操作系统。在使用上面的安装过程中设定的新用户登录进入系统后,注意检查 Wi-Fi 是否连接到互联网。如果通过 Wi-Fi 可正常连接到互联网,你依照系统提示,升级一些软件包。在升级过程中,需要下载,并可能需要重新启动几次,以保证新的升级软件包,在操作系统上生效。

通过上面一番操作,MacBook Pro 现在已经恢复到原厂附赠的操作系统版本。用户可以使用在安装过程中设定的用户名与密码登录入该版本的操作系统,并以此版本为基点,开始软件升级工作。

在将 MacBook Pro 升级到官方支持的最终版本后 ( 版本代号:10.15.5 )。用户可以从: macOS 安装包下载链接及说明 的网页找到 macOS 11 版本的下载网址链接,并下载 macOS 11 的操作系统安装包。该安装包中 dmg 格式。在下载工作宛成后,从当前运行的操作系统的应用程序文件夹中,可以找到安装 macOS Big Sur 的程序,你可以用鼠标点击该安装程序,开始将 macOS 10.15.5 升级到 macOS Big Sur 11 版本。相关过程都是图形窗口界面的操作,在这里,我不再赘述相关内容。

在将 macOS 升级到 Big Sur 11 版本后,需要下载并安装 OpenCore 软件。OpenCore 是一个 BootLoader 功能的软件,该软件可以探测当前硬件平台的外围硬件配置,并自动编译并安装相应硬件平台的驱动程序的软件模块。这些外围硬件电路设备的驱动,可以在官方不支持的新版 macOS 操作系统上运行。

OpenCore 安装向导这个网址,对于如何安装 OpenCore 有详细的说明。由于 OpenCore 下载网址使用 github 这个网站,部分用户可能无法直接访问该下载地址。因此,这时,需要找到合适的代理服务器来完成下载任务。
在完成下载 OpenCore-Patcher-GUI.zip 这个软件包后,解压缩这个软件包,用鼠标点击 OpenCore 安装程序,在 macOS Big Sur 11 安装 OpenCore,在完成安装任务后,需要运行 OpenCore,为当前硬件平台编译对应的外围硬件设备驱动。在这个过程中,OpenCore 会通过互联网访问远程服务器上,相应硬件的源代码以及函数库代码,此时,有些网址可能会被屏蔽,造成 OpenCore 编译时,长时间无反应的现象。这时,需要在终端这个应用程序中,使用命令行来运行 OpenCore 应用程序。并且在此时,需要在命令行环境中,在运行 OpenCore 前,准备好全局网络代理环境变量。设定全局代理环境变量来运行 OpenCore 命令如下:

$ export all_proxy="http://123.45.67.89:3128" $ cd /Application/OpenCore/Contents/MacOS $ ./OpenCore
通过在终端中运行上述命令,此时,在图形界面中,会显现 OpenCore 运行界面,先用鼠标点击 OpenCore 应用程序窗口中左上部的编译按钮,OpenCore 会自动探测当前硬件平台需要什么内核设备驱动。( 但对于 iMac 有时会多加载显卡驱动,造成启动后,操作系统启动不稳定现象 )

上面段落中,介绍了为硬件编译驱动的过程。但上述内容出现的时机有些早。正确的操作顺序如下:

  1. 首先,使用应用程序中其它中的磁盘工具这个应用程序,将 USB 盘进行格式化。(正确的说法,是删除卷宗)
  2. 在运行的 OpenCore 中,用鼠标点击创建安装盘,并选择最新的 macOS 15.2 操作系统安装包进行下载。
  3. 当下载完成后,OpenCore 会自动将新操作系统安装程序,存储到应用程序目录下。
  4. 用鼠标点击应用程序中,操作系统安装程序图标。运行 macOS 15.2 安装程序。
  5. 在运行安装操作系统过程中,选择安装磁盘时,选择前面格式化的 USB 盘
  6. 等待下载的数据完全拷贝到 USB 盘上。
  7. 从 MacOS 系统中卸载 USB 盘
  8. 关闭 MacOS 系统
  9. 在保持 USB 盘插入 iMac 上 USB 接口的情况下,在开启 iMac 同时,按住 Option 键不放
  10. 在屏幕上出现的磁盘图标中,用鼠标选择 USB 盘的卷宗。开始系统安装
  11. 依提示,在安装过程中设置选项,直到完成新版 MacOS 安装
这里是 OpenCore 在 macOS 上的安装向导网址。

网站维护:Felix Lee
版权©: 2022-2025 由Felix Lee 所有
投诉邮箱:abuse@ivnss.com