lamess / SSH基本安全措施

Created Mon, 27 Oct 2025 10:29:14 +0800 Modified Mon, 27 Oct 2025 10:29:14 +0800
1402 Words

SSH基本安全措施

使用自定义 SSH 增量配置文件的维护方案

在进行 SSH 相关配置时,不直接编辑/etc/ssh/sshd_config,避免 OpenSSH 更新后的配置冲突。
/etc/ssh/sshd_config.d/创建一个.conf文件进行自定义 sshd 配置:

sudo mkdir /etc/ssh/sshd_config.d/
sudo touch /etc/ssh/sshd_config.d/sshd.conf
sudo chmod 600 /etc/ssh/sshd_config.d/sshd.conf

之后编辑此自定义配置文件,在里面写入相关配置。

sudo vim /etc/ssh/sshd_config.d/sshd.conf

配置完成后,可以使用``命令确认配置是否写入。例如端口修改后进行确认:

sudo sshd -T | grep -i "port"

安全管理系统

创建非root用户

使用以下命令创建一个具有提权能力的账户:

# Debian/Ubuntu
useradd -m -G sudo -s /bin/bash 用户名
# Red Hat/CentOS/Fedora
useradd -m -G wheel -s /bin/bash 用户名

为此用户设置一个至少为 16 位的随机大小写字母 + 数字的密码

# 生成随机密码
# tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 16
passwd 用户名

禁用root用户通过SSH密码登录

关闭远程密码登录,只允许 root 用户通过本地密码登录。加强安全性的同时,也保留紧急救援的手段。

在 SSH 配置中进行如下设置:

# 禁止 Root 用户通过密码远程登录
PermitRootLogin prohibit-password

配置文件保存后,可以通过命令确认配置是否生效:

sudo sshd -T | grep -i "PermitRootLogin"

注意prohibit-passwordwithout-password的别名,所以如果返回结果中显示without-password是正常现象。

新的配置在重启 SSH 服务后生效:

sudo systemctl restart sshd

修改SSH端口号

同样使用自定义配置文件修改端口号。编辑配置文件写入端口号配置:

# 设置 SSH端口
Port 自拟高位端口

通过命令确认配置是否生效:

sudo sshd -T | grep -i "port"

新的配置在重启 SSH 服务后生效:

sudo systemctl restart sshd

Ubuntu 22.10或更高版本中 SSH 默认通过套接字激活,端口修改方法请参阅相关资料。

设置使用密钥登录

首先在Windows电脑上生成 SSH 密钥,在 Windows 客户端电脑上打开 powershell 并运行命令生成密钥。

ssh-keygen -t ed25519 -C "选填注释信息"

可以使用默认的密钥路径进行生成。密码可以按需配置或直接留空。

Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\<user>/.ssh/id_ed25519): # 直接回车以使用默认路径
Enter passphrase (empty for no passphrase): # 可以留空或按需设置
Enter same passphrase again: # 重复输入密码配置

打开 Windows 上的C:\Users<user>/.ssh/id_ed25519.pub文件,复制密钥文本。

切换到 Linux 服务器操作,编辑登录账户的 SSH 授权密钥文件:

su - 用户名
sudo vim ~/.ssh/authorized_keys

将前面复制的密钥文本内容粘贴到此文件中。

之后使用自定义 SSH 配置文件修改登录设置。编辑自定义配置文件:

sudo vim /etc/ssh/sshd_config.d/sshd.conf

进行如下设置:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no

新的配置在重启 SSH 服务后生效:

sudo systemctl restart sshd

之后可以使用密钥鉴权进行 SSH 连接,在 SSH 工具中使用之前生成的私钥C:\Users<user>/.ssh/id_ed25519进行连接。

禁止ping服务器

对于使用firewalld防火墙的操作系统,可以方便地禁止 ping 服务器:

sudo firewall-cmd --permanent --add-icmp-block=echo-request
sudo firewall-cmd --reload

对于使用ufw管理防火墙规则的操作系统,可以在/etc/ufw/before.rules增加配置:

-A ufw-before-input -p icmp --icmp-type echo-request -j DROP
-A ufw-before-forward -p icmp --icmp-type echo-request -j DROP

如果还需要在ipv6侧进行禁 ping 配置,则修改/etc/ufw/before6.rules文件:

-A ufw6-before-output -p icmpv6 --icmpv6-type echo-request -j DROP
-A ufw6-before-output -p icmpv6 --icmpv6-type echo-reply -j DROP

限制特定用户只能从特定 IP 登录

除了直接通过防火墙限制 SSH 的登录 IP 地址,还可以在 SSH的配置文件限制特定用户只能从特定 IP 登录。

在 SSH 配置文件中增加AllowUsers配置,其中 IP 地址支持通配符*但不支持 CIDR 表示法:

AllowUsers user1@192.168.1.100 user2@10.0.0.* user3@192.168.1.101

注意:

  • 新的配置在重启 SSH 服务后生效
  • 配置后,只有明确允许的用户+IP组合才能登录
  • 务必确保当前用户和 IP 在允许列表中,否则会被锁定
  • 建议保持一个已登录的会话进行测试