马卫青的博客

爱思思爱猫爱技术

前言:

为什么需要内网穿透功能?

从公网中访问自己的私有设备向来是一件难事儿。
自己的主力台式机、NAS等等设备,它们可能处于路由器后,或者运营商因为IP地址短缺不给你分配公网IP地址。如果我们想直接访问到这些设备(远程桌面,远程文件,SSH等等),一般来说要通过一些转发或者P2P组网软件的帮助。
我有一台计算机位于一个很复杂的局域网中,我想要实现远程桌面和文件访问,目前来看其所处的网络环境很难通过简单的端口映射将其暴露在公网之中,我试过这么几种方法:

  1. 远程桌面使用TeamViewer。可用,但需要访问端也拥有TeamViewer软件,不是很方便,希望能使用Windows自带的远程桌面。且TeamViewer不易实现远程文件访问。
  2. 使用蒲公英VPN软件进行组网,可用,但免费版本网络速度极慢,体验不佳,几乎无法正常使用。
  3. 使用花生壳软件进行DDNS解析,可用,但同第二点所述,免费版本有带宽限制,无法实际使用。
  4. 搭建frp服务器进行内网穿透,可用且推荐,可以达到不错的速度,且理论上可以开放任何想要的端口,可以实现的功能远不止远程桌面或者文件共享。

frp是什么?

1.frp是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务, 支持tcp, udp, http,https等协议类型,并且web服务支持根据域名进行路由转发。
2.frp内网穿透主要用于没有公网IP的用户,实现远程桌面、远程控制路由器、
搭建的WEB、FTP、SMB服务器被外网访问、远程查看摄像头、调试一些远程的API(比如微信公众号,企业号的开发)等。
3.为什么要选择frp?市面上提供内网穿透服务的公司对免费的用户是有限制的,
本站免费提供无限流量、无限域名绑定、不限制网速、不限制连接数的内网穿透服务。

准备工作

搭建一个完整的frp服务链,我们需要:

  1. VPS一台(也可以是具有公网IP的实体机)
  2. 访问目标设备(就是你最终要访问的设备)
  3. 简单的Linux基础(会用cp等几个简单命令即可)

VPS相关

因为frp的原理是利用服务端(所准备的VPS)进行转发,因而VPS的速度直接决定了之后连接的质量,请根据自己的需要选择相应主机配置。

我这里测试使用的是腾讯云4核4G的轻量应用服务器,采用的宝塔Linux面板 7.6.0 腾讯云专享版。

下边开始正式的配置:

1.服务端配置

SSH连接到VPS或者通过宝塔面板终端运行如下命令查看处理器架构,根据架构下载不同版本的frp。

1
arch

enter description here
查看结果,如果是“X86_64“即可选择”amd64”,
运行如下命令,根据架构不同,选择相应版本并进行下载。

1
wget https://github.com/fatedier/frp/releases/download/v0.42.0/frp_0.42.0_linux_amd64.tar.gz

enter description here
然后解压

1
tar -zxvf frp_0.42.0_linux_amd64.tar.gz

enter description here
文件夹改个名,方便使用

1
cp -r frp_0.42.0_linux_amd64 frp

把解压出来的文件夹复制到你想要的目录下,这里我放在了/root/frp路径下。

1
cd frp

查看一下文件

1
ls -a

我们只需要关注如下几个文件

1
2
3
4
frps
frps.ini
frpc
frpc.ini

enter description here
前两个文件(s结尾代表server)分别是服务端程序和服务端配置文件,后两个文件(c结尾代表client)分别是客户端程序和客户端配置文件。
因为我们正在配置服务端,可以删除客户端的两个文件

1
2
3
rm frpc
rm frpc.ini
rm frpc_full.ini

然后修改frps.ini文件

1
vim frps.ini
1
2
3
4
5
6
[common]
bind_port = 7000
dashboard_port = 7500
token = 41f1a553fd725468436eeac92425285f9accbd21e31325575ee27ab1ea928931
dashboard_user = root
dashboard_pwd = admin

如果没有必要,端口均可使用默认值,token、user和password项请自行设置。 “bind_port”表示用于客户端和服务端连接的端口,这个端口号我们之后在配置客户端的时候要用到。

“dashboard_port”是服务端仪表板的端口,若使用7500端口,在配置完成服务启动后可以通过浏览器访问 x.x.x.x:7500 (其中x.x.x.x为VPS的IP)查看frp服务运行信息。 “token”是用于客户端和服务端连接的口令,请自行设置并记录,稍后会用到。 “dashboard_user”和“dashboard_pwd”表示打开仪表板页面登录的用户名和密码,自行设置即可。 “vhost_http_port”和“vhost_https_port”用于反向代理HTTP主机时使用。

之后我们就可以运行frps的服务端了

1
./frps -c frps.ini

如果看到屏幕输出这样一段内容,即表示运行正常,如果出现错误提示,请检查上面的步骤。
enter description here
注意:VPS服务器和宝塔面板中需要放行7000、7500等你需要映射的端口段,后续调试用。
enter description here
此时访问服务器ip地址:7500并使用自己设置的用户名密码登录,即可看到仪表板界面。
enter description here

服务端后台运行

至此,我们的服务端仅运行在前台,如果Ctrl+C停止或者关闭SSH窗口后,frps均会停止运行,因而我们使用 nohup命令将其运行在后台。
nohup后台程序管理或关闭相关命令可自行查询资料,上面这个连接中也有所提及。

1
nohup ./frps -c frps.ini &

输出如下内容即表示正常运行:
enter description here
此时可先使用Ctrl+C关闭nohup,frps依然会在后台运行,使用jobs命令查看后台运行的程序

1
jobs

enter description here
此时访问服务器ip地址:7500依然可以打开仪表板界面,至此,服务端即设置完成。

关闭frp进程

找到frp进程

1
ps -aux|grep frp| grep -v grep

enter description here
进程号是18066
kill该进程

1
2
# 命令格式:kill -9 <pid>
kill -9 18066

配置systemctl来控制frps

1、创建frps.service

1
sudo vim /lib/systemd/system/frps.service

2、在frps.service里添加以下内容

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=frps service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
#启动服务的命令(此处写你的frps的实际安装目录)
ExecStart=/root/frp/frps -c /root/frp/frps.ini

[Install]
WantedBy=multi-user.target

注意”ExecStart=”之后的路径要填写你的frps安装路径(本文以安装到/root/frp/为例)
对应的文件地址:
enter description here
3、使用systemctl命令来控制frps

1
sudo systemctl start frps

服务器开机自动启动frps

1
sudo systemctl enable frps

重启frps

1
sudo systemctl restart frps

停止frps

1
sudo systemctl stop frps

查看日志

1
sudo systemctl status frps

如下图所示,已可以通过systemctl来启动并查看frps的状态
enter description here

2.客户端设置

frp的客户端就是我们想要真正进行访问的那台设备,大多数情况下应该会是一台Windows主机,因而本文使用Windows主机做例子。Linux配置方法类似。 同样地,根据客户端设备的情况选择相应的frp程序进行下载,Windows下下载和解压等步骤不再描述。
假定你下载了“frp_0.42.0_windows_amd64.zip”,将其解压在了C盘根目录下,并且将文件夹重命名为“frp”,可以删除其中的frps和frps.ini、frps_full.ini文件。
下载地址:
https://github.com/fatedier/frp/releases/download/v0.42.0/frp_0.42.0_windows_amd64.zip
用文本编辑器打开frpc.ini,与服务端类似,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[common]
server_addr = 你的服务器ip
server_port = 7000
token = 41f1a553fd725468436eeac92425285f9accbd21e31325575ee27ab1ea928931

[web]
type = http
local_port = 29980
custom_domains = 你的服务器ip
[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 7001
[smb]
type = tcp
local_ip = 127.0.0.1
local_port = 445
remote_port = 7002
[web1]
type = tcp
local_port = 29980
local_ip = 127.0.0.1
remote_port = 29980
[web2]
type = tcp
local_port = 12302
local_ip = 127.0.0.1
remote_port = 12302

其中common字段下的三项即为服务端的设置。
“server_addr”为服务端IP地址,填入即可。
“server_port”为服务器端口,填入你设置的端口号即可,如果未改变就是7000
“token”是你在服务器上设置的连接口令,原样填入即可。

自定义规则

frp实际使用时,会按照端口号进行对应的转发,原理如下图所示:
enter description here
上面frpc.ini的rdp、smb字段都是自己定义的规则,自定义端口对应时格式如下。
“[xxx]”表示一个规则名称,自己定义,便于查询即可。
“type”表示转发的协议类型,有TCP和UDP等选项可以选择,如有需要请自行查询frp手册。
“local_port”是本地应用的端口号,按照实际应用工作在本机的端口号填写即可。
“remote_port”是该条规则在服务端开放的端口号,自己填写并记录即可。 RDP,即Remote Desktop
远程桌面,Windows的RDP默认端口是3389,协议为TCP,建议使用frp远程连接前,在局域网中测试好,能够成功连接后再使用frp穿透连接。
SMB,即Windows文件共享所使用的协议,默认端口号445,协议TCP,本条规则可实现远程文件访问。
配置完成frpc.ini后,就可以运行frpc了。 frpc程序不能直接双击运行!
使用命令提示符或Powershell进入该目录下

1
cd C:\frp

并执行

1
./frpc -c frpc.ini

运行frpc程序,窗口中输出如下内容表示运行正常。
enter description here

不要关闭命令行窗口,此时可以在局域网外使用相应程序访问 x.x.x.x:xxxx (IP为VPS的IP,端口为自定义的remote_port)即可访问到相应服务。
enter description here
enter description here

客户端后台运行及开机自启

rpc运行时始终有一个命令行窗口运行在前台,影响美观,我们可以使用一个批处理文件来将其运行在后台,而且可以双击执行,每次打开frpc不用再自己输命令了。
在任何一个目录下新建一个文本文件并将其重命名为“frpc.bat”,编辑,粘贴如下内容并保存。

1
2
3
4
5
6
7
8
@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
REM
cd C:\frp
frpc -c frpc.ini
exit

将cd后的路径更改为你的frpc实际存放的目录。
之后直接运行这个 .bat 文件即可启动frpc并隐藏窗口(可在任务管理器中退出)。
enter description here
至于开机启动,把这个.bat文件直接扔进Windows的开机启动文件夹就好了。 至此,客户端配置完成,之后就是你自己根据需要在frpc.ini后追加规则即可。
强烈建议你在使用frp直接测试内网穿透前,先在局域网内测试好相关功能的正常使用,并配置好可能会影响的Windows防火墙等内容,在内网调试通过后再使用frp进行内网穿透测试。

自动启动 frp 服务–使用 systemctl

新建 frp.service 文件

1
sudo nano /lib/systemd/system/frp.service

写入以下内容,注意区分 服务端 和 客户端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=frp service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
# 服务端
ExecStart=/home/ubuntu/frp/frps -c /home/ubuntu/frp/frps.ini
# 客户端
# ExecStart=/root/frp/frpc -c /root/frp/frpc.ini

[Install]
WantedBy=multi-user.target

使用 systemctl 启动服务

1
2
3
4
5
6
7
8
9
10
# 启动frp
sudo systemctl start frp
# 开机自启动
sudo systemctl enable frp
# 重启
sudo systemctl restart frp
# 停止
sudo systemctl stop frp
# 查看日志
sudo systemctl status frp

enter description here
1.图床选择 最近因为家里人有使用图床的需求,又担心第三方图床跑路导致数据丢失,恰好家里有个威联通NAS,还有公网IP和域名,既然如此,那就动手自建一个图床吧,毕竟开源的图床应用还是有很多的。 一上来就在好几个开源图床间纠结,最终在 https://hostloc.com/thread-988538-1-1.html 找到一个网友投票,那就从众吧,选择了兰空图床。
enter description here
2.创建图床容器 首先我们在威联通中使用FileStation创建一个文件夹用于存放图床的文件内容。
enter description here
然后去docker hub社区搜索兰空图床镜像。
enter description here
找到下载和收藏量最高的镜像,这里大家可以直接拷贝镜像名:halcyonazure/lsky-pro-docker,然后打开威联通上的容器工作站,创建一个容器,填写镜像名,然后点击下一步。
enter description here
在“配置容器”选项页中,先配置一个映射端口,用于我们后续通过Ip和端口访问图床后台页面,只要端口不与其他应用冲突就行。 先别点击下一步,点击左下角的“高级设置”,我们设置下映射目录。
enter description here
选择左侧的“存储”,如下图所示选择“绑定装载主机路径”选项。
enter description here
“主机”路径选择我们一开始在威联通主机上创建的存储文件夹,“容器”路径填写为:/var/www/html,这样做的目的是为了避免容器损坏或重建时图片数据丢失。
enter description here
上述配置完成后,我们点击完成,开始容器创建流程。
enter description here
稍等一小下,如下图所示,容器创建完成。
enter description here
3.初始化设置 我们可以使用http://IP:端口的形式访问兰空图床页面,第一次访问会打开安装设置页面。
enter description here
选择数据库为sqllite,设置管理员账号的邮箱和登录密码。信息设置完成后,点击“立即安装”。
enter description here
如下图所示,初始化安装成功。
enter description here
接下来我们再通过IP:端口的方式进行访问,会打开图片上传页面,我们点击右上角的“登录”选项,使用上面填写的邮箱账号和密码登录后台,进行一系列设置。
enter description here
登录成功后,界面如下所示,有很多管理员设置选项。
enter description here
系统设置里可以修改一系列限制、注册、空间大小等,如果是私人使用,那就关闭注册和游客上传吧。
enter description here
4.设置公网访问 试着上传一张图片,可以得到图片链接,在浏览器访问这个链接就可以看到上传的图片啦。不过这里得到的是内网地址,通过公网是无法访问的,接下来我们使用Nginx Proxy Manager(下文简称NPM)进行反向代理,实现公网访问。
enter description here
我们在NPM中新增域名代理,在Details中设置内网地址和端口。
enter description here
设置SSL访问和证书。
enter description here
还要一步也很重要,在Advanced选项中配置自定义规则,缺少这些配置,会导致页面无法正常显示。
enter description here
代码如下所示,记得修改IP和端口。

1
2
3
4
5
6
7
8
9
10
11
location / {
# We set up the reverse proxy
proxy_pass http://内网IP:端口;
proxy_http_version 1.1;

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect http:// $scheme://;
proxy_set_header Host $http_host;
}

接下来去DDNS-GO设置DDNS上报,将我们的域名和IP地址的映射关系上报给域名服务器。上报成功后,会在DNS服务器增加一条规则,后面就可以直接使用域名访问了。
enter description here
如果一切顺利的话,就可以通过域名进行访问啦,因为我关闭了游客上传,所以在没有登录的情况下访问会默认进入登录页,页面如下图所示。
enter description here
如果缺少上面说的NPM自定义规则,访问页面会展示异常,缺少样式文件,如下图所示的异常状态。
enter description here
登录成功后,记得去图床中修改访问网址,改为域名访问,这样上传图片后得到的图片链接就是带域名格式的链接,可以直接在公网访问。
enter description here
还有一点,如果你想对上传的图片进行压缩,或者设置图片的转换格式,可以在角色组中进行设置,如下图所示,我将图片格式设置为webp,将图片保存质量设置为75。
enter description here
5.安装快捷传图工具 如果每次都打开网页上传图片还是挺麻烦的,接下来我们安装一个小工具PicGo,实现图片自动上传和链接拷贝。 PicGo的安装请看我之前的文章,有非常详细的介绍。PicGo安装好之后,我们需要获取兰空图床的token,后面在插件中需要用到。这里我使用的是postman来获取V2版本的token,使用POST访问兰空图床token获取地址,格式为:域名/api/v1/tokens,在Body中使用form-data格式设置email和password,最后点击Send发起请求,拷贝结果中的token信息备用。
enter description here
PicGo安装好之后,我们需要安装兰空图床的插件,可以搜索“lsky”,安装如图所示lankong插件。
enter description here
插件安装成功后,在左侧图床设置下选择“lankong”,编辑相关配置。
enter description here
如下图所示选择V2版本,填写你的域名和token,需要在token前添加 Bearer ,填写完成后点“确定”保存配置信息,注意在token字符串“1”前面有个空格。
enter description here
接下来选择插件左侧的“上传区”,选择刚才编辑的“兰空”图床上传图片测试。
enter description here
上传成功后就可以得到图片链接,如下图所示还会有消息提示。
enter description here
PicGo插件支持快捷键传图,可以实现截图或者复制图片到粘贴板后使用快捷键一键传图,不需要再打开这个工具,非常方便!如果你感兴趣的话,可以看看我之前的图床文章,有详细的介绍。 通过上面的步骤我们就在威联通上安装好了自己的图床应用,并实现快捷传图和公网访问,所有数据一手掌握,从此再也不怕第三方图床跑路啦! 本文使用到的NPM和DDNS-GO在我之前的文章中有详细介绍,如果你没有看过的话,强烈推荐一读!

什么是兰空图床?

为个人站长、开发者、写博文爱好者开发的图床程序,同时可用作网络云相册。

构建镜像

之前有读者给我推荐了兰空图床,既然是好东西当然要折腾一下。
enter description here如果你自己构建镜像,建议用Dockerfile 文件地址:https://github.com/Handsomedoggy/lsky-pro/blob/master/Dockerfile

参考文档中还有一个基于 docker ubuntu:18.04 构建的 Dockerfile

1
2
3
4
5
# 构建镜像
docker build -t wbsu2003/lskypro:v1 .

# 运行容器
docker run --name=lskypro -p 4080:80 -v /var/www/html:/var/www/html wbsu2003/lskypro:v1

安装
数据库
通过 phpMyAdmin 在 MariaDB 5 中新建用户 lsky,创建同名的库 lsky 并授予所有权限。
enter description here

安装镜像

在群晖上以 Docker 方式安装。

在注册表中搜索 lskypro ,选择第二个 wbsu2003/lskypro,版本选择 latest。
enter description here

在 docker 文件夹中,创建一个新文件夹,并将其命名为 lskypro

文件夹 装载路径 备注
/docker/lskypro /var/www/html 主目录

enter description here
端口
端口不能冲突

本地端口 容器端口 类型
4080 80 TCP

enter description here
运行
在浏览器中输入 http://群晖IP:4080,就能看到设置界面,首先是环境检测
enter description here
设置数据库
enter description here
设置管理员账号
enter description here
安装成功
enter description here
网站首页
enter description here
登录进入后台
enter description here

图片鉴黄

和 ImgURL 一样,使用 Moderate Content 提供的 API 来进行图片鉴黄

建议直接看 『 一款简单纯粹的图床ImgURL 』的【图片鉴黄】部分,申请的流程步骤是一样的

复制 API key
enter description here
系统设置 –> 图片鉴黄 –> key,开启图片鉴黄 然后保存即可
enter description here

存储策略

ImgURL 虽然也支持第三方存储,但是需要购买专业版,这一点上兰空没有做限制
enter description here
 不过老苏没有兰空支持的第三方存储,所以没测试,只能直接略过了。只使用本地存储的话可以留空,去首页上传一张试试
enter description here

其他

之前有读者问我 ImgURL 能不能当云盘用,老苏还真没注意,但是 LskyPro 肯定是可以的
enter description here

首先在 允许上传的文件后缀 中增加你要上传的文件类型,再 配合修改最大上传大小 和 用户初始配额容量 就可以了。

下图ߑ祰ᦘ露सꂠzip 文件
enter description here

参考文档

wisp-x/lsky-pro: ☁️兰空图床(Lsky Pro) - Your photo album on the cloud.
地址:https://github.com/wisp-x/lsky-pro

Handsomedoggy/lsky-pro: ☁️兰空图床(Lsky Pro) - Your photo album on the cloud.
地址:https://github.com/Handsomedoggy/lsky-pro

Lsky Pro - Your photo album on the cloud.
地址:https://www.lsky.pro/

简要 · Lsky Pro 使用手册 · 看云
地址:https://www.kancloud.cn/wispx/lsky-pro/880042

Docker搭建lskypro兰空图床
地址:https://foxi.buduanwang.vip/linux/docker/323.html/

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不断电系统

待完善。

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)

0%