2024-11-11 00:00:00
在现代的软件开发和系统管理中,进程管理是一个不可或缺的部分。PM2 作为一个强大的进程管理工具,它可以帮助我们管理和保持应用在线状态,自动重启崩溃应用,并提供负载均衡等高级功能。
自动重启:应用崩溃时会自动重启。
负载均衡:在多个实例间分配负载。
集群模式:在所有的 CPU 核心上运行应用。
日志管理:实时日志查看和日志持久化。
监控:实时监控应用资源使用情况。
远程管理:通过 API 或者仪表板远程管理应用。
PM2 可以通过 npm
命令轻松安装。如果系统暂未安装相关命令,则执行下面的命令「这里以 Ubuntu 系统为例」
1 |
sudo apt -y install npm |
然后在命令行中运行以下命令即可安装 PM2:
1 |
npm install pm2 -g |
要使用 PM2 启动一个应用,可使用 start
命令。例如,如果有一个名为 app.js
的 Node.js 应用,可以这样启动。PM2 会启动应用,并在后台运行:
1 |
pm2 start api.js |
重新启动应用程序:
1 |
pm2 restart api |
重新启动所有应用程序:
1 |
pm2 restart all |
重新启动多个应用程序:
1 |
pm2 restart app1 app2 app3 |
停止指定应用程序:
1 |
pm2 stop api |
停止所有:
1 |
pm2 stop all |
删除应用程序:
1 |
pm2 delete api |
删除全部:
1 |
pm2 delete all |
使用 list
命令可以查看所有由 PM2 管理应用的状态,这将显示所有应用的 ID、名称、模式、内存使用情况信息:
1 |
pm2 list |
PM2 提供了实时日志查看功能,使用 logs
命令将显示所有应用的实时日志流:
1 |
pm2 logs |
使用下面命令可重启所有由 PM2 管理的进程,可实现零停机重启:
1 |
pm2 reload all |
输入下面命令来保存当前的进程列表,确保在重启后自动加载这些进程:
1 |
pm2 save |
使用下面命令设置开机自启:
1 |
pm2 startup |
使用下面命令取消开机自启:
1 |
pm2 unstartup |
2024-11-08 00:00:00
一天在聊天广场中分享了服务器监控截图,obaby 说感觉不错,想知道如何部署的。杜老师当时拍着 36A 的胸脯郑重承诺当天晚上会发表。然后……就没有然后了!但人不能言而无信,博客不能拖而不更,它来了它来了,它带着忏悔走来了!
支持一键安装面板、监控服务,操作便捷。兼容主流系统,包括 Linux 等。
支持同时监控多个服务器的状态,提供历史网络状态、延迟图表,监控网页、端口可用性以及 SSL 证书状态。
支持故障和流量等状态告警,可通过 Telegram、邮件和微信等多种方式提醒。
提供 API 获取服务器状态,支持 WebSSH 和 DDNS 及流量监控。可设置定时和触发任务,并批量执行服务器任务。
在面板服务器,运行安装脚本:
1 |
curl -L https://raw.githubusercontent.com/nezhahq/scripts/main/install.sh -o nezha.sh && chmod +x nezha.sh && sudo ./nezha.sh |
如面板服务器位于中国大陆,可以使用镜像:
1 |
curl -L https://gitee.com/naibahq/scripts/raw/main/install.sh -o nezha.sh && chmod +x nezha.sh && sudo CN=true ./nezha.sh |
等待 Docker 安装完毕后,根据实际的情况分别输入以下值:
1 |
OAuth 提供商 |
安装结束后如一切正常,此时可以访问 IP+端口号查看面板:
1 |
http://IP:8008 |
哪吒监控的被控端服务被称为 Agent,这里主要讲解如何在 Linux 中安装 Agent「支持大部分发行版」首先在管理面板添加一台服务器,然后在被控服务器中运行下面的脚本:
1 |
curl -L https://raw.githubusercontent.com/nezhahq/scripts/main/install.sh -o nezha.sh && chmod +x nezha.sh && sudo ./nezha.sh |
如被控服务器位于中国大陆,可以使用镜像:
1 |
curl -L https://gitee.com/naibahq/scripts/raw/main/install.sh -o nezha.sh && chmod +x nezha.sh && sudo CN=true ./nezha.sh |
脚本运行后选择安装监控 Agent,输入服务端的通信 IP 或者域名如:
1 |
nezha.dusays.com |
输入服务端的通信端口,默认如下。之后再输入 Agent 密钥,Agent 密钥在管理面板添加服务器时生成,可以在管理面板中的服务器页中找到:
1 |
5555 |
2024-11-05 00:00:00
前段时间接到父母电话,说有自称宽带运营商的工作人员上门检查。父母的安全意识还是很好的,担心会动手脚,人家还没进门,电话就过来了。这让杜老师想起 PCDN 事件,今日整理相关内容,给小伙伴们普及下!
PCDN 或 P2P 是一种基于 P2P 技术和 CDN 的内容分发加速网络。它通过在网络中添加大量的低成本缓存服务器,将用户请求的内容从原始服务器分发到这些缓存服务器,从而实现内容更快、更稳定传输到终端用户。
随着网络技术发展,我们对大带宽的需求也不断增长。各大站群为了用户访问体验,通过 CDN 将用户的请求直接发送到用户所在城市的服务器,从而实现快速、稳定访问。
在内容分发网络服务领域业界普遍采用两种主流的计费模式:流量计费、带宽计费。无论选择哪种计费方式,随着流量的增加其运营成本相应上升,对于任何规模的网站都是一个不容忽视的经济压力。
大型网站由于其庞大的用户基础和高流量需求,对 CDN 服务的依赖则更为显著,因此成本控制成为其运营中关键环节。在这样背景下,一些领先的技术公司开始探索利用家庭宽带资源以优化成本结构。家庭宽带通常有较高的下行速率,而上行速率则相对较低,且普通用户往往未能充分利用其上行带宽。
为更高效地利用这些未被充分利用的上行带宽资源,一些企业推出了挂机宝。这类服务通过在用户设备上部署特定软件,利用用户的闲置带宽进行数据缓存和存储。在需要时,这些数据可以通过用户的家庭网络传输给其他的需求方,从而在减轻大型网站 CDN 负载同时,也为用户带来一定激励回报。
这种模式不仅有效降低了大型网站对传统 CDN 节点的依赖,降低运营成本,而且在经济上对用户也具有一定的吸引力。尽管需要向用户提供一定的激励,但与高昂的 CDN 节点带宽费用相比,这种成本节约是显著的。通过这种方式,企业能够以较低的成本扩展其 CDN 网络,同时为用户提供了一种将闲置资源变现的途径,实现了双方的共赢。
网络压力:PCDN 产生的海量流量对运营商的骨干传输网络形成了巨大压力。由于用户宽带通常是包月的,而不是按流量计费,因此用户使用越多,运营商网络的压力越大,而且运营商并不能因此收到更多费用。
盈利影响:视频类服务商搭建常规 CDN 服务节点需要租用运营商的高价机房和带宽。而用 PCDN 后,服务商对资源租用需求大幅减少,这直接影响了运营商的盈利。
安全风险:PCDN 节点与其它设备存在数据交互,可能导致隐私数据泄露,甚至产生安全漏洞,遭到恶意攻击。
成本问题:PCDN 业务会导致设备长期开启,增加电能浪费,影响硬盘寿命,甚至整个设备寿命。
运营商对 PCDN 的打击已经产生了扩大化影响。一些地方运营商的政策更加激进,如全面回收 IPv6 地址、限制网络连接数量、网络类型改为 NAT4 等。
运营商需要对网络流量进行监控,区分正常上行流量和 PCDN 流量。这无疑又增加了人力和物力成本,所以大多数运营商都选择封杀 PCDN。
在现代互联网架构中运营商通过精细化的流量数据分析技术,对用户的网络行为进行深入洞察。特别是对上行和下行流量的对比分析,已经成为识别 PCDN 行为的关键指标之一。
普通用户在互联网中主要扮演资源获取者的角色而非资源提供者。因此,从流量分布的一般规律来看,用户的下行流量通常会显著高于上行流量。
这种流量分布的不对称性是家庭宽带非对称带宽特性的直接体现。所谓的非对称带宽,是指在数据传输过程中,上行和下行的带宽速率存在差异,通常情况下下行带宽会高于上行带宽,以适应用户更多下载而非上传的需求。
然而,在特定情况下,如果监测到用户的上行流量异常高甚至超过了下行流量,亦或者上行流量与下行流量的比例超出了正常阈值,这可能表明用户正在作为资源提供方参与到 PCDN 活动。PCDN 利用普通用户的闲置资源,通过 P2P 技术实现内容的分发,这在一定程度上改变了传统上下行流量的分布比例。
所谓,上有政策,下有对策。PCDN 服务商面对这种筛查机制,也有其应对的方法「以下内容是杜老师对近期网络攻击频繁的猜想,信息来自于互联网」
上面提到筛查的规则是判断上下行流量的比例,所以一些 PCDN 服务商开始使用刷流量的方式躲避筛查。
他们会在闲时「一般指午夜后」下发指令给 PCDN 设备,使其访问互联网的部分站点,来获得大量的下行流量。
很多博主反馈自己网站在后半夜会有短暂的高流量访问,很有可能就是因为 PCDN 刷流量导致。
面对这种情况,杜老师采用的方式就是根据时段限制流量,如闲时段可以限制带宽,或者流量上限。如触发后及时中断流量,避免因流量造成的资金损失。
最后补充一句,除 PCDN 之外,部分运营商对 PT 的政策也开始收紧了。杜老师的想法非常简单:要么别给那么高的带宽,既然给了,就不要限制我们的使用!
2024-11-02 00:00:00
开放 Web 应用程序安全项目是致力于 Web 应用程序安全的国际非营利组织。OWASP 核心原则之一是,他们的所有资料都免费提供并可以在其网站上轻松访问,这使得任何人都能够改善自己的 Web 应用程序安全性。
当不被信任的数据通过表单输入或其它一些提交到 Web 应用程序数据发送到代码解释器时,就会发生注入攻击。
如攻击者可能向本应填写纯文本用户名的表单输入 SQL 数据库代码。
如果该表单输入未得到正确保护,则将导致执行该 SQL 代码。这称为 SQL 注入攻击。
可通过验证或清除用户提交的数据来防止注入攻击。
验证表示拒绝看似可疑数据,而清理指清除数据中可疑的部分。
此外,数据库管理员可以设置控件以最大程度地减少注入攻击可能接触的信息量。
攻击者可通过身份验证系统中的漏洞访问用户帐户,甚至可以使用管理员帐户来破坏整个系统。
例如,攻击者可以获取一个包含在数据泄露中获得的数千个已知用户名与密码组合的列表。
并使用脚本尝试在登录系统尝试所有这些组合,以查看是否有任何有效组合。
一些防护身份验证漏洞的策略要求双要素身份验证以及使用限制或延迟重复的登录尝试。
如果 Web 应用程序不保护财务数据和密码等敏感数据,则攻击者可访问这些数据并将其用于恶意目的。
窃取敏感信息的一种热门方法是使用在途攻击。
通过加密所有敏感数据并禁用任何敏感信息的缓存,可最大程度地降低数据暴露风险。
此外,Web 应用程序开发人员应注意确保避免不必要地存储任何敏感数据。
缓存是一种临时存储数据以供重用的做法。
例如,网络浏览器通常会缓存网页,这样一来,如用户在特定时间段内重新访问这些页面,浏览器就不必从 Web 获取页面。
这是对解析 XML 输入 Web 应用程序的攻击。
此输入可引用外部实体,以尝试利用解析器中的漏洞。在此,外部实体是指存储单元,如硬盘驱动器。
攻击可欺骗 XML 解析器将数据发送到未经授权的外部实体,然后后者可将敏感数据直接传递给攻击者。
防止 XEE 攻击的最佳方法是让 Web 应用程序接受不太复杂的数据类型,如 JSON,或者至少给 XML 解析器打补丁并禁止在 XML 应用程序中使用外部实体。
XML 全称可扩展标记语言,是种旨在同时实现人类可读和机器可读的标记语言。
由于其复杂性和安全性漏洞,许多 Web 应用程序现在已经逐步淘汰了这种语言。
JavaScript 对象表示法是一种简单的、人类可读的表示法,通常用于通过网络传输数据。
尽管 JSON 最初是为 JavaScript 创建,但它不受语言限制,并且可以由许多不同的编程语言解释。
访问控制是指控制对信息或功能的访问权限的系统。
损坏的访问控制使攻击者可以绕过授权并执行任务,像他们是管理员等特权用户一样。
例如,Web 应用程序可能允许用户仅通过更改 URL 的一部分即可更改他们登录的帐户,无需任何其它验证。
通过确保 Web 应用程序使用授权令牌并对其设置严格控制,可确保访问控制的安全。
许多服务在用户登录时都会发布授权令牌。用户发出每个特权请求都需出示授权令牌。
这是确保用户身份与声称相符的安全方法,而无需他们不断的输入登录凭据。
安全配置错误是列表上最常见的漏洞,通常是使用默认配置或显示过多详细错误结果。例如,一个应用程序可能在向用户显示错误时描述得过于详尽,以致于揭示出应用程序中的漏洞。
这种情况可通过删除代码中任何未使用的功能并确保错误消息更加笼统来防护。
跨站点脚本漏洞在 Web 应用程序允许用户将自定义代码添加到 URL 路径或其他用户可看到的网站上时发生。
利用漏洞,可在受害者的浏览器上运行恶意的 JavaScript 代码。
例如,攻击者可向受害者发送似乎来自受信任银行的电子邮件,并随附指向该银行网站链接。
链接可能在 URL 的末尾标记一些恶意 JavaScript 代码。
如银行的站点没有得到适当的跨站点脚本保护,则当受害者单击链接时,该恶意代码将在受害者的 Web 浏览器中运行。
跨站点脚本的缓解策略包括对不受信任的 HTTP 请求转义以及验证和、或清除用户生成的内容。
这种威胁目标是各种经常对数据进行序列化和反序列化的 Web 应用程序。
序列化意味着从应用程序代码中获取对象,并将其转换为可用于其它目的的格式,例如将数据存储到磁盘或对其进行流传输。
反序列化正好相反:将序列化的数据转回应用程序可以使用的对象。序列化就像在搬家前将家具打包到箱子里,而反序列化就像在搬家后拆开箱子并组装家具。
不安全的反序列化攻击就像搬家公司在拆箱前篡改箱子中的物品。
不安全的反序列化漏洞利用是不可信来源的数据反序列化的结果,并可能导致严重的后果,例如 DDoS 攻击和远程代码执行攻击。
尽管可采取措施尝试检出攻击者,如监视反序列化和实施类型检查,但防止不安全的反序列化攻击的唯一肯定有效方法是禁止来自不受信任来源的数据反序列化。
许多现代 Web 开发人员在其 Web 应用程序中使用库和框架之类的组件。
这些组件是可帮助开发人员避免多余工作并提供所需功能的软件。
一些攻击者会在这些组件中寻找漏洞,然后利用这些漏洞组织攻击。
一些较为热门组件在数十万个网站上使用。攻击者如在其中一个组件中发现安全漏洞,就可能使数十万个站点易受攻击。
组件开发人员通常会提供安全补丁和更新程序修补已知漏洞,但 Web 应用程序开发人员并不总是在其应用程序上运行组件修补版本或最新版本。
为最大程度地降低运行具有已知漏洞的组件的风险,开发人员应从项目中删除未使用组件,并确保他们从受信任的来源接收组件并确保它们是最新版本。
许多 Web 应用程序没有采取足够措施来检测数据泄露。
漏洞发生后平均发现的时间约为 200 天。
这使攻击者有大量时间在开发人员没任何响应之前造成破坏。
OWASP 建议 Web 开发人员实施日志记录和监视及事件响应计划,以确保他们了解应用程序遭到的攻击。
2024-10-30 00:00:00
近期整理公司资料时出现了误删除数据的情况,就想着做数据恢复。奈何 Linux 平台下数据恢复类的软件较少,相对较常用的是 TestDisk。故整理一篇相关的教程,供有需要的小伙伴参考。
TestDisk 是一款功能强大免费开源数据恢复软件,主要用于恢复丢失分区和修复无法启动的磁盘。支持多种文件系统,包括 NTFS 和 ext4 等。
TestDisk 可以帮助修复分区表、恢复已删除的分区、重建启动扇区、修复文件分配表以及从不同文件系统中恢复已删除文件。
TestDisk 可以修复分区表,恢复因为软件故障、病毒或者人为错误而丢失的分区。
它能够从备份中恢复 FAT32 启动扇区,并重建 FAT12/FAT16/FAT32 以及 NTFS 的启动扇区。
TestDisk 可以从 NTFS 和 ext4 文件系统中恢复已删除的文件。
TestDisk 可以在 Windows 和 Linux 上运行。
除上述文件系统外,TestDisk 还支持 Linux RAID 和 XFS 等。
TestDisk 提供了适合新手和专家的功能。对于不熟悉数据恢复的用户,TestDisk 可以收集非启动驱动器的详细信息,然后发送给专业技术人员进行进一步分析。
TestDisk 提供了一步步的指南,帮助用户恢复丢失分区和修复损坏的启动扇区。
TestDisk 提供在线文档和指南,及一个活跃的社区论坛,用户可以在其中寻求帮助和分享经验。
TestDisk 安装步骤因操作系统而异,以下是针对 Linux 安装步骤。对于不同 Linux 发行版,安装命令有所不同。Ubuntu 及 Debian 的安装命令如下:
1 |
sudo apt update |
Red Hat 和 CentOS 的安装命令如下:
1 |
yum -y install epel-release |
Fedora 的安装命令如下:
1 |
sudo dnf -y install testdisk |
Arch Linux 的安装命令如下:
1 |
sudo pacman -S testdisk |
注意使用 TestDisk 时,用户应避免在数据恢复过程中进一步使用存储已删除数据的介质,并且最好将恢复的文件复制到另一个分区或磁盘上,以防止数据被覆盖。打开终端界面,输入以下命令:
1 |
testdisk |
首次启动,需要创建一个恢复日志,这里选择创建:
选择要恢复文件所在的磁盘,按回车键继续:
TestDisk 会显示检测的分区表类型,通常会自动识别正确的类型,按回车键继续:
选择 Analyse 即分析选项来检查当前的分区结构并搜索丢失的分区,按回车键开始分析。
TestDisk 会执行快速搜索以查找丢失的分区:
如仍有分区未找到,选择 Deeper Search 即深度搜索来进一步搜索:
深度搜索会扫描每一个柱面,寻找 FAT32 的备份启动扇区、NTFS 的备份启动超级块以及 ext2/ext3 的备份超级块。在深度搜索后,检查结果并确认找到的分区。