基于Debian搭建HomeNAS
基于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 | cat <<EOF > /etc/apt/sources.list |
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 | . /etc/os-release |
3.2 安装Cockpit附属组件
官方组件
1、虚拟机,在浏览器中创建、运行和管理虚拟机。(按需安装,非必要插件)
1 | . /etc/os-release |
2、Podman 容器,在浏览器中下载、使用和管理容器。(按需安装,非必要插件)
1 | . /etc/os-release |
3、cockpit-pcp,Cockpit面板的历史数据插件。
1 | . /etc/os-release |
第三方组件
配置45Drives Repo安装脚本,安装脚本将自动检测您的发行版并将适当的文件添加到您的系统。该脚本还将保存任何与 45Drives 相关的旧存储库(如果存在)。
下面的命令将下载并运行脚本,而不会在您的系统上留下任何东西!
1 | curl -sSL https://repo.45drives.com/setup | sudo bash |
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 |
要求:
Cockpit: 201+;NFS (Optional);Samba: 4+ (Optional);ZFS: 0.8+;
安装:
1 | git clone https://github.com/optimans/cockpit-zfs-manager.git |
3.3 Cockpit调优
自动注销闲置的用户
在您首选的文本编辑器中,在 /etc/cockpit/ 目录中打开或创建 cockpit.conf 文件,命令:
1 | sudo vim /etc/cockpit/cockpit.conf |
在文件中添加以下文本,以分钟为单位,这里表示为15分钟后自动退出:
1 | [Session] |
保存文件,重启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 | [Session] |
保存该文件,重启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 | [WebService] |
保存文件,重启Cockpit Web 控制台以使更改生效,命令:
1 | sudo systemctl try-restart cockpit |
Cockpit面板登陆后首页展示信息
配置文件路径:
1 | sudo vim /etc/motd |
原文:
1 | The programs included with the Debian GNU/Linux system are free software; |
修改后:
1 | 我们信任您已经从系统管理员那里了解了日常注意事项。 总结起来无外乎这三点: |
防止暴力攻击Web登陆窗口
配置此项设置需已经安装好Fail2ban,否则无效。
编辑defaults-debian.conf文件:
1 | sudo vim /etc/fail2ban/jail.d/defaults-debian.conf |
添加如下内容(只需要插入绿色字体部分内容,灰色部分为默认自带内容):
1 | [sshd] |
保存文件后重启Fail2ban:
1 | sudo systemctl restart fail2ban |
修改Web登陆端口
要更改其端口和/或地址,您应该将以下内容放入文件中:
1 | /etc/systemd/system/cockpit.socket.d/listen.conf |
在该路径中创建尚不存在的文件和目录。该ListenStream 选项指定所需的地址和 TCP 端口。
1 | [Socket] |
注意:第一行的空值是故意的。systemd允许Listen在单个套接字单元中声明多个指令;插入文件中的空值会重置列表,从而禁用原始设备的默认端口 9090。
为了使更改生效,请运行以下命令:
1 | sudo systemctl daemon-reload |
四、系统调优
4.1 设置Cockpit接管网络配置
编辑文件网络配置文件,命令:
1 | sudo vim /etc/network/interfaces |
注销掉里面所有内容:
1 | # This file describes the network interfaces available on your system |
手动配置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 | vm.swappiness=10 |
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 | sudo systemctl start tuned:启动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 | 正在添加用户"test"... |
创建用户过程中,需要填写新创建用户的密码,建议全名项输入与用户名相同的值,其余项可以留空,或者按需填写。
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 | Please select the mail server configuration type that best meets your needs. |
接下来进行逐步配置:
1、邮件系统设置的常见类型:选择第三项,用smarthost 发信;无本地信件。
1 | General type of mail configuration: 3 |
2、系统邮件名称:填写发邮件的邮件域名,如你的发件邮件地址是mymail@qq.com,则这里填写qq.com。
1 | System mail name:qq.com |
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 |
4、其它可接收邮件的目的地址:留空
1 | Other destinations for which mail is accepted: |
5、本地用户的可见域名:这里和第2步一样,填写你的发件邮箱域名,如qq.com。
1 | Visible domain name for local users: qq.com |
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 |
7、保持最小 DNS 查询量吗 (按需拔号,Dial-on-Demand)?否
1 | Keep number of DNS-queries minimal (Dial-on-Demand)? [yes/no] n |
8、将设置文件分拆成小文件吗?否(不搭建复杂的邮件服务器,保持默认就可以,不需要拆分)
1 | Split configuration into small files? [yes/no] n |
9、Root 和 postmaster 邮件的接收者: 空
1 | Root and postmaster mail recipient: |
到这里就完成了,但还不能发邮件。输入命令:
1 | sudo vim /etc/exim4/passwd.client |
在末尾加入(注意修改用户名和密码,密码为邮箱授权码,非登录密码):
1 | qq-smtp.l.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 | # GitHub Host Start |
4.12 添加TMDB Hosts
打开系统hosts文件,命令:
1 | sudo vim /etc/hosts |
粘贴下面内容进去之后保存退出即可。(此Hosts IP具有时效性,请保持定期更新)
1 | # TMDB Hosts Start |
获取最新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 | docker run -d \ |
容器部署完成后,即可通过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 | sudo apt update |
在客户端上创建配置文件 在客户端上,您需要创建一个配置文件,其中包含服务器的公共IP地址和端口,以及客户端的公钥和私钥。您可以使用以下命令创建配置文件:
1 | sudo vim /etc/wireguard/wg0.conf |
在编辑器中,输入刚才下载ubuntu.conf文件里的内容(.conf文件可通过Windows系统的记事本打开):
1 |
|
Endpoint = baidu.com:51820,这里可以填写你服务器的公网IP或者域名,如果是动态公网IP,建议填写域名。
启动WireGuard客户端 在客户端上,您需要启动WireGuard客户端,这可以通过以下命令完成:
1 | #启用 wg-quick 服务,并在系统启动时自动启动该服务。 |
现在,您的Ubuntu系统已经成功连接到您在云服务器上部署的WireGuard服务,您可以通过以下命令来检查连接状态:
1 | sudo wg |
如果一切正常,您将看到类似以下输出:
1 |
|
如果您想禁用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 | # |
参数解析:
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 | # |
常用操作命令:
查看所有用户的尝试失败登录次数
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 | # |
5.5 用户登陆邮件通知告警
通过 PAM 模块,就可以实现用户登录,root 权限获取时,通过邮件等方式进行通知。以实现,预先知道,预先警惕的目标,降低受影响的范围。以下是通过 PAM 模块实现的邮件通知用户登录的功能。
1、以管理员身份登录虚拟机,并切换成 root 用户。
2、新建脚本,命令:
1 | sudo vim /etc/pam.d/login-notifiy.sh |
(该脚本可以存放在任意位置,但是需要将后续的路径指定好即可),内容如下:
1 | #!/bin/bash |
脚本中的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 | # 超时自动退出 |
即超时时间为三分钟。
5.7 记录所有用户的登录和操作日志
通过脚本代码实现记录所有用户的登录操作日志,防止出现安全事件后无据可查。
操作步骤
1 | sudo vim /etc/profile |
打开配置文件,在配置文件末行输入以下内容:
1 | # 在 history 命令中启用时间戳 |
运行命令加载配置生效:
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) |
Firewalld高阶使用
GeoIP和Firewalld组合使用的常见案例主要涉及到基于地理位置的防火墙规则。
5.10 安装自动封锁软件
第 1 步 — 安装 Fail2ban
Fail2ban 在 Ubuntu 的软件存储库中可用。首先以非根用户身份运行以下命令来更新您的软件包列表并安装 Fail2ban:
1 | sudo apt update |
Fail2ban 安装后会自动设置后台服务。但是,默认情况下它是禁用的,因为它的某些默认设置可能会导致不良影响。您可以使用以下systemctl命令验证这一点:
1 | sudo systemctl status fail2ban.service |
终端中输出的内容:
1 | ○ fail2ban.service - Fail2Ban Service |
第 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 | #全局设置 |
不要忘记在每次配置更改后重新启动 Fail2ban 服务。重启命令:
1 | sudo systemctl restart fail2ban |
常用命令:
1 | #启动 |
配置中文邮件格式(可选项,默认为英文):
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 | # Fail2Ban configuration file |
说明
通过curl ifconfig.co获取服务器的外网IP地址,方便知道哪台机报出来的告警。
通过curl https://ip.useragentinfo.com/json?ip =
不要忘记在每次配置更改后重新启动 Fail2ban 服务。重启命令:
1 | sudo systemctl restart fail2ban |
配置完成后效果:
5.11 安装病毒防护软件
ClamAV 是一个开源的防病毒软件,可用于检测木马,病毒,恶意软件和其他恶意威胁。适用于 Linux、macOS 和 Windows 平台。
一、安装ClamAV:
1 | sudo apt-get update |
二、更新病毒数据库
在安装完成后,需要运行以下命令来更新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 | SMART support is: Available - device has SMART capability. |
启用SMART
如果您的驱动器未启用 SMART,您可以通过键入以下内容来启用它:
1 | sudo smartctl -s on /dev/sda |
检查硬盘整体健康状况
1 | sudo smartctl -H /dev/sda |
此命令应返回:
1 | === START OF READ SMART DATA SECTION === |
如果它没有返回 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 | === START OF READ SMART DATA SECTION === |
使用示例:
1 | # 监测硬盘1 |
上述例子来源于/etc/smartd.conf:
1 | # 第一个 ATA/SATA 或 SCSI/SAS 磁盘。 监控所有属性,启用 |
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 | # Add Docker's official GPG key: |
2、安装 Docker Engine、containerd 和 Docker Compose。
1 | # Docker Engine containerd Docker Compose |
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 | #请将路径/srv/volume_1/data/docker/portainer替换为您的,此路径存储Portainer配置文件。 |
安装完成后,可以通过打开 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不断电系统
待完善。