上一篇 下一篇 分享链接 返回 返回顶部

Debian 服务器上线前必做的安全加固清单,小白也能照着做

发布人:慈云数据-客服中心 发布时间:10小时前 阅读量:4

Debian 安全加固方案|零基础可学

Debian 是一款稳定、可靠、广泛应用于服务器环境的 Linux 发行版。很多网站、数据库、网关、开发环境、容器平台都运行在 Debian 上。它默认已经具备较好的安全基础,但“默认安全”并不等于“足够安全”。一台刚安装完成的 Debian 服务器,如果没有经过合理加固,可能会面临弱口令、SSH 暴力破解、服务暴露、权限滥用、漏洞未修复、日志缺失等风险。

本文面向零基础用户,尽量用清晰、可操作的方式介绍 Debian 安全加固方案。你可以把它当作一份服务器上线前的安全检查清单,也可以作为日常运维的入门指南。


一、安全加固的基本原则

在开始具体操作之前,需要先理解几个基础原则。

1. 最小权限原则

每个用户、服务、程序只应该拥有完成工作所需的最低权限。
例如:

  • 普通用户不应长期使用 root 账号;
  • 网站服务不应该拥有系统管理权限;
  • 数据库端口不应对公网开放;
  • 不需要的软件包应当卸载。

权限越少,攻击者成功入侵后能造成的破坏就越小。

2. 最小暴露原则

服务器上开放的端口越多,被攻击的入口就越多。
因此应该做到:

  • 不需要的服务不开启;
  • 不需要公网访问的服务只监听本地地址;
  • 使用防火墙限制访问来源;
  • 只开放必要端口,如 SSH、HTTP、HTTPS。

3. 持续更新原则

安全不是一次性工作。系统和软件都会不断发现新漏洞,因此需要定期更新:

  • Debian 系统补丁;
  • OpenSSH、Nginx、Apache、MySQL 等服务;
  • Web 程序和依赖包;
  • 容器镜像。

4. 可审计原则

系统出了问题,必须能追踪发生了什么。日志、安全审计、登录记录、命令历史都是重要线索。没有日志,就很难判断服务器是否被攻击、攻击从哪里来、攻击者做了什么。


二、安装系统后的第一步:更新 Debian

服务器安装完成后,第一件事是更新软件源和系统补丁。

sudo apt update
sudo apt upgrade -y

如果有内核更新,建议重启服务器:

sudo reboot

如果你希望升级所有可升级的软件包,包括依赖变化较大的包,可以执行:

sudo apt full-upgrade -y

清理无用依赖:

sudo apt autoremove -y
sudo apt autoclean

保持系统更新是最基础、也是最有效的安全措施之一。很多入侵事件并不是因为攻击技术多么复杂,而是服务器长时间不打补丁,导致已知漏洞被轻松利用。


三、创建普通用户,避免直接使用 root

很多新手习惯直接使用 root 登录服务器,但这并不安全。一旦 root 密码被破解,攻击者就可以完全控制系统。

建议创建一个普通用户,并授予 sudo 权限。

adduser adminuser

将用户加入 sudo 组:

usermod -aG sudo adminuser

然后切换到该用户测试:

su - adminuser
sudo whoami

如果输出:

root

说明 sudo 权限正常。

以后日常操作尽量使用普通用户登录,需要管理员权限时再使用 sudo


四、加固 SSH 登录安全

SSH 是服务器最常见的远程管理入口,也是攻击者最常扫描和暴力破解的目标。因此 SSH 加固非常重要。

SSH 配置文件通常位于:

/etc/ssh/sshd_config

编辑配置:

sudo nano /etc/ssh/sshd_config

1. 禁止 root 远程登录

找到或添加以下配置:

PermitRootLogin no

这样即使攻击者知道 root 密码,也不能直接通过 SSH 登录 root。

2. 修改默认 SSH 端口

默认 SSH 端口是 22,容易被扫描。可以改成其他端口,例如 2222:

Port 2222

注意:修改端口后,防火墙也要放行新端口,否则可能无法连接服务器。

连接时需要指定端口:

ssh adminuser@服务器IP -p 2222

3. 禁用密码登录,使用密钥登录

密钥登录比密码登录安全得多。先在本地电脑生成密钥:

ssh-keygen -t ed25519

将公钥复制到服务器:

ssh-copy-id -p 2222 adminuser@服务器IP

确认密钥登录成功后,再关闭密码登录:

PasswordAuthentication no
PubkeyAuthentication yes

4. 限制允许登录的用户

如果服务器只允许某些用户通过 SSH 登录,可以添加:

AllowUsers adminuser

5. 重启 SSH 服务

修改配置后,先检查配置是否正确:

sudo sshd -t

如果没有输出错误,再重启 SSH:

sudo systemctl restart ssh

重要提醒:修改 SSH 配置时,不要立即关闭当前连接窗口。建议另开一个终端测试新连接,确认可以登录后再退出旧连接,避免把自己锁在服务器外面。


五、配置防火墙 UFW

Debian 可以使用 ufw 进行简单防火墙管理。安装 UFW:

sudo apt install ufw -y

默认拒绝所有入站连接,允许出站连接:

sudo ufw default deny incoming
sudo ufw default allow outgoing

放行 SSH 端口,例如前面改成了 2222:

sudo ufw allow 2222/tcp

如果服务器需要提供网站服务,放行 HTTP 和 HTTPS:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

启用防火墙:

sudo ufw enable

查看状态:

sudo ufw status verbose

如果你只允许固定 IP 登录 SSH,例如公司公网 IP 为 1.2.3.4,可以这样写:

sudo ufw allow from 1.2.3.4 to any port 2222 proto tcp

这样可以大幅减少 SSH 被暴力破解的风险。


六、关闭不必要的服务和端口

很多安全问题来自不必要的服务暴露。先查看当前监听端口:

sudo ss -tulnp

你会看到类似内容:

LISTEN 0 128 0.0.0.0:22
LISTEN 0 128 0.0.0.0:80
LISTEN 0 128 127.0.0.1:3306

常见端口含义:

端口 服务 说明
22 SSH 远程登录
80 HTTP 网站访问
443 HTTPS 加密网站访问
3306 MySQL/MariaDB 数据库
5432 PostgreSQL 数据库
6379 Redis 缓存数据库

如果发现某个服务不需要,应停止并禁用:

sudo systemctl stop 服务名
sudo systemctl disable 服务名

例如禁用 Apache:

sudo systemctl stop apache2
sudo systemctl disable apache2

如果确认软件包不再需要,可以卸载:

sudo apt remove apache2 -y

七、设置自动安全更新

对于服务器来说,及时安装安全补丁非常重要。Debian 可以使用 unattended-upgrades 自动安装安全更新。

安装:

sudo apt install unattended-upgrades apt-listchanges -y

启用自动更新配置:

sudo dpkg-reconfigure unattended-upgrades

选择 Yes

也可以查看配置文件:

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

一般情况下,默认配置已经足够。自动安全更新能降低因遗忘打补丁带来的风险,但对于生产服务器,仍建议配合监控和定期人工检查,避免更新后服务异常而无人发现。


八、配置 Fail2ban 防止暴力破解

Fail2ban 可以监控日志,当发现某个 IP 多次登录失败时,自动封禁该 IP。

安装:

sudo apt install fail2ban -y

创建本地配置文件:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

编辑配置:

sudo nano /etc/fail2ban/jail.local

找到 [sshd] 部分,设置:

[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600

含义如下:

  • enabled = true:启用 SSH 防护;
  • port = 2222:SSH 端口;
  • maxretry = 5:10 分钟内失败 5 次就封禁;
  • bantime = 3600:封禁 1 小时;
  • findtime = 600:统计时间窗口为 600 秒。

重启 Fail2ban:

sudo systemctl restart fail2ban
sudo systemctl enable fail2ban

查看状态:

sudo fail2ban-client status
sudo fail2ban-client status sshd

Fail2ban 对 SSH 暴力破解非常有效,但它不能替代密钥登录和防火墙限制。最佳实践是多层防护一起使用。


九、加强密码策略

如果服务器仍需要使用密码登录或存在多个本地用户,应设置强密码策略。

1. 安装密码质量检查模块

sudo apt install libpam-pwquality -y

编辑配置:

sudo nano /etc/security/pwquality.conf

可以设置:

minlen = 12
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1

含义:

  • minlen = 12:密码至少 12 位;
  • dcredit = -1:至少包含 1 个数字;
  • ucredit = -1:至少包含 1 个大写字母;
  • lcredit = -1:至少包含 1 个小写字母;
  • ocredit = -1:至少包含 1 个特殊字符。

2. 设置密码有效期

编辑:

sudo nano /etc/login.defs

可设置:

PASS_MAX_DAYS   90
PASS_MIN_DAYS   1
PASS_WARN_AGE   7

含义:

  • 密码最长使用 90 天;
  • 修改密码后至少 1 天才能再次修改;
  • 过期前 7 天提醒。

对已有用户也可以使用:

sudo chage -M 90 -m 1 -W 7 adminuser

对于个人服务器,如果已经使用 SSH 密钥登录并禁用密码登录,密码复杂度策略的重要性会降低,但仍建议保持强密码。


十、保护 sudo 权限

sudo 是普通用户临时获得管理员权限的工具。它很方便,但也要谨慎配置。

查看 sudo 用户:

getent group sudo

移除不需要 sudo 权限的用户:

sudo deluser 用户名 sudo

编辑 sudo 配置应使用:

sudo visudo

不要直接编辑 /etc/sudoers,否则语法错误可能导致 sudo 无法使用。

你可以设置 sudo 需要输入密码,避免任何普通用户免密执行管理员命令。检查是否存在类似配置:

NOPASSWD: ALL

如果不需要,建议删除或改为需要密码。

也可以让 sudo 记录更详细的日志,便于审计用户执行了哪些命令。


十一、文件权限与关键目录保护

Linux 安全很大程度上依赖文件权限。权限配置错误可能导致敏感文件泄露或被篡改。

1. 检查重要文件权限

ls -l /etc/passwd /etc/shadow /etc/sudoers

通常应类似:

-rw-r--r-- 1 root root /etc/passwd
-rw------- 1 root shadow /etc/shadow
-r--r----- 1 root root /etc/sudoers

如果权限异常,需要修复:

sudo chmod 644 /etc/passwd
sudo chmod 640 /etc/shadow
sudo chmod 440 /etc/sudoers

2. 查找全局可写文件

全局可写文件可能被任何用户修改,存在风险:

sudo find / -xdev -type f -perm -0002

查找全局可写目录:

sudo find / -xdev -type d -perm -0002

/tmp 这种目录本来就允许写入,但应设置粘滞位:

ls -ld /tmp

应看到类似:

drwxrwxrwt

如果没有 t,执行:

sudo chmod 1777 /tmp

十二、日志审计与安全排查

日志是发现攻击和排查问题的重要依据。Debian 常见日志包括:

日志文件 用途
/var/log/auth.log 登录、sudo、SSH 认证记录
/var/log/syslog 系统运行日志
/var/log/daemon.log 后台服务日志
/var/log/nginx/ Nginx 日志
/var/log/apache2/ Apache 日志

查看最近登录失败记录:

sudo grep "Failed password" /var/log/auth.log

查看 sudo 使用记录:

sudo grep "sudo" /var/log/auth.log

查看最近登录用户:

last

查看失败登录:

lastb

如果 lastb 命令不可用,可以安装:

sudo apt install util-linux -y

建议定期检查日志,尤其是 SSH 登录失败次数、异常 IP、未知用户、频繁 sudo 操作等。


十三、安装安全审计工具 Lynis

Lynis 是一款常用的 Linux 安全审计工具,可以扫描系统配置并给出加固建议。

安装:

sudo apt install lynis -y

执行扫描:

sudo lynis audit system

扫描完成后,它会给出建议,例如:

  • 是否启用防火墙;
  • SSH 是否允许 root 登录;
  • 是否存在弱配置;
  • 是否缺少安全工具;
  • 文件权限是否合理。

Lynis 的建议不一定全部都要照做,但非常适合用来做基线检查。


十四、数据库服务安全建议

如果 Debian 上运行 MySQL、MariaDB、PostgreSQL、Redis 等服务,应特别注意数据库安全。

1. 不要让数据库直接暴露公网

数据库通常只应本机访问,监听地址建议设置为:

127.0.0.1

例如 MySQL/MariaDB 配置中:

bind-address = 127.0.0.1

如果确实需要远程访问,应通过:

  • VPN;
  • 内网;
  • SSH 隧道;
  • 防火墙限制固定 IP;

不要直接向全网开放 3306、5432、6379 等端口。

2. 设置强密码和独立账号

不要让业务程序使用数据库 root 账号。应为每个应用创建独立数据库用户,并只授予必要权限。

例如 MySQL:

CREATE USER 'appuser'@'localhost' IDENTIFIED BY '强密码';
GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;

3. Redis 不应裸奔

Redis 如果没有密码且暴露公网,风险极高。建议:

  • 只监听 127.0.0.1
  • 设置访问密码;
  • 关闭危险命令或重命名;
  • 使用防火墙限制访问。

十五、Web 服务安全建议

如果服务器运行网站,应关注 Nginx、Apache、PHP、Node.js 等服务的安全。

1. 使用 HTTPS

建议使用 Let’s Encrypt 免费证书。安装 Certbot:

sudo apt install certbot python3-certbot-nginx -y

为 Nginx 申请证书:

sudo certbot --nginx

HTTPS 可以保护用户数据传输,避免密码、Cookie 等被窃听。

2. 隐藏版本信息

Nginx 可以在配置中加入:

server_tokens off;

Apache 可以配置:

ServerTokens Prod
ServerSignature Off

隐藏版本信息不能真正阻止攻击,但可以减少攻击者获取指纹信息的便利。

3. 限制上传目录执行权限

如果网站允许用户上传文件,上传目录不应执行脚本。例如用户上传了伪装图片的 PHP 文件,如果上传目录能执行 PHP,就可能导致服务器被入侵。

4. 定期更新 Web 程序

无论是 WordPress、Discuz、Typecho,还是自研系统,都应及时更新。很多服务器被入侵,不是 Debian 本身的问题,而是 Web 应用存在漏洞。


十六、备份与恢复策略

安全加固不仅是防攻击,也包括在出问题后能够恢复。没有备份的服务器,即使安全做得再好,也存在重大风险。

建议至少备份:

  • 网站文件;
  • 数据库;
  • 配置文件,如 /etc
  • SSL 证书;
  • 业务上传文件;
  • 重要日志。

备份原则:

  1. 定期备份:例如每天备份数据库,每周备份全量文件;
  2. 异地备份:不要只备份在同一台服务器;
  3. 加密备份:避免备份文件泄露;
  4. 测试恢复:只会备份不会恢复,等于没有备份;
  5. 保留多个版本:防止误删或被勒索软件加密后同步到备份。

可以使用 rsyncborgbackuprestic、对象存储等方式实现备份。


十七、基础安全检查清单

下面是一份适合新手使用的 Debian 上线前安全检查清单:

  • [ ] 系统已执行 apt update && apt upgrade
  • [ ] 已创建普通用户并配置 sudo
  • [ ] 已禁止 root SSH 登录
  • [ ] 已使用 SSH 密钥登录
  • [ ] 已禁用 SSH 密码登录
  • [ ] 已修改默认 SSH 端口或限制来源 IP
  • [ ] 已启用 UFW 防火墙
  • [ ] 只开放必要端口
  • [ ] 已安装并配置 Fail2ban
  • [ ] 已关闭不必要服务
  • [ ] 已设置自动安全更新
  • [ ] 已检查 sudo 用户
  • [ ] 已检查关键文件权限
  • [ ] 已开启 HTTPS
  • [ ] 数据库未暴露公网
  • [ ] 已配置日志检查
  • [ ] 已建立备份方案
  • [ ] 已测试备份恢复
  • [ ] 已使用 Lynis 做安全审计

十八、常用命令汇总

查看系统版本:

cat /etc/debian_version

查看内核版本:

uname -a

查看监听端口:

sudo ss -tulnp

查看运行服务:

systemctl list-units --type=service --state=running

查看防火墙状态:

sudo ufw status verbose

查看 SSH 服务状态:

sudo systemctl status ssh

查看登录记录:

last

查看认证日志:

sudo tail -n 100 /var/log/auth.log

查看失败登录:

sudo grep "Failed password" /var/log/auth.log

查看系统更新:

sudo apt update
sudo apt list --upgradable

执行安全审计:

sudo lynis audit system

十九、新手容易犯的错误

1. 直接关闭 SSH 密码登录但没有测试密钥

这是非常常见的问题。正确做法是:先配置密钥,确认新终端能登录,再关闭密码登录。

2. 修改 SSH 端口后忘记放行防火墙

如果防火墙没有放行新端口,重启 SSH 后可能无法远程连接。

3. 数据库端口暴露公网

很多 Redis、MySQL 入侵都来自公网暴露。数据库服务除非有明确需求,否则不要对公网开放。

4. 所有服务都使用 root 运行

业务服务应使用独立低权限用户运行。不要让网站程序、脚本长期以 root 身份执行。

5. 没有备份或从不测试恢复

备份不是放在那里就行,必须定期测试恢复流程。真正事故发生时,能恢复才有意义。


二十、总结

Debian 安全加固并不神秘,核心思路可以概括为四句话:

  1. 减少入口:只开放必要端口,关闭不用服务;
  2. 强化认证:禁用 root 登录,使用 SSH 密钥,配置强密码;
  3. 及时更新:安装安全补丁,启用自动更新;
  4. 可查可恢复:保留日志,配置审计,做好备份。

对于零基础用户来说,不需要一开始就追求复杂的企业级安全体系。你可以先完成最关键的几项:更新系统、创建普通用户、加固 SSH、启用防火墙、安装 Fail2ban、关闭不必要端口、做好备份。只要这些基础措施落实到位,服务器安全性就会明显提升。

安全是一个持续过程,而不是一次性配置。随着业务增长,你还可以继续学习入侵检测、漏洞扫描、WAF、权限隔离、容器安全、集中日志、零信任访问等更高级的安全方案。对于大多数 Debian 服务器而言,扎实做好基础加固,已经能抵御大量常见攻击。

目录结构
全文