Debian 12服务器初始安全配置与SSH加固
为什么新装Debian 12服务器就要做安全配置
很多新手拿到一台 Debian 12服务器 后,直接用 root 远程操作,SSH 端口保持默认 22,甚至关闭了防火墙。
这样做非常危险——服务器在上线后的几分钟内就可能被扫描工具探测并尝试暴力破解。
本文面向零基础用户,从零开始做完基础安全加固,之后建站、跑服务才能真正放心。
前置准备:你需要的东西
- 一台已安装 Debian 12 的服务器(云服务器或本地虚拟机均可)
- 能通过 SSH 用 root 账户登录(默认密码或密钥登录)
- 本地电脑有终端工具(Windows 可以用 PowerShell 或 Putty;macOS/Linux 直接用终端)
如果你还没有服务器,建议先购买一台最低配置的云服务器或自己用 VirtualBox 安装一个 Debian 12 系统。
第1步:更新系统并安装基础工具
登录 root 后,第一件事就是更新软件源和系统包,修复已知漏洞。
apt update && apt upgrade -y
更新完成后,顺手安装几个后面会用到的工具:
apt install sudo ufw curl wget -y
sudo:让普通用户也能执行管理员命令。ufw:Uncomplicated Firewall,简化 iptables 的前端工具。curl、wget:运维必备的网络工具。
第2步:创建普通用户并赋予 sudo 权限
为什么不能用 root 直接日常操作?
因为 root 权限太大,一旦误操作或者被黑,后果严重。
你应该创建一个普通用户,只在需要时使用 sudo 提权。
adduser yourname
按提示设置密码,其他信息可以直接回车跳过。
然后把它加入 sudo 组:
usermod -aG sudo yourname
测试是否成功:先退出 root 会话(用 exit),再用新用户登录(ssh yourname@服务器IP),然后执行 sudo whoami,如果输出 root 就说明提权正常。
第3步:禁用 root 远程登录,配置 SSH 密钥
这是 Debian 12服务器 加固最关键的一步。
我们将让 SSH 只允许密钥登录,并且禁止 root 直接登录。
3.1 生成 SSH 密钥对(在本地电脑上执行)
Windows 用户请打开 PowerShell,macOS/Linux 用户打开终端:
ssh-keygen -t ed25519 -C "your_email@example.com"
一路回车即可(不设密码更省事,但建议设密码更安全)。
这会在本地 ~/.ssh/ 目录下生成两个文件:id_ed25519(私钥,谁都不能看)和 id_ed25519.pub(公钥)。
3.2 把公钥放到服务器上
登录到你刚才创建的普通用户账户(已经用 sudo 权限了),然后手动创建 .ssh 目录并粘贴公钥:
mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys
将本地 id_ed25519.pub 文件里的完整内容复制粘贴进来,Ctrl+O 保存,Ctrl+X 退出。
设置正确权限:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
3.3 修改 SSH 配置文件
执行 sudo nano /etc/ssh/sshd_config,找到并修改以下参数(没有则直接添加):
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
保存后重启 SSH 服务生效:
sudo systemctl restart sshd
注意: 修改前请保持一个已登录的 root 终端不要关闭,避免配置错误导致自己无法登录。
测试正常后再关闭。
第4步:配置 UFW 防火墙仅开放必要端口
Debian 12 默认没有防火墙规则,我们需要手动限制。
先允许 SSH 连接(注意你之后如果改了 SSH 端口,这里要对应修改):
sudo ufw allow OpenSSH
如果以后你需要运行 Web 服务,还需要开放 HTTP 和 HTTPS:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
然后启用防火墙:
sudo ufw enable
检查规则:sudo ufw status verbose,应该看到类似输出:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
注意: 如果在操作 UFW 前你通过其他端口(比如云服务商控制台有安全组),需要先确认你的 SSH 端口没有被 UFW 拒绝。
最好保持至少两个终端会话以防万一。
第5步:验证安全加固效果
- 测试 SSH 密钥登录:在本地用
ssh yourname@服务器IP登录,如果不再提示输入密码,说明密钥认证成功。如果还要求密码,请检查sshd_config中PasswordAuthentication是否被注释掉或为 no。 - 测试 root 登录:故意用
ssh root@服务器IP,应该被拒绝(Permission denied (publickey).)。 - 检查防火墙:执行
sudo ufw status,确认规则已加载。尝试从外部扫描 22 端口应该能连通,其他非开放端口则被拒绝。 - 最后更新检查:
apt list --upgradable应无输出,说明系统已是最新。
常见问题与避坑指南
Q1:我修改 sshd_config 后重启 SSH 服务,自己断开了且无法再登录怎么办?
A:如果你有云服务商后台的 VNC(网页控制台),可以通过它登录排错。如果没有,建议在云服务商安全组中保留一个原始端口(比如 22)允许访问,或者直接先在防火墙里放行 IP。操作前绝对不要关闭最后一个 root 会话。
Q2:为什么我添加了 UFW 规则后依然连不上 SSH?
A:大概率是防火墙规则顺序问题,或者你放行的端口与你实际 SSH 端口不一致。执行 sudo ufw status numbered 查看规则编号,用 sudo ufw delete 编号 删除错误的规则。确认后用 sudo ufw reload 重载。
Q3:我可以在 Debian 12 上用 fail2ban 增强防御吗?
A:完全可以。本文给出的基础加固已经大幅提升安全性,但加上 fail2ban 能进一步阻止暴力破解。安装方法:sudo apt install fail2ban -y,默认配置即可生效。
Q4:为什么我禁用 root 远程登录后,普通用户 sudo 时需要输入密码?
A:这是正常的。如果想让特定命令免密,可以在 /etc/sudoers.d/ 下添加配置,但不建议新手修改,保持默认即可。
结尾
如果你正在配置 Debian 12服务器,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
这套基础安全配置可以挡住大多数恶意扫描,为后续搭建网站或应用服务打好地基。
坚持下去,你会发现运维其实没那么难。