Question and answer - 问答

1. 连不上网

1.1. IP 被墙

用 webssh 去登录

https://ssh.asscl.cloudns.cl/

1.2. ssh 端口完全不通

用面板后台的 VNC 操作,一般是去开防火墙。

1.3. VNC 都不正常

重装或者给客服发工单

2. 浏览器

2.1. 关键词

序号 中文 英文
1 一键
2 懒人
3 自动 auto
4 awesome
5 gpt
6 llm
7 ai
8 agent
整合
9 聚合
合集
10 排行

2.2. 浏览器设置:关闭浏览器复制带的链接

如果在网页中复制链接时使用"链接"格式,则会在后台加载目标页面以获取目标页面的标题。在后台加载目标页面将具有访问服务器页面的效果。但是,对页面的访问不会显示在浏览历史记录中。

3. 软件

3.1. Obsidian 切换深色浅色主题

Ctrl+P 搜索

关键词:模式 或者 深色 或者 浅色

4. 输入法

4.1. 微信输入法

  1. 腾讯自研混元大模型,输入 = 号获取答案
  2. 信源来自微信读书文库,深度有余,时效性较弱
  3. 初步信息搜索工具,充当在线百科全书助手
  4. 不是文案生成工具,也没有角色扮演能力

4.2. 电脑语音输入

Windows 10 的 Win+H 可以用,就是没有标点符号😭

4.3. 谷歌输入法 GBOARD

5. 设计

6. Callout 语法

Callout 是 Obsidian 中的一种特殊语法,用于创建带有图标和背景色的突出框,用来强调或分类特定内容。

在 Obsidian 中,Callout 的基本语法是使用 > 符号来创建一个块引用,然后在块引用的第一行添加类型和可选的标题。

以下是一些常见的 Callout 类型及其语法示例:

6.1. 基本语法

> [!type] 标题
> 内容

6.2. 常见类型

  1. 注释(Note)
> [!note] 注意
  1. 信息(Info)
> [!info] 信息
  1. 提示(Tip)
> [!tip] 提示
  1. 警告(Warning)
> [!warning] 警告
  1. 危险(Danger)
> [!danger] 危险

6.3. 自定义类型

你也可以创建自定义类型的 Callout,只需在类型位置自行定义。例如:

> [!custom] 自定义类型

6.4. 无标题 Callout

如果你不需要标题,可以省略标题部分:

> [!note]

6.5. 嵌套内容

(软件和网站都不支持)

Callout 内部可以包含更多的 Markdown 内容,包括列表、代码块等。例如:

[!info] 详细信息
这是一个包含列表的 callout。

  • 第一项
  • 第二项

还可以包含代码块:

print("Hello, world!")

7. mdx 文件

.mdx 文件扩展名可以指代多种不同的文件格式,具体取决于文件的实际用途。以下是几种常见的 .mdx 文件类型及其打开方法:

7.1. MDict 字典文件

.mdx 文件是 MDict 字典文件格式,用于存储字典数据。要打开这种类型的文件,你可以使用 MDict 或 GoldenDict。

  • MDict:

    1. 下载并安装 MDict 软件(可在其官网或各大应用商店找到)。
    2. 打开 MDict,然后导入 .mdx 文件。
  • GoldenDict:

    1. 下载并安装 GoldenDict 软件(支持多平台)。
    2. 打开 GoldenDict,在"词典"菜单中选择"管理词典",然后添加你的 .mdx 文件。

7.2. Markdown with Extended Syntax

有时 .mdx 也用于表示带有扩展语法的 Markdown 文件。MDX 是一种允许在 Markdown 文件中嵌入 JSX 代码的格式,常用于 React 项目中。

  • VS Code:

    1. 下载并安装 Visual Studio Code。
    2. 打开 VS Code 后,通过文件菜单或直接拖拽的方式打开 .mdx 文件。
    3. 安装必要的扩展,如 MDX 和 Prettier 以获得更好的语法高亮和格式化支持。
  • 其它文本编辑器:
    任何支持文本编辑的工具都可以打开 .mdx 文件,如 Notepad++、Sublime Text、Atom 等。

7.3. Microsoft Access 数据库索引文件

.mdx 文件也可能是 Microsoft Access 数据库索引文件。尽管这种情况较为罕见,但可以通过 Microsoft Access 打开和使用:

  • 使用 Microsoft Access 打开相关的数据库文件,该索引文件会自动加载。

7.4. 示例代码:打开 Markdown with Extended Syntax 的 .mdx 文件

假设你使用 VS Code 并在 React 项目中使用 MDX,你可以按照以下步骤操作:

  1. 安装项目依赖:

    在你的 React 项目中,使用以下命令安装 @mdx-js/react:

    npm install @mdx-js/react
    
  2. 配置 MDX 支持:

    在你的项目中,创建一个文件,如 mdxProvider.js:

    import { MDXProvider } from '@mdx-js/react'
    import React from 'react'
    
    const components = {
      // 自定义组件
    }
    
    const MDXProviderWrapper = ({ children }) => (
      <MDXProvider components={components}>
        {children}
      </MDXProvider>
    )
    
    export default MDXProviderWrapper
    
  3. 使用 MDX 文件:

    在你的 React 组件中,你可以这样使用 .mdx 文件:

    import React from 'react'
    import MDXProviderWrapper from './mdxProvider'
    import MyMDXContent from './content.mdx'
    
    const App = () => (
      <MDXProviderWrapper>
        <MyMDXContent />
      </MDXProvider>
    )
    
    export default App
    

7.5. 总结

具体如何打开 .mdx 文件,取决于文件的实际用途和类型。

  • 对于字典文件,使用 MDict 或 GoldenDict;
  • 对于 Markdown with Extended Syntax 文件,使用 VS Code 等文本编辑器;
  • 对于数据库索引文件,使用 Microsoft Access。
  • 如果你不确定 .mdx 文件的具体类型,可以尝试通过文本编辑器查看文件内容,以确定其用途。

8. YouTube 视频下方的对勾标志

是 YouTube 的"验证徽章"(Verification Badge)。这个标志有特定的含义和要求:

  1. 验证徽章的含义:

    • 表示该频道是某个创作者、艺术家、品牌或公众人物的官方频道。
    • 帮助用户识别真实、可信的内容来源。
    • 防止冒充和模仿账号。
  2. 获得验证徽章的要求:

    • 通常需要至少 10 万订阅者。
    • 频道必须是真实的、活跃的。
    • 频道必须是完整的,包括频道描述、个人资料图片和内容。
    • 必须遵守 YouTube 的社区准则和服务条款。
  3. 特殊情况:

    • 某些知名度高但订阅数未达标的频道也可能获得验证。
    • YouTube 可能会根据具体情况审核和授予验证徽章。
  4. 验证徽章与账号验证的区别:

    • 账号验证是基本功能,允许上传超过 15 分钟的视频等。
    • 验证徽章是一种身份认证,代表官方或知名频道。
  5. 保持验证状态:

    • 频道需持续遵守 YouTube 政策。
    • 不得更改频道名称或删除频道。

需要注意的是,没有验证徽章并不意味着频道内容不可信或质量较低。许多优质的小型或新兴频道可能还未获得验证徽章。验证徽章主要用于帮助用户识别大型或知名频道的官方账号。

9. Wayland

Wayland 是一种用于图形用户界面的显示服务器协议和架构,旨在替代 X Window System (X11)。它由 Kristian Høgsberg 于 2008 年发起,目标是为 Linux 和其他类 Unix 操作系统提供一个更现代、更高效的显示系统。

9.1. Wayland 的核心概念

9.2. 协议设计

Wayland 采用了客户端-服务器模型,定义了一套简洁的协议来处理显示服务器(compositor)和客户端应用程序之间的通信。这种设计大大简化了图形栈,提高了效率和性能。

9.3. 直接渲染

在 Wayland 架构中,客户端应用程序直接负责渲染自己的内容,而不是依赖 X 服务器。这种方法减少了不必要的复制和上下文切换,从而提高了性能和响应速度。

9.4. 安全性

Wayland 的设计考虑了现代安全需求。它提供了更好的隔离性,使得应用程序无法直接访问或操纵其他应用程序的窗口内容,从而增强了系统的整体安全性。

9.5. Wayland vs X11

9.6. 优势

  1. 性能更高:减少了不必要的数据复制和处理步骤。
  2. 更好的多显示器支持:原生支持不同 DPI 的多显示器配置。
  3. 更简洁的架构:移除了 X11 中许多过时的功能和复杂性。
  4. 改进的安全模型:提供了更好的应用程序隔离。

9.7. 挑战

  1. 兼容性:一些旧的应用程序可能需要通过 XWayland 来运行。
  2. 功能完整性:某些高级功能在 Wayland 上的实现仍在进行中。

9.8. 技术实现

9.9. Compositor

Wayland 的核心组件是 compositor,它负责管理客户端窗口,合成最终显示的图像,并处理输入事件。常见的 Wayland compositor 包括:

  • Weston (参考实现)
  • Mutter (GNOME)
  • KWin (KDE)
  • Sway (i3 兼容)

9.10. 客户端库

为了简化 Wayland 客户端的开发,提供了几个常用的客户端库:

  • libwayland-client
  • GTK
  • Qt

9.11. 结论

Wayland 代表了 Linux 图形系统的未来。虽然其采用过程相对缓慢,但它提供了显著的性能和安全性改进。随着时间的推移,Wayland 有望成为 Linux 桌面环境的标准显示协议。

10. Fail2Ban

一个开源的安全工具,用于保护服务器免受暴力破解攻击。它会监控系统日志文件,并根据预定义的规则自动封禁可疑的 IP 地址,从而防止进一步的恶意访问。

10.1. Fail2Ban 的工作原理

  1. 日志监控:Fail2Ban 会监控系统日志文件,如 /var/log/auth.log、/var/log/secure 等,寻找特定的模式,如多次失败的登录尝试。
  2. 触发规则:当检测到可疑的活动时,Fail2Ban 会根据配置的规则采取行动。这些规则定义了触发条件和对应的处理方式。
  3. 封禁 IP:常见的处理方式是使用 iptables 或 firewalld 封禁可疑的 IP 地址一段时间,防止其继续进行恶意操作。

10.2. 安装和配置 Fail2Ban

10.3. 安装

在大多数 Linux 发行版上,可以通过包管理器安装 Fail2Ban。例如,在 Debian/Ubuntu 上:

sudo apt update
sudo apt install fail2ban

在 CentOS/RHEL 上:

sudo yum install epel-release
sudo yum install fail2ban

10.4. 配置

Fail2Ban 的主要配置文件是 /etc/fail2ban/jail.conf。建议复制一份为 /etc/fail2ban/jail.local 并进行修改,以避免软件更新时被覆盖。

一个基本的配置示例如下:

[DEFAULT]
# 封禁时间(秒)
bantime = 600
# 封禁后释放时间(秒)
findtime = 600
# 最大失败尝试次数
maxretry = 3

[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log

10.5. 启动和管理

启动 Fail2Ban 服务:

sudo systemctl start fail2ban
sudo systemctl enable fail2ban

查看当前的封禁情况:

sudo fail2ban-client status
sudo fail2ban-client status sshd

手动封禁和解除封禁 IP:

sudo fail2ban-client set sshd banip <IP_ADDRESS>
sudo fail2ban-client set sshd unbanip <IP_ADDRESS>

10.6. 常见的使用场景

  • SSH 防护:防止暴力破解 SSH 登录。
  • Web 应用防护:防止暴力破解 Web 登录(如 WordPress、Nextcloud)。
  • 邮件服务器防护:防止暴力破解邮件服务器登录。

10.7. 总结

Fail2Ban 是一个强大的工具,可以大幅提升服务器的安全性。通过监控日志文件和自动封禁可疑 IP 地址,能够有效防止暴力破解和其他恶意活动。根据具体需求配置 Fail2Ban,可以为你的服务器提供一个额外的安全层。

11. Fail2Ban 与 WAF

Fail2Ban 和 WAF(Web Application Firewall, Web 应用防火墙)都是用于保护服务器和应用程序安全的工具,但它们在工作原理、应用场景和功能上有所不同。以下是两者的详细比较:

11.1. Fail2Ban

11.2. 工作原理

  • 日志监控:监控系统日志文件(如 /var/log/auth.log)来检测潜在的攻击活动。
  • 触发规则:当日志中出现多次失败尝试等可疑行为时,根据预定义的规则触发操作。
  • 自动封禁:使用防火墙规则(如 iptables 或 firewalld)临时封禁可疑的 IP 地址。

11.3. 应用场景

  • SSH 保护:防止暴力破解 SSH 登录。
  • 服务保护:保护 FTP、SMTP 等其他服务。
  • 日志依赖:依赖系统和应用程序的日志文件进行检测和封禁。

11.4. WAF(Web 应用防火墙)

11.5. 工作原理

  • 流量过滤:实时分析和过滤 HTTP/HTTPS 流量来识别和阻止潜在的威胁。
  • 规则和策略:基于预定义的安全规则和策略来检测恶意流量。
  • 实时保护:在网络层或应用层工作,实时保护 Web 应用程序。

11.6. 应用场景

  • Web 应用保护:防止 SQL 注入、XSS、文件包含等常见网络攻击。
  • 流量分析:实时分析和监控进入和离开 Web 服务器的流量。
  • 部署灵活:可以作为硬件设备、软件或云服务部署。

11.7. 区别

  1. 保护对象:

    • Fail2Ban:主要保护服务器和服务(如 SSH、FTP)。
    • WAF:主要保护 Web 应用程序。
  2. 工作层次:

    • Fail2Ban:基于日志文件工作。
    • WAF:基于实时流量过滤工作。
  3. 响应方式:

    • Fail2Ban:通过修改防火墙规则来封禁 IP 地址。
    • WAF:通过实时过滤和阻止恶意流量,可能返回自定义错误页面或记录日志。
  4. 性能影响:

    • Fail2Ban:对系统性能的影响较小。
    • WAF:可能对网站性能产生一定影响,特别是在处理高流量时。
  5. 配置复杂度:

    • Fail2Ban:配置相对简单,主要涉及设置日志文件路径和定义触发规则。
    • WAF:配置通常更复杂,需要深入了解 Web 应用程序的特性和潜在的安全威胁。
  6. 可扩展性:

    • Fail2Ban:主要用于单个服务器或小规模环境。
    • WAF:可以更容易地扩展到大规模环境,特别是云部署的 WAF 解决方案。

11.8. 联系

  1. 安全目标:两者的目标都是提高服务器和应用程序的安全性,防止恶意攻击。

  2. 可组合使用:Fail2Ban 和 WAF 可以组合使用,提供更全面的安全防护。

  3. 规则配置:两者都依赖于预定义的规则来检测和响应可疑行为,管理员可以根据需要自定义规则。

  4. 误报处理:

    • Fail2Ban:可能会因为正常用户的多次失败登录而误封 IP 地址。
    • WAF:可能会误判正常的 Web 请求为攻击。
      两者都需要谨慎设置和不断优化规则以减少误报。
  5. 更新和维护:

    • Fail2Ban:需要定期更新规则以应对新的攻击模式。
    • WAF:通常需要更频繁的更新和调整,以应对不断演变的 Web 攻击。

11.9. 总结

Fail2Ban 和 WAF 各有侧重,Fail2Ban 通过监控日志文件并封禁 IP 地址来保护服务器和服务,适用于防止暴力破解等攻击;WAF 通过实时分析和过滤 Web 流量来保护 Web 应用程序,适用于防止各种 Web 攻击。两者可以结合使用,提供更全面的安全防护。

选择和实施这些安全工具时,管理员需要考虑系统的具体需求、性能要求、配置复杂度、可扩展性以及长期维护等因素,以确保最佳的安全保护效果。

12. Halo 发布文章提示「保存失败,请重试」「未知错误」的解决方案

使用域名地址访问无法保存发布文章,使用 IP+端口访问正常,这个问题是防火墙导致的。应该是通过 1Panel 安装的 Halo,1Panel 默认的防火墙配置有拦截规则。

在 1Panel - 高级功能 - WAF - 全局设置 - 黑白名单 中,把 /api/* 和 /apis/* 添加为白名单保存即可。

如果根据以上方法仍未处理,或者非使用 1Panel 方法部署也遇到相似问题,请检查服务器防火墙配置,或提交日志和反馈给官方咨询。

13. systemd 基础教程

13.1. systemd 简介

systemd 是现代 Linux 系统中的初始化系统和系统管理器。它的主要功能包括启动系统服务、管理系统资源和处理系统状态。

13.2. 基本概念

  • Unit:systemd 管理的基本对象,包括服务、挂载点、设备和网络配置等。
  • Service:最常见的 unit 类型,用于启动和管理系统服务。
  • Target:一组 unit 的集合,用于表示系统状态。

13.3. 常用命令

13.4. 系统管理

  • systemctl reboot:重启系统
  • systemctl poweroff:关闭系统
  • systemctl suspend:挂起系统

13.5. 服务管理

  • systemctl start [服务名]:启动服务
  • systemctl stop [服务名]:停止服务
  • systemctl restart [服务名]:重启服务
  • systemctl status [服务名]:查看服务状态
  • systemctl enable [服务名]:设置服务开机自启
  • systemctl disable [服务名]:禁用服务开机自启

13.6. 查看系统和服务日志

使用 journalctl 命令查看系统日志:

  • journalctl:查看所有日志
  • journalctl -u [服务名]:查看特定服务的日志
  • journalctl -f:实时查看日志

13.7. 创建自定义服务

  1. 创建服务文件:

    sudo nano /etc/systemd/system/myapp.service
    
  2. 编辑服务文件内容:

    [Unit]
    Description=My Custom App
    After=network.target
    
    [Service]
    ExecStart=/path/to/your/app
    Restart=always
    User=yourusername
    
    [Install]
    WantedBy=multi-user.target
    
  3. 保存文件并退出编辑器

  4. 重新加载 systemd 配置:

    sudo systemctl daemon-reload
    
  5. 启动服务:

    sudo systemctl start myapp
    

13.8. 进阶技巧

  • 使用 systemctl list-units 查看所有活动的 unit
  • 使用 systemctl list-unit-files 查看所有已安装的 unit 文件
  • 使用 systemd-analyze 分析系统启动时间

13.9. 练习

  1. 尝试启动、停止和重启一个系统服务(如 nginx 或 ssh)
  2. 查看一个服务的状态和日志
  3. 创建一个简单的自定义服务并管理它

通过这个教程,您可以逐步学习 systemd 的基本用法。随着实践的深入,您会发现 systemd 还有很多高级功能,如依赖管理、资源控制等。建议您在学习过程中多尝试,并查阅官方文档以获取更详细的信息。