马卫青的博客

爱思思爱猫爱技术


系统迁移

我对之前的听音系统还是比较满意的,我并不是发烧友,当系统的音质能达到一定程度,剩下的就是音乐欣赏的事情了。
这个系统我用了很多年,也没打算做什么调整。
试用了Roon后,我比较喜欢她的和音乐管理,关联,搜索,流媒体音乐深度集成等特性,就购买了帐号,正式将Roon引入了我的听音系统,并归一化了所有的终端。

我之前听音系统的网络拓扑

我之前的听音系统终端并没有归一,音频的流动主要以DLNA为主,因为解码器的Bridge卡作为Render,内部通过I2S输入解码板,效果非常好,我又不想折腾各种USB,同轴,光纤的连接,线材不菲且完全不在我的知识范围内。

群晖NAS作为Media Server, 解码器,Mac软件,智能音箱作为Render,电脑、手机和Pad的软件作为Browser和Controller

enter description here

引入Roon后听音系统网络拓扑

Roon的帐号挺贵的,加上我对原来的硬件还算满意,所以想最大限度的利用,思想就是用Roon Core管理音乐,同时将Roon的RAAT协议都转为DLNA,复用现有的设备。 电脑、手机、平板的客户端都统一到Roon Remote。

感谢philippe开发的SqueezeBox桥接到Upnp的软件squeeze2upnp,使得我复用原有DLNA系统的想法成为了可能,而且他对待用户的反馈是否友好,耐心解答并能很快做出修改。

enter description here

安装Roon

在这个网站下载群晖NAS的套件 : https://roononnas.org/de/synology-2/

在共享文件夹中创建一个名字叫”RoonServer”的共享目录
强烈建议使用SSD安装Roon,因为Roon服务器的随机访问速度很关键,我的NAS没有SSD安装槽位,只能通过USB 3.0的盒子接入SATA3固态硬盘。
如果接入外置存储,将外置存储的名字改为RoonServer
enter description here

3、选择手动安装套件,安装过程比较长
enter description here

手机,PC, MAC, Pad的客户端可以参考官网安装:
https://roonlabs.com/downloads

以Windows为例,在PC上启动Roon,就回发现群晖NAS的Core,连接就可以使用
enter description here

如何为Roon增加DLNA输出

Roon本身不支持输出,但是支持Squeezebox设备(就是LMS(Logitech Media Server)体系)

下图就是在Roon设置中打开对squeezbox的支持。

enter description here
接下来的思路就是做一个桥,将Roon使用Squeezebox协议输出的音频转成DLNA的协议

使用这个软件实现:Squeeze2upnp,他的目的就是将DLNA设备变成SqueezeBox设备
enter description here

软件github地址:https://github.com/philippe44/LMS-to-uPnP
里面有下载地址和提供支持的论坛地址

安装

安装非常简单,从github网址给出的下载网站下载最新的安装包解压即可。

!!!重要,需要安装1.49.8之后的版本,这之前的版本不支持Huawei Sound,我和作者squeeze2upnp的作者philippe反馈后并提供日志后,他经过修改,新出了版本用于支持Huawei Sound

安装包解压后有一个Bin目录,所有平台的可执行文件都在里面。

1
2
3
4
5
ls ./Bin
cc32160mt.dll libmad-0.dll libopusfile-0.dll pthreadBC2.dll squeeze2upnp-armv5te-static squeeze2upnp-bsd-x64-static squeeze2upnp-ppc-static squeeze2upnp-x86 ssleay32.dll
libeay32.dll libogg-0.dll libsoxr.dll squeeze2upnp-aarch64 squeeze2upnp-armv6hf squeeze2upnp-osx-multi squeeze2upnp-sparc squeeze2upnp-x86-64
libfaad2.dll libogg.dll libvorbis.dll squeeze2upnp-aarch64-static squeeze2upnp-armv6hf-static squeeze2upnp-osx-multi-static squeeze2upnp-sparc-static squeeze2upnp-x86-64-static
libFLAC.dll libopus-0.dll libvorbisfile.dll squeeze2upnp-armv5te squeeze2upnp-bsd-x64 squeeze2upnp-ppc squeeze2upnp-win.exe squeeze2upnp-x86-static

尽管Squeeze2upnp是LMS的一个插件,但是他并不依赖LMS,可以独立运行。解压后在Bin目录下后缀为_static的可执行程序都是独立执行程序

Squeeze2upnp支持Windows, OSX, or Linux x86/64, ARM and OSX

可以从可执行的程序名中看出哪个可执行程序对应什么平台。

例如树莓派,你可以选择 : squeeze2upnp-armv6hf-static
例如群晖X86 NAS, 你可以选择 : squeeze2upnp-x86-64-static

对于Linux,对应你平台的执行文件需要增加可执行属性,例如

1
chomd a+x squeeze2upnp-x86-64-static

以下描述以都以群晖NAS为例,其他的平台将命令中的可执行程序替换为对应平台的执行程序即可。

DLNA设备发现

对于第一次使用,或者希望重新创建一个配置文件,需要执行以下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
./Bin/squeeze2upnp-x86-64-static -i config.xml
[22:18:38.897023] main:1756 Starting squeeze2upnp version: v1.49.6 (Feb 13 2021 @ 14:45:36)
[22:18:38.904985] main:1764

!!!!!!!!!!!!!!!!!! ERROR LOADING CONFIG FILE !!!!!!!!!!!!!!!!!!!!!

[22:18:38.943266] Start:1518 Binding to 192.168.1.100:49152 (http:0)
[22:18:39.363148] AddMRDevice:1405 [0xc41840]: adding renderer (HUAWEI Sound-0286)
[22:18:39.363354] AddMRDevice:1418 [0xc41840]: cannot get mac HUAWEI Sound-0286, creating fake fcceaf23
[22:18:39.371278] MasterHandler:1036 [0xc41840]: subscribe success
[22:18:39.395668] AddMRDevice:1405 [0xc43a58]: adding renderer (LIVINGROOM)
[22:18:39.395813] AddMRDevice:1418 [0xc43a58]: cannot get mac LIVINGROOM, creating fake 13a64ae6
[22:18:39.428824] MasterHandler:1036 [0xc43a58]: subscribe success
[22:19:00.344578] Stop:1540 stopping squeezelite devices ...
[22:19:00.344673] Stop:1544 terminate update thread ...
[22:19:00.344770] Stop:1549 terminate main thread ...
[22:19:00.344824] Stop:1553 stopping UPnP devices ...

等程序执行完,就会生成一个基础配置文件(config.xml,这个名字可以按照你的指定更换),里面包括默认配置和发现的你的局域网的DLNA设备。
注:你的DLNA Render设备需要打开才能被发现并生成配置。

其中段是针对你所有设备的通用配置

每个发现的设备都有一个段,你可以在段中设置和common中相同的参数,这个参数会针对这个设备覆盖common参数。

以我的设备为例,生成的设备配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<device>
<udn>uuid:b8aabe2db4df5481eb8b4f4cf3f302eac9a1539192127404166af840a41a0945</udn>
<name>HUAWEI Sound-0286</name>
<friendly_name>HUAWEI Sound-0286</friendly_name>
<mac>bb:bb:23:af:ce:fc</mac>
<enabled>1</enabled>
</device>
<device>
<udn>uuid:9166ce01-e4b5-4d56-8a1a-6a031b3b416b</udn>
<name>LIVINGROOM</name>
<friendly_name>LIVINGROOM</friendly_name>
<mac>bb:bb:e6:4a:a6:13</mac>
<enabled>1</enabled>
</device>

其中LIVINGROOM是我客厅的PS Audio PWD解码器,而HUAWEI Sound-0286则是卧室的Huawei智能音箱

接下来要对config.xml做一些简单的配置修改。例如, 在”common”段设置了设备最大支持48Khz采样率, 但是如果你的设备的最大采样率是192Khz,你可以在”device”段进行覆盖:

1
2
3
4
5
6
7
8
9
10
<common>
...
<sample_rate>48000</sample_rate>
...
</common>
<device>
...
<sample_rate>192000</sample_rate>
...
</device>

尽管根据测试华为智能音箱支持24bit/192Khz,但是华为给出的规格是24bit/96Khz,所以建议还是把Huawei Sound的采样率设置为96Khz

每个被发现的设备的”enable”属性都是1,表示会为这个设备生成一个桥设备,在Roon设置里面的音频设备列表展现, 如果你不想在Roon中使用这个设备,就将enable设置为0.

“device”段里面有一个有个属性是DLNA Render的标识,类似:

1
<mac>bb:bb:e6:4a:a6:13</mac>

这是这个设备的标识,后续发现设备时,设备mac地址和这个段相同,就不会添加新的设备,并使用这个”device”设置的属性进行处理。

!!!!!!最重要的一点: 将roon_mode属性设置为1,否则Roon下可能不工作

1
<roon_mode>1</roon_mode>

!!!!! **另外重要的一点,需要在Huawei Sound的”device”段中增加以下属性,否则会不能播放下一首,或者播放进度条不走

1
<accept_nexturi>1</accept_nexturi>

后续有新设备发现,squeeze2upnp会为新设备增加一个device段到配置文件。如果你不想自动增加新设备(可能会造成问题),可以将”common”段的”enabled”属性设置为0

运行

测试运行:

1
squeeze2upnp-x86-64-static -x config.xml

调试信息会输出在终端

正式运行

1
./Bin/squeeze2upnp-x86-64-static -z -x config.xml

要用-z参数在后台运行,否则即使使用Linux在后台运行,会占用一个CPU核的全部资源

然后需要开机启动就将上诉命令加入到/etc/rc.local 中即可

Roon配置

在Roon的“设置”->”音频”中启用桥设备,并给其命名,例如命名为Huawei Sound
enter description here

对设备进行一些简单配置
enter description here
在右下角的设备选择那里选择需要播放的设备,例如Huawei Sound音箱
enter description here
然后打开设备的DSP选项
enter description here
将Huawei Sound高于96k码率的音乐和DSD音乐进行转换
enter description here

最终效果

这下,就可以在Roon系统中使用Huawei智能音箱了

enter description here

使用docker运行squeeze2upnp

上面的squeeze2upnp安装过程依赖命令行,有点复杂,我简单做了一个docker镜像,在群晖上可以通过docker套件的界面来部署squeeze2upnp

首先需要在群晖上安装官方的docker套件:
enter description here
打开Docker套件界面搜索镜像hjianhao/hjianhao-squeeze2upnp
enter description here
搜索到镜像后下载,并在映像界面启动容器
enter description here
选择高级设置
enter description here
在NAS上创建一个保存配置文件(config.xml)的目录,并挂接到容器的/config目录
enter description here
因为squeezeupnp涉及范围端口的使用,所以使用host网络
enter description here
应用后,一路“下一步”即可启动容器。
enter description here
第一次容器虽然启动了,但是功能是失效的,从上面的说明可以看到此时还没有配置文件(config.xml), 点击“详情”按钮弹出容器信息窗口,从“日志”标签中可以看到,加载配置文件失败
enter description here
此时我们进入“终端”标签,执行/squeeze2upnp/find.sh,用于发现DLNA Render设备,并生成配置文件
enter description here
执行完成后,使用“Ctrl+D”退出并停止容器运行。此时在你挂载的配置文件目录中就会有”Config.xml”配置文件。
enter description here
然后配置按前面对配置文件的描述修改配置文件,再重启容器即可。重启容器前最好将自动重启勾上
enter description here
启动成功后,只有一行日志
enter description here

通过桥连接解码器

除了上面提到的通过squeeze2upnp转换用DLNA连接解码器外,还有其他的连接解码器的方式:

1、也可以通过RAAT接入Roon Ready的解码器(前提是解码器支持Roon Ready)
enter description here
这种方式比较简单,只要你的解码器支持Roon Ready且解码器和Roon core在同一个局域网网段,就可以相互发现,不用配置。因为简单且我的解码器不支持Roon Ready就不在这里赘述了
2、Roon Core通过USB输出接入解码器,包括直接接入到解码器的USB输入,或者通过解码器界面转换为同轴和光纤输入解码器
enter description here
3、Roon Core通过RAAT协议接入Roon Bridge,然后Roon Bridge接入解码器,接入方式和上面说的Roon Core类似
enter description here

这里主要介绍第三种,因为Bridge可以:

  1. 让Roon Core和解码器的位置摆放更为灵活,只要Bridge接近解码器即可。
  2. Bridge使用树莓派这种低功耗设备可以比Core更容易避免干扰,同时电源也更好处理。
  3. 多个Bridge可以让Roon接入和控制多个房间的音响设备。

因为我个人的主音响系统以DLNA为主,因为我的解码器出声最好的就是DLNA接入,其他数字接入都稍微差一些。所以树莓派做Bridge一个是做对比测试,另一个方面是作为我一个房间耳放的接入。这样我就可以用Roon控制在我的耳放上播放音乐。

树莓派做Roon Bridge是性价比非常高的Roon Bridge设备,功耗低,价格低,USB输出较好,I2S数字音频卡多,电源好处理。

在树莓派上装Roon Bridge

如果树莓派专用于Roon Bridge,则最好安装volumio,moode,RoPieee这类已经预先集成了Bridge软件的,比较简单。

因为我的树莓派还需要跑其他的软件,所以我是预装了系统再手工安装Roon Bridge。也比较简单

官方有Linux安装指导:https://help.roonlabs.com/portal/en/kb/articles/linux-install

要选对架构,对于树莓派4,如果是32位系统,用armv7hf, 我用的系统是64位的,所以使用armv8,安装只有下面三个指令

1
2
3
$ curl -O http://download.roonlabs.com/builds/roonbridge-installer-linuxarmv8.sh
$ chmod +x roonbridge-installer-linuxarmv8.sh
$ sudo ./roonbridge-installer-linuxarmv8.sh

取消安装在执行脚本加上参数uninstall,如:

1
sudo ./roonbridge-installer-linuxarmv8.sh uninstall

安装完成后会有安装结果提示,看是否安装成功。

重要提示: 安装完成后,可能会出现在Roon的关于里面可以看到桥,但是在音频里面看不到输出设备,应该是树莓派没有启动音频设备,需要修改config.txt文件,将dtparam=audio=on这一行的注释弃掉(删除前面的#号)

除了USB输出外,也可以给树莓派添加I2S音频扩展卡,通过同轴/平衡/光纤输出到解码器。

如果选用的是兼容HiFiBerry系列的显卡,可以参考:
https://www.hifiberry.com/docs/software/configuring-linux-3-18-x/

以我买的带平衡和光纤输出的兼容HiFiBerry Digi+的扩展版为例,修改/boot/config.txt

  1. 注释掉dtparam=audio=on
  2. 添加dtoverlay=hifiberry-dac

重启树莓派即可。然后用aplay指令可以看到I2S声卡

1
2
3
4
5
aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: sndrpihifiberry [snd_rpi_hifiberry_digi], device 0: HifiBerry Digi HiFi wm8804-spdif-0 [HifiBerry Digi HiFi wm8804-spdif-0]
Subdevices: 1/1
Subdevice #0: subdevice #0

通过VPN实现远程ROON

打通WAN连接服务器

  1. 首先要像运营商(如电信宽带)申请公网IP。

  2. 申请一个免费域名,同时将域名设置动态映射。这个每家域名提供商具体不一样,根据指导去配。

  3. 公网IP一般是动态的,会变化的,使用DDNS来做动态映射,以下以梅林固件的路由器为例:

enter description here
服务器选择不同域名提供商,然后输入用户名等参数

搭建VPN服务器

以群晖NAS为例

1、安装VPN Server套件
enter description here

2、启动L2TP/IPSec服务器
enter description here
其中10.2.0.0是VPN虚拟机局域网的网段

在路由器做端口映射,将以下端口流量导向NAS
UDP:500
UDP:4500
UDP:1701
enter description here

或者也可以通过DMZ映射到NAS服务器地址

远程机器连接VPN服务器

以在Windows设置创建VPN连接为例

  1. 修改注册表并重启
    在“Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent”创建一个DWORD (32-bit)值,可以是“AssumeUDPEncapsulationContextOnSendRule”, 值为“2”
    修改完最好重启

  2. 创建连接

enter description here
其中
a. 用户名和密码是你创建VPN服务器的NAS用户用户名和密码
b. 共享密钥是第2步设置的预共享密钥

3、进行连接
enter description here
连接后会增加一个虚拟网卡

1
2
3
4
5
6
7
PPP 适配器 myhome:

连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::ecdd:7a2a:228e:9b30%51
IPv4 地址 . . . . . . . . . . . . : 10.2.0.1
子网掩码 . . . . . . . . . . . . : 255.255.255.255
默认网关. . . . . . . . . . . . . : 0.0.0.0

同时你也可以访问NAS所在局域网的地址
例如

1
ping 192.168.1.100

此时你的Windows和NAS已经处在一个虚拟局域网下,启动远程计算机上的Roon就可以连接NAS上跑的Core了。

此时你看到Roon Core的IP地址是刚才建立的VPN的网段(Core机器上也有一个虚拟网卡)
enter description here
同时也可以发现远程Windows机器上连接的音频设备用于播放
enter description here

enter description here
enter description here

基于Ubuntu Server搭建HomeNAS

Ubuntu服务器是Ubuntu操作系统的一个版本,被设计为互联网的主干。Ubuntu 服务器版为各种服务器应用程序提供了一个通用的、极简主义的基础,例如文件/打印服务、Web 托管、电子邮件托管等。

一、系统安装

1.1系统要求

推荐的系统要求是:

CPU:1 GHz 或更高

内存:1 GB 或更多

磁盘:至少 2.5 GB

服务器和桌面差异

Ubuntu Server Edition和Ubuntu Desktop Edition使用相同的 apt 存储库,使得在 Desktop Edition 上安装服务器应用程序与在Server Edition 上一样容易。

一个主要区别是用于桌面版的图形环境没有为服务器安装。这包括图形服务器本身、图形实用程序和应用程序,以及桌面用户所需的各种用户支持服务。

1.2获取安装程序

您可以从https://ubuntu.com/download/server下载适用于 amd64 的服务器安装程序。

1.3安装 Ubuntu 服务器

安装教程参考:

https://ubuntu.com/tutorials/install-ubuntu-server#1-overview

https://ubuntu.com/server/docs/install/step-by-step

从安装介质启动,片刻之后,您应该会在屏幕上看到如下所示的消息……
enter description here

语言选择(选择英文)
enter description here
可用安装程序更新(跳过更新,选Continue without updating)
enter description here
选择正确的键盘布局(保持默认,即美国英文)
enter description here
选择安装基础(保持默认安装ubuntu server)
enter description here
网络配置(默认自动配置)
enter description here

如需配置固定IP,点ens33 eth-edit IPv4
enter description here
将Automatic (DHCP)调整为Manual,设置内网对应IP信息
enter description here
代理配置(如无代理,保留为空)
enter description here
镜像源配置(保持默认地址国内速度也不错,如需更换,自行添加)
enter description here
磁盘配置(一般保持默认即可)
enter description here

确认磁盘配置(选择Continue确认)
enter description here
设置个人资料(Pick a username:登陆服务器的用户名,建议和Your name保持一致)
enter description here
安装SSH(必须安装此项)
enter description here

安装附加软件(跳过,全部不安装,理由:通过Snaps安装的软件运行效率低)
enter description here
安装日志(系统正在安装,静候)
enter description here
安装完成(选择Reboot重启系统)
enter description here

二、系统初始化

2.1 配置国内镜像源

Ubuntu Server 24.04 LTS的软件源配置文件是/etc/apt/sources.list.d/ubuntu.sources。将系统自带的该文件做个备份,将该文件替换为下面内容,即可使用 TUNA 的软件源镜像。

备份/etc/apt/sources.list.d/ubuntu.sources,命令:

1
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak

执行编辑软件源命令:

1
sudo vim /etc/apt/sources.list.d/ubuntu.sources

将文件中内容替换为下面的:

1
2
3
4
5
6
7
8
9
10
11
Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

2.2 更新系统

1
sudo apt update && sudo apt upgrade -y

2.3 安装初始必备软件

输入下面命令安装基础必备软件,命令:

1
sudo apt install curl git vim -y

三、安装图形管理面板

3.1 安装Cockpit

1
2
. /etc/os-release
sudo apt install -t ${VERSION_CODENAME}-backports cockpit -y

设置Cockpit接管网络,需修改/etc/netplan/50-cloud-init.yaml文件,输入命令:

1
sudo vim /etc/netplan/50-cloud-init.yaml

在network组最后添加 renderer: NetworkManager 如:

1
2
3
4
5
6
7
8
9
10
11
# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
ens33:
dhcp4: true
version: 2
renderer: NetworkManager

然后应用:

1
sudo netplan apply

3.2 安装Cockpit附属组件

官方组件

1、虚拟机,在浏览器中创建、运行和管理虚拟机。

1
2
. /etc/os-release
sudo apt install -t ${VERSION_CODENAME}-backports cockpit-machines -y

2、Podman 容器,在浏览器中下载、使用和管理容器。(Podman 取代了 Docker。)

1
2
. /etc/os-release
sudo apt install -t ${VERSION_CODENAME}-backports cockpit-podman -y

3、cockpit-pcp,Cockpit面板的历史数据插件

1
2
. /etc/os-release
sudo apt install -t ${VERSION_CODENAME}-backports cockpit-pcp -y

第三方组件

配置45Drives Repo安装脚本,安装脚本将自动检测您的发行版并将适当的文件添加到您的系统。该脚本还将保存任何与 45Drives 相关的旧存储库(如果存在)。

下面的命令将下载并运行脚本,而不会在您的系统上留下任何东西!

1
2
curl -sSL https://repo.45drives.com/setup | sudo bash
sudo apt update

Navigator、File Sharing、Identities三合一安装命令:

1
sudo apt install cockpit-navigator cockpit-file-sharing cockpit-identities -y

1、Navigator文件浏览器,Cockpit 的特色文件浏览器。

安装软件包:

1
sudo apt install cockpit-navigator -y

2、File Sharing,一个 Cockpit 插件,可轻松管理 Samba 和 NFS 文件共享。

安装软件包:

1
sudo apt install cockpit-file-sharing -y

3、Cockpit Identities,用户和组管理插件

安装软件包:

1
sudo apt install cockpit-identities -y

4、Cockpit ZFS管理器

安装ZFS软件包:

1
sudo apt update && sudo apt install -y zfs-dkms zfsutils-linux

要求:

Cockpit: 201+;NFS (Optional);Samba: 4+ (Optional);ZFS: 0.8+;

安装:

1
2
git clone https://github.com/45drives/cockpit-zfs-manager.git
sudo cp -r cockpit-zfs-manager/zfs /usr/share/cockpit

自动生成的快照名称以 YYYY.MM.DD-HH.MM.SS 格式创建。

建议将以下属性添加到 Samba 配置文件中,以允许在 Windows 资源管理器中访问以前的版本:

1
sudo nano /etc/samba/smb.conf

附加到 [global] 部分或个人共享部分

1
2
3
4
5
shadow: snapdir = .zfs/snapshot
shadow: sort = desc
shadow: format = %Y.%m.%d-%H.%M.%S
shadow: localtime = yes
vfs objects = acl_xattr shadow_copy2

3.3 Cockpit调优

自动注销闲置用户

在您首选的文本编辑器中,在 /etc/cockpit/ 目录中打开或创建 cockpit.conf 文件,命令:

1
sudo vim /etc/cockpit/cockpit.conf

在文件中添加以下文本,以分钟为单位,这里表示为15分钟后自动退出:

1
2
[Session]
IdleTimeout=15

保存文件,重启Cockpit Web 控制台以使更改生效,命令:

1
sudo systemctl try-restart cockpit

登录页面添加标题

在您首选的文本编辑器中创建 /etc/issue.cockpit 文件(如果您还没有该文件)。添加您要显示的内容作为文件的横幅。命令:

1
sudo vim /etc/cockpit/issue.cockpit

在文件中添加需要展示的内容:

1
HomeNAS Based on Ubuntu Server LTS.

内容添加完成后,保存这个文件。

在您首选的文本编辑器中,在 /etc/cockpit/ 目录中打开或创建 cockpit.conf 文件。

1
sudo vim /etc/cockpit/cockpit.conf

在文件中添加以下文本:

1
2
[Session]
Banner=/etc/cockpit/issue.cockpit

保存该文件,重启Cockpit Web 控制台以使更改生效,命令:

1
sudo systemctl try-restart cockpit

Nginx反向代理Cockpit

在您首选的文本编辑器中,在 /etc/cockpit/ 目录中打开或创建 cockpit.conf 文件,命令:

1
sudo vim /etc/cockpit/cockpit.conf

在文件中添加以下文本,将下面内容中的两处’cockpit.domain.tld’替换为你的域名(如为非标端口号,需将端口号一并填写上),将192.168.1.10:9090修改为你对应的内网IP,就可以实现外网内网同时访问Cockpit管理面板:

1
2
3
4
5
[WebService]
Origins = https://cockpit.domain.tld wss://cockpit.domain.tld https://192.168.1.10:9090
ProtocolHeader = X-Forwarded-Proto
ForwardedForHeader = X-Forwarded-For
LoginTo = false

保存文件,重启Cockpit Web 控制台以使更改生效,命令:

1
sudo systemctl try-restart cockpit

注意:更改完此项之后,将无法使用内网IP登陆Cockpit web管理面板,如需使用内网登陆,需将此项删除掉。

防止暴力攻击Web登陆窗口

编辑defaults-debian.conf文件:

1
sudo vim /etc/fail2ban/jail.d/defaults-debian.conf

添加如下内容(只需要插入绿色字体部分内容,灰色部分为默认自带内容):

1
2
3
4
[sshd]
enabled = true
[pam-generic]
enabled = true

保存文件后重启Fail2ban:

1
sudo systemctl restart fail2ban

修改Web登陆端口

要更改其端口和/或地址,您应该将以下内容放入文件中:

1
/etc/systemd/system/cockpit.socket.d/listen.conf

在该路径中创建尚不存在的文件和目录。该ListenStream 选项指定所需的地址和 TCP 端口。

1
2
3
[Socket]
ListenStream=
ListenStream=443

注意:第一行的空值是故意的。systemd允许Listen在单个套接字单元中声明多个指令;插入文件中的空值会重置列表,从而禁用原始设备的默认端口 9090。

为了使更改生效,请运行以下命令:

1
2
sudo systemctl daemon-reload 
sudo systemctl restart cockpit.socket

四、系统调优

4.1手动配置IP地址

通过Cockpit面板网络管理界面进行修改。

4.2 调整系统时区/时间

Cockpit-概览-系统时间-点击时间进行校准,时区选择Asia/Shanghai,设置时间选择自动使用NTP,然后点击变更,系统会自动联网进行校准。

4.3 交换空间优化

1、优化交换空间利用率

ubuntu默认是当内存使用达到**40%就向交换空间写入数据,这样会大大的降低电脑运行效率,我们将它改为10%**再向交换空间写入数据

打开 /etc/sysctl.conf 文件,执行命令:

1
sudo vim /etc/sysctl.conf

在文件的末尾添加下面两行配置:

1
2
vm.swappiness=10
vm.vfs_cache_pressure=50

vm.swappiness 是用来控制内核在什么时候开始使用交换空间的参数,默认值是 60。将该值调整为 10 表示让内存使用率达到 90% 时才开始使用交换空间。

vm.vfs_cache_pressure 是用来控制内核清理缓存的频率的参数,默认值是 100。将该值调整为 50 表示内核会更倾向于清理文件系统缓存以回收内存。

保存修改并退出编辑器,执行命令:

1
sudo sysctl -p

以重新加载配置。

注意:修改内核参数可能会影响系统性能和稳定性,请根据自身需要调整,谨慎操作。

2、永久关闭交换分区

如果你想要永久禁用交换分区,可以编辑 /etc/fstab 文件。

1
sudo vim /etc/fstab

在文件中找到包含 /swap.img 的那一行,注释掉该行或者删除整行。

下面是Ubuntu Server 22.04.3 LTS系统示例(注释绿色字体):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda2 during curtin installation
/dev/disk/by-uuid/ff80e2ef / ext4 defaults 0 1
# /boot/efi was on /dev/sda1 during curtin installation
/dev/disk/by-uuid/5AAF-235C /boot/efi vfat defaults 0 1
# /swap.img none swap sw 0 0
UUID=f26c008c /srv/volume_1 auto nofail 0 0
UUID=2a4f759b /srv/volume_2 auto nofail 0 0

保存并退出文本编辑器。

最后,重启系统以应用更改:

1
sudo reboot

这样就禁用了/swap.img 文件作为交换分区。请确保在进行这些更改之前备份重要数据,并理解禁用交换分区可能会影响系统性能的风险。

4.4 安装Tuned系统调优工具

Tuned(又称为tuned-adm)是一个系统调优工具,旨在帮助优化系统的性能和功耗。它允许管理员根据系统的需求选择不同的预定义配置文件或自定义配置文件,以提供最佳的性能和功耗平衡。

安装Tuned软件包

1
sudo apt update && sudo apt install tuned

以下是Tuned的一些常用命令和其功能:

1
2
3
4
5
6
7
8
9
sudo systemctl start tuned:启动Tuned服务。
sudo systemctl stop tuned:停止Tuned服务。
sudo systemctl restart tuned:重启Tuned服务。
sudo systemctl status tuned:查看Tuned服务的运行状态。
sudo systemctl stop tuned:停止Tuned服务。
sudo systemctl disable tuned:禁止Tuned服务开机启动。
tuned-adm list:列出所有可用的Tuned配置文件。
tuned-adm active:查看当前活动的Tuned配置文件。
tuned-adm recommend:根据系统的硬件配置和工作负载推荐一个最佳的Tuned配置文件。

在Cockpit Web管理面板上配置Tuned

选择你需要的模式激活使用
enter description here

常用TuneD 配置集

1、throughput-performance

针对高吞吐量优化的服务器配置文件。它禁用节能机制并启用 sysctl 设置,以提高磁盘和网络 IO 的吞吐量性能。CPU 调控器设置为 performance。它将 energy_performance_preference 和 scaling_governor 属性设置为 performance 配置集。

2、accelerator-performance

accelerator-performance 配置集包含与 throughput-performance 配置集相同的调整。另外,它会将 CPU 锁定为低 C 状态,以便使延迟小于 100us。这提高了某些加速器的性能,如 GPU。

3、network-throughput

用于吞吐量网络调优的配置集。它基于 throughput-performance 配置集。此外,它还增加了内核网络缓冲区。它继承 latency-performance 或 throughput-performance 配置集,并将energy_performance_preference 和 scaling_governor 属性改为 performance 配置集。

4、Balanced

默认的节能配置文件。它在性能和功耗之间具有折衷。在可能的情况下尽可能使用自动扩展和自动调整。唯一缺陷是增加延迟。在当前的 TuneD 版本中,它启用了 CPU、磁盘、音频和视频插件,并激活了 conservative CPU 调控器。如果支持,radeon_powersave 选项使用 dpm-balanced 值,否则被设置为 auto。它将 energy_performance_preference 属性改为 normal 能源设置。它还将 scaling_governor 策略属性改为 conservative 或 powersave CPU 调控器。

5、powersave
用于最大节能性能的配置集。它可以对性能进行调整,从而最大程度降低实际功耗。在当前的 TuneD 发行版本中,它为 SATA 主机适配器启用 USB 自动挂起、WiFi 节能和 Aggresive Link Power Management (ALPM) 节能。它还为使用低折率的系统调度多核功耗,并激活 ondemand 监管器。它启用了 AC97 音频节能,或根据您的系统,HDA-Intel 节能时间为 10 秒。如果您的系统包含启用了 KMS 支持的 Radeon 图形卡,配置集会将其配置为自动节能。在 ASUS Eee PC 上,启用了动态超级混合引擎。它将 energy_performance_preference 属性改为 powersave 或 power energy 设置。它还会将 scaling_governor 策略属性更改为 ondemand 或 powersave CPU 调控器。
4.5 新用户默认加入users组
编辑/etc/adduser.conf文件,
找到 USERGROUPS 修改变量为 ‘no’(USERGROUPS=no), 这样当创建用户时就不会伴随产生一个新组了.设置 USERS_GID 为所有用户都属于的组的GID,建议设置为USERS_GID=100,即users组。
这样修改好之后,新建用户将不再生成同名用户组,且用户默认加入users组。
4.6 修改homes目录默认路径
编辑/etc/adduser.conf文件,
找到DHOME=/home参数,修改变量为自定义路径即可,例如:

1
DHOME=/mnt/volume_1/data/home

4.7 修改用户home目录默认权限

编辑/etc/adduser.conf文件,

找到DIR_MODE=0755参数,修改变量为’0700’(DIR_MODE=0700),0700表示只有该用户拥有文件所有权,其他用户无权访问。

4.8 创建新用户

对于需要创建新的用户,推荐通过adduser命令去增加,只有通过这个命令去增加的用户,前面4.3~4.5之间的修改项方能生效。

创建新用户命令,命令中的”test”为用户名,自行替换为自己需要创建的用户名:

1
sudo adduser test

系统将输出如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ubtest@ubuntutest:~$ sudo adduser test
Adding user `test' ...
Adding new user `test' (1002) with group `users' ...
Creating home directory `/mnt/volume_1/data/home/test' ...
Copying files from `/etc/skel' ...
New password: //新用户密码
Retype new password: //再次确认新用户密码
passwd: password updated successfully
Changing the user information for test
Enter the new value, or press ENTER for the default
Full Name []: test //新用户全名,建议填写
Room Number []: //房间号码
Work Phone []: //工作电话
Home Phone []: //家庭电话
Other []: //其他
Is the information correct? [Y/n] y //这些信息是否正确?

创建用户过程中,需要填写新创建用户的密码,建议全名项输入与用户名相同的值,其余项可以留空,或者按需填写。

adduser高级语法可以参考此链接:https://www.runoob.com/linux/linux-comm-adduser.html

4.9 创建容器专属账户

考虑到将要搭建的容器服务众多,甚至一部分服务还可能对 Internet 开放,为了安全,建议创建一个专用的低权限用户来运行各项容器。

1
sudo adduser application

使用命令行新建名为 application 的用户(名称可以自定义):

1
id application

终端输出内容:

1
uid=1001(application) gid=1001(application) 组=1001(application)

这里可以看到都是:1001(application),记住这个值,作为后续容器参数使用。

4.10 启用root用户

1、开启root账户

1
sudo passwd -u root

2、为root账户设置密码

1
sudo passwd root

终端输出内容:

1
2
3
New password:                                      //设置root密码
Retype new password: //再次确认root密码
passwd: password updated successfully //root密码更新成功

3、测试root账户

1
su -

输入刚才设置的密码

1
Password:

5、成功

1
root@ubuntu:~#

4.11 配置邮件发送服务

安装Exim4,命令:

1
sudo apt install exim4 -y

配置Exim4服务,命令:

1
sudo dpkg-reconfigure exim4-config

终端输出配置内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Please select the mail server configuration type that best meets your needs.

Systems with dynamic IP addresses, including dialup systems, should generally be
configured to send outgoing mail to another machine, called a 'smarthost' for
delivery because many receiving systems on the Internet block incoming mail from
dynamic IP addresses as spam protection.

A system with a dynamic IP address can receive its own mail, or local delivery
can be disabled entirely (except mail for root and postmaster).

1. internet site; mail is sent and received directly using SMTP
2. mail sent by smarthost; received via SMTP or fetchmail
3. mail sent by smarthost; no local mail
4. local delivery only; not on a network
5. no configuration at this time
General type of mail configuration:

接下来进行逐步配置:

1、邮件系统设置的常见类型:选择第三项,用smarthost 发信;无本地信件。

1
General type of mail configuration: 3

enter description here
2、系统邮件名称:填写发邮件的邮件域名,如你的发件邮件地址是mymail@qq.com,则这里填写qq.com。

1
System mail name:qq.com

enter description here
3、要监听入站 SMTP 连接的 IP 地址:填127.0.0.1 ; ::1,这里表示只监听本地IPV4/IPV6端口,也就是只有本机能发信,外部不能访问。

1
IP-addresses to listen on for incoming SMTP connections: 127.0.0.1 ; ::1

enter description here
4、其它可接收邮件的目的地址:留空

1
Other destinations for which mail is accepted:

enter description here

5、本地用户的可见域名:这里和第2步一样,填写你的发件邮箱域名,如qq.com。

1
Visible domain name for local users: qq.com

enter description here

6、发邮件使用的smarthost 的IP 地址或主机名:填写外部SMTP地址。由于qq.com使用的邮件系统是qq,所以这里填写qq的smtp地址smtp.qq.com:587。

1
IP address or host name of the outgoing smarthost: smtp.qq.com:587

enter description here

7、保持最小 DNS 查询量吗 (按需拔号,Dial-on-Demand)?否

1
Keep number of DNS-queries minimal (Dial-on-Demand)? [yes/no] n

enter description here
8、将设置文件分拆成小文件吗?否(不搭建复杂的邮件服务器,保持默认就可以,不需要拆分)

1
Split configuration into small files? [yes/no] n

enter description here
9、Root 和 postmaster 邮件的接收者: 空

1
Root and postmaster mail recipient:

enter description here
到这里就完成了,但还不能发邮件。输入命令:

1
sudo vim /etc/exim4/passwd.client

在末尾加入(注意修改用户名和密码,密码为邮箱授权码,非登录密码):

1
2
3
qq-smtp.l.qq.com:yourAccountName@qq.com:y0uRpaSsw0RD
*.qq.com:yourAccountName@qq.com:y0uRpaSsw0RD
smtp.qq.com:yourAccountName@qq.com:y0uRpaSsw0RD

格式为:发件邮箱SMTP服务器:发件邮箱账号:发件邮箱密码,因为上面我们已经设置smtp服务器地址,所以这里可以填写通配符,当然也可以填smtp地址。

输入命令:

1
sudo vim /etc/email-addresses

在末尾加入:

1
root: mymail@qq.com

格式是:系统用户名: 发件邮箱地址。

防火墙记得开放587端口,然后重启exim4,输入命令:

1
sudo /etc/init.d/exim4 restart

发送邮件测试,首先切换到root用户,输入命令:

1
su –

输入发送邮件测试命令(user@example.com改为你要接收邮件的邮箱地址):

1
sudo echo "test" | mail -s "test" user@example.com

如果你的邮箱收到邮件,就说明安装成功了。

4.12 添加Github Hosts

打开系统hosts文件,命令:

1
sudo vim /etc/hosts

粘贴下面内容进去之后保存退出即可。(此Hosts IP具有时效性,请保持定期更新)

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
# GitHub Host Start
185.199.109.154 github.githubassets.com
140.82.113.21 central.github.com
185.199.111.133 desktop.githubusercontent.com
185.199.110.153 assets-cdn.github.com
185.199.109.133 camo.githubusercontent.com
185.199.109.133 github.map.fastly.net
151.101.129.194 github.global.ssl.fastly.net
192.30.255.113 gist.github.com
185.199.108.153 github.io
192.30.255.112 github.com
192.30.255.117 api.github.com
185.199.110.133 raw.githubusercontent.com
185.199.110.133 user-images.githubusercontent.com
185.199.108.133 favicons.githubusercontent.com
185.199.111.133 avatars5.githubusercontent.com
185.199.108.133 avatars4.githubusercontent.com
185.199.108.133 avatars3.githubusercontent.com
185.199.108.133 avatars2.githubusercontent.com
185.199.108.133 avatars1.githubusercontent.com
185.199.110.133 avatars0.githubusercontent.com
185.199.110.133 avatars.githubusercontent.com
192.30.255.120 codeload.github.com
52.217.133.73 github-cloud.s3.amazonaws.com
52.216.60.73 github-com.s3.amazonaws.com
16.182.73.249 github-production-release-asset-2e65be.s3.amazonaws.com
52.216.218.185 github-production-user-asset-6210df.s3.amazonaws.com
52.217.131.1 github-production-repository-file-5c1aeb.s3.amazonaws.com
185.199.111.153 githubstatus.com
140.82.114.18 github.community
185.199.110.133 media.githubusercontent.com
185.199.110.133 objects.githubusercontent.com
185.199.110.133 raw.github.com
20.221.80.166 copilot-proxy.githubusercontent.com
# Update at: 2024-01-09 18:11:36
# GitHub Host End

4.13 添加TMDB Hosts

打开系统hosts文件,命令:

1
sudo vim /etc/hosts

粘贴下面内容进去之后保存退出即可。(此Hosts IP具有时效性,请保持定期更新)

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
# TMDB Hosts Start
99.84.191.42 themoviedb.org
99.84.191.46 themoviedb.org
99.84.191.109 themoviedb.org
99.84.191.117 themoviedb.org
99.86.229.15 tmdb.org
99.86.229.92 tmdb.org
99.86.229.116 tmdb.org
99.86.229.123 tmdb.org
108.159.227.27 www.themoviedb.org
108.159.227.37 www.themoviedb.org
108.159.227.40 www.themoviedb.org
108.159.227.111 www.themoviedb.org
52.85.132.26 api.themoviedb.org
52.85.132.41 api.themoviedb.org
52.85.132.60 api.themoviedb.org
52.85.132.87 api.themoviedb.org
18.160.41.31 api.tmdb.org
18.160.41.40 api.tmdb.org
18.160.41.52 api.tmdb.org
18.160.41.88 api.tmdb.org
169.150.236.99 image.tmdb.org
158.69.0.103 assets.fanart.tv
192.99.151.161 assets.fanart.tv
# Update at 20240109
# TMDB Hosts End

获取最新IP方法:通过https://www.ipaddress.com或者https://dnschecker.org/country/cn首页,输入api.themoviedb.org和api.tmdb.org获取真实IP地址
4.14 WireGuard家庭组网
WireGuard®是一个极其简单而又快速的现代VPN,采用了最先进的加密技术。它的目标是比IPsec更快、更简单、更精简、更有用,同时避免了大量的头痛问题。它打算比OpenVPN的性能要好得多。WireGuard被设计成一个通用的VPN,可以在嵌入式接口和超级计算机上运行,适合于许多不同的情况。它最初是为Linux内核发布的,现在是跨平台的(Windows、macOS、BSD、iOS、Android),可广泛部署。它目前正在大力发展,但已经被认为是业内最安全、最容易使用和最简单的VPN解决方案。
官网:https://www.wireguard.com/
docker版项目地址:https://hub.docker.com/r/weejewel/wg-easy
各平台客户端下载地址:https://www.wireguard.com/install/
一、WireGuard部署
这里采用Docker部署WireGuard的原因是因为,是因为Docker版提供了WebUI界面,可通过图形界面即可完成WireGuard的相关连接配置,使用起来方便快捷,对新手友好。
Docker CLI部署命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
docker run -d \
--name=wg-easy \
-e WG_HOST=123.123.123.123 (服务器公网IP或域名地址,无需端口) \
-e PASSWORD=passwd123 (Web管理面板密码) \
-e WG_DEFAULT_ADDRESS=10.8.0.x (默认IP地址)\
-e WG_DEFAULT_DNS=223.5.5.5 (默认DNS)\
-e WG_ALLOWED_IPS=10.8.0.0/24 (允许连接的IP段)\
-e WG_PERSISTENT_KEEPALIVE=25 (重连间隔)\
-v ~/.wg-easy:/etc/wireguard (配置文件保存路径)\
-p 51820:51820/udp \
-p 51821:51821/tcp \
--cap-add=NET_ADMIN \
--cap-add=SYS_MODULE \
--sysctl="net.ipv4.conf.all.src_valid_mark=1" \
--sysctl="net.ipv4.ip_forward=1" \
--restart unless-stopped \
weejewel/wg-easy

容器部署完成后,即可通过http://localhost:51821访问

二、路由器转发UDP端口

因为我是在家里的用的公网IP宽带做服务端,所以需要在路由器上转发UDP端口,按照上面的配置信息,设置的UDP端口是:51820,所以需要转发这个端口,51821是webUI访问端口,可以不转发。下图是华硕路由器设置端口转发示意图:
enter description here

三、创建设备连接

1、点击New Client创建新的连接客户端。

2、在弹出的New Client框中,Name部分内容可以随意填写,一般情况下,建议以使用的设备名称来命令,以方便后期设备多了之后,便于快速区分。比如设置为:xiaomi、oneplus、dellPC、hpPC等等。
enter description here

3、获取连接的配置文件或配置信息
enter description here
4、PC端连接,打开安装好的WireGuard客户端,点击从文件导入隧道,选择刚刚下载的dellPC.conf文件,点击打开即可。
enter description here
打开之后点击:连接,即可和WireGuard服务端连接上。
enter description here

5、Ubuntu Server系统上连接,

安装WireGuard,可以通过以下命令完成:

1
2
sudo apt update
sudo apt install -y wireguard resolvconf

在客户端上创建配置文件 在客户端上,您需要创建一个配置文件,其中包含服务器的公共IP地址和端口,以及客户端的公钥和私钥。您可以使用以下命令创建配置文件:

1
sudo vim /etc/wireguard/wg0.conf

在编辑器中,输入刚才下载ubuntu.conf文件里的内容(.conf文件可通过Windows系统的记事本打开):

1
2
3
4
5
6
7
8
9
10
11
12
13

[Interface]
PrivateKey = AMgQmLbE4GrjahPOvm56CEHd/hIlovG2atNW5Wotq28=
Address = 10.8.0.4/24
DNS = 223.5.5.5


[Peer]
PublicKey = O/4gWMVbNLFpwbnFQCUpJV3g3oCPSV0wjqDaaEAqnyw=
PresharedKey = LojEYv08DXKi31R7jErWDOCexdw15/VsIyt4rg6/7B8=
AllowedIPs = 10.8.0.0/24
PersistentKeepalive = 25
Endpoint = baidu.com:51820

Endpoint = baidu.com:51820,这里可以填写你服务器的公网IP或者域名,如果是动态公网IP,建议填写域名。

启动WireGuard客户端 在客户端上,您需要启动WireGuard客户端,这可以通过以下命令完成:

1
2
3
4
#启用 wg-quick 服务,并在系统启动时自动启动该服务。
sudo systemctl enable wg-quick@wg0
#启动 wg-quick 服务,使 WireGuard VPN 服务开始运行。
sudo systemctl start wg-quick@wg0

现在,您的Ubuntu系统已经成功连接到您在云服务器上部署的WireGuard服务,您可以通过以下命令来检查连接状态:

1
sudo wg

如果一切正常,您将看到类似以下输出:

1
2
3
4
5
6
7
8
9
10
11
12
13

interface: wg0
public key: rT90PdlG+Et5thj/uKrXlIpuZa0edWpYt2kEaUdVkE0=
private key: (hidden)
listening port: 42262

peer: O/4gWMVbNLFpwbnFQCUpJV3g3oCPSV0wjqDaaEAqnyw=
preshared key: (hidden)
endpoint: 192.137.59.59:51820
allowed ips: 10.8.0.0/24
latest handshake: 1 hour, 13 minutes, 44 seconds ago
transfer: 53.51 KiB received, 428.10 KiB sent
persistent keepalive: every 25 seconds

如果您想禁用WireGuard VPN开机自启动,可以使用以下命令:

1
sudo systemctl disable wg-quick@wg0

请注意,上面命令不会停止当前正在运行的WireGuard VPN服务,如果您当前正在运行WireGuard VPN服务,您可以使用以下命令来停止它:

1
sudo wg-quick down wg0

这将关闭 wg0 接口并停止WireGuard VPN服务。

如果您已经使用 sudo systemctl start wg-quick@wg0 命令启动了 WireGuard VPN 服务,则可以使用以下命令停止服务:

1
sudo systemctl stop wg-quick@wg0

这将停止 wg-quick@wg0 服务并关闭 wg0 接口。

6、手机端连接,手机端连接很简单,安装好WireGuard手机端app之后,打开app点击右下角的+号按钮——选扫描二维码,扫描WebUI端提供的二维码即可连接成功(扫描成功后会弹出框提示输入名称,这个名称可以随意填写,比如设置为:WireGuard)。
enter description here
当设备连接成功后,WebUI界面可查看其状态,头像右下角显示有红点,表示连接正常。
enter description here

五、安全防护

安全的概念:

1、收紧安全措施有可能达到使系统无法使用的程度。安全性与便利性需要得到平衡。诀窍在于建立一个安全且有用的系统。

2、最大的威胁是(并且一直都会是)用户。

3、最小权限原则:系统的每一部分应该只能访问到它确实需要的东西,除此之外的则不可以。

4、纵深防御:多个独立的层次能带来更好的安全性。当一层防护被攻破时,另一层应该能够阻止攻击。

5、保持一点点的偏执和多疑。如果有件事看起来太好了,不像是真的,那可能确实如此。

6、永远无法令系统 100% 安全,除非把机器从网络上断开,关掉电源,锁进保险柜,用混凝土封住并不再使用它。

7、为失败做好准备。预先为安全措施被攻破的情况制定可供执行的计划。

本章节主要内容参考自Debian安全指南和Arch Linux安全。

Debian安全指南:https://www.debian.org/doc/manuals/securing-debian-manual/ch04s11.zh-cn.html

Arch Linux安全:https://wiki.archlinuxcn.org/wiki/%E5%AE%89%E5%85%A8

执行下列操作前,先给系统用户做个检查。检查是否存在空口令和root权限的账号,确认是否存在异常账号,确认UID为零的账号只有root账号。

操作步骤:

查看root权限账号,使用命令:

1
sudo awk -F: '($3==0)' /etc/passwd //查看UID为零的账号。

查看空口令账号,使用命令:

1
sudo awk -F: '($2=="")' /etc/shadow //查看空口令账号。

加固空口令账号,使用命令:

1
passwd <用户名>                                           //为空口令账号设定密码。

5.1 配置高强度密码策略

为了确保系统的安全性,建议设置的口令复杂度策略为:口令最小长度不小于8,至少包含大写字母、小写字母、数字和特殊字符中的三种。

安装 PAM 的 cracklib 模块,cracklib 能提供额外的密码检查能力。

1
sudo apt install libpam-cracklib

修改文件“/etc/pam.d/common-password”。 一旦修改,策略会马上生效。

1
sudo vim /etc/pam.d/common-password

找到文件中的以下内容:

1
password requisite pam_cracklib.so retry=3 minlen=8 difok=3

添加参数“minlen”、“dcredit”、“ucredit”、“lcredit”、“ocredit”。如果文件中已有这些参数,直接修改参数值即可,参数说明如表1所示。

1
password requisite pam_cracklib.so retry=3 minlen=9 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 difok=3
参数 说明 示例
minlen “口令最小长度配置项。PAM默认使用了“credits”,因此最小口令长度需要加1,若需要设置最小口令长度为8,则minlen的值应该设置为9。” minlen=9
dcredit “口令数字要求的配置项。值为负数N时表示至少有N个数字,值为正数时对数字个数没有限制。” dcredit=-1
ucredit “口令大写字母要求的配置项。值为负数N时表示至少有N个大写字母,值为正数时对大写字母个数没有限制。” ucredit=-1
lcredit “口令小写字母要求的配置项。值为负数N时表示至少有N个小写字母,值为正数时对小写字母个数没有限制。” lcredit=-1
ocredit 特殊字符要求的配置项。值为负数N时表示至少有N个特殊字符,值为正数时对特殊字符个数没有限制。 ocredit=-1
5.2 用户连续登陆失败锁定
在3次登录尝试失败后账户将被锁定至少15分钟,或者由管理员将其解锁。
在/etc/pam.d/common-auth中添加如下绿色字体内容,必须按下面顺序添加,命令:
1
sudo vim /etc/pam.d/common-auth

插入内容(只需要插入绿色字体部分内容,灰色部分为默认自带内容):

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
#
# /etc/pam.d/common-auth - authentication settings common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authentication modules that define
# the central authentication scheme for use on the system
# (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the
# traditional Unix authentication mechanisms.
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules. See
# pam-auth-update(8) for details.

# here are the per-package modules (the "Primary" block)
auth required pam_faillock.so preauth audit silent deny=3 fail_interval=900 unlock_time=900 even_deny_root root_unlock_time=900
auth [success=1 default=ignore] pam_unix.so nullok
# here's the fallback if no module succeeds
# BEGIN ANSIBLE MANAGED BLOCK
auth [default=die] pam_faillock.so authfail audit deny=3 fail_interval=900 unlock_time=900 even_deny_root root_unlock_time=900
auth sufficient pam_faillock.so authsucc audit deny=3 fail_interval=900 unlock_time=900 even_deny_root root_unlock_time=900
auth requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth required pam_permit.so
# and here are more per-package modules (the "Additional" block)
auth optional pam_cap.so
# end of pam-auth-update config

参数解析:

1
2
3
4
5
6
7
8
audit                     //如果用户不存在,则把该用户名记录到系统日志中。
Silent //不打印信息性的消息
deny=3 //用户连续认证失败次数超过3则锁定
fail_interval=900 //间隔时间的长度,在这个时间段内连续的
unlock_time=900 //锁定后n秒后,访问将被重新启用,在没有设置faillock的情况下,不会重新启用。
even_deny_root //Root账户和普通账户一样可以被锁定。
root_unlock_time=900 //在root账户被锁定后, 允许在n秒后访问该账户。
参数解析来源/etc/security/faillock.conf文件

上述参数可以按需添加,如需全部添加,可以参考下面格式:

1
2
示例:
auth required pam_faillock.so preauth audit silent deny=3 fail_interval=900 unlock_time=900 even_deny_root root_unlock_time=900

接着编辑/etc/pam.d/common-account,命令:

1
sudo vim /etc/pam.d/common-account

插入内容(只需要插入绿色字体部分内容,灰色部分为默认自带内容):

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
#
# /etc/pam.d/common-account - authorization settings common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authorization modules that define
# the central access policy for use on the system. The default is to
# only deny service to users whose accounts are expired in /etc/shadow.
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules. See
# pam-auth-update(8) for details.
#

# here are the per-package modules (the "Primary" block)
account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so
# here's the fallback if no module succeeds
account requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
account required pam_permit.so
# and here are more per-package modules (the "Additional" block)
# end of pam-auth-update config
account required pam_faillock.so

常用操作命令:

查看所有用户的尝试失败登录次数

1
sudo faillock

主要看faillock命令,显示的valid值,v表示有效,i表示无效。

查看指定用户(test用户)

1
sudo faillock --user test

解锁指定用户账户(test用户)

1
sudo faillock --user test --reset

解锁所有用户

1
sudo faillock --reset

重启系统也能解锁所有用户。

5.3 禁止root用户密码登陆

建议是通过Cockpit Web管理面板禁止root用户密码登陆,平时保持其处于禁用状态,如有需要时可以很方便就通过此处开启,用完即随手关闭。

通过Cockpit Web管理面板-账户-root用户-选项-禁用交互式密码,打上勾表示禁止root用户使用密码登陆。

5.4 限制指定用户外网登陆

使用pam_access模块来限制ssh登录源,ssh服务使用的服务名为sshd,pam_access模块使用的配置文件路径为/etc/security/access.conf

在ssh服务中添加pam_access模块

#切换到pam.d目录,备份远文件

1
cd /etc/pam.d && sudo cp sshd sshd.old

使用vi编辑器编辑sshd文件

1
sudo vi sshd

添加pam_access模块

1
account required pam_access.so

在pam配置文件中添加限制条目,条目的格式如下:

1
+/-:users:origins

+/- :+号表示授权访问,-号表示拒绝访问

users :users表示限制的用户或用户组,多个用户或组时使用空格分隔

origins:origins表示来源,可以是本地主机名、ip地址/段,域名,有几个特殊关键词:ALL表示所有,LOCAL表示本地,EXCEPT表示除了

当有多条规则时,执行的顺寻是自上而下

切换到配置文件目录,备份原文件

1
cd /etc/security && sudo cp access.conf access.conf.old

编辑配置文件

1
sudo vi access.conf

在文件最后添加一行,只允许用户kim通过192.168.0.90地址登录

1
2
+:kim:192.168.0.90
-:kim:ALL

5.5 限制指定用户夜间登陆

pam_time模块用来限制cockpit登录的时间,cockpit服务使用的服务名为cockpit,pam_time模块使用的配置文件路径为/etc/security/time.conf,在需要对服务器进行维护的时候,或者是在特定时间禁止用户登录服务器。

1、在cockpit服务中添加pam_time模块,打开文件:

1
sudo vim /etc/pam.d/cockpit

添加pam_time模块(只需要插入绿色字体部分内容,灰色部分为默认自带内容)

1
2
3
4
5
6
7
# List of users to deny access to Cockpit, by default root is included.
auth required pam_listfile.so item=user sense=deny file=/etc/cockpit/disallowed-users onerr=succeed
account required pam_nologin.so
account include common-account
password include common-password
# Limit login time
account required pam_time.so

2、在pam配置文件中添加限制条目,条目的格式如下:

1
services;devices;users;times

services:可以使用的services都包含在/etc/pam.d目录中

devices :可以使用的device有:表示所有设备,!ttyp表示除虚拟设别外的所有设备,ttyp*远程登录设备

users :限制的用户或组,使用列表时,各元素之间使用符号|分隔

time :限制的时间,由2段组成,第一段是首字母大写的星期缩写,第二段是时间段

星期缩写:Mo、Tu、We、Th、Fr、Sa、Su

特殊缩写:Wk工作日、Wd周末、Al每周的每天、WdSa周日、WdSu周六、WkMo除周一外的工作日

3、编辑配置文件

1
sudo vim /etc/security/time.conf

4、在文件末尾添加一行,允许用户root和test在每天早上8点至晚上23点之间登录

1
cockpit;*;root|test;A10800-2300

5.6限制用户同时登陆数量

在大多数Linux发行版中,有一个叫做limit.conf的文件,你可以定义一个用户或用户组的最大并发SSH会话数量。如果特定用户试图进入系统的次数超过允许的登录次数,他/她将被拒绝访问。

操作步骤,编辑/etc/security/limits.conf文件:

1
sudo vim /etc/security/limits.conf

在文件末行添加下面内容:

要限制特定用户(例如ostechnix)的并发 SSH 会话数,请在末尾添加以下行:

1
ostechnix hard maxlogins 2

如果要限制一组用户的连接数,请添加以下行:

1
@mygroup hard maxlogins 3

将@mygroup替换为您的组名。在这种情况下,mygroup 中的所有用户都不能登录超过3次。

如果要限制系统中所有用户(全局)的 SSH 会话,请改为添加以下行:

1
* hard maxlogins 3

这里,星号表示全局(即系统中的所有用户)。定义每个用户/组或整个系统的最大会话数后,保存并关闭文件。

如需限制系统中Cockpit Web管理面板用户同时登陆数量,可以按如下配置添加内容:

1
sudo vim /etc/pam.d/cockpit

插入下列内容(只需要插入绿色字体部分内容,灰色部分为默认自带内容):

1
2
3
4
5
6
#%PAM-1.0
auth required pam_sepermit.so
auth substack common-auth
auth optional pam_ssh_add.so
# Set up user limits from /etc/security/limits.conf.
session required pam_limits.so

保存后退出即刻生效。

5.7限制用户SU

限制能su到root的用户。操作步骤

使用命令:

1
sudo vim /etc/pam.d/su

修改配置文件,在配置文件中添加行。例如,只允许sudo组用户su到root,则添加

1
auth required pam_wheel.so group=sudo

添加后如下所示:

1
2
3
4
5
6
#
# The PAM configuration file for the Shadow `su' service
#
auth required pam_wheel.so group=sudo
# This allows root to su without passwords (normal operation)
auth sufficient pam_rootok.so

5.8 用户登陆邮件通知告警

通过 PAM 模块,就可以实现用户登录,root 权限获取时,通过邮件等方式进行通知。以实现,预先知道,预先警惕的目标,降低受影响的范围。以下是通过 PAM 模块实现的邮件通知用户登录的功能。

1、以管理员身份登录虚拟机,并切换成 root 用户。

2、新建脚本,命令:

1
sudo vim /etc/pam.d/login-notifiy.sh

(该脚本可以存放在任意位置,但是需要将后续的路径指定好即可),内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash

export LANG="en_US.UTF-8"

[ "$PAM_TYPE" = "open_session" ] || exit 0
{
echo "用户: $PAM_USER"
echo "远程用户: $PAM_RUSER"
echo "远程主机: $PAM_RHOST"
echo "服务: $PAM_SERVICE"
echo "终端: $PAM_TTY"
echo "日期: `date '+%Y年%m月%d日%H时%M分%S秒'`"
echo "服务器: `uname -s -n -r`"
} | mail -s "注意! 用户$PAM_USER正通过$PAM_SERVICE服务登录`hostname -s | awk '{print toupper(substr($0,1,1)) substr($0,2)}'`系统" user@yourdomain.com

脚本中的user@yourdomain.com修改为你要接收通知的邮箱地址。

3、编辑文件

1
sudo vim /etc/pam.d/common-session

4、在文件最后追加一行:

1
session optional pam_exec.so debug /bin/bash /etc/pam.d/login-notifiy.sh

5、保存并退出。

至此,每一个用户登录都会发邮件通知给收件人,内容包括用户名以及登录的 IP 地址信息。如果遇到陌生 IP,那么就要注意,该主机是否正在遭受攻击。

5.9 超时自动注销活动状态

设置系统登录后,连接超时时间,增强安全性。操作步骤,使用命令:

1
sudo vim /etc/profile

修改配置文件,在文件末行添加下列内容:

1
2
# 超时自动退出
TMOUT=180

即超时时间为三分钟。

5.10 记录所有用户的登录和操作日志

通过脚本代码实现记录所有用户的登录操作日志,防止出现安全事件后无据可查。

操作步骤

1
sudo vim /etc/profile

打开配置文件,在配置文件末行输入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 在 history 命令中启用时间戳
export HISTTIMEFORMAT="%F %T "
# 记录所有用户的登录和操作日志
history
USER=`whoami`
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]; then
USER_IP=`hostname`
fi
if [ ! -d /var/log/history ]; then
mkdir /var/log/history
chmod 777 /var/log/history
fi
if [ ! -d /var/log/history/${LOGNAME} ]; then
mkdir /var/log/history/${LOGNAME}
chmod 300 /var/log/history/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date +"%Y%m%d_%H:%M:%S"`
export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"
chmod 600 /var/log/history/${LOGNAME}/*history* 2>/dev/null

运行命令加载配置生效:

1
sudo bash -c "source /etc/profile"

注意:/var/log/history 是记录日志的存放位置,可以自定义。

通过上述步骤,可以在 /var/log/history 目录下以每个用户为名新建一个文件夹,每次用户退出后都会产生以用户名、登录IP、时间的日志文件,包含此用户本次的所有操作(root用户除外)。

5.11 禁止SSH服务开机自启动

为了系统的安全起见,建议SSH服务在有需要用的时候通过Cockpit Web面板开启,平常则处于关闭状态。开启路径:Cockpit-服务-ssh.service-启动

关闭ssh服务开机自动启动,命令:

1
sudo systemctl disable ssh

常用操作:

设置开机自动启动ssh服务,命令:

1
sudo systemctl enable ssh

单次开启ssh,命令:

1
sudo systemctl start ssh

单次关闭ssh,命令:

1
sudo systemctl stop ssh

5.11 安装防火墙

推荐使用firewalld防火墙的理由是,Cockpit Web管理面板搭配firewalld防火墙可以提供一个可视化的防火墙管理界面,对新手友好。

Ubuntu 22.04 已UFW默认安装。最好只使用一个防火墙。所以禁用 UFW:

1
sudo ufw disable

然后更新系统包:

1
sudo apt update

下一步是从apt存储库安装firewalld

1
sudo apt -y install firewalld

检查运行状态

1
sudo systemctl status firewalld

在终端输出的内容中将看到:

1
Active: active (running)

安装完成之后默认启动运行,需关闭之后进入cockpit配置规则。

关闭firewalld

1
sudo systemctl stop firewalld

登陆cockpit-网络-防火墙-打开防火墙-添加新区-信任级别- public,允许的地址-整个子网

Firewalld高阶使用

GeoIP和Firewalld组合使用的常见案例主要涉及到基于地理位置的防火墙规则。

5.12 安装自动封锁软件

第 1 步 — 安装 Fail2ban

Fail2ban 在 Ubuntu 的软件存储库中可用。首先以非根用户身份运行以下命令来更新您的软件包列表并安装 Fail2ban:

1
2
sudo apt update
sudo apt install fail2ban -y

Fail2ban 安装后会自动设置后台服务。但是,默认情况下它是禁用的,因为它的某些默认设置可能会导致不良影响。您可以使用以下systemctl命令验证这一点:

1
sudo systemctl status fail2ban.service

终端中输出的内容:

1
2
3
4
○ fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:fail2ban(1)

第 2 步 – 配置 Fail2ban

Fail2Ban的配置文件:/etc/fail2ban/

Fail2Ban的安装目录:/usr/share/fail2ban/

Fail2Ban日志文件:/var/log/fail2ban.log

达到阈值之后的执行Fail2Ban的动作的配置文件:/etc/fail2ban/action.d/

包含Fail2Ban所有的过滤规则:/etc/fail2ban/filter.d/

fail2ban 服务将其配置文件保存在该/etc/fail2ban目录中。在本教程中,您将创建jail.local. 你可以通过复制来做到这一点jail.conf:

1
sudo cp /etc/fail2ban/jail.{conf,local}

现在您可以开始进行配置更改。vim在或您喜欢的文本编辑器中打开文件:

1
sudo vim /etc/fail2ban/jail.local

当您滚动文件时,本教程将查看您可能想要更新的一些选项。位于文件顶部附近部分下的设置[DEFAULT]将应用于 Fail2ban 支持的所有服务。在文件的其他地方,有用于[sshd]和用于其他服务的标头,其中包含将在默认设置之上应用的特定于服务的设置。

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
45
#全局设置
[DEFAULT]

#此参数标识应被禁止系统忽略的 IP 地址。默认情况下,这只是设置为忽略来自机器本身的流量,这样您就不会填写自己的日志或将自己锁定。
ignoreip = 127.0.0.1/8 ::1

#此参数设置禁令的长度,以秒为单位。默认值为-1,表示将永久禁止IP地址,设置值为1h,则禁止1小时。
bantime = -1

#此参数设置 Fail2ban 在查找重复失败的身份验证尝试时将关注的窗口。默认设置为 1d ,这意味着软件将统计最近 1 天内的失败尝试次数。
findtime = 1d

#这设置了在禁止之前在窗口内允许的失败尝试次数。
maxretry = 3

#此条目指定 Fail2ban 将如何监视日志文件。设置auto意味着 fail2ban 将尝试pyinotify, 然后gamin, 然后基于可用的轮询算法。inotify是一个内置的 Linux 内核功能,用于跟踪文件何时被访问,并且是Fail2ban 使用pyinotify的 Python 接口。
backend = auto

#这定义了是否使用反向 DNS 来帮助实施禁令。将此设置为“否”将禁止 IP 本身而不是其域主机名。该warn设置将尝试查找主机名并以这种方式禁止,但会记录活动以供审查。
usedns = warn

#如果将您的操作配置为邮件警报,这是接收通知邮件的地址。
destemail = root@localhost

#发送者邮件地址
sender = root@<fq-hostname>

#这是用于发送通知电子邮件的邮件传输代理。
mta = mail

#“action_”之后的“mw”告诉 Fail2ban 向您发送电子邮件。“mwl”也附加了日志。
action = %(action_mw)s

#这是实施 IP 禁令时将丢弃的流量类型。这也是发送到新 iptables 链的流量类型。
protocol = tcp

##这里banaction必须用firewallcmd-ipset,这是fiewalll支持的关键,如果是用Iptables请不要这样填写
banaction = firewallcmd-ipset

[SSH]

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

不要忘记在每次配置更改后重新启动 Fail2ban 服务。重启命令:

1
sudo systemctl restart fail2ban

常用命令:

1
2
3
4
5
6
7
8
9
10
11
12
#启动
systemctl start fail2ban
#停止
systemctl stop fail2ban
#开机启动
systemctl enable fail2ban
#查看被ban IP,其中sshd为名称
fail2ban-client status sshd
#删除被ban IP
fail2ban-client set sshd unbanip 192.168.111.111
#查看日志
tail /var/log/fail2ban.log

配置中文邮件格式(可选项,默认为英文):

1
sudo cp /etc/fail2ban/action.d/mail-whois.{conf,local}

然后编辑mail-whois.local文件,

1
sudo vim /etc/fail2ban/action.d/mail-whois.local

替换成下面的内容,(只需要替换绿色字体部分内容,灰色部分为默认自带内容):

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# Fail2Ban configuration file
#
# Author: Cyril Jaquier
#
#

[INCLUDES]

before = mail-whois-common.conf

[Definition]

# bypass ban/unban for restored tickets
norestored = 1

# Option: actionstart
# Notes.: command executed on demand at the first ban (or at the start of Fail2Ban if actionstart_on_demand is set to false).
# Values: CMD
#
actionstart = printf %%b "你好!\n
监视到【<name>】服务已成功启动。\n
敬请注意!\n
Fail2Ban"|mail -s "[Fail2Ban] <name>: 在 <fq-hostname> 服务器上启动" <dest>

# Option: actionstop
# Notes.: command executed at the stop of jail (or at the end of Fail2Ban)
# Values: CMD
#
actionstop = printf %%b "你好!\n
监视到【<name>】服务已被停止。\n
敬请注意!\n
Fail2Ban"|mail -s "[Fail2Ban] <name>: 在 <fq-hostname> 服务器上停止" <dest>

# Option: actioncheck
# Notes.: command executed once before each actionban command
# Values: CMD
#
actioncheck =

# Option: actionban
# Notes.: command executed when banning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: See jail.conf(5) man page
# Values: CMD
#
actionban = printf %%b "警告!!!\n
攻击者IP:<ip>\n
被攻击机器名:`uname -n` \n
被攻击机器IP:`/bin/curl ifconfig.co` \n
攻击服务:<name> \n
攻击次数:<failures> 次 \n
攻击方法:暴力破解,尝试弱口令.\n
该IP:<ip>已经被Fail2Ban加入防火墙黑名单,屏蔽时间<bantime>秒.\n\n
以下是攻击者 <ip>信息 :\n
`/bin/curl https://ip.appworlds.cn?ip=<ip>`\n\n
Fail2Ban邮件提醒\n\n "|/bin/mailx -s "<fq-hostname>服务器:<name>服务疑似遭到<ip>暴力攻击。" <dest>


# Option: actionunban
# Notes.: command executed when unbanning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: See jail.conf(5) man page
# Values: CMD
#
actionunban =

[Init]

# Default name of the chain
#
name = default

# Destination/Addressee of the mail
#
dest = root

说明
通过curl ifconfig.co获取服务器的外网IP地址,方便知道哪台机报出来的告警。
通过curl https://ip.useragentinfo.com/json?ip = 查询获取攻击者的IP信息。
不要忘记在每次配置更改后重新启动 Fail2ban 服务。重启命令:

1
sudo systemctl restart fail2ban

配置完成后效果:

enter description here
enter description here
enter description here

5.14 安装病毒防护软件

ClamAV 是一个开源的防病毒软件,可用于检测木马,病毒,恶意软件和其他恶意威胁。适用于 Linux、macOS 和 Windows 平台。

一、安装ClamAV:

1
2
sudo apt-get update
sudo apt-get install clamav

二、更新病毒数据库

在安装完成后,需要运行以下命令来更新ClamAV的病毒数据库:

1、关闭ClamAV病毒数据库更新服务

1
sudo systemctl stop clamav-freshclam

2、更新病毒数据库:

1
sudo freshclam

3、启动ClamAV病毒数据库更新服务:

1
sudo systemctl start clamav-freshclam

三、使用ClamAV

1、扫描整个系统:在终端窗口中输入以下命令,扫描整个系统:

1
sudo clamscan -r /

2、扫描指定目录:在终端窗口中输入以下命令,扫描指定目录:

1
sudo clamscan -r /path/to/directory

3、删除被感染的文件:在终端窗口中输入以下命令,删除被感染的文件:

1
sudo clamscan --remove /path/to/file

4、扫描压缩文件:在终端窗口中输入以下命令,扫描压缩文件:

1
sudo clamscan -r /path/to/archive.zip

5、执行定期扫描:在终端窗口中输入以下命令,创建一个每天执行一次的定期扫描:

1
sudo crontab -e

在打开的文件中添加以下行:

1
0 0 * * * clamscan -r / > /var/log/clamav/scan.log

这将在每天的午夜(0点)执行全系统扫描,并将扫描结果保存在/var/log/clamav/scan.log文件中。

官网:http://www.clamav.net/

六、存储管理

6.1 硬盘管理

通过Cockpit Web管理面板进行管理。

6.2 软Raid管理

通过Cockpit Web管理面板进行管理。

6.3 硬盘自动休眠

1
hdparm

参考:https://manpages.ubuntu.com/manpages/jammy/man8/hdparm.8.html

6.4 硬盘健康监测

SMART是现代硬盘驱动器中的一个系统,旨在报告可能表明即将发生故障的情况。smartmontools是一个免费的软件包,可以监控 SMART 属性并运行硬盘自检。

安装smartmontools:

1
sudo apt install smartmontools

检查驱动器的SMART功能

要确保您的驱动器支持 SMART,请键入:

1
sudo smartctl -i /dev/sda

其中 /dev/sda 是你的硬盘。这将为您提供有关驱动器的简要信息。最后两行可能如下所示:

1
2
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

启用SMART
如果您的驱动器未启用 SMART,您可以通过键入以下内容来启用它:

1
sudo smartctl -s on /dev/sda

检查硬盘整体健康状况

1
sudo smartctl -H /dev/sda

此命令应返回:

1
2
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

如果它没有返回 PASSED,您应该立即备份所有数据。您的硬盘驱动器可能出现故障。

测试驱动器

您可以在安装驱动器时运行任何类型的测试,尽管性能可能会有所下降。可以在驱动器上进行三种类型的测试:

扩展(长)

传输

要查找执行每个测试所需时间的估计值,请键入:

1
sudo smartctl -c /dev/sda

最有用的测试是扩展测试(长)。您可以通过键入以下内容来启动测试:

1
sudo smartctl -t long /dev/sda

结果

您可以通过键入以下内容来查看驱动器的测试统计信息:

1
sudo smartctl -l selftest /dev/sda

要显示 IDE 驱动器的详细 SMART 信息,请键入:

1
sudo smartctl -a /dev/sda

要显示 SATA 驱动器的详细 SMART 信息,请键入:

1
sudo smartctl -a -d ata /dev/sda

注意:这也适用于通过 SCSI 堆栈运行并显示为 /dev/sdX 的新内核中的 IDE 驱动器

部分字段的含义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME
1 Raw_Read_Error_Rate 读取错误率
3 Spin_Up_Time 起转时间
4 Start_Stop_Count 启动停止次数
5 Reallocated_Sector_Ct 重新分配扇区计数
7 Seek_Error_Rate 寻道错误率
9 Power_On_Hours 通电时间
10 Spin_Retry_Count 起转重试次数
11 Calibration_Retry_Count 重新校准重试次数
12 Power_Cycle_Count 启动<->关闭循环次数
192 Power-Off_Retract_Count 断电磁头缩回计数
193 Load_Cycle_Count 磁头加载/卸载循环计数
194 Temperature_Celsius 温度
196 Reallocated_Event_Count 在分配扇区物理位置事件计数(与坏道无关)
197 Current_Pending_Sector 当前等待中扇区数(状态存疑/不稳定-等待后续判断)
198 Offline_Uncorrectable 无法修正的扇区总数
199 UDMA_CRC_Error_Count UltraDMA CRC错误计数
200 Multi_Zone_Error_Rate 写入错误率

使用示例:

1
2
3
4
5
6
# 监测硬盘1
/dev/sda -o on -S on -H -l error -l selftest -f -s (O/../../1/2|S/../../../4|L/../../2/5) -I 194 -W 4,45,55 -R 5 -m yourname@qq.com -M exec /usr/share/smartmontools/smartd-runner
# 监测硬盘2
/dev/sdb -o on -S on -H -l error -l selftest -f -s (O/../../1/2|S/../../../4|L/../../2/5) -I 194 -W 4,45,55 -R 5 -m yourname@qq.com -M exec /usr/share/smartmontools/smartd-runner
# 测试邮件通知
/dev/sda -o on -S on -H -l error -l selftest -f -s (O/../../1/2|S/../../../4|L/../../2/5) -I 194 -W 4,45,55 -R 5 -m yourname@qq.com -M test

上述例子来源于/etc/smartd.conf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 第一个 ATA/SATASCSI/SAS 磁盘。 监控所有属性,启用
# 自动在线数据收集,自动属性自动保存,并
# 每天凌晨 2-3 点开始短的自检,长的自检
# 周六凌晨3-4点之间。
#/dev/sda -a -o on -S on -s (S/./././02|L/././6/03)

# 监控SMART状态、ATA错误日志、自检日志,并跟踪
# 所有属性的变化,除了属性 194
#/dev/sdb -H -l error -l selftest -t -I 194

# 监控所有属性,除了正常化的温度(通常是194)。
# 但跟踪温度变化 >= 4 摄氏度,报告温度
# >= 45 摄氏度和 Reallocated_Sector_Ct (5) 原始值的变化。
# 在SMART故障或温度>=55摄氏度时发送邮件。
#/dev/sdc -a -I 194 -W 4,45,55 -R 5 -m admin@example.com

Scrutiny 是一种硬盘驱动器运行状况仪表板和监控解决方案,将制造商提供的 SMART 指标与实际故障率相结合。用于 smartd SMART 监控的 WebUI

项目地址:https://github.com/AnalogJ/scrutiny

安装教程:https://www.tauceti.blog/posts/easy-hard-disk-health-monitoring-with-scrutiny-and-smart/

安装教程:https://blog.csdn.net/wbsu2004/article/details/124095004

6.5 安装联合文件系统

mergerfs是一个联合文件系统,旨在简化跨众多商品存储设备的文件存储和管理。它类似于mhddfs、unionfs和aufs。

项目地址:https://github.com/trapexit/mergerfs

参考:https://blog.csdn.net/linkyy5/article/details/126080546

6.5 安装SnapRaid

官网:http://www.snapraid.it/

参考:https://wiki.archlinux.org/title/SnapRAID

七、Docker服务

7.1 安装Docker

在新主机上首次安装 Docker Engine 之前,您需要设置 Docker 存储库。之后,您可以从存储库安装和更新 Docker。(推荐通过存储库安装,方便后期版本升级。)

A、设置存储库

1.更新apt包索引并安装包以允许apt通过 HTTPS 使用存储库:

1
2
3
4
5
6
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release

2.添加 Docker 的官方 GPG 密钥:

1
2
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

3.使用以下命令设置存储库:

1
2
3
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

B、安装 Docker 引擎

1.更新apt包索引:

1
sudo apt-get update

2.安装 Docker Engine、containerd 和 Docker Compose。

1
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

3.hello-world通过运行镜像验证 Docker Engine 安装是否成功 :

1
sudo docker run hello-world

查看Docker版本命令:

1
sudo docker version

查看Docker Compose版本命令:

1
sudo docker compose version

(来源:https://docs.docker.com/engine/install/ubuntu/)

C、配置国内镜像源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://0b27f0a81a00f3560fbdc00ddd2f99e0.mirror.swr.myhuaweicloud.com",
"https://ypzju6vq.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
EOF
systemctl daemon-reload
systemctl restart docker

7.2 容器管理

Portainer是一个可视化的容器镜像的图形管理工具,利用Portainer可以轻松构建,管理和维护Docker环境。 而且完全免费,基于容器化的安装方式,方便高效部署。

1
2
3
#请将路径/srv/volume_1/data/docker/portainer替换为您的,此路径存储Portainer配置文件。

sudo docker run -d -p 8000:8000 -p 9443:9443 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /srv/volume_1/data/docker/portainer:/data portainer/portainer-ce:latest

安装完成后,可以通过打开 Web 浏览器并转到Portainer管理界面:

http://localhost:9000或https://localhost:9443

(来源:https://docs.portainer.io/start/install/server/docker/linux)

7.3 反向代理

Nginx Proxy Manager 是用于管理 Nginx 代理主机的 Docker 容器,具有简单、强大的界面。它使您可以轻松地转发到您在家里或其他地方运行的网站,包括免费的 SSL,而无需对 Nginx 或 Letsencrypt 了解太多。

官网:https://nginxproxymanager.com

7.4 数据库

7.5 文件存储

7.6 影音服务

7.7 下载服务

7.8 照片管理

7.9 Blog管理

八、UPS不断电系统

apcupsd 包提供了一个守护进程,它将监视您的APC UPS,并在不再向 UPS 供电时关闭系统。

教程参考:https://help.ubuntu.com/community/apcupsd

enter description here
enter description here

enter description here

基于Debian搭建HomeNAS

Debian,是一个由自由和开源软件组成的Linux发行版,由社区支持的Debian项目开发,该项目由Ian Murdock建立。 1993年8月16日。Debian 的第一个版本(0.01)发布于1993年9月15日,其第一个稳定版本(1.1)于1996年6月17日发布。[8] Debian 稳定分支是个人电脑和服务器最受欢迎的版本。Debian 也是许多其他发行版的基础,最著名的是 Ubuntu。

Debian是基于Linux内核的最古老的操作系统之一。该项目由一个志愿者团队在互联网上协调,由 Debian 项目负责人和三个基础文档指导:Debian 社会契约、Debian 宪法和 Debian 自由软件指南。新的发行版会不断更新,下一个候选发行版会在基于时间的冻结后发布。

自成立以来,Debian 一直按照 GNU 工程的原则进行公开开发和自由分发。正因为如此,自由软件基金会从1994年11月到1995年11月赞助了这个项目。赞助结束后,Debian 项目成立了非营利组织 Software in the Public Interest,以继续在财政上支持开发。

Debian 发行版的代号是根据《玩具总动员》电影中的人物名字而来。Debian的不稳定主干是以Sid命名的,这个角色经常破坏他的玩具。

一、系统安装

1.1 系统镜像下载

官网:https://www.debian.org/

1.2 安装教程

官方图文安装教程:

https://www.debian.org/doc/manuals/debian-handbook/sect.installation-steps.zh-cn.html

二、系统初始化

2.1 更换国内镜像源

切换至root用户:

1
su –

输入root用户密码(密码不显示),然后按下回车键确定,系统输出显示如下:

1
root@debian:~#

Debian 的软件源配置文件是/etc/apt/sources.list。将系统自带的该文件做个备份,将该文件替换为下面内容,即可使用 TUNA 的软件源镜像。
首先备份/etc/apt/sources.list,命令:

1
cp /etc/apt/sources.list /etc/apt/sources.list.bak

修改sources.list文件,复制下面命令到终端运行,此镜像源适用于Debian 12系统:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cat <<EOF > /etc/apt/sources.list
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware

# 以下安全更新软件源包含了官方源与镜像站配置,如有需要可自行修改注释切换
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
EOF

2.2 更新系统

执行命令:

1
apt update && apt upgrade -y

Debian Buster 以上版本默认支持 HTTPS 源。如果遇到无法拉取 HTTPS 源的情况,请先使用 HTTP 源并安装:

1
apt-get install apt-transport-https ca-certificates -y

2.3 安装初始必备软件

输入下面命令安装基础必备软件,命令:

1
apt install sudo curl git vim net-tools -y

2.4 添加用户至sudo组

添加安装系统时创建的第一个至sudo组,以方便我们后续管理系统,执行命令:

1
usermod -aG sudo user_name

请将user_name替换为要添加的用户名。

三、安装Cockpit Web管理面板

Cockpit 使 Linux 易于使用。您不必在命令行中记住命令。

在 Web 浏览器中查看服务器并使用鼠标执行系统任务。启动容器、管理存储、配置网络和检查日志都很容易。基本上,您可以将Cockpit视为图形化的“桌面界面”,但适用于单个服务器。

3.1 安装Cockpit

Cockpit 从版本 10 (Buster) 开始在 Debian 中可用。

安装或更新软件包:

1
2
. /etc/os-release
apt install -t ${VERSION_CODENAME}-backports cockpit cockpit-pcp -y

3.2 安装Cockpit附属组件

官方组件

1、虚拟机,在浏览器中创建、运行和管理虚拟机。(按需安装,非必要插件)

1
2
. /etc/os-release
apt install -t ${VERSION_CODENAME}-backports cockpit-machines -y

2、Podman 容器,在浏览器中下载、使用和管理容器。(按需安装,非必要插件)

1
2
. /etc/os-release
apt install -t ${VERSION_CODENAME}-backports cockpit-podman -y

3、cockpit-pcp,Cockpit面板的历史数据插件。

1
2
. /etc/os-release
sudo apt install -t ${VERSION_CODENAME}-backports cockpit-pcp -y

第三方组件

配置45Drives Repo安装脚本,安装脚本将自动检测您的发行版并将适当的文件添加到您的系统。该脚本还将保存任何与 45Drives 相关的旧存储库(如果存在)。

下面的命令将下载并运行脚本,而不会在您的系统上留下任何东西!

1
2
curl -sSL https://repo.45drives.com/setup | sudo bash
sudo apt update

Navigator、File Sharing、Identities三合一安装命令:

1
sudo apt install cockpit-navigator cockpit-file-sharing cockpit-identities -y

1、Navigator文件浏览器,Cockpit 的特色文件浏览器。(推荐安装)

安装软件包:

1
sudo apt install cockpit-navigator -y

2、File Sharing,一个 Cockpit 插件,可轻松管理 Samba 和 NFS 文件共享。(推荐安装)

安装软件包:

1
sudo apt install cockpit-file-sharing -y

3、Cockpit Identities,用户和组管理插件。(推荐安装)

安装软件包:

1
sudo apt install cockpit-identities -y

4、Cockpit ZFS管理器。(按需安装,非必要插件)

安装ZFS:

1
2
sudo apt update
sudo apt install -y zfs-dkms zfsutils-linux

要求:

Cockpit: 201+;NFS (Optional);Samba: 4+ (Optional);ZFS: 0.8+;

安装:

1
2
git clone https://github.com/optimans/cockpit-zfs-manager.git
sudo cp -r cockpit-zfs-manager/zfs /usr/share/cockpit

3.3 Cockpit调优
自动注销闲置的用户
在您首选的文本编辑器中,在 /etc/cockpit/ 目录中打开或创建 cockpit.conf 文件,命令:

1
sudo vim /etc/cockpit/cockpit.conf

在文件中添加以下文本,以分钟为单位,这里表示为15分钟后自动退出:

1
2
[Session]
IdleTimeout=15

保存文件,重启Cockpit Web 控制台以使更改生效,命令:

1
systemctl try-restart cockpit

在登录页面中添加标题

在您首选的文本编辑器中创建 /etc/issue.cockpit 文件(如果您还没有该文件)。添加您要显示的内容作为文件的横幅。命令:

1
sudo vim /etc/cockpit/issue.cockpit

在文件中添加需要展示的内容:

1
HomeNAS Based on Debian 12.

内容添加完成后,保存这个文件。

在您首选的文本编辑器中,在 /etc/cockpit/ 目录中打开或创建 cockpit.conf 文件。

1
sudo vim /etc/cockpit/cockpit.conf

在文件中添加以下文本:

1
2
[Session]
Banner=/etc/cockpit/issue.cockpit

保存该文件,重启Cockpit Web 控制台以使更改生效,命令:

1
sudo systemctl try-restart cockpit

Nginx反向代理Cockpit

在您首选的文本编辑器中,在 /etc/cockpit/ 目录中打开或创建 cockpit.conf 文件,命令:

1
sudo vim /etc/cockpit/cockpit.conf

在文件中添加以下文本,将下面内容中的两处’cockpit.domain.tld’替换为你的域名(如为非标端口号,需将端口号一并填写上),将192.168.1.10:9090修改为你对应的内网IP,就可以实现外网内网同时访问Cockpit管理面板:

1
2
3
4
5
[WebService]
Origins = https://cockpit.domain.tld wss://cockpit.domain.tld https://192.168.1.10:9090
ProtocolHeader = X-Forwarded-Proto
ForwardedForHeader = X-Forwarded-For
LoginTo = false

保存文件,重启Cockpit Web 控制台以使更改生效,命令:

1
sudo systemctl try-restart cockpit

Cockpit面板登陆后首页展示信息

配置文件路径:

1
sudo vim /etc/motd

原文:

1
2
3
4
5
6
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

修改后:

1
2
3
4
我们信任您已经从系统管理员那里了解了日常注意事项。 总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。

防止暴力攻击Web登陆窗口

配置此项设置需已经安装好Fail2ban,否则无效。

编辑defaults-debian.conf文件:

1
sudo vim /etc/fail2ban/jail.d/defaults-debian.conf

添加如下内容(只需要插入绿色字体部分内容,灰色部分为默认自带内容):

1
2
3
4
[sshd]
enabled = true
[pam-generic]
enabled = true

保存文件后重启Fail2ban:

1
sudo systemctl restart fail2ban

修改Web登陆端口

要更改其端口和/或地址,您应该将以下内容放入文件中:

1
/etc/systemd/system/cockpit.socket.d/listen.conf

在该路径中创建尚不存在的文件和目录。该ListenStream 选项指定所需的地址和 TCP 端口。

1
2
3
[Socket]
ListenStream=
ListenStream=443

注意:第一行的空值是故意的。systemd允许Listen在单个套接字单元中声明多个指令;插入文件中的空值会重置列表,从而禁用原始设备的默认端口 9090。
为了使更改生效,请运行以下命令:

1
2
sudo systemctl daemon-reload 
sudo systemctl restart cockpit.socket

四、系统调优

4.1 设置Cockpit接管网络配置

编辑文件网络配置文件,命令:

1
sudo vim /etc/network/interfaces

注销掉里面所有内容:

1
2
3
4
5
6
7
8
9
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# source /etc/network/interfaces.d/*
# The loopback network interface
# auto lo
# iface lo inet loopback
# The primary network interface
# allow-hotplug enp1s0
# iface enp1s0 inet dhcp

手动配置IP

Cockpit-网络-接口- enp1s0 (你网络接口名称)-IPV4-编辑-手动,输入你要设置的IP地址及默认网关。

4.2 调整系统时区/时间

Cockpit-概览-系统时间-点击时间进行校准,时区选择Asia/Shanghai,设置时间选择自动使用NTP,然后点击变更,系统会自动联网进行校准。

4.3 交换空间优化

Debian默认是当内存使用达到**40%就向交换空间写入数据,这样会大大的降低电脑运行效率,我们将它改为10%**再向交换空间写入数据

打开 /etc/sysctl.conf 文件,执行命令:

1
sudo vim /etc/sysctl.conf

在文件的末尾添加下面两行配置:

1
2
vm.swappiness=10
vm.vfs_cache_pressure=50

vm.swappiness 是用来控制内核在什么时候开始使用交换空间的参数,默认值是 60。将该值调整为 10 表示让内存使用率达到 90% 时才开始使用交换空间。

vm.vfs_cache_pressure 是用来控制内核清理缓存的频率的参数,默认值是 100。将该值调整为 50 表示内核会更倾向于清理文件系统缓存以回收内存。
保存修改并退出编辑器,执行命令:

1
sudo sysctl -p

以重新加载配置。

注意:修改内核参数可能会影响系统性能和稳定性,请根据自身需要调整,谨慎操作。

4.4 安装Tuned系统调优工具

Tuned(又称为tuned-adm)是一个系统调优工具,旨在帮助优化系统的性能和功耗。它允许管理员根据系统的需求选择不同的预定义配置文件或自定义配置文件,以提供最佳的性能和功耗平衡。

安装Tuned软件包

1
sudo apt update && sudo apt install tuned

以下是Tuned的一些常用命令和其功能:

1
2
3
4
5
6
7
8
9
sudo systemctl start tuned:启动Tuned服务。
sudo systemctl stop tuned:停止Tuned服务。
sudo systemctl restart tuned:重启Tuned服务。
sudo systemctl status tuned:查看Tuned服务的运行状态。
sudo systemctl stop tuned:停止Tuned服务。
sudo systemctl disable tuned:禁止Tuned服务开机启动。
tuned-adm list:列出所有可用的Tuned配置文件。
tuned-adm active:查看当前活动的Tuned配置文件。
tuned-adm recommend:根据系统的硬件配置和工作负载推荐一个最佳的Tuned配置文件。

在Cockpit Web管理面板上配置Tuned

选择你需要的模式激活使用

常用TuneD 配置集

1、throughput-performance

针对高吞吐量优化的服务器配置文件。它禁用节能机制并启用 sysctl 设置,以提高磁盘和网络 IO 的吞吐量性能。CPU 调控器设置为 performance。它将 energy_performance_preference 和 scaling_governor 属性设置为 performance 配置集。

2、accelerator-performance

accelerator-performance 配置集包含与 throughput-performance 配置集相同的调整。另外,它会将 CPU 锁定为低 C 状态,以便使延迟小于 100us。这提高了某些加速器的性能,如 GPU。

3、network-throughput

用于吞吐量网络调优的配置集。它基于 throughput-performance 配置集。此外,它还增加了内核网络缓冲区。它继承 latency-performance 或 throughput-performance 配置集,并将energy_performance_preference 和 scaling_governor 属性改为 performance 配置集。

4、Balanced

默认的节能配置文件。它在性能和功耗之间具有折衷。在可能的情况下尽可能使用自动扩展和自动调整。唯一缺陷是增加延迟。在当前的 TuneD 版本中,它启用了 CPU、磁盘、音频和视频插件,并激活了 conservative CPU 调控器。如果支持,radeon_powersave 选项使用 dpm-balanced 值,否则被设置为 auto。它将 energy_performance_preference 属性改为 normal 能源设置。它还将 scaling_governor 策略属性改为 conservative 或 powersave CPU 调控器。

5、powersave

用于最大节能性能的配置集。它可以对性能进行调整,从而最大程度降低实际功耗。在当前的 TuneD 发行版本中,它为 SATA 主机适配器启用 USB 自动挂起、WiFi 节能和 Aggresive Link Power Management (ALPM) 节能。它还为使用低折率的系统调度多核功耗,并激活 ondemand 监管器。它启用了 AC97 音频节能,或根据您的系统,HDA-Intel 节能时间为 10 秒。如果您的系统包含启用了 KMS 支持的 Radeon 图形卡,配置集会将其配置为自动节能。在 ASUS Eee PC 上,启用了动态超级混合引擎。它将 energy_performance_preference 属性改为 powersave 或 power energy 设置。它还会将 scaling_governor 策略属性更改为 ondemand 或 powersave CPU 调控器。

4.5 新用户默认加入user组

编辑/etc/adduser.conf文件,

找到 USERGROUPS 修改变量为 ‘no’(USERGROUPS=no), 这样当创建用户时就不会伴随产生一个新组了.设置 USERS_GID 为所有用户都属于的组的GID,建议设置为USERS_GID=100,即user组。

这样修改好之后,新建用户将不再生成同名用户组,且用户默认加入user组。

4.6 修改homes目录默认路径

编辑/etc/adduser.conf文件,

找到DHOME=/home参数,修改变量为自定义路径即可,例如:

1
DHOME=/srv/volume_1/data/home

4.7 修改用户home目录默认权限

编辑/etc/adduser.conf文件,

找到DIR_MODE=0755参数,修改变量为’0700’(DIR_MODE=0700),0700表示只有该用户拥有文件所有权,其他用户无权访问。

4.8 创建新用户

对于需要创建新的用户,推荐通过adduser命令去增加,只有通过这个命令去增加的用户,前面4.3~4.6之间的修改项方能生效。

创建新用户命令,命令中的”test”为用户名,自行替换为自己需要创建的用户名:

1
sudo adduser test

系统将输出如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
正在添加用户"test"...
正在添加新用户"test" (1001) 到组"users"...
创建主目录"/srv/home/test"...
正在从"/etc/skel"复制文件...
新的 密码:
重新输入新的 密码:
passwd:已成功更新密码
正在改变 test 的用户信息
请输入新值,或直接敲回车键以使用默认值
全名 []: test
房间号码 []:
工作电话 []:
家庭电话 []:
其它 []:
这些信息是否正确? [Y/n] y

创建用户过程中,需要填写新创建用户的密码,建议全名项输入与用户名相同的值,其余项可以留空,或者按需填写。

adduser高级语法可以参考此链接:https://www.runoob.com/linux/linux-comm-adduser.html

4.9 创建容器专属账户

考虑到将要搭建的容器服务众多,甚至一部分服务还可能对 Internet 开放,为了安全,建议创建一个专用的低权限用户来运行各项容器。

1
sudo adduser application

使用命令行新建名为 application 的用户(名称可以自定义):

1
id application

终端输出内容:

1
uid=1001(application) gid=1001(application) 组=1001(application)

这里可以看到都是:1001(application),记住这个值,作为后续容器参数使用。

4.10 配置邮件发送服务

安装Exim4,命令:

1
sudo apt install exim4 -y

配置Exim4服务,命令:

1
sudo dpkg-reconfigure exim4-config

终端输出配置内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Please select the mail server configuration type that best meets your needs.

Systems with dynamic IP addresses, including dialup systems, should generally be
configured to send outgoing mail to another machine, called a 'smarthost' for
delivery because many receiving systems on the Internet block incoming mail from
dynamic IP addresses as spam protection.

A system with a dynamic IP address can receive its own mail, or local delivery
can be disabled entirely (except mail for root and postmaster).

1. internet site; mail is sent and received directly using SMTP
2. mail sent by smarthost; received via SMTP or fetchmail
3. mail sent by smarthost; no local mail
4. local delivery only; not on a network
5. no configuration at this time
General type of mail configuration:

接下来进行逐步配置:

1、邮件系统设置的常见类型:选择第三项,用smarthost 发信;无本地信件。

1
General type of mail configuration: 3

enter description here
2、系统邮件名称:填写发邮件的邮件域名,如你的发件邮件地址是mymail@qq.com,则这里填写qq.com。

1
System mail name:qq.com

enter description here
3、要监听入站 SMTP 连接的 IP 地址:填127.0.0.1 ; ::1,这里表示只监听本地IPV4/IPV6端口,也就是只有本机能发信,外部不能访问。

1
IP-addresses to listen on for incoming SMTP connections: 127.0.0.1 ; ::1

enter description here

4、其它可接收邮件的目的地址:留空

1
Other destinations for which mail is accepted:

enter description here
5、本地用户的可见域名:这里和第2步一样,填写你的发件邮箱域名,如qq.com。

1
Visible domain name for local users: qq.com

enter description here
6、发邮件使用的smarthost 的IP 地址或主机名:填写外部SMTP地址。由于qq.com使用的邮件系统是qq,所以这里填写qq的smtp地址smtp.qq.com:587。

1
IP address or host name of the outgoing smarthost: smtp.qq.com:587

enter description here

7、保持最小 DNS 查询量吗 (按需拔号,Dial-on-Demand)?否

1
Keep number of DNS-queries minimal (Dial-on-Demand)? [yes/no] n

enter description here
8、将设置文件分拆成小文件吗?否(不搭建复杂的邮件服务器,保持默认就可以,不需要拆分)

1
Split configuration into small files? [yes/no] n

enter description here
9、Root 和 postmaster 邮件的接收者: 空

1
Root and postmaster mail recipient:

enter description here

到这里就完成了,但还不能发邮件。输入命令:

1
sudo vim /etc/exim4/passwd.client

在末尾加入(注意修改用户名和密码,密码为邮箱授权码,非登录密码):

1
2
3
qq-smtp.l.qq.com:yourAccountName@qq.com:y0uRpaSsw0RD
*.qq.com:yourAccountName@qq.com:y0uRpaSsw0RD
smtp.qq.com:yourAccountName@qq.com:y0uRpaSsw0RD

格式为:发件邮箱SMTP服务器:发件邮箱账号:发件邮箱密码,因为上面我们已经设置smtp服务器地址,所以这里可以填写通配符,当然也可以填smtp地址。

输入命令:

1
sudo vim /etc/email-addresses

在末尾加入:

1
root: mymail@qq.com

格式是:系统用户名: 发件邮箱地址。

防火墙记得开放587端口,然后重启exim4,输入命令:

1
/etc/init.d/exim4 restart

发送邮件测试,首先切换到root用户,输入命令:

1
su –

输入发送邮件测试命令(user@example.com改为你要接收邮件的邮箱地址):

1
sudo echo "test" | mail -s "test" user@example.com

如果你的邮箱收到邮件,就说明安装成功了。

4.11 添加Github Hosts

打开系统hosts文件,命令:

1
sudo vim /etc/hosts

粘贴下面内容进去之后保存退出即可。(此Hosts IP具有时效性,请保持定期更新)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# GitHub Host Start
140.82.113.3 central.github.com
140.82.113.3 assets-cdn.github.com
151.101.1.6 github.map.fastly.net
151.101.1.6 github.global.ssl.fastly.net
140.82.113.3 gist.github.com
185.199.108.153 github.io
140.82.113.3 github.com
140.82.113.3 api.github.com
140.82.113.3 codeload.github.com
72.21.206.80 github-cloud.s3.amazonaws.com
72.21.206.80 github-com.s3.amazonaws.com
72.21.206.80 github-production-release-asset-2e65be.s3.amazonaws.com
72.21.206.80 github-production-user-asset-6210df.s3.amazonaws.com
72.21.206.80 github-production-repository-file-5c1aeb.s3.amazonaws.com
185.199.108.153 githubstatus.com
140.82.113.18 github.community
140.82.113.3 raw.github.com
# Update at: 2022-11-19 18:13:32
# GitHub Host End

4.12 添加TMDB Hosts

打开系统hosts文件,命令:

1
sudo vim /etc/hosts

粘贴下面内容进去之后保存退出即可。(此Hosts IP具有时效性,请保持定期更新)

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
# TMDB Hosts Start
108.159.227.27 themoviedb.org
108.159.227.37 themoviedb.org
108.159.227.40 themoviedb.org
108.159.227.111 themoviedb.org
99.86.229.15 tmdb.org
99.86.229.92 tmdb.org
99.86.229.116 tmdb.org
99.86.229.123 tmdb.org
18.160.41.44 www.themoviedb.org
18.160.41.75 www.themoviedb.org
18.160.41.115 www.themoviedb.org
18.160.41.129 www.themoviedb.org
52.85.247.30 api.themoviedb.org
52.85.247.33 api.themoviedb.org
52.85.247.69 api.themoviedb.org
52.85.247.81 api.themoviedb.org
18.160.41.31 api.tmdb.org
18.160.41.40 api.tmdb.org
18.160.41.52 api.tmdb.org
18.160.41.88 api.tmdb.org
185.93.1.250 image.tmdb.org
158.69.0.103 assets.fanart.tv
192.99.151.161 assets.fanart.tv
# Update at 20240406
# TMDB Hosts End

获取最新IP方法:通过https://www.ipaddress.com或者https://dnschecker.org/country/cn首页,输入api.themoviedb.org和api.tmdb.org获取真实IP地址

4.13 WireGuard家庭组网

WireGuard®是一个极其简单而又快速的现代VPN,采用了最先进的加密技术。它的目标是比IPsec更快、更简单、更精简、更有用,同时避免了大量的头痛问题。它打算比OpenVPN的性能要好得多。WireGuard被设计成一个通用的VPN,可以在嵌入式接口和超级计算机上运行,适合于许多不同的情况。它最初是为Linux内核发布的,现在是跨平台的(Windows、macOS、BSD、iOS、Android),可广泛部署。它目前正在大力发展,但已经被认为是业内最安全、最容易使用和最简单的VPN解决方案。

官网:https://www.wireguard.com/

docker版项目地址:https://hub.docker.com/r/weejewel/wg-easy

各平台客户端下载地址:https://www.wireguard.com/install/

一、WireGuard部署

这里采用Docker部署WireGuard的原因是因为,是因为Docker版提供了WebUI界面,可通过图形界面即可完成WireGuard的相关连接配置,使用起来方便快捷,对新手友好。

Docker CLI部署命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
docker run -d \
--name=wg-easy \
-e WG_HOST=123.123.123.123 (服务器公网IP或域名地址,无需端口) \
-e PASSWORD=passwd123 (Web管理面板密码) \
-e WG_DEFAULT_ADDRESS=10.8.0.x (默认IP地址)\
-e WG_DEFAULT_DNS=223.5.5.5 (默认DNS)\
-e WG_ALLOWED_IPS=10.8.0.0/24 (允许连接的IP段)\
-e WG_PERSISTENT_KEEPALIVE=25 (重连间隔)\
-v ~/.wg-easy:/etc/wireguard (配置文件保存路径)\
-p 51820:51820/udp \
-p 51821:51821/tcp \
--cap-add=NET_ADMIN \
--cap-add=SYS_MODULE \
--sysctl="net.ipv4.conf.all.src_valid_mark=1" \
--sysctl="net.ipv4.ip_forward=1" \
--restart unless-stopped \
weejewel/wg-easy

容器部署完成后,即可通过http://localhost:51821访问

二、路由器转发UDP端口

因为我是在家里的用的公网IP宽带做服务端,所以需要在路由器上转发UDP端口,按照上面的配置信息,设置的UDP端口是:51820,所以需要转发这个端口,51821是webUI访问端口,可以不转发。下图是华硕路由器设置端口转发示意图:

三、创建设备连接

1、点击New Client创建新的连接客户端。

2、在弹出的New Client框中,Name部分内容可以随意填写,一般情况下,建议以使用的设备名称来命令,以方便后期设备多了之后,便于快速区分。比如设置为:xiaomi、oneplus、dellPC、hpPC等等。

3、获取连接的配置文件或配置信息

4、PC端连接,打开安装好的WireGuard客户端,点击从文件导入隧道,选择刚刚下载的dellPC.conf文件,点击打开即可。

打开之后点击:连接,即可和WireGuard服务端连接上。

5、Debian系统上连接,

安装WireGuard,可以通过以下命令完成:

1
2
sudo apt update
sudo apt install -y wireguard resolvconf

在客户端上创建配置文件 在客户端上,您需要创建一个配置文件,其中包含服务器的公共IP地址和端口,以及客户端的公钥和私钥。您可以使用以下命令创建配置文件:

1
sudo vim /etc/wireguard/wg0.conf

在编辑器中,输入刚才下载ubuntu.conf文件里的内容(.conf文件可通过Windows系统的记事本打开):

1
2
3
4
5
6
7
8
9
10
11
12
13

[Interface]
PrivateKey = AMgQmLbE4GrjahPOvm56CEHd/hIlovG2atNW5Wotq28=
Address = 10.8.0.4/24
DNS = 223.5.5.5


[Peer]
PublicKey = O/4gWMVbNLFpwbnFQCUpJV3g3oCPSV0wjqDaaEAqnyw=
PresharedKey = LojEYv08DXKi31R7jErWDOCexdw15/VsIyt4rg6/7B8=
AllowedIPs = 10.8.0.0/24
PersistentKeepalive = 25
Endpoint = baidu.com:51820

Endpoint = baidu.com:51820,这里可以填写你服务器的公网IP或者域名,如果是动态公网IP,建议填写域名。

启动WireGuard客户端 在客户端上,您需要启动WireGuard客户端,这可以通过以下命令完成:

1
2
3
4
#启用 wg-quick 服务,并在系统启动时自动启动该服务。
sudo systemctl enable wg-quick@wg0
#启动 wg-quick 服务,使 WireGuard VPN 服务开始运行。
sudo systemctl start wg-quick@wg0

现在,您的Ubuntu系统已经成功连接到您在云服务器上部署的WireGuard服务,您可以通过以下命令来检查连接状态:

1
sudo wg

如果一切正常,您将看到类似以下输出:

1
2
3
4
5
6
7
8
9
10
11
12
13

interface: wg0
public key: rT90PdlG+Et5thj/uKrXlIpuZa0edWpYt2kEaUdVkE0=
private key: (hidden)
listening port: 42262

peer: O/4gWMVbNLFpwbnFQCUpJV3g3oCPSV0wjqDaaEAqnyw=
preshared key: (hidden)
endpoint: 192.137.59.59:51820
allowed ips: 10.8.0.0/24
latest handshake: 1 hour, 13 minutes, 44 seconds ago
transfer: 53.51 KiB received, 428.10 KiB sent
persistent keepalive: every 25 seconds

如果您想禁用WireGuard VPN开机自启动,可以使用以下命令:

1
sudo systemctl disable wg-quick@wg0

请注意,上面命令不会停止当前正在运行的WireGuard VPN服务,如果您当前正在运行WireGuard VPN服务,您可以使用以下命令来停止它:

1
sudo wg-quick down wg0

这将关闭 wg0 接口并停止WireGuard VPN服务。

如果您已经使用 sudo systemctl start wg-quick@wg0 命令启动了 WireGuard VPN 服务,则可以使用以下命令停止服务:

1
sudo systemctl stop wg-quick@wg0

这将停止 wg-quick@wg0 服务并关闭 wg0 接口。

6、手机端连接,手机端连接很简单,安装好WireGuard手机端app之后,打开app点击右下角的+号按钮——选扫描二维码,扫描WebUI端提供的二维码即可连接成功(扫描成功后会弹出框提示输入名称,这个名称可以随意填写,比如设置为:WireGuard)。

当设备连接成功后,WebUI界面可查看其状态,头像右下角显示有红点,表示连接正常。

五、安全防护

安全的概念:

1、收紧安全措施有可能达到使系统无法使用的程度。安全性与便利性需要得到平衡。诀窍在于建立一个安全且有用的系统。

2、最大的威胁是(并且一直都会是)用户。

3、最小权限原则:系统的每一部分应该只能访问到它确实需要的东西,除此之外的则不可以。

4、纵深防御:多个独立的层次能带来更好的安全性。当一层防护被攻破时,另一层应该能够阻止攻击。

5、保持一点点的偏执和多疑。如果有件事看起来太好了,不像是真的,那可能确实如此。

6、永远无法令系统 100% 安全,除非把机器从网络上断开,关掉电源,锁进保险柜,用混凝土封住并不再使用它。

7、为失败做好准备。预先为安全措施被攻破的情况制定可供执行的计划。

本章节主要内容参考自Debian安全指南和Arch Linux安全。

Debian安全指南:

https://www.debian.org/doc/manuals/securing-debian-manual/ch04s11.zh-cn.html

Arch Linux安全:https://wiki.archlinuxcn.org/wiki/%E5%AE%89%E5%85%A8

执行下列操作前,先给系统用户做个检查。检查是否存在空口令和root权限的账号,确认是否存在异常账号,确认UID为零的账号只有root账号。

操作步骤:

查看root权限账号,使用命令:

1
awk -F: '($3==0)' /etc/passwd //查看UID为零的账号。

查看空口令账号,使用命令:

1
awk -F: '($2=="")' /etc/shadow //查看空口令账号。

加固空口令账号,使用命令:

1
passwd <用户名>                                           //为空口令账号设定密码。

5.1 配置高强度密码策略

为了确保系统的安全性,建议设置的口令复杂度策略为:口令最小长度不小于8,至少包含大写字母、小写字母、数字和特殊字符中的三种。

安装 PAM 的pwquality模块,cracklib模块在Debian 12中被pwquality替代,pwquality能提供额外的密码检查能力。

1
sudo apt install libpam-pwquality

修改文件“/etc/pam.d/common-password”。 一旦修改,策略会马上生效。

1
sudo vim /etc/pam.d/common-password

找到文件中的以下内容:

1
password requisite pam_pwquality.so retry=3 minlen=8 difok=3

添加参数“minlen”、“dcredit”、“ucredit”、“lcredit”、“ocredit”。如果文件中已有这些参数,直接修改参数值即可,参数说明如表1所示。

1
password requisite pam_pwquality.so retry=3 minlen=9 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 difok=3
参数 说明 示例
minlen “口令最小长度配置项。PAM默认使用了“credits”,因此最小口令长度需要加1,若需要设置最小口令长度为8,则minlen的值应该设置为9。” minlen=9
dcredit “口令数字要求的配置项。值为负数N时表示至少有N个数字,值为正数时对数字个数没有限制。” dcredit=-1
ucredit “口令大写字母要求的配置项。值为负数N时表示至少有N个大写字母,值为正数时对大写字母个数没有限制。” ucredit=-1
lcredit “口令小写字母要求的配置项。值为负数N时表示至少有N个小写字母,值为正数时对小写字母个数没有限制。” lcredit=-1
ocredit 特殊字符要求的配置项。值为负数N时表示至少有N个特殊字符,值为正数时对特殊字符个数没有限制。 ocredit=-1

5.2 用户连续登陆失败锁定

在3次登录尝试失败后账户将被锁定至少15分钟,或者由管理员将其解锁。

在/etc/pam.d/common-auth中添加如下绿色字体内容,必须按下面顺序添加,命令:

1
sudo vim /etc/pam.d/common-auth

插入内容(只需要插入绿色字体部分内容,灰色部分为默认自带内容):

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
#
# /etc/pam.d/common-auth - authentication settings common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authentication modules that define
# the central authentication scheme for use on the system
# (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the
# traditional Unix authentication mechanisms.
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules. See
# pam-auth-update(8) for details.

# here are the per-package modules (the "Primary" block)
auth required pam_faillock.so preauth audit silent deny=3 fail_interval=900 unlock_time=900 even_deny_root root_unlock_time=900
auth [success=1 default=ignore] pam_unix.so nullok
# here's the fallback if no module succeeds
# BEGIN ANSIBLE MANAGED BLOCK
auth [default=die] pam_faillock.so authfail audit deny=3 fail_interval=900 unlock_time=900 even_deny_root root_unlock_time=900
auth sufficient pam_faillock.so authsucc audit deny=3 fail_interval=900 unlock_time=900 even_deny_root root_unlock_time=900
auth requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth required pam_permit.so
# and here are more per-package modules (the "Additional" block)
auth optional pam_cap.so
# end of pam-auth-update config

参数解析:

audit //如果用户不存在,则把该用户名记录到系统日志中。

Silent //不打印信息性的消息

deny=3 //用户连续认证失败次数超过3则锁定

fail_interval=900 //间隔时间的长度,在这个时间段内连续的

unlock_time=900 //锁定后n秒后,访问将被重新启用,在没有设置faillock的情况下,不会重新启用。

even_deny_root //Root账户和普通账户一样可以被锁定。

root_unlock_time=900 //在root账户被锁定后, 允许在n秒后访问该账户。

参数解析来源/etc/security/faillock.conf文件

上述参数可以按需添加,如需全部添加,可以参考下面格式:

示例:

auth required pam_faillock.so preauth audit silent deny=3 fail_interval=900 unlock_time=900 even_deny_root root_unlock_time=900

接着编辑/etc/pam.d/common-account,命令:

1
sudo vim /etc/pam.d/common-account

插入内容(只需要插入绿色字体部分内容,灰色部分为默认自带内容):

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
#
# /etc/pam.d/common-account - authorization settings common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authorization modules that define
# the central access policy for use on the system. The default is to
# only deny service to users whose accounts are expired in /etc/shadow.
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules. See
# pam-auth-update(8) for details.
#

# here are the per-package modules (the "Primary" block)
account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so
# here's the fallback if no module succeeds
account requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
account required pam_permit.so
# and here are more per-package modules (the "Additional" block)
# end of pam-auth-update config
account required pam_faillock.so

常用操作命令:

查看所有用户的尝试失败登录次数

1
sudo faillock

主要看faillock命令,显示的valid值,v表示有效,i表示无效。

查看指定用户(test用户)

1
sudo faillock --user test

解锁指定用户账户(test用户)

1
sudo faillock --user test --reset

解锁所有用户

1
sudo faillock --reset

重启系统也能解锁所有用户。

5.3 禁止root用户密码登陆

建议是通过Cockpit Web管理面板禁止root用户密码登陆,平时保持其处于禁用状态,如有需要时可以很方便就通过此处开启,用完即随手关闭。

通过Cockpit Web管理面板-账户-root用户-选项-禁用交互式密码,打上勾表示禁止root用户使用密码登陆。

5.4 限制用户SU

限制能su到root的用户。操作步骤

使用命令:

1
sudo vim /etc/pam.d/su

修改配置文件,在配置文件中添加行。例如,只允许sudo组用户su到root,则添加

1
auth required pam_wheel.so group=sudo

添加后如下所示:

1
2
3
4
5
6
#
# The PAM configuration file for the Shadow `su' service
#
auth required pam_wheel.so group=sudo
# This allows root to su without passwords (normal operation)
auth sufficient pam_rootok.so

5.5 用户登陆邮件通知告警

通过 PAM 模块,就可以实现用户登录,root 权限获取时,通过邮件等方式进行通知。以实现,预先知道,预先警惕的目标,降低受影响的范围。以下是通过 PAM 模块实现的邮件通知用户登录的功能。

1、以管理员身份登录虚拟机,并切换成 root 用户。

2、新建脚本,命令:

1
sudo vim /etc/pam.d/login-notifiy.sh

(该脚本可以存放在任意位置,但是需要将后续的路径指定好即可),内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash

export LANG="en_US.UTF-8"

[ "$PAM_TYPE" = "open_session" ] || exit 0
{
echo "用户: $PAM_USER"
echo "远程用户: $PAM_RUSER"
echo "远程主机: $PAM_RHOST"
echo "服务: $PAM_SERVICE"
echo "终端: $PAM_TTY"
echo "日期: `date '+%Y年%m月%d日%H时%M分%S秒'`"
echo "服务器: `uname -s -n -r`"
} | mail -s "注意! 用户$PAM_USER正通过$PAM_SERVICE服务登录`hostname -s | awk '{print toupper(substr($0,1,1)) substr($0,2)}'`系统" user@yourdomain.com

脚本中的user@yourdomain.com修改为你要接收通知的邮箱地址。

3、编辑文件

1
sudo vim /etc/pam.d/common-session

4、在文件最后追加一行:

1
session optional pam_exec.so debug /bin/bash /etc/pam.d/login-notifiy.sh

5、保存并退出。

至此,每一个用户登录都会发邮件通知给收件人,内容包括用户名以及登录的 IP 地址信息。如果遇到陌生 IP,那么就要注意,该主机是否正在遭受攻击。

注意:来源教程原文上脚本名称前后不一致,会导致脚本执行出错,如是按来源教程操作,记得修改脚本名称,使其前后名称一致。

5.6 超时自动注销活动状态

设置系统登录后,连接超时时间,增强安全性。操作步骤,使用命令:

1
sudo vim /etc/profile

修改配置文件,在文件末行添加下列内容:

1
2
# 超时自动退出
TMOUT=180

即超时时间为三分钟。

5.7 记录所有用户的登录和操作日志

通过脚本代码实现记录所有用户的登录操作日志,防止出现安全事件后无据可查。

操作步骤

1
sudo vim /etc/profile

打开配置文件,在配置文件末行输入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 在 history 命令中启用时间戳
export HISTTIMEFORMAT="%F %T "
# 记录所有用户的登录和操作日志
history
USER=`whoami`
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]; then
USER_IP=`hostname`
fi
if [ ! -d /var/log/history ]; then
mkdir /var/log/history
chmod 777 /var/log/history
fi
if [ ! -d /var/log/history/${LOGNAME} ]; then
mkdir /var/log/history/${LOGNAME}
chmod 300 /var/log/history/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date +"%Y%m%d_%H:%M:%S"`
export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"
chmod 600 /var/log/history/${LOGNAME}/*history* 2>/dev/null

运行命令加载配置生效:

1
sudo bash -c "source /etc/profile"

注意:/var/log/history 是记录日志的存放位置,可以自定义。

通过上述步骤,可以在 /var/log/history 目录下以每个用户为名新建一个文件夹,每次用户退出后都会产生以用户名、登录IP、时间的日志文件,包含此用户本次的所有操作(root用户除外)。

5.8 禁止SSH服务开机自启动

为了系统的安全起见,建议SSH服务在有需要用的时候通过Cockpit Web面板开启,平常则处于关闭状态。开启路径:Cockpit-服务-ssh.service-启动

关闭ssh服务开机自动启动,命令:

1
sudo systemctl disable ssh

常用操作:

设置开机自动启动ssh服务,命令:

1
sudo systemctl enable ssh

单次开启ssh,命令:

1
sudo systemctl start ssh

单次关闭ssh,命令:

1
sudo systemctl stop ssh

5.9 安装防火墙

推荐使用firewalld防火墙的理由是,Cockpit Web管理面板搭配firewalld防火墙可以提供一个可视化的防火墙管理界面,对新手友好。

从apt存储库安装firewalld,并在安装成功之后关闭firewalld,关闭之后进入cockpit配置规则。

登陆cockpit-网络-防火墙-打开防火墙-添加新区-信任级别- public,允许的地址-整个子网

1
sudo apt update && sudo apt install firewalld -y && sudo systemctl stop firewalld

检查运行状态

1
sudo systemctl status firewalld

在终端输出的内容中将看到:

1
Active: active (running)

enter description here

Firewalld高阶使用

GeoIP和Firewalld组合使用的常见案例主要涉及到基于地理位置的防火墙规则。

5.10 安装自动封锁软件

第 1 步 — 安装 Fail2ban

Fail2ban 在 Ubuntu 的软件存储库中可用。首先以非根用户身份运行以下命令来更新您的软件包列表并安装 Fail2ban:

1
2
sudo apt update
sudo apt install fail2ban -y

Fail2ban 安装后会自动设置后台服务。但是,默认情况下它是禁用的,因为它的某些默认设置可能会导致不良影响。您可以使用以下systemctl命令验证这一点:

1
sudo systemctl status fail2ban.service

终端中输出的内容:

1
2
3
4
○ fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:fail2ban(1)

第 2 步 – 配置 Fail2ban

Fail2Ban的配置文件:/etc/fail2ban/

Fail2Ban的安装目录:/usr/share/fail2ban/

Fail2Ban日志文件:/var/log/fail2ban.log

达到阈值之后的执行Fail2Ban的动作的配置文件:/etc/fail2ban/action.d/

包含Fail2Ban所有的过滤规则:/etc/fail2ban/filter.d/

fail2ban 服务将其配置文件保存在该/etc/fail2ban目录中。在本教程中,您将创建jail.local. 你可以通过复制来做到这一点jail.conf:

1
sudo cp /etc/fail2ban/jail.{conf,local}

现在您可以开始进行配置更改。vim在或您喜欢的文本编辑器中打开文件:

1
sudo vim /etc/fail2ban/jail.local

当您滚动文件时,本教程将查看您可能想要更新的一些选项。位于文件顶部附近部分下的设置[DEFAULT]将应用于 Fail2ban 支持的所有服务。在文件的其他地方,有用于[sshd]和用于其他服务的标头,其中包含将在默认设置之上应用的特定于服务的设置。

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
45
46
47
48
#全局设置
[DEFAULT]

#此参数标识应被禁止系统忽略的 IP 地址。默认情况下,这只是设置为忽略来自机器本身的流量,这样您就不会填写自己的日志或将自己锁定。
ignoreip = 127.0.0.1/8 ::1

#此参数设置禁令的长度,以秒为单位。默认值为-1,表示将永久禁止IP地址,设置值为1h,则禁止1小时。
bantime = -1

#此参数设置 Fail2ban 在查找重复失败的身份验证尝试时将关注的窗口。默认设置为 1d ,这意味着软件将统计最近 1 天内的失败尝试次数。
findtime = 1d

#这设置了在禁止之前在窗口内允许的失败尝试次数。
maxretry = 3

#此条目指定 Fail2ban 将如何监视日志文件。设置auto意味着 fail2ban 将尝试pyinotify, 然后gamin, 然后基于可用的轮询算法。inotify是一个内置的 Linux 内核功能,用于跟踪文件何时被访问,并且是Fail2ban 使用pyinotify的 Python 接口。
#backend = auto
#Debian12使用systemd才能正常启动fail2ban
backend = systemd

#这定义了是否使用反向 DNS 来帮助实施禁令。将此设置为“否”将禁止 IP 本身而不是其域主机名。该warn设置将尝试查找主机名并以这种方式禁止,但会记录活动以供审查。
usedns = warn

#如果将您的操作配置为邮件警报,这是接收通知邮件的地址。
destemail = root@localhost

#发送者邮件地址
sender = root@<fq-hostname>

#这是用于发送通知电子邮件的邮件传输代理。
mta = mail

#“action_”之后的“mw”告诉 Fail2ban 向您发送电子邮件。“mwl”也附加了日志。
action = %(action_mw)s

#这是实施 IP 禁令时将丢弃的流量类型。这也是发送到新 iptables 链的流量类型。
protocol = tcp

##这里banaction必须用firewallcmd-ipset,这是fiewalll支持的关键,如果是用Iptables请不要这样填写
banaction = firewallcmd-ipset

[SSH]

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

不要忘记在每次配置更改后重新启动 Fail2ban 服务。重启命令:

1
sudo systemctl restart fail2ban

常用命令:

1
2
3
4
5
6
7
8
9
10
11
12
#启动
systemctl start fail2ban
#停止
systemctl stop fail2ban
#开机启动
systemctl enable fail2ban
#查看被ban IP,其中sshd为名称
fail2ban-client status sshd
#删除被ban IP
fail2ban-client set sshd unbanip 192.168.111.111
#查看日志
tail /var/log/fail2ban.log

配置中文邮件格式(可选项,默认为英文):

1
sudo cp /etc/fail2ban/action.d/mail-whois.{conf,local}

然后编辑mail-whois.local文件,

1
sudo vim /etc/fail2ban/action.d/mail-whois.local

替换成下面的内容,(只需要替换绿色字体部分内容,灰色部分为默认自带内容):

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# Fail2Ban configuration file
#
# Author: Cyril Jaquier
#
#

[INCLUDES]

before = mail-whois-common.conf

[Definition]

# bypass ban/unban for restored tickets
norestored = 1

# Option: actionstart
# Notes.: command executed on demand at the first ban (or at the start of Fail2Ban if actionstart_on_demand is set to false).
# Values: CMD
#
actionstart = printf %%b "你好!\n
监视到【<name>】服务已成功启动。\n
敬请注意!\n
Fail2Ban"|mail -s "[Fail2Ban] <name>: 在 <fq-hostname> 服务器上启动" <dest>

# Option: actionstop
# Notes.: command executed at the stop of jail (or at the end of Fail2Ban)
# Values: CMD
#
actionstop = printf %%b "你好!\n
监视到【<name>】服务已被停止。\n
敬请注意!\n
Fail2Ban"|mail -s "[Fail2Ban] <name>: 在 <fq-hostname> 服务器上停止" <dest>

# Option: actioncheck
# Notes.: command executed once before each actionban command
# Values: CMD
#
actioncheck =

# Option: actionban
# Notes.: command executed when banning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: See jail.conf(5) man page
# Values: CMD
#
actionban = printf %%b "警告!!!\n
攻击者IP:<ip>\n
被攻击机器名:`uname -n` \n
被攻击机器IP:`/bin/curl ifconfig.co` \n
攻击服务:<name> \n
攻击次数:<failures> 次 \n
攻击方法:暴力破解,尝试弱口令.\n
该IP:<ip>已经被Fail2Ban加入防火墙黑名单,屏蔽时间<bantime>秒.\n\n
以下是攻击者 <ip>信息 :\n
`/bin/curl https://ip.appworlds.cn?ip=<ip>`\n\n
Fail2Ban邮件提醒\n\n "|/bin/mailx -s "<fq-hostname>服务器:<name>服务疑似遭到<ip>暴力攻击。" <dest>


# Option: actionunban
# Notes.: command executed when unbanning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: See jail.conf(5) man page
# Values: CMD
#
actionunban =

[Init]

# Default name of the chain
#
name = default

# Destination/Addressee of the mail
#
dest = root

说明
通过curl ifconfig.co获取服务器的外网IP地址,方便知道哪台机报出来的告警。
通过curl https://ip.useragentinfo.com/json?ip = 查询获取攻击者的IP信息。
不要忘记在每次配置更改后重新启动 Fail2ban 服务。重启命令:

1
sudo systemctl restart fail2ban

配置完成后效果:
enter description here enter description here

enter description here

5.11 安装病毒防护软件

ClamAV 是一个开源的防病毒软件,可用于检测木马,病毒,恶意软件和其他恶意威胁。适用于 Linux、macOS 和 Windows 平台。

一、安装ClamAV:

1
2
sudo apt-get update
sudo apt-get install clamav

二、更新病毒数据库

在安装完成后,需要运行以下命令来更新ClamAV的病毒数据库:

1、关闭ClamAV病毒数据库更新服务

1
sudo systemctl stop clamav-freshclam

2、更新病毒数据库:

1
sudo freshclam

3、启动ClamAV病毒数据库更新服务:

1
sudo systemctl start clamav-freshclam

三、使用ClamAV

1、扫描整个系统:在终端窗口中输入以下命令,扫描整个系统:

1
sudo clamscan -r /

2、扫描指定目录:在终端窗口中输入以下命令,扫描指定目录:

1
sudo clamscan -r /path/to/directory

3、删除被感染的文件:在终端窗口中输入以下命令,删除被感染的文件:

1
sudo clamscan --remove /path/to/file

4、扫描压缩文件:在终端窗口中输入以下命令,扫描压缩文件:

1
sudo clamscan -r /path/to/archive.zip

5、执行定期扫描:在终端窗口中输入以下命令,创建一个每天执行一次的定期扫描:

1
sudo crontab -e

在打开的文件中添加以下行:

1
0 0 * * * clamscan -r / > /var/log/clamav/scan.log

这将在每天的午夜(0点)执行全系统扫描,并将扫描结果保存在/var/log/clamav/scan.log文件中。

六、存储管理

6.1 硬盘管理

通过Cockpit Web管理面板进行管理。

6.2 软Raid管理

通过Cockpit Web管理面板进行管理。

6.3 硬盘自动休眠

hdparm

参考:https://manpages.ubuntu.com/manpages/jammy/man8/hdparm.8.html

6.4 硬盘健康监测

SMART是现代硬盘驱动器中的一个系统,旨在报告可能表明即将发生故障的情况。smartmontools是一个免费的软件包,可以监控 SMART 属性并运行硬盘自检。

安装smartmontools:

1
sudo apt install smartmontools

检查驱动器的SMART功能

要确保您的驱动器支持 SMART,请键入:

1
sudo smartctl -i /dev/sda

其中 /dev/sda 是你的硬盘。这将为您提供有关驱动器的简要信息。最后两行可能如下所示:

1
2
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

启用SMART

如果您的驱动器未启用 SMART,您可以通过键入以下内容来启用它:

1
sudo smartctl -s on /dev/sda

检查硬盘整体健康状况

1
sudo smartctl -H /dev/sda

此命令应返回:

1
2
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

如果它没有返回 PASSED,您应该立即备份所有数据。您的硬盘驱动器可能出现故障。

测试驱动器

您可以在安装驱动器时运行任何类型的测试,尽管性能可能会有所下降。可以在驱动器上进行三种类型的测试:

扩展(长)

传输

要查找执行每个测试所需时间的估计值,请键入:

1
sudo smartctl -c /dev/sda

最有用的测试是扩展测试(长)。您可以通过键入以下内容来启动测试:

1
sudo smartctl -t long /dev/sda

结果

您可以通过键入以下内容来查看驱动器的测试统计信息:

1
sudo smartctl -l selftest /dev/sda

要显示 IDE 驱动器的详细 SMART 信息,请键入:

1
sudo smartctl -a /dev/sda

要显示 SATA 驱动器的详细 SMART 信息,请键入:

1
sudo smartctl -a -d ata /dev/sda

注意:这也适用于通过 SCSI 堆栈运行并显示为 /dev/sdX 的新内核中的 IDE 驱动器

部分字段的含义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME
1 Raw_Read_Error_Rate 读取错误率
3 Spin_Up_Time 起转时间
4 Start_Stop_Count 启动停止次数
5 Reallocated_Sector_Ct 重新分配扇区计数
7 Seek_Error_Rate 寻道错误率
9 Power_On_Hours 通电时间
10 Spin_Retry_Count 起转重试次数
11 Calibration_Retry_Count 重新校准重试次数
12 Power_Cycle_Count 启动<->关闭循环次数
192 Power-Off_Retract_Count 断电磁头缩回计数
193 Load_Cycle_Count 磁头加载/卸载循环计数
194 Temperature_Celsius 温度
196 Reallocated_Event_Count 在分配扇区物理位置事件计数(与坏道无关)
197 Current_Pending_Sector 当前等待中扇区数(状态存疑/不稳定-等待后续判断)
198 Offline_Uncorrectable 无法修正的扇区总数
199 UDMA_CRC_Error_Count UltraDMA CRC错误计数
200 Multi_Zone_Error_Rate 写入错误率

使用示例:

1
2
3
4
5
6
# 监测硬盘1
/dev/sda -o on -S on -H -l error -l selftest -f -s (O/../../1/2|S/../../../4|L/../../2/5) -I 194 -W 4,45,55 -R 5 -m yourname@qq.com -M exec /usr/share/smartmontools/smartd-runner
# 监测硬盘2
/dev/sdb -o on -S on -H -l error -l selftest -f -s (O/../../1/2|S/../../../4|L/../../2/5) -I 194 -W 4,45,55 -R 5 -m yourname@qq.com -M exec /usr/share/smartmontools/smartd-runner
# 测试邮件通知
/dev/sda -o on -S on -H -l error -l selftest -f -s (O/../../1/2|S/../../../4|L/../../2/5) -I 194 -W 4,45,55 -R 5 -m yourname@qq.com -M test

上述例子来源于/etc/smartd.conf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 第一个 ATA/SATASCSI/SAS 磁盘。 监控所有属性,启用
# 自动在线数据收集,自动属性自动保存,并
# 每天凌晨 2-3 点开始短的自检,长的自检
# 周六凌晨3-4点之间。
#/dev/sda -a -o on -S on -s (S/./././02|L/././6/03)

# 监控SMART状态、ATA错误日志、自检日志,并跟踪
# 所有属性的变化,除了属性 194
#/dev/sdb -H -l error -l selftest -t -I 194

# 监控所有属性,除了正常化的温度(通常是194)。
# 但跟踪温度变化 >= 4 摄氏度,报告温度
# >= 45 摄氏度和 Reallocated_Sector_Ct (5) 原始值的变化。
# 在SMART故障或温度>=55摄氏度时发送邮件。
#/dev/sdc -a -I 194 -W 4,45,55 -R 5 -m admin@example.com

Scrutiny 是一种硬盘驱动器运行状况仪表板和监控解决方案,将制造商提供的 SMART 指标与实际故障率相结合。用于 smartd SMART 监控的 WebUI

项目地址:https://github.com/AnalogJ/scrutiny

安装教程:https://www.tauceti.blog/posts/easy-hard-disk-health-monitoring-with-scrutiny-and-smart/

安装教程:https://blog.csdn.net/wbsu2004/article/details/124095004

6.5 安装联合文件系统

mergerfs是一个联合文件系统,旨在简化跨众多商品存储设备的文件存储和管理。它类似于mhddfs、unionfs和aufs。

项目地址:https://github.com/trapexit/mergerfs

参考:https://blog.csdn.net/linkyy5/article/details/126080546

6.5 安装SnapRaid

官网:http://www.snapraid.it/

参考:https://wiki.archlinux.org/title/SnapRAID

七、Docker服务

7.1 容器管理

在新主机上首次安装 Docker Engine 之前,需要设置 Dockerapt存储库。之后,您可以从存储库安装和更新 Docker。

1、设置 Docker 的apt存储库:

1
2
3
4
5
6
7
8
9
10
11
12
13
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

2、安装 Docker Engine、containerd 和 Docker Compose。

1
2
# Docker Engine containerd Docker Compose
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

3.hello-world通过运行镜像验证 Docker Engine 安装是否成功 :

1
sudo docker run hello-world

查看Docker版本命令:

1
sudo docker version

查看Docker Compose版本命令:

1
sudo docker compose version

7.2 容器管理

Portainer是一个可视化的容器镜像的图形管理工具,利用Portainer可以轻松构建,管理和维护Docker环境。 而且完全免费,基于容器化的安装方式,方便高效部署。

1
2
#请将路径/srv/volume_1/data/docker/portainer替换为您的,此路径存储Portainer配置文件。
sudo docker run -d -p 8000:8000 -p 9443:9443 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /srv/volume_1/data/docker/portainer:/data portainer/portainer-ce:latest

安装完成后,可以通过打开 Web 浏览器并转到Portainer管理界面:

http://localhost:9000或https://localhost:9443

7.2 反向代理

7.3 数据库

7.4 文件存储

7.5 影音服务

7.6 下载服务

7.7 照片管理

7.8 Blog管理

7.9 薅羊毛

八、UPS不断电系统

待完善。

欢迎使用 {小书匠}(xiaoshujiang)笔记软件,您可以通过 小书匠主按钮>模板 里的模板管理来改变新建文章的内容。


一个将Debian系统快速配置成准NAS系统的脚本。可视化WebUI操作界面,可以轻松实现文件共享、照片备份、家庭影音、管理Docker、管理虚拟机、建立RAID等功能,使得Debian系统能够高效稳定地承担NAS任务。

主要特性

  • 开源
  • 安全
  • 稳定
  • 高效
  • 自由

搭建成果展示


支持系统

Debian 12
Ubuntu 24.04 LTS

使用方法

1、安装系统

安装教程:Debian系统最小化安装教程

2、连接系统

系统安装完成后,使用SSH工具连接上系统,输入下面运行脚本命令开启脚本。

注意:
1、Debian默认禁止root账户直接通过SSH连接,所以用安装系统时创建的第一个普通用户账号进行登录。
2、登陆后,必须使用以下命令切换到root账户运行脚本。
3、对于Ubuntu系统,不需先切换root账号,直接运行脚本命令即可。

1
su -

3、运行脚本

运行脚本前,建议先阅读脚本介绍,了解脚本能做什么先,脚本中的选项可以按需执行。运行脚本命令(二选一)

腾讯云服务器

1
SUDO=$(command -v sudo || echo "") ; $SUDO bash -c "$(wget -qO- ftp://maweiqing:yuanhetang911@106.54.36.205/homenas.sh)"

国内用户

1
SUDO=$(command -v sudo || echo "") ; $SUDO bash -c "$(wget -qO- https://gitee.com/kekylin/Debian-HomeNAS/raw/main/Shell/homenas.sh)"

Github直连
1
SUDO=$(command -v sudo || echo "") ; $SUDO bash -c "$(wget -qO- https://raw.githubusercontent.com/kekylin/Debian-HomeNAS/refs/heads/main/Shell/homenas.sh)"

4、登陆使用

脚本执行完毕后,查看SSH工具显示的Cockpit面板管理地址和Docker管理工具地址,打开对应服务进行使用。

Cockpit
一个基于 Web 的服务器图形界面,在 Web 浏览器中查看您的服务器并使用鼠标执行系统任务。启动容器、管理存储、配置网络和检查日志都很容易。基本上,您可以将 Cockpit 视为图形“桌面界面”。
Cockpit是直接使用系统账户进行登陆使用,出于安全考虑,Cockpit默认禁用root账户登陆,建议使用您安装系统时创建的第一个用户登陆。

1
https://localhost:9090

Portainer
一个Docker的可视化工具,可提供一个交互界面显示Docker的详细信息供用户操作。功能包括状态显示、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。
1
https://localhost:9443

教程汇总(点我展开)

欢迎阅读本项目。在此,我想对本项目的内容做出以下免责声明:


内容来源: 本项目的内容主要来源于互联网,以及我个人在学习和探索过程中的知识总结。我会尽可能保证内容的准确性和可靠性,但不对信息的完整性和及时性做出任何担保。


版权保护: 本项目的所有原创内容均采用 CC BY 4.0 许可协议。欢迎个人或非商业性使用者在遵守此协议的前提下引用或转载内容。转载时请注明出处并附上项目的链接。对于任何形式的商业使用或修改内容,须在遵守该许可协议的同时保留原作者信息并注明来源。


内容时效性: 鉴于技术和知识的发展迅速,本项目中的一些内容可能会随着时间的推移而失去实用性或准确性。我会尽力更新和修订内容,以保持其新鲜和准确,但无法对过时内容负责。


侵权联系: 我尊重他人的知识产权和版权,如果您认为本项目的内容侵犯了您的权益,请通过项目中提供的联系方式与我取得联系。一旦确认侵权行为,我将会立即采取措施删除相关内容或做出调整。


最后,希望您在阅读本项目时能够理解并遵守以上免责声明。感谢您的支持和理解!

项目简介

搭建成果展示
脚本介绍(使用前阅读)

系统相关教程

基于Debian搭建HomeNAS图文教程 (本项目核心教程)
基于Ubuntu搭建HomeNAS图文教程 (本项目核心教程)
Debian系统最小化安装教程
Debian系统通过Cockpit面板直通硬盘安装黑群晖
内网穿透服务Tailscale安装使用教程

Docker相关教程

HomePage导航页部署教程
部署Docker版谷歌浏览器教程

B站视频

基于Linux搭建HomeNAS最终效果展示(Debian/Ubuntu)
基于Debian搭建HomeNAS系列教程之系统安装篇
只需8分钟,快速将Debian系统配置成准NAS系统
一首歌的时间,在Debian系统直通硬盘安装黑群晖
以可视化面板展示NAS服务外网访问来源_Nginx日志监控

Debian-HomeNAS交流群

1
339169752

enter description here

前言
一直以来blog的图片都是直接通过截图之后快捷粘贴到文章当中实现自动上传到图床的。

加上我的图床也设置了水印功能,大家也知道lsky 兰空图床 设置动态水印会使原本的图片大小会增加。

导致图片多得情况下加载很慢很慢…难受!!手动去利用工具压缩之后再上传自己又嫌麻烦!!

所以就请教了大佬 UPToz,大佬就把他的方法告诉了我。所以我就按照他的方式直接复制粘贴过来使用。图片体积大大的降低很多。访问速度大幅度的提高!

大佬原文:《使用 PicList + Lsky Pro 对图片进行双重压缩》
设置教程
需要提前安装好 PicList 客户端和 Lsky Pro 兰空图床。

PicList下载地址:https://piclist.cn/
兰空图床部署参考:《部署兰空图床 lsky pro》
enter description here
使用超级管理员用户登录兰空图床后台,在【系统设置】内的【控制】模块,启用【是否启用接口】这项配置,然后点击【保存】。
enter description here
然后进入【角色组】,给对应的角色组点击【编辑】。

设置一下【图片保存质量】设置【75】之后【图片转换格式】设置成【webp】,然后点击【确认保存】。
enter description here
Token获取
使用软件【ApiPost】或者你比较熟悉的API调试工具。

这里我自己使用的是【ApiPost】,打开之后选着【调试】然后新建一个API请求接口来获取兰空图床的API Token,请求方式选择【POST​】。

POST地址在你的兰空图床后台【接口】中获取。我这里演示使用的是:http://192.168.31.4:18880/api/v1/tokens​

这里需要根据自己的图床地址将 http://192.168.31.4:18880 替换成你自己地。

其中 /api/v1/tokens​ 为生成Token的固定路径不可更改。

然后选择【Header】设置公共请求,添加参数【Accept】值为【application/json​】。
enter description here
然后选择【Bady】下面的【form-data】。

之后添加两个参数:

参数名:email​ 值:aliluya868@gmail.com

参数名:password​ 值:aliluya123456

aliluya868@gmail.com 换成自己的兰空图床账号

aliluya123456 换成自己兰空图床密码
enter description here
最后设置完成之后检查清楚没问题之后就可以直接点击【发送】。

如果接口参数没有问题,将会返回一个Token。

请将此Token复制并保存,以备后续使用。
enter description here
enter description here
在【PicList】中选择【图床】下的【Lsky】,然后修改默认配置或创建一个新的配置。

【图床配置名】自定义。

【设定版本】选择与你安装的兰空图床版本相对应的选项。

【设定主机】填写兰空图床的部署地址,可以使用域名。

【设定Token】输入在【ApiPost】中保存的Token。前面加上Bearer。
(注意【Bearer】后面要有一个空格)

【设定策略ID】如果不填写,将默认使用该用户角色的第一个策略。

你可以在兰空图床后台的【存储策略】中找到策略ID。

【设定相册ID】可以留空。

【设定权限】保持默认即可。

最后,点击【确定】即可完成从 PicList 上传到 Lsky Pro 兰空图床。
enter description here
之后再【PicList】中选择【上传】,然后选择上传选择刚刚配置的 Lsky Pro 兰空图床,然后点击【图片处理】配置上传处理。
enter description here
进入图片处理设置,按照下面设置就OK了!

【是否移除EXIF信息】启用。

【压缩质量】设置成 70​ ,这个你们可以自定义,根据自己情况设置。

【是否转换格式】启用。

【转换目的格式】选择webp​。

其他配置可以根据自己需求进行选择是否启用,最后点击【保存】即可。
enter description here
【PicList】支持多种图片上传方式,上传区支持拖拽上传或者点击区域打开文件夹上传。还支持剪贴板图片上传、通过URL上传等功能。
结束
这样设置好之后,以后的截图就直接可以通过【PicList】上传到兰空图床。

之后自动获取URL就可以在文章里直接粘贴图片地址了。

其实对比直接粘贴上传也差不多,这样一来就可以把图片体积控制的很小,加载和浏览速度大大提升了。

更多【PicList】的使用技巧请参考官方文档 PicList Doc(https://piclist.cn/app.html)

希望本次教程对大家有所帮助!创作不易希望大家能多多转发收藏本站!感谢感谢~~!

第一章日常哲思

绘图

第一节 时代的纷扰

深入探讨了时代背景下的多重纷扰,主要围绕数字时代、生命技术进化、文化重构与地缘政治冲突四个核心议题展开。详细讨论了数字时代对商业和社会规则的影响,生命技术进化带来的新人类与生命经济模态的可能性,文化重构时代中国文化的独特性与重要性,以及地缘政治冲突的复杂性与其对经济、社会的影响。强调通过理解这些变化,思考人类和社会未来的发展趋势,从而找到应对方向和行动策略。
通过数字的网络规则,生命技术进化,通过文化的重构,通过地缘政治的冲突去思考人类和社会包括自己,未来的发展趋势。思考通了,就知道方向在哪里,应该怎么做。

绘图

第二节社会的撕扯

围绕“社会的撕扯”展开讨论,探讨了社会组织的本质与构成规则。社会被定义为基于文化合作构建的自动组织,受生命、科学、政治、经济、宗教和文化等规则影响。强调了理解社会规则的重要性,指出不同文化背景下的社会规则差异。同时,提到了在变化中的社会,人们需要重新审视和调整自己的社会观念,有效分类媒体信息,并基于原理进行判断。最后强调了个人在社会中的角色和价值,以及教育的根本目的在于让学生适应社会的发展,鼓励学生相信时代的美好积极参与社会的进步。
教你如何看待社会,社会实际上是一种组织,像高速公路上行驶的一辆汽车,社会和你的作用是什么,你想加入它在选择,选择就是一种范导。通过对原理的了解,能够盘点你的社会观念,分类媒体的信息,归摄原理的判断,相信时代的美好,投入历史的洪流中,让你的生命充满光彩。

绘图

第三节生活的焦虑

围绕日常哲思展开,深入探讨了生活的焦虑问题。首先,讲解了焦虑的心理反应及其核心在于人的意识活动状态。随后,通过分析有结果和无结果的两种活动状态,阐述了焦虑的产生原因,指出欲望与资源的矛盾及行动目标的不明确是焦虑的重要来源。讲解中提及了海德格尔关于死亡与面对死亡的哲学观点,强调了目标和行动的重要性。最后,探讨了生活的本质,指出生活是由一系列事情构成,需要明确目标和行动路径以避免焦虑。整体而言,内容强调了明确目标、积极行动对于解决生活焦虑的重要性。

绘图

第二章世界的洞见

从三个角度看你的工作并分析

绘图

第一节从唯物主义角度看世界你能看到什么

唯物主义视角下的世界洞见,包括世界是什么、唯物主义如何看待世界以及其目的和手段。唯物主义认为世界由时间、空间和能量构成,通过科学技术的手段观察世界的变化必然性,即因果性。唯物主义构建了庞大的科学系统,并通过量化和精确化构建清晰的科学理论,以改造自然为人类服务。此外,唯物主义在解释人的精神时存在局限性,但其在人与自然的关系中构建了科学理论基石,极大改变了人类的生存状态。
唯物主义的哲学观点是科学理论的基石。唯物主义从物质的角度来看待事物运动的必然,在这种必然之中通过数学的手段可以把他们量化精确化,构建清晰的科学理论,来改造我们的自然,为人类服务,构建了我们所说的技术应用,极大的提高了我们的生产力,改变了人的生活状态。这就是唯物主义能看到的东西。

绘图

第二节从唯心主义角度你会想出什么

讲述唯心主义思考逻辑的几个方面。首先,强调了想象的重要性,包括再现记忆、自由连接概念和进行目的性判断,这些决定了学习能力。其次,指出唯心主义通过无限性的逻辑推论,可以构建人的绝对自由和上帝的存在。同时,在中国文化中,这种推论表现为“道”的概念。再者,唯心主义还设定了灵魂不死,以应对人对生死的恐惧。最后,提到唯心主义还会思考世界的无限性,与时间的有限性相对,形成对宇宙和生命的深刻洞察。
对自然用唯物主义,对人生用的是唯心主义,让你的生命有所安放。

绘图

第三节从数字主义角度你会遭遇什么

深入探讨了数字主义视角下的世界洞见。首先讨论了数字世界的本质及其能量的跨界互动,阐述了数字世界如何使现实变得理想化,并指出现实理想化也是其重要特征。接着介绍了网络连接的6度分隔理论,阐述了网络如何构建新型人际网络和全球化趋势。同时,提出了新生活挑战的概念,包括网络交友、学习网络改变生活方式等。最后,讨论了AI作为辅助工具带来的思维方式和行为改变,以及数字世界对人类认知和心灵的冲击。整体内容强调了数字主义视角下对现实与理想跨界互动的理解,以及对未来生活方式的预测和挑战。

绘图

第三章思想力量

你想一想你未来的目标是什么,通过什么路径、能力、资源

绘图

第一节人与自然的关系

主要探讨思想的力量与人类的关系,特别是在人与自然的关系上。首先强调思想在人类生活中的方向性作用,将人类从偶然性引向必然性。接着,讨论了人与自然关系的斗争,以及如何通过抽象思维、科学思想和宗教理论来克服自然的恐惧。重点提到了哥白尼的日心学说、牛顿的万有引力定律、爱因斯坦的相对论思想以及量子力学的发展,这些思想与科学发展极大地改变了人类对自然的认识和利用方式。最后,探讨了中医现代化的重要性,指出中医的科学化是其走向世界的关键并提出了构建网络研发系统以推动中医现代化的建议。整体上,内容强调了思想的力量对人类认识自然、改造自然的重要作用。

绘图

第二节人与人的关系

围绕“思想力量”主题展开,详细探讨了人与人之间的关系及其相互作用。内容包括人与人关系的五种基本类型:利、权、情、理、法,并分析了集体性与个体性在关系构建中的作用。同时,强调了伦理秩序的重要性,引用了康德的自律原则和阳明先生的良知观念来阐述道德原理。此外,探讨了经济学的基础原理和政治学的规则制定,以及心理学和法系对人际关系的影响。最后,提出了一个思考练习,鼓励观众确定一个有限时间段的目标,思考实现目标的路径和能力需求。整体内容深入浅出,旨在启发观众思考思想的力量及其在人生规划中的应用。

绘图

第三节肉体与灵魂的关系

讨论了肉体与灵魂的关系,涵盖了从物质到生物再到人的进化过程。强调了人的独特性在于其主动性和创造性,且人的灵魂是无限的。讨论了肉体的有限性与灵魂无限性的矛盾,指出这种无限性带来对死亡的恐惧。提出了宗教和哲学的观点来慰藉心灵,超越生死。探讨了哲学思考如何基于概念、判断和推理进入无限性,以及集体意识与个体意识的转换来达到永生。最终强调了中国文化中道的永恒性,以及个体通过道的融合达到精神永存的理念。整个内容旨在理解肉体与灵魂的关系,以及如何通过哲学和宗教思考超越生死,实现精神上的永生。

绘图

第四章哲学启智

选择一件事用哲学思维思考,是什么,有什么组成,怎么变化,目的和意义

绘图

第一节哲学是什么

主要讨论哲学的定义和作用。哲学是关于世界观,价值观和人生观的学说, 也是生产思想的工厂。 哲学能改变人心并用于实践解决问题。 普通人也能学习哲学, 通过哲学思考如何解答人生疑惑, 提升智慧。 分为四部分, 第 一部分讨论哲学是什么, 强调哲学对普通人具有启示作用, 能帮助解决实际问题。通过不同角度定 义哲学, 指出哲学是方法论, 旨在通过思维照亮人生方向。 主要介绍了哲学的概念和作用, 为后 续深入学习打下基础。

绘图

第二节哲学有哪些部分组成

详细探讨了哲学的构成部分及其相关概念。哲学主要由形而上学、认识论、价值论以及美
学四大部分组成。形而上学研究宇宙的本质和本源,是哲学的基础;认识论讨论如何认识真理,涉及人的认识能力;价值论探讨价值的问题,与道德紧密相关;美学作为情感表达的工具,是哲学中情感认知的体现。此外,还探讨了形而上学的不同理解方式,包括唯心主义和唯物主义的对立,以及认识论中的主客合一与康德的哥白尼式革命。最后,提出了美学在哲学中的重要性和作用。
绘图

第三节哲学是怎样变化的

讨论了哲学的变化历程,从康德的哥白尼式认识论革命出发,阐述了康德哲学中的二元理论及其对形而上学的批判。随后提及了费希德、黑格尔、谢林等哲学家对康德哲学的继承与发展,以及黑格尔一元论哲学和马克思实践哲学的构建。还探讨了方法论的哲学变化,包括罗素和维根斯坦对数理
逻辑和语言世界观的贡献,以及哲学在不同领域的应用变化。最后指出,哲学的变化不仅体现在思想观念上,更主要在方法论上,涉及从哲学原点推衍出的各学科的发展。强调了实践理性与目的理性的转变,以及精致的利己主义与道德伦理的关系。整体上,该内容系统梳理了哲学发展的脉络和主要观点。

绘图

第四节哲学的功能和目的是什么

围绕哲学的功能和目的展开讲解,强调哲学旨在改变个人思想和观念。哲学通过批判思维帮助建立反思型观念,通过理解思考别人的思想来比较和改造自己的思想,实现观念的改变。哲学的根本目的在于通过思想改造给予生命方向,唤醒自动性以构建创造性。学习哲学不仅帮助思考如何看、如
何想和应该怎么做,还能提升思维层次和实践能力,最终实现个人成长和自我实现。

绘图

第五章思维模式

选择一个事件用四种思维思考,构建一个系统图,把要素罗列出来,把问题分析清楚

绘图

第一节感性思维

深入探讨了思维模式的差异, 特别强调了感性思维、 因果思维、 辩证思维和系统思维等思 维模式。 其中, 感性思维被描述为一种快速直观的思考方式, 依赖于时空直观的观察和感受。 理性思维 如学者思维则追求唯一答案, 而商人思维则强调一加一大于二的经济逻辑。此外, 还探讨了人与人之间 的差别, 包括理念、 观念的差异和心灵活动方式的不同, 以及如何通过不同的思维模式来区分这些差 异。 最后, 提出了感性思维作为认知的基础, 并讨论了如何将感性体验转化为概念思维的认知过程。整体而言,本内容旨在通过分析不同的思维模式来增进对哲学智慧与人生思考的理解。

绘图

第二节因果思维

围绕思维模式中的因果思维展开, 详细讨论了因果思维的哲学意义及其在科学中的基础作 用。 通过介绍英国哲学家休谟的经验主义观点和因果关系的习惯联想, 强调了因果必然性的重要性。 同 时, 提及了中国禅宗中野狐禅公案, 阐释了因缘逻辑与因果关系之间的联系。 此外, 还讨论了如何通过 因果思维理解智慧, 并提出了因中求果与果中求智的思维方向。 最后强调了学习哲学智慧与人生思考的 目的, 以及因果思维在辩证思维中的重要性。

绘图

第三节辩证思维

详细讲解了辩证思维的概念及其在哲学史上的发展。从古希腊智者学派和毕达格拉斯谈起,阐述了辩证思维中的对立统一、量变质变、否定之否定三大定理。重点介绍了黑格尔的辩证思维模式,强调矛盾是事物变化的动力,辩证思维通过破解矛盾来认识运动的本质。同时,提及了中国哲学如
老子和佛教的辩证法,特别是太极图在解释辩证法中的应用。最后强调了辩证思维在日常生活、管理和教育中的重要性,指出了辩证思维是解决问题的有效方式,并鼓励人们用辩证的观点看待问题,保持积极乐观的心态。

绘图

第四节系统思维

深入探讨了系统思维的概念及其重要性。 系统思维被视为领导者思维, 强调把握存在的价 值。 它不仅涉及因果关系、 辩证思维, 还涵盖了功能目的、 系统边界、 条件要素及其关系等核心要素。 系统思维的核心在于理解事物间的关系模式和要素模式, 能够整合感性、 因果和辩证思维。 此外, 系统 思维强调时间的重要性, 认为随着时间的推移, 系统的目的、 功能和条件会发生变化。 

绘图

第六章思维利器

怎么理解美有柏拉图的美学理论、黑格尔的美学理论、康德的美学理论、海德格尔的美学理论、意大利克罗齐的美学理论,寻找一个符合你的美学原则,把他投射于你的生活

绘图

第一节语言工具

主要讲述了哲学中“思维的利器”这一概念,特别是思维活动的内在性与外在性表达。内在性思维活动包括无声的交谈,涉及感觉、概念与概念的链接及判断,最终指导意志与行动。外在性表达则通过语言、文字、数学和艺术四种工具实现。其中,重点讨论了语言作为思维外化的重要工具,强调人类语言的抽象符号特性及其与意识的统一交换能力,区分了人类与动物在语言使用上的本质差异,并通过圣经中通天塔的典故说明了语言多样性的起源。

绘图

第二节文字工具

详细探讨了文字在人类思维中的作用与演变。文字不仅是时间的综合,记录了历史与文化,还承载着记录人类思考的逻辑轴线功能。中国文字由甲骨文至现代汉字经历了多阶段演变,其中汉字既有象形特征,又有拼音式文字的抽象符号特点。强调了文字简化与注音的重要性,特别是汉字简化运动旨在普及文化,简化汉字通过拼音注音系统与计算机网络的链接,构建了现代数字化时代的通道。同时,汉字的象形特点赋予了文字美感与动态动作的呈现,体现了中华文化的独特魅力。

绘图

第三节数学工具

详细探讨了数学作为一种形式工具的重要性及其在哲学、理论物理学和自然科学中的应用。数学被视为表达事物本质和必然性的道德工具,其形式化过程赋予确定性含义。数学研究包括量、结构、变化及空间等信息,构建了应用数学领域。通过数学公式,可以呈现事物变化的必然性,既是一种认识也是一种应用。还提及了数学在哲学认识论上的价值和作用,以及数学的学习基于时间序列和空间序列的变化。数学的工具性不仅体现在逻辑性和变化性上,也构建了应用数学的实用价值。

绘图

第四节艺术工具

围绕艺术作为情感工具进行深入探讨,阐述了艺术与美的关系,指出艺术通过知性与想象力的应用,产生自由的快感,进而构成美。提及康德、海德格尔等哲学家的观点,强调艺术不仅是情感表达,也是认识真理的路径。内容涵盖艺术作品的特点、表达方式及其在不同艺术形式(如建筑、雕塑、绘画、诗歌和戏剧)中的审美体现。最后,强调普及艺术哲学的重要性,并鼓励通过学习和理解各种美学理论来提升个人艺术修养,使生活更具艺术气息和自由快乐的感受。

绘图

第七章思懒致庸

找一个生活中想不明白的事,用问题意识,概念原理和六个循环把它做一个思考,并写成文字。

绘图

第一节概念的九层原理

讲解了哲学的多个概念层次及其在认识活动中的应用。首先,介绍了概念的重要性,强调了思维的懒惰会导致平庸。随后,深入探讨了概念的九层原理,包括普遍性、特殊性、具体性 、物质性、有机性、目的性、生命性及与柏拉图绝对理念的关联。内容涵盖了概念表达的有限性与无限性过
程,以及不同学科的概念原理和应用。此外,还提到了黑格尔哲学在概念动态变化描述中的独特性和重要性。通过讲解,旨在提升学习者的概念能力和思考深度,帮助他们更好地理解和应用所学知识。

绘图

第二节问题意识的五个构件

围绕问题意识的构建展开讨论,强调问题意识的重要性及其在哲学、AI 及现实生活中的应用。提出疑问、设问和提问是构建问题意识的三种形式,其中疑问是问题意识的起点,设问是批判性思维的开始,提问是沟通的手段。还探讨了问题意识的实践应用,包括高校与社会的脱节问题、哲学思辨与未来指导的关系,以及通过问题构建思想的重要性。此外,讲述了矛盾与运动的关系,强调了
矛盾 的重要性,以及如何通过了解现状与理想差距来选择合适的路径。最后,提出创造力、依赖他人解决和时间的流逝是解决问题的三种路径,鼓励观众将感受和情绪转化为问题,通过问题意识提升创造力,使生活充满挑战和意义。

绘图

第三节深度思考的六个循

围绕深度思考的六个循环展开讨论,强调思考的目的性、针对性以及情感控制的重要性。首先提出思考始于问题,思考必须针对某一对象,且需控制情感以唤醒觉知。随后讨论了多元设问、问题定义、路径创造与批判选择等关键环节,指出深度思考的本质是逼近事物本质的思考能力。课程内容
还涉及如何通过六个循环解决生活中的问题,并建议通过实践提升思考深度,最终强调通过深度思考可提高生活质量。作业题要求从生活中选取不明之事准备节目程式进行思考并撰写文章,以提升思考力。

绘图

第八章人性的真相

假如你想创业用经济学的人性理论,对创业方案做一个审视和评价,拿出来应该做的一个点

绘图

第一节人的生物性

深入探讨了人性的真相,从生物性角度出发,解析了人性的本质。首先介绍了人性探讨的重要性,并讨论了人性的必然性与自由律。接着,从西方哲学的视角,阐述了康德关于人的绝对意识与黑格尔的绝对精神理论,强调了人性中的无限性和创造性。同时,分析了人性中的必然性与偶然性问题,并通过黑格尔的理论解决了偶然性与必然性的关系。最后,从中国文化的语境探讨了人性的善恶论,并提到了道德的生生大多数画点户友队问掌狐禅宗对人性善恶的探讨。内容还涉及了生命体的生物性特点,包括新陈代谢、应激性和生殖等核心要素,以及与之相关的三大反射系统。整体上,该内容旨在从多个角度解析人性的真相,为理解和指导人生提供哲学思考。

绘图

第二节人的社会性

围绕人性的社会性展开,分为三个分类:人性善、人性恶、非善非恶。其中提出社会性的研究应从管理学的角度出发,包括制度管理、文化管理、绩效管理三大管理学派。同时强调人性无限性通过分类法变成有限性,并讨论了社会扬善惩恶的重要性,构建了从文化管理到绩效管理的循环工作方法。指出在管理中需考虑合适性问题,对于绝对恶的人应开除或淘汰,而对于善的人需用文化激发其价值感。最后强调社会管理旨在扬善,通过教化使人向善,体现了人的社会性思考的重要性。

绘图

第三节人的经济性

深入探讨了人的经济性及其在经济学中的表现。人的经济性被视为一种合作行为,通过交换实现彼此价值的增加。经济学研究的核心在于价值的创造、流通、分配和消费。经济学有三个基本设准:理性人假说、欲望与资源的不匹配矛盾、依法保护产权。人的经济性基于目的性研究,追求利益最大化。经济学中的人性表现在权衡取舍的能力,涉及到机会成本原理和边际效应的理解。通过理解这些
原理,人们可以更好地应用经济学知识指导现实生活和创业活动。

绘图

第九章识人的智慧

用九征判断,做一个自我的反省

绘图

第一节个体人性八宫结构

围绕个体人性的八宫结构展开,介绍了如何通过形体、行为、情感、精神、认识、目的、历史和未来等八个方面来分析和认知个体人性。强调了人性无限性、创造性和可能性,并讨论了善恶标准、情感真假、精神贵贱以及能力与目标的重要性。同时,提到了运用八宫结构分析个体人性在人力资源中的应用,包括判断个体的态度、气质、能力、方法和经验等,旨在提升识人智慧,指导职业选择。

绘图

第二节中国文化的九征判断

深入讲解了中国文化中的九征判断理论,由刘邵先生提出,用于品评人物。该理论涵盖九个方面:精、气、神、筋、骨、言、意、荣、色,分别对应人物的明暗、动静、正邪、勇气、担当、语言节奏、生机活力、态度真假及面部表情等特征。通过这九征逻辑,可以全面评价一个人的性格和品质,进而对社会历史上的众多人物做出清晰评价。该理论有助于理解和把握中国文化的深刻内涵,对人际交往和社会认知有重要指导意义。

绘图

第三节赵蕤对五仪的解释

讲解了赵蕤的五仪分类,即人分五类:庸人、四人、君子、贤人、圣人。庸人特点是缺乏观点、目的,易随波逐流;四人则心有所定,计有所出,行事有目的性;君子言必忠信,行不越归;贤人德和法度在身,能全身而退;圣人德合天地,变通无方。此外,内容还提到了通过九针判断进行自我反省的方法,以及赵蕤在《长短经》中对五仪的解释。整体内容旨在通过五仪分类帮助理解人性与智慧,并通过自我反省提升个人认识。

绘图

第十章人生真谛

绘图

第一节克尔凯郭尔的人生三个阶段

深入探讨了人生的真谛与克尔凯郭尔的人生三个阶段理论。首先介绍了佛教四门游观对人
生悲情的启示,强调了生老病死的普遍性及带来的悲情。随后,探讨了如何通过智慧超越生老病死,引出了佛祖的理论体系,包括六道轮回、波罗波罗蜜多等,旨在帮助人们超越人生的无常。接着,通过克尔凯郭尔的人生三个阶段理论,阐述了人生感性的阶段、伦理的阶段和宗教的阶段,强调了认识自己、遵守社会秩序及宗教对死亡的超越作用。最后,提出了人生的意义在于存在感、价值感及永恒性,呼吁人们通过智慧和行动为人生增添光彩。整体内容深刻揭示了人生的真谛与超越生老病死的智慧。

绘图

第二节孔子的人生六个阶段划分

深入探讨了孔子人生六个阶段的划分, 包括十五有志于学、 三十而立、 四十而不惑、 五十 而知天命、 六十而耳顺及七十而从心所欲。 每个阶段都有其特定的核心要点: 立志、 孝道、 职业成熟、 顺应时代、 把握文化等。 特别强调了人生观的建立、 价值观的塑造以及世界观的形成, 旨在通过这些阶 段划分指导人们理解人生的真谛。孔子的人生阶段理论不仅关注个人的成长与发展, 也体现了对家庭、 社会和国家的责任与贡献。 通过探讨各个阶段的含义与实践, 旨在帮助人们更好地理解人生的意义与价 值。

绘图

第三节人生的学说

深入探讨了人生学说及其不同流派, 包括唯物主义、 唯心主义、 中国文化的三世学说和佛 教的万世学说。 唯物主义认为人是物质的产物, 人生随物质消亡而终结; 唯心主义构建了基于现世与未 来世的二世学说, 通过善恶理论约束现实生活。 中国文化的三世学说强调前世、 现世和未来世的联系, 并通过家庭来转换德与福。 佛教的万世学说则在六道轮回中探讨生死与转世。 各种学说都试图通过未来 式来规范和指导现世生活, 赋予人生意义和挑战。

绘图

第十一章文化的融合

绘图

第一节人与文化

深入探讨了文化融合的重要性和它对个体与社会的影响。首先,通过对开放、包容与重构的中国文化性格与以自我斗争为特点的西方文化性格的分析,揭示了文化融合的复杂性和挑战。其次,阐述了个体如何通过精神要素实现向集体生命的转变,强调了精神在形成文化和促进文化融合中的关键作用。进一步,从人与文化、人与宗教、人与艺术三个维度全面讨论了文化融合的复杂性及其实现路径,突出了文化交流和理解在全球化背景下的重要价值。最后,预见了-个具有独特文化特征的数字社会的到来,强调了个体和组织需要通过数字化的方式进行学习和交流,以适应这一时代的发展需求。

绘图

第二节人与宗教

宗教的核心在于转化生命中的悲哀为智慧,旨在指引人生方向并超越生死。通过抑制欲望,宗教如佛教助力心灵达到安宁与满足,终极目标为超越生死。学习宗教,特别是佛教,需面对生死议题,是一项挑战。文章强调,无论信仰何种宗教,关键在于追求内心善良与超脱生死。宗教应具备包容性和开放性,能与中国文化相融,并促进个人哲学思考发展。

绘图

第十二章生活的哲学

绘图

第一节成功的三角形

探讨了实现人生成功所需的三个基本要素:梦想、理想与目标,并构建了一个成功的三角形模型来阐释这一过程。首先,强调了人生的自由性和创造性是产生梦想的基础,认为这赋予人类超越动物界的独特性。接着,通过理性批判,将梦想转化为经过深思熟虑的理想,体现了人类理智的应用。此外,环境因素在将理想转化为具体的愿景中起着至关重要的作用,说明了适应环境变化对于目标实现的重要性。进一步地,讨论了愿景转化为可行的目标和策略的步骤,强调在设定目标时需考虑个人的能力和可用资源。最终,提出的成功三角形模型包括梦想、理想愿景、目标、能力及资源等元素,为实现战略思维和取得人生成功提供了基石。

绘图

第二节5种活法

深入探讨了人生的五种不同活法:感性、知性、理性、德性和道性,每种活法均反映了个体面对生活的独特态度和选择。感性活法侧重于追求即时的感觉刺激,知性活法则强调通过知识对抗生命的荒诞性和痛苦,突显个体的责任与自由。理性的活法则主张在遵循因果必然性的同时发挥创造性,实践道德律,重视善念的实施。此外,德性的活法依据孔子的教导强调道德修养的重要,而道性的活法则通过庄子的思想,倡导一种自然而然的生活态度。这些活法共同展现了生命的多样性及其丰富的意义,提供了对人生不同的理解和生活方式的选择,

绘图

第三节生活应该服从哪些准则

着重于生活的基本准则,其中核心观点包括服从上帝的召唤和利用理性的力量。这一理念源于西方古代哲学,特别是奥古斯丁关于全心全意爱上帝的观点及康德对理性的深入论述。讨论强调了人类与动物的根本区别在于理性,并以此为基础,探讨了道德哲学的重要性。除此之外,还涉及到如何通过遵循自然之道、尊重生命权利、追求真实快乐、坚守道德原则及实现智慧平等来指导人生。最终,提出结合上述原则可以作为面对困难时的指引,旨在达到心灵的解脱和豁然开朗。

绘图

第十三章精英引领

用生命的5个向度对自己的生命做一个审视,用精英的八个特征对自己做一个建模,看人格是不是积极的,趋势思维能到什么程度,利他行为能做到什么样子,做一个自我审视,找到差距,找到努力和行动的方向。

绘图

第一节生命的5个向度

深入讨论了精英引领的重要性,指出精英的引领为社会发展的方向提供了指引。章节内详细探讨了生命的五个维度,包括生命的自主性、创造性、无限性与有限性,以及观念、胸怀、信仰、思维和健康等因素如何决定生命的高度、宽度、强度和长度。特别强调了思维决定生命速度的哲学智慧,以及健康对于延长生命长度的重要性。整体内容旨在通过哲学思考,引导人们深刻理解生命的价值和意义。

绘图

第二节精英的四个基本特征

围绕“精英引领”主题,详细阐述了精英的四个基本特征:独立人格、经济自由度、信仰和爱国精神。强调精英应具备对未来的思考能力,即未来思维,同时指出精英应热爱国家、民族和文化,并拥有战略思维以应对未来的不确定性。还讨论了如何判断一个人是否为真正的精英,并强调了独立人格的重要性以及信仰在构建终极判断逻辑中的作用。

绘图

第三节精英的八个心智特征

阐述了精英的八个心智特征, 包括积极的人格、 趋势思维、 利他行为、 自我迭代、 行 动中化解无聊、 唯美式整合重构、 运动中平衡身心以及享受思考的快乐。 强调了精英具有面对未来不确 定性挑战的积极态度, 能自我迭代学习, 具备趋势思维和利他行为, 并在行动中化解无聊, 整合重构知 识, 保持身心平衡, 享受思考的快乐。 最后提出通过审视生命的五个象度和应用精英的八个特征进行自 我建模, 找到努力和行动的方向。

绘图

第十四章终极探究

绘图

第一节化识转智

讲解了哲学智慧与人生思考, 着重探讨了终极探究的问题。 首先介绍了哲学与爱智慧的关 系, 从佛教理论“万法为师, 唯心所变”出发, 探讨了唯心主义的关键。 接着, 探讨了主动心与被动心 的区别, 强调了主动心的重要性。 内容围绕化识转智展开, 探讨了人与自然、 人与人以及自我提升的智 慧境界。 阐述了科学知识形成科学技术的过程, 以及道德实践和自我重构的重要性。 最后, 指出将认识 转化为方法论和实践行动, 是达成智慧的关键。

绘图

第二节智慧的境界

深入探讨了智慧的境界及其表现方式。 在学习哲学过程中体会到佛学对智慧的重要贡 献, 认为智慧涉及跨界融通, 体现在思维自由流动与穿透融合的过程。 智慧可从因果、 佛教等角度解 读, 分为不同境界。 文中还提及了从文字波若到境界波若的层层递进, 以及通过身心表达出的禅定智 慧, 构建了五重跨界的概念。 最终强调了智慧就是跨界自由流动的过程, 体现了不同智慧境界的实践与 应用。

绘图

第三节滋养慧根

围绕“慧根”的探究展开, 详细解释了慧根的含义及其与利他之心、 思考方向改变的关系。 提出利他心是滋养慧根的关键, 并介绍了如何通过发宏愿、 行动、 智慧来培养慧根。 同时, 强调了思考 的重要性, 包括角色旋转和同理心在构建智慧中的作用。 最后, 提出了哲学是关于世界观、 价值观和人 生观的学说, 并鼓励用思想改造自己的思想来获得通透自由富足的人生。

绘图

结束总结

绘图

内网穿透服务Tailscale安装使用教程

前言:

Tailscale属于一种虚拟组网工具,基于WireGuard。他能帮助我们把安装了Tailscale服务的机器,都放到同一个局域网。

Tailscale免费提供内网穿透服务,速度不是很快,所以期望不要太高。但用来管理服务器,进行一些基础操作是没有问题。对于完全没有办法获取到公网IP的用户,也是一种福音。

原创文章,转载请保留出处:https://github.com/kekylin/Debian-HomeNAS

一、安装Tailscale

1.1、复制脚本运行命令

项目地址:https://github.com/kekylin/Debian-HomeNAS
国内用户

1
SUDO=$(command -v sudo || echo "") ; $SUDO bash -c "$(wget -qO- https://gitee.com/kekylin/Debian-HomeNAS/raw/test/Shell/start.sh)"

Github直连
1
SUDO=$(command -v sudo || echo "") ; $SUDO bash -c "$(wget -qO- https://raw.githubusercontent.com/kekylin/Debian-HomeNAS/refs/heads/test/Shell/start.sh)"

1.2、启动脚本

image

1.3、安装Tailscale

image

二、安装完成,绑定设备

2.1、复制绑定设备链接

image

2.2、登陆账户绑定设备

image

2.3、点击Connect绑定

image

2.4、绑定成功

image

2.5、查看账户下所有绑定设备

image

三、安装移动端或PC端应用

3.1、下载安装客户端

官网下载地址:https://tailscale.com/download

image

3.2、打开客户端

image

3.3、登陆你的tailscale账户

image

3.4、点击Connect完成绑定

image

四、连接使用

Tailscale是点对点服务,使用时需两边客户端都处于连线状态才能进行互联。

1、以访问Debian系统服务为例,复制Debian设备IP地址,在浏览器中输入:IP地址+服务端口号即可打开对应服务。
image

2、IP地址+服务端口号,访问成功。
image

手机客户端使用操作与PC端相同,安装客户端——登陆账户——绑定设备——访问Debian系统。

更多Tailscale高级玩法,请自行百度查找资料。或参考B站“韩风Talk”大佬视频。
地址:【Tailscale玩法之内网穿透、异地组网、全隧道模式、纯IP的双栈DERP搭建、Headscale协调服务器搭建,用一期搞定,看一看不亏吧?】
https://www.bilibili.com/video/BV1Wh411A73b

安装必要的软件和环境

● 安装宝塔面板或类似工具:如果你选择使用宝塔面板,可参考其官方文档进行安装。确保安装好 PHP(如 8.0.2 版本)、Mysql(如 5.7 版本)、Nginx(如 1.21 版本)。

● 配置数据库:创建一个数据库用于兰空图床存储数据,记录数据库的名称、用户名、密码等信息。

下载兰空图床代码

● 从兰空图床的官方网站或开源代码仓库获取图床的代码文件。

部署到本地服务器

● 通过宝塔面板部署(如果使用宝塔):
     ○ 将下载的兰空图床代码文件上传到服务器的指定目录(可通过宝塔的文件管理功能进行操作)。
     ○ 在宝塔面板中创建一个新的网站站点,并将该站点的根目录设置为存放兰空图床代码的目录。
     ○ 打开网站的配置文件(通常是 Nginx 或 Apache 的配置文件),进行必要的配置,如设置网站的访问权限、错误页面处理等。
     ○ 在浏览器中输入本地服务器的地址(通常是 localhost 或 127.0.0.1)加上指定的端口号(如果有设置非默认端口),访问兰空图床的安装页面。
     ○ 根据安装页面的提示,填写数据库信息(数据库名称、用户名、密码等)以及其他必要的配置项,完成兰空图床的安装。

● 使用 Docker 部署(另一种常见方式):
     ○ 安装 Docker 和 Docker Compose。
     ○ 创建一个安装目录,进入该目录并创建一个  docker-compose.yml  文件。
     ○ 在  docker-compose.yml  文件中填入类似如下内容(请根据实际情况修改数据库配置和映射路径等):

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
version: '3'
services:
lsky-pro:
container_name: lsky-pro
image: dko0/lsky-pro
restart: always
volumes:
- /root/data/docker_data/lsky-pro/lsky-pro-data:/var/www/html # 映射到本地
ports:
- 7791:80
environment:
- MYSQL_HOST=mysql
- MYSQL_DATABASE=lsky-pro
- MYSQL_USER=lsky-pro
- MYSQL_PASSWORD=lsky-pro
mysql:
image: mysql:8.0
container_name: lsky-pro-db
restart: always
environment:
- MYSQL_DATABASE=lsky-pro
- MYSQL_USER=lsky-pro
- MYSQL_PASSWORD=lsky-pro
- MYSQL_ROOT_PASSWORD=lsky-pro
volumes:
- /root/data/docker_data/lsky-pro/db:/var/lib/mysql
  • 保存  docker-compose.yml  文件,然后在该目录下执行  docker-compose up -d  命令来启动兰空图床容器。 - 等待容器创建完成后,在浏览器中输入相应的地址和端口号(如 7791 端口)访问兰空图床的安装页面,后续步骤与上述通过宝塔面板部署的安装步骤类似,填写数据库信息等完成安装。

不同的操作系统和具体环境可能会导致一些细节上的差异,如果在部署过程中遇到问题,建议参考兰空图床的官方文档或相关的技术论坛获取更详细的帮助和解决方案。同时,确保遵守相关的法律法规和软件使用规定。

前言

本教程基于绿联的NAS设备DX4600 Pro的docker功能进行搭建。

简介

NginxWebUI是一个基于Java的,专门用来管理Nginx的图形界面工具。它是开源的,使用相对简单且功能全面。

使用NginxWebUI,用户可以在图形界面中完成Nginx的配置管理,不需要直接编辑配置文件。它提供了对Nginx的各项功能的可视化操作,包括服务器的启动、停止、重载配置、编辑配置文件等。

NginxWebUI通过直观的界面和操作,可以极大地简化Nginx的管理工作,特别适合不熟悉命令行操作或者希望简化Nginx管理工作的用户。

另外,NginxWebUI还支持多节点管理,可以在一个界面上管理多台Nginx服务器。这对于管理大规模、分布式的Nginx环境是非常有帮助的。

在功能上,NginxWebUI除了基本的启动、停止、重载配置等操作,还支持配置文件的备份和恢复,支持查看Nginx的状态和日志,支持配置负载均衡和代理设置等。
enter description here

部署

打开Docker管理器,在“镜像管理”中选择“镜像仓库”,在右上角进行搜索cym1102/nginxwebui​​​,找到如下图所示的镜像进行下载。
enter description here
下载完成以后,在“本地镜像”中找到它,点击“创建容器”。
enter description here
勾选“创建后启动容器”,然后直接点击“下一步”。
enter description here
将“基础设置”中的重启策略配置成“容器退出时总是重启容器”。
enter description here
将“网络”中的“网络名称”配置成“host​​​”。

这里必须使用“host”,因为内部nginx可能使用任意一个端口, 所以必须映射本机所有端口。
enter description here
在NAS中创建一个目录,用于保存nginxwebui的配置和数据,在“存储空间”内与容器的/home/nginxWebUI​​​目录建立映射,并配置为“读写”类型。
enter description here
在“环境”中,点击“添加”,增加一行,配置好后,点击“下一步”。

表格

参数示例:

1
2
3
4
5
6
--server.port={port}​
​--project.home={path}​
​--spring.database.type=mysql​
​--spring.datasource.url=jdbc:mysql://{ip}:{port}/nginxwebui​
​--spring.datasource.username={username}​
​--spring.datasource.password={password}​

enter description here
完成以上步骤后,检查一下,确认无误后直接点击“完成”。
enter description here
在浏览器中输入{IP}:{Port}​​,即可访问。
enter description here
使用
请参考官方文档 nginxWebUI Doc(https://gitee.com/cym1102/nginxWebUI)


一、前言
没有申请到公网IP,内网穿透只好选用zerotier,好处就是P2P端点的带宽,不受云服务器和FRP带宽限制。

打算用zerotier组建了笔记本——NAS——手机三个端,满足NAS在IPV4大内网环境下的相互访问。

zerotier主服务器在外网会有网络波动风险,打算自行构建Moon节点缓解并提升访问速度。

二、新建网络
https://www.zerotier.com注册账号,登陆后点击Create A Network 创建一个虚拟网络,复制下NETWORK ID备用。

enter description here

点进去修改下信息,最好选择Private安全一些。
enter description here

三、window端操作

zerotier下载地址:https://www.zerotier.com/download/,选择Window下载。 

安装之后,桌面任务栏右下角选择Join New Network加入网络,粘贴之前复制的NETWORK ID。

回到zerotier网页,往下翻到 Members条目,点击Auth?给授权。


至此,Windows操作系统的笔记本已经加入该虚拟网络。
四、手机端操作
ios需要科学上网其他区的Apple ID下载zerotier App,安卓需要去应用商店下载zerotier App,安装完毕后同样选择加入新网络,填写NETWORK ID即可,记得在软件的设置中勾选使用手机流量数据(ios不用)。

五、NAS&Linux端操作
NAS中zerotier的安装可参考群晖安装docker zerotier_docker安装zerotier_xiliu542的博客-CSDN博客

采用docker的方式在黑群晖中安装zerotier,鉴于最近群晖docker套件中搜索注册表总是抽风,直接ssh安装。

ssh进入NAS,输入下面命令搜索。

1
sudo docker search zerotier-synology

输入下面命令安装。

1
sudo docker pull zerotier-synology

enter description here
安装后返回群晖docker,在映像中选择zerotier-synology并配置。
enter description here
配置内容如下:
enter description here
enter description here
enter description here

enter description here
enter description here
双击这个容器出现下图选择“终端机”,点击“新增”右边的下三角标按钮,选择”通过命令启动”。
enter description here
出现对话框后输入zerotier-cli join 粘贴之前复制的NETWORK ID。
enter description here
然后点击左侧的zerotier-cli,显示 200 join OK。
enter description here
继续去网页授权,现在这三个端可以互相访问,访问IP为Managed IPs
enter description here

五、Moon搭建和优化

zerotier默认使用全球的服务节点,高峰时刻不稳定,官方也有说明,可以搭建自己的moon服务器作为跳板,加速网络,但应注意需要公网IP,为此选择三丰云的免费云服务器(需要注册及简单的实名认证)。

我选择了以下配置,请记住公网IP:
enter description here
moon 服务器搭建较为简单,登录云服务器后,如下下载安装:

1
curl -s https://install.zerotier.com/ | sudo bash

进入 zerotier 配置目录。

1
cd /var/lib/zerotier-one

生成 moon.json 签名文件,并编辑

1
zerotier-idtool initmoon identity.public >>moon.jsonvi moon.json

将你的公网IP添加到”stableEndpoints”: [] 中,类似 “stableEndpoints”: [ “xxx.xxx.xx.xxx/9993”] 这种。后面的端口若没有改变则默认都是9993端口, 且是UDP协议的, 此处在防火墙上需要开放UDP,否则是连接不上Moon的.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"id": "3648b35427",
"objtype": "world",
"roots": [
{
"identity": "3648b35427:0:49fbcc3fb665ac07dbbf5825a63d771d38dcc37f94393de88766d3a39a488156e02f6d816e3a3a3684af5d2385b7401944ce54651fd8de6b2a13f4d8d0ec9a5c",
"stableEndpoints": ["34.84.xxx.xxx/9993"]
}
],
"signingKey": "3475482010c71caf78bf00573552ebcd53cd83b2e09572374eaeae2383c9773d9d0c697e4ee0b3ae4a74e20abd04651c9fe6a339a1077f47bbeedce2a10d44f1",
"signingKey_SECRET": "294e4d31e71847eeea842aa60c2aba603f95666263970bb39e21eb4c349ee77c265bf903fce3b1870f9825346b87de7861b1538f24006d93e20b90f1a9bd9913",
"updatesMustBeSignedBy": "3475482010c71caf78bf00573552ebcd53cd83b2e09572374eaeae2383c9773d9d0c697e4ee0b3ae4a74e20abd04651c9fe6a339a1077f47bbeedce2a10d44f1",
"worldType": "moon"
}

生成 .moon 签名文件

1
zerotier-idtool genmoon moon.json

目录下会有一个.moon后缀文件生成,把它复制到moon.d文件夹下,重启systemctl restart zerotier-one.service,moon服务器搭建成功。

其他端接入这个moon,先复制服务器的id,通过 zerotier-cli info 查看。

windows通过管理员运行cmd,输入 zerotier-cli.bat orbit Moon服务器的id Moon服务器的id

linux直接输入 zerotier-cli orbit Moon服务器的id Moon服务器的id

最后通过 zerotier-cli listpeers 有出现MOON成功。
enter description here
六、总结
互相ping,看下延迟。

结束。

0%