LVM逻辑卷分区掉电故障后恢复——让Linux服务器更安全的SSH端口敲门配置实践教程

Linux的xfs文件系统元数据故障恢复实践教程

一、LVM逻辑卷根分区掉电故障后恢复

1.1、故障描述

Linux服务器在机房正常运行多年,由于机房的电源出现故障后,导致Linux服务器直接掉电;等电影故障修复完成后,重启Linux服务器后,就无法正常启动进入系统,界面显示进入紧急模式,报错信息类似"Generating /run/initramfs/rdsosreport.txt

Entering emergency mode. Exit the shell to continue.

Type "journalctl" to view system logs.

You might want to save "/run/initramfs/rdsosreport.txt" to a usb stick or /boot after mounting them and attach it to a bug report. "如下图所示:

1.2、故障恢复

Linux系统故障排查思路实践教程(上)

1.2.1、进入系统救援模式

由于目前在紧急模式下可以使用的命令并不多,因此建议使用系统救援模式进行操作(即:【在主机上插入系统启动U盘,并将U盘设置为第一启动项后启动,选择【Troubleshooting】按下Enter键后-->选择【Rescue a Rocky Linux system】按下Enter键即准备进入系统救援模式-->【输入1】后按下Enter键以读写方式进入系统救援模式】)

1.2.2、在系统救援模式下进行故障分析并修复

Linux的磁盘存储管理实操------(下二)------逻辑卷管理LVM的扩容、缩容

bash 复制代码
#在系统救援模式下进行故障分析
#1-先查看当前的系统挂载点情况
df -hT

#2-查看磁盘的分区情况
fdisk -l
parted -l
lsblk

#3-查看系统逻辑卷组及其包含多少个逻辑卷信息(如:这里可以看到【rl】卷组分为了三个逻辑卷【/dev/rl/root】【/dev/rl/swap】【/dev/rl/home】且这三个逻辑卷的状态都是未激活的)
vgdisplay
lvdisplay

#4-激活逻辑卷
vgchange -ay

#5-检查和修复文件系统错误(可查看到系统分区的类型)
fsck /dev/mapper/rl-root

#6-先检查逻辑卷是否有其他严重错误
xfs_repair -n /dev/mapper/rl-root

#7-确认前一步检查逻辑卷的情况输出中没有"fatal"字样的错误后即可对根分区逻辑卷执行正式修复(也可以全部逻辑卷都修复)
xfs_repair /dev/mapper/rl-root
xfs_repair /dev/mapper/rl-home

#8-验证逻辑卷故障是否修复成功(挂载修复后的逻辑分区,若可以正常挂载上则表示修复成功)
mount /dev/mapper/rl-root /mnt
mkdir /test
mount /dev/mapper/rl-home /test
df -hT

#9-重启系统后可以正常进入系统则修复完成
reboot -h now

到这里恭喜你,修复逻辑卷根分区掉电后故障完成。

二、SSH端口敲门技术

2.1、什么是端口敲门

端口敲门(Port Knocking)是一种安全措施,它通过在防火墙上动态打开端口来允许合法用户访问受保护的服务。(SSH端口敲门技术要求用户在尝试连接到SSH服务之前,按照预定义好的暗号(顺序访问一系列隐藏端口)和服务器交互。若暗号对上了,则服务端临时开启ssh访问端口,否则拒绝)。这种技术通过在网络层添加额外的验证步骤,有效地隐藏了实际的服务端口,并减少了被暴力破解的风险。

2.2、端口敲门的工作原理

|--------|-------------|------------------------------------------------------------------|
| 序号 | 端口敲门原理 | 说明 |
| 1 | 预定义端口序列 | Linux的系统管理员设定一组特定的端口序列(如:访问端口1111、2222和3333)这里设置的端口顺序和时间间隔都非常重要。 |
| 2 | 防火墙配置 | 防火墙初始配置为拒绝所有进入的SSH连接请求。 |
| 3 | 敲门事件 | 用户在尝试SSH连接之前,必须按照正确的顺序和时间间隔访问预定义的端口序列。 |
| 4 | 防火墙规则更新 | 当防火墙检测到正确的端口敲门序列时,它会暂时开放SSH端口(如22端口),允许该用户的IP地址连接SSH服务。 |
| 5 | 连接和关闭 | 用户成功连接SSH后,防火墙可以设置为在一段时间后自动关闭SSH端口,以恢复安全状态。 |
[端口敲门的工作原理]

2.3、端口敲门的优点

|--------|-------------|-----------------------------------------------------|
| 序号 | 端口敲门的优点 | 说明 |
| 1 | 隐藏性 | 由于服务端口关闭,因此对外部观察者来说,系统上可能存在的服务是不可见的。 |
| 2 | 安全性 | 不会直接暴露真实的服务端口,只有在正确的端口敲击序列被触发后才会打开相应的端口,这增加了系统的安全性。 |
| 3 | 防止扫描攻击 | 由于服务端口一直处于关闭状态,因此对端口的扫描攻击几乎没有意义。 |
[端口敲门的优点]

端口敲门技术通过增加一个额外的验证步骤,有效地提高了SSH服务的安全性。它不仅隐藏了实际的服务端口,还减少了被暴力攻击的风险。虽然端口敲门并不能替代强密码和双因素认证等其他安全措施,但它作为一种额外的保护层,可以显著增强系统的安全性。通过合理配置和使用端口敲门,你可以大大降低SSH服务被攻击的概率,从而保护你的网络资源和数据安全。

三、使用knockd实现端口敲门

实现端口敲门的方法有多种,这里使用knockd工具实现端口敲门。

3.1、Linux的服务端安装配置knockd工具

在OpenEuler系统上手动安装epel源

bash 复制代码
#Linux服务器端安装配置knockd工具

#方法一:使用源码编译
#1-下载knockd工具
wget https://github.com/jvinet/knock/releases/download/v0.8/knock-0.8.tar.gz -c -P /data
cd /data
tar -zxvf knock-0.8.tar.gz
cd knock-0.8/
#2-编译安装knockd工具(默认的配置文件是【/usr/local/etc/knockd.conf】可执行文件是【/usr/local/sbin/knockd】)
yum update -y
dnf install -y libpcap-devel
autoreconf -fi
./configure --prefix=/usr/local
make && make install


#方法二:直接在线安装knockd服务端【默认的配置文件是【/etc/knockd.conf】】
yum install epel-release -y
yum install knock-server -y


#2-配置knockd的配置文件
vi /etc/knockd.conf
#【/etc/knockd.conf】的完整文件内容如下:
[options]
        #UseSyslog
        Interface= ens33
        LogFile = /var/log/knockd.log
[opencloseSSH]
        sequence      = 2222,3333,4444
        seq_timeout   = 15
        tcpflags      = syn
        start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        cmd_timeout   = 60
        stop_command  = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT


#3-knockd的的服务配置文件默认在【/usr/lib/systemd/system/knockd.service】(可通过【find / -name "knockd.service"】命令查看)
[Unit]
Description=A port-knocking server
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
EnvironmentFile=-/etc/sysconfig/knockd
ExecStart=/usr/sbin/knockd -d $OPTIONS

[Install]
WantedBy=multi-user.target


#4-重启knockd.service服务
systemctl restart knockd.service


#5-禁止外部访问Linux服务器ssh的端口(这里使用iptables)
iptables -I INPUT -i lo -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -I INPUT -p tcp --dport 8000 -j ACCEPT
iptables -P INPUT DROP

Linux的软件防火墙iptables

bash 复制代码
#【knockd.conf】配置文件的配置内容详解:
#任何主机只要在 15 s 内按顺序"敲"2222→3333→4444,服务器就给它开 60 s 的 SSH 窗口,60 s 后自动收回,整个过程无需人工干预。

#【/knockd.conf】的完整文件内容及其解析如下:
[options]
        #UseSyslog
        #只在ens33这块网卡上抓包,防止多网卡时误收敲门包。
        Interface= ens33
        #把敲门成功/失败、规则增删等事件写进自己的日志文件,方便排查;若同时把 #UseSyslog 前面的去掉,则还会再写一份到 syslog。
        LogFile = /var/log/knockd.log
#本条规则的名字,可随意改;一个文件里可以写多条规则,各自监听不同端口序列
[opencloseSSH]
        #正确"敲门"顺序:先触 2222/tcp,再 3333/tcp,最后 4444/tcp,才算一次有效序列。注意,2222/3333/4444这些端口不需要有服务在监听,也**不需要**让防火墙 ACCEPT;只要"能到网卡"就行,knockd 就能"听见"敲门声。如果你在云主机,需要在其安全组/ACL 里**放行** 2222/3333/4444(入方向),否则包在虚拟化层就被丢,knockd 根本收不到。
        sequence      = 2222,3333,4444
        #三次敲门必须在 15 s 内完成,超时或顺序错一次就清零重来。
        seq_timeout   = 15
        #只把 TCP SYN 包当成有效敲门包,ACK/FIN 等包忽略,降低误报。
        tcpflags      = syn
        #一旦序列正确,knockd 立即以 root 身份执行这条命令:%IP% 会被替换成"敲门者"的源地址,效果是把 22 端口仅对该 IP 插入到 INPUT 链最前,允许其 SSH 连入。        
        start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        #start_command 执行完 60 s 后,自动执行对应的 stop_command。
        cmd_timeout   = 60
        #将刚才插入的那条 ACCEPT 规则再删掉,于是 22 端口对该 IP 重新关闭,实现"自动关门"。
        stop_command  = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

鳥哥私房菜 - 使用 knock 管理防火牆相關行為

3.2、客户端如何敲门

要使用端口敲门,可以使用 knock 命令行工具或其他类似工具,例如nc、nmap等。

3.2.1、Linux客户端敲门

bash 复制代码
#Linux客户端敲门

#方法一:安装knock工具
yum install epel-release -y
yum clean all && yum makecache
yum install knock -y

#方法二:安装knock工具
#1-下载knockd工具
wget https://github.com/jvinet/knock/releases/download/v0.8/knock-0.8.tar.gz -c -P /data
cd /data
tar -zxvf knock-0.8.tar.gz
cd knock-0.8/
#2-编译安装knockd工具(默认的配置文件是【/usr/local/etc/knockd.conf】可执行文件是【/usr/local/sbin/knockd】)
yum update -y
dnf install -y libpcap-devel
autoreconf -fi
./configure --prefix=/usr/local
make && make install


#2-最简 TCP 三连敲(对应服务端 2222→3333→4444)
knock -v 192.168.1.43 2222 3333 4444
ssh 192.168.1.43
ssh -p 22 root@192.168.1.43

#3-可在knock的服务器上查看敲门日志
tail -f /var/log/knockd.log 

注意:【knock -v】里的 -v 就是 verbose (详细模式)。 加上它后,客户端每往一个端口发送"敲门"包都会实时打印一行提示,告诉你"包已发出、目标端口、协议",方便你确认序列是否真的按预期打出,也便于在调试时跟抓包结果对照。如果去掉 -v,knock 默认静默执行,成功失败都不回显任何信息。

3.2.2、windows客户端敲门

在 Windows 上并没有官方版 `knock` 客户端,但**"端口敲门"本质是:按顺序向指定端口发送 TCP(或 UDP)包。只要能让目标收到"SYN 到达"即可,因此最方便、最通用的做法就是用 Nmap 的"半开扫描"当敲门锤。**

敲门端口通常不需要建立完整连接,只需让服务端 knockd 看到"SYN 曾到达"。因此最合适的方法是:发 SYN → 收 SYN/ACK 后立即 RST,不完成三次握手,应用层无日志。

bash 复制代码
#windows客户端敲门实践
#1-下载nmap并安装

#2-执行nmap敲门命令
for %p in (2222 3333 4444) do nmap -Pn --max-retries 0 -p %p 192.168.1.43

#3-可在knock的服务器上查看敲门日志
tail -f /var/log/knockd.log