*Cube-Host – 完整的雲端服務!

Linux VPS 安全:SSH 密钥、UFW 和 Fail2Ban

Linux VPS Security: SSH Keys, UFW, and Fail2Ban

我们做什么以及为什么

  • 我们不以root身份工作,而是创建具有sudo权限的管理员。
  • 连接仅通过SSH密钥实现,密码功能已禁用。
  • 启用UFW:“除必要端口外全部关闭”。
  • 安装Fail2Ban:在密码/密钥选择时封锁IP地址。

管理员用户与组

创建用户并将其添加至sudo权限组+限制性SSH组:

				
					sudo adduser admin
sudo usermod -aG sudo admin
sudo groupadd -f sshusers
sudo usermod -aG sshusers admin
id admin
				
			
Linux VPS

SSH密钥:生成与添加

在本地(Windows/macOS/Linux):

				
					ssh-keygen -t ed25519 -C "key-for-admin"
				
			

在服务器上以root管理员或现有管理员身份:

				
					sudo -u admin -H bash -lc 'mkdir -p ~/.ssh && chmod 700 ~/.ssh'
sudo -u admin -H bash -lc 'cat >> ~/.ssh/authorized_keys'   # insert content *.pub, затем Ctrl+D
sudo -u admin -H bash -lc 'chmod 600 ~/.ssh/authorized_keys'
				
			
Linux VPS

重要提示:将 .pub 公钥发送至服务器。私钥需本地存储。

强化 SSH 安全(禁用密码及 root 登录)

打开 /etc/ssh/sshd_config 文件,配置以下选项:

				
					PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowGroups sshusers
				
			

重启SSH:

				
					sudo systemctl restart sshd
				
			
Linux VPS

在禁用密码之前,请确保密钥有效,否则您将失去访问权限。

UFW:默认关闭

				
					sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH        # port 22
sudo ufw allow 80,443/tcp     # if you need a website
sudo ufw enable
sudo ufw status numbered
				
			
Linux VPS

需要额外的端口(例如8080)吗?请添加一条显式规则:sudo ufw allow 8080/tcp。

Fail2Ban:安装与自动启动

				
					sudo apt -y install fail2ban
sudo systemctl enable --now fail2ban
sudo systemctl status fail2ban --no-pager
				
			
Linux VPS

Fail2Ban配置:jail.local用于sshd

创建/修改

				
					/etc/fail2ban/jail.local:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
bantime.increment = true

[sshd]
enabled = true
port    = ssh
filter  = sshd
logpath = /var/log/auth.log
action  = %(action_mwl)s
				
			

重启:

				
					sudo systemctl restart fail2ban

				
			
Linux VPS

%(action_mwl)s 发送一封电子邮件(如果电子邮件已配置)+ 记录日志,同时封禁该IP地址。

Fail2Ban 与 UFW 的集成(替代方案)

创建一个文件

				
					/etc/fail2ban/jail.d/ufw-sshd.local:
[sshd]
enabled = true
action = ufw
maxretry = 5
findtime = 10m
bantime = 1h

				
			

申请:

				
					sudo systemctl restart fail2ban
				
			
Linux VPS

功能与协议验证

				
					sudo fail2ban-client status
sudo fail2ban-client status sshd
sudo tail -n 200 /var/log/fail2ban.log
sudo journalctl -u ssh --since "today"
sudo ufw status verbose

				
			
Linux VPS

测试封锁效果:从其他节点进行5至6次失败的连接尝试,并检查sshd状态:该IP地址将出现在被封锁IP地址列表中。

安全加分项(可选)

  • 更改SSH端口(非安全措施,但可减少扫描器干扰):在sshd_config中设置端口2222 + ufw allow 2222/tcp。
  • 限制组级别的SFTP访问(chroot)。
  • 为SSH启用双因素认证:libpam-google-authenticator + 配置/etc/pam.d/sshd和sshd_config(AuthenticationMethods publickey,keyboard-interactive)。
  • 限制Sudo尝试次数:passwd -l root,sudo visudo设置timestamp_timeout=5。

安全检查清单

  • 密钥连接正常工作,密码和root连接已禁用。
  • UFW:拒绝入站连接/允许出站连接,仅开放必要端口。
  • Fail2Ban保护sshd(可选保护nginx/postfix/…);协议已验证。
  • 已执行阻断测试,规则和访问记录已存档。