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

Debian 服务器上线前安全加固清单:SSH、防火墙、审计与自动更新配置全整理

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

Debian 安全加固方案|附配置文件

Debian 以稳定、可靠和安全著称,广泛用于服务器、云主机、容器宿主机、数据库节点、网关设备以及企业内部业务系统。但“系统默认安全”并不等于“部署后无需加固”。任何一台接入公网或承载关键业务的 Debian 服务器,都应该在上线前完成系统安全基线配置,并在运行过程中持续维护。

本文以 Debian 11 / Debian 12 为主要参考对象,整理一套较为通用的安全加固方案,内容涵盖系统更新、账户安全、SSH 加固、防火墙、权限控制、审计日志、自动更新、入侵防护、内核参数优化、服务最小化等方面,并附带可直接参考的配置文件示例。

说明:以下操作建议在测试环境验证后再应用到生产环境。修改 SSH、防火墙、PAM 等配置时,请务必保留一个已登录的 root 或 sudo 会话,避免误配置导致无法远程连接。


一、加固目标与基本原则

Debian 安全加固的核心目标包括:

  1. 减少攻击面
    关闭不必要服务,限制开放端口,仅保留业务必须组件。

  2. 强化身份认证
    禁止 root 远程登录,优先使用 SSH Key,限制弱口令和暴力破解。

  3. 最小权限原则
    普通用户只授予必要权限,避免长期使用 root 操作。

  4. 及时修复漏洞
    保持系统包和安全补丁更新,启用自动安全更新。

  5. 增强日志与审计能力
    保留关键操作记录,方便追踪异常行为。

  6. 网络访问控制
    通过防火墙、TCP 参数和 SSH 限制降低暴露风险。

  7. 持续监控与响应
    结合 Fail2ban、auditd、日志分析等手段发现异常。


二、系统初始化与更新

新安装 Debian 后,第一步应更新软件源并升级系统软件包。

sudo apt update
sudo apt upgrade -y
sudo apt full-upgrade -y
sudo apt autoremove --purge -y

如果服务器长期未维护,建议先查看当前系统版本:

cat /etc/debian_version
uname -a

安装常用基础工具:

sudo apt install -y vim curl wget gnupg ca-certificates lsb-release \
    apt-transport-https net-tools htop unzip sudo

三、配置安全软件源

Debian 官方安全源通常已经默认配置,但仍建议确认 /etc/apt/sources.list 文件内容是否正确。

Debian 12 示例配置

deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware
deb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware

更新索引:

sudo apt update

如果是 Debian 11,将 bookworm 替换为 bullseye,安全源格式通常如下:

deb http://deb.debian.org/debian bullseye main contrib non-free
deb http://deb.debian.org/debian bullseye-updates main contrib non-free
deb http://security.debian.org/debian-security bullseye-security main contrib non-free

四、创建普通管理员用户

不建议长期直接使用 root 登录服务器。可以创建一个普通用户,并加入 sudo 组。

adduser adminuser
usermod -aG sudo adminuser

验证用户是否具备 sudo 权限:

su - adminuser
sudo whoami

如果输出:

root

表示 sudo 权限正常。


五、SSH 安全加固

SSH 是 Linux 服务器最常见的远程入口,也是攻击者重点扫描目标。因此 SSH 加固非常重要。

1. 备份 SSH 配置

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

2. 推荐 SSH 配置文件

编辑:

sudo vim /etc/ssh/sshd_config

参考配置如下:

# /etc/ssh/sshd_config

Port 22222
Protocol 2

# 禁止 root 远程登录
PermitRootLogin no

# 禁止空密码登录
PermitEmptyPasswords no

# 建议关闭密码登录,仅使用密钥
PasswordAuthentication no
KbdInteractiveAuthentication no
ChallengeResponseAuthentication no

# 启用公钥认证
PubkeyAuthentication yes

# 限制登录用户
AllowUsers adminuser

# 登录超时设置
LoginGraceTime 30

# 最大认证尝试次数
MaxAuthTries 3

# 最大并发未认证连接数
MaxStartups 10:30:60

# 禁止 X11 转发
X11Forwarding no

# 禁止 TCP 转发,如无特殊需求建议关闭
AllowTcpForwarding no

# 禁止 Agent 转发,如无特殊需求建议关闭
AllowAgentForwarding no

# 禁止隧道
PermitTunnel no

# 不显示上次登录信息,可按需开启
PrintLastLog yes

# 客户端保活
ClientAliveInterval 300
ClientAliveCountMax 2

# 使用 PAM
UsePAM yes

# SFTP 子系统
Subsystem sftp /usr/lib/openssh/sftp-server

注意:如果你还没有配置 SSH Key,请不要直接关闭 PasswordAuthentication,否则可能导致无法登录。

3. 配置 SSH Key

在本地客户端生成密钥:

ssh-keygen -t ed25519 -C "adminuser@server"

将公钥复制到服务器:

ssh-copy-id -p 22 adminuser@your_server_ip

如果已经修改了 SSH 端口,则使用新端口:

ssh-copy-id -p 22222 adminuser@your_server_ip

确保服务器端权限正确:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

4. 检查 SSH 配置并重启服务

sudo sshd -t

如果无输出,说明配置语法正常。

重启 SSH:

sudo systemctl restart ssh

测试登录:

ssh -p 22222 adminuser@your_server_ip

六、密码策略加固

即便使用 SSH Key,也应为系统账户配置合理的密码策略,防止本地账户或其他服务被弱密码攻击。

安装密码质量检查模块:

sudo apt install -y libpam-pwquality

编辑配置文件:

sudo vim /etc/security/pwquality.conf

推荐配置:

# /etc/security/pwquality.conf

minlen = 12
minclass = 3
maxrepeat = 3
maxclassrepeat = 4
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
dictcheck = 1
usercheck = 1
enforcing = 1
retry = 3

参数说明:

参数 含义
minlen 密码最小长度
minclass 至少包含几类字符
dcredit 数字字符要求
ucredit 大写字母要求
lcredit 小写字母要求
ocredit 特殊字符要求
retry 修改密码重试次数

七、账户登录策略

1. 设置密码过期策略

编辑:

sudo vim /etc/login.defs

推荐配置:

# /etc/login.defs

PASS_MAX_DAYS   90
PASS_MIN_DAYS   1
PASS_WARN_AGE   7

UID_MIN         1000
UID_MAX         60000
UMASK           027

配置说明:

  • PASS_MAX_DAYS 90:密码最长使用 90 天。
  • PASS_MIN_DAYS 1:密码至少使用 1 天才能修改。
  • PASS_WARN_AGE 7:密码过期前 7 天提醒。
  • UMASK 027:新建文件默认权限更严格。

对已有用户应用策略:

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

查看用户密码策略:

sudo chage -l adminuser

2. 锁定无用账户

查看系统账户:

awk -F: '{print $1,$3,$7}' /etc/passwd

锁定不需要登录的账户:

sudo usermod -L username
sudo usermod -s /usr/sbin/nologin username

对于系统服务账户,通常应使用 /usr/sbin/nologin/bin/false


八、sudo 权限加固

避免直接修改 /etc/sudoers,推荐使用:

sudo visudo

或在 /etc/sudoers.d/ 下单独配置。

创建配置文件:

sudo visudo -f /etc/sudoers.d/adminuser

示例配置:

# /etc/sudoers.d/adminuser

adminuser ALL=(ALL:ALL) ALL

Defaults timestamp_timeout=5
Defaults passwd_tries=3
Defaults logfile="/var/log/sudo.log"
Defaults insults
Defaults requiretty

注意:requiretty 在某些自动化任务、Ansible、CI/CD 场景中可能导致 sudo 无法执行,可按需取消。

设置权限:

sudo chmod 440 /etc/sudoers.d/adminuser

九、配置防火墙

Debian 可以使用 nftablesufw。如果你希望配置简单,可以使用 UFW;如果追求更强灵活性,建议使用 nftables。


方案一:使用 UFW

安装 UFW:

sudo apt install -y ufw

默认拒绝入站,允许出站:

sudo ufw default deny incoming
sudo ufw default allow outgoing

允许 SSH 新端口:

sudo ufw allow 22222/tcp

如果服务器提供 HTTP/HTTPS 服务:

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

启用防火墙:

sudo ufw enable

查看状态:

sudo ufw status verbose

方案二:使用 nftables

安装:

sudo apt install -y nftables

启用服务:

sudo systemctl enable nftables

编辑配置文件:

sudo vim /etc/nftables.conf

参考配置如下:

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0;
        policy drop;

        # 允许本地回环
        iif "lo" accept

        # 丢弃非法连接
        ct state invalid drop

        # 允许已建立连接
        ct state established,related accept

        # 允许 ICMP,用于基础网络诊断
        ip protocol icmp accept
        ip6 nexthdr icmpv6 accept

        # 允许 SSH
        tcp dport 22222 ct state new accept

        # 如需 Web 服务,放行 HTTP/HTTPS
        tcp dport { 80, 443 } ct state new accept

        # 记录被拒绝流量,避免日志过多可按需关闭
        limit rate 5/minute log prefix "nftables denied: " flags all counter drop
    }

    chain forward {
        type filter hook forward priority 0;
        policy drop;
    }

    chain output {
        type filter hook output priority 0;
        policy accept;
    }
}

检查配置:

sudo nft -c -f /etc/nftables.conf

加载配置:

sudo systemctl restart nftables

查看规则:

sudo nft list ruleset

十、Fail2ban 防暴力破解

Fail2ban 可以监控日志,并在发现暴力破解行为时自动封禁攻击 IP。

安装:

sudo apt install -y fail2ban

创建本地配置文件:

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

推荐 SSH 配置:

[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
destemail = admin@example.com
sender = fail2ban@example.com
action = %(action_)s

[sshd]
enabled = true
port = 22222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 10m
bantime = 12h

启动服务:

sudo systemctl enable --now fail2ban

查看状态:

sudo fail2ban-client status
sudo fail2ban-client status sshd

手动解封 IP:

sudo fail2ban-client set sshd unbanip 1.2.3.4

十一、启用自动安全更新

Debian 可以使用 unattended-upgrades 自动安装安全更新。

安装:

sudo apt install -y unattended-upgrades apt-listchanges

启用:

sudo dpkg-reconfigure unattended-upgrades

编辑配置:

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

参考配置:

Unattended-Upgrade::Origins-Pattern {
        "origin=Debian,codename=${distro_codename},label=Debian-Security";
        "origin=Debian,codename=${distro_codename}-security,label=Debian-Security";
};

Unattended-Upgrade::Package-Blacklist {
};

Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Unattended-Upgrade::MinimalSteps "true";
Unattended-Upgrade::InstallOnShutdown "false";

Unattended-Upgrade::Mail "admin@example.com";
Unattended-Upgrade::MailReport "on-change";

Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-New-Unused-Dependencies "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";

Unattended-Upgrade::Automatic-Reboot "false";
Unattended-Upgrade::Automatic-Reboot-Time "03:30";

编辑自动更新周期:

sudo vim /etc/apt/apt.conf.d/20auto-upgrades

配置:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";

测试:

sudo unattended-upgrade --dry-run --debug

十二、内核网络参数加固

编辑 sysctl 配置:

sudo vim /etc/sysctl.d/99-security.conf

参考配置:

# /etc/sysctl.d/99-security.conf

# 禁止 IP 转发,非网关服务器建议关闭
net.ipv4.ip_forward = 0
net.ipv6.conf.all.forwarding = 0

# 防止源路由攻击
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0

# 禁止 ICMP 重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0

# 禁止发送 ICMP 重定向
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# 开启反向路径过滤
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# 忽略广播 ping
net.ipv4.icmp_echo_ignore_broadcasts = 1

# 忽略伪造错误响应
net.ipv4.icmp_ignore_bogus_error_responses = 1

# 开启 SYN Cookie
net.ipv4.tcp_syncookies = 1

# 记录可疑包
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1

# 限制 core dump 相关风险
fs.suid_dumpable = 0

# 增强 ASLR
kernel.randomize_va_space = 2

# 限制 dmesg 信息
kernel.dmesg_restrict = 1

# 限制 ptrace
kernel.yama.ptrace_scope = 1

应用配置:

sudo sysctl --system

十三、文件权限与 umask 加固

1. 设置默认 umask

编辑 /etc/profile

sudo vim /etc/profile

加入或确认:

umask 027

编辑 /etc/login.defs

UMASK 027

2. 检查关键文件权限

sudo chmod 644 /etc/passwd
sudo chmod 640 /etc/shadow
sudo chmod 644 /etc/group
sudo chmod 640 /etc/gshadow

确认属主:

sudo chown root:root /etc/passwd /etc/group
sudo chown root:shadow /etc/shadow /etc/gshadow

3. 查找 SUID/SGID 文件

sudo find / -perm -4000 -type f -exec ls -lh {} \; 2>/dev/null
sudo find / -perm -2000 -type f -exec ls -lh {} \; 2>/dev/null

对于不需要的 SUID 程序,应谨慎移除权限。例如:

sudo chmod u-s /path/to/file

十四、禁用不必要服务

查看正在运行的服务:

systemctl --type=service --state=running

查看监听端口:

sudo ss -tulnp

关闭不必要服务:

sudo systemctl disable --now service_name

常见需要关注的服务包括:

  • FTP 服务
  • Telnet 服务
  • 未使用的数据库服务
  • 未使用的 RPC 服务
  • 暴露在公网的管理面板
  • 默认安装但业务不需要的 Web 服务

如果没有特殊需求,不建议安装 Telnet、rsh、rlogin 等明文协议工具。


十五、日志与审计配置

1. 安装 auditd

sudo apt install -y auditd audispd-plugins
sudo systemctl enable --now auditd

编辑审计规则:

sudo vim /etc/audit/rules.d/hardening.rules

参考规则:

# /etc/audit/rules.d/hardening.rules

# 监控账户和权限文件
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/sudoers -p wa -k sudoers
-w /etc/sudoers.d/ -p wa -k sudoers

# 监控 SSH 配置
-w /etc/ssh/sshd_config -p wa -k sshd_config

# 监控主机名和网络配置
-w /etc/hosts -p wa -k hosts
-w /etc/network/ -p wa -k network

# 监控系统时间变更
-a always,exit -F arch=b64 -S adjtimex,settimeofday,clock_settime -k time-change
-a always,exit -F arch=b32 -S adjtimex,settimeofday,clock_settime -k time-change
-w /etc/localtime -p wa -k time-change

# 监控提权行为
-a always,exit -F arch=b64 -S execve -C uid!=euid -k privilege-escalation
-a always,exit -F arch=b32 -S execve -C uid!=euid -k privilege-escalation

# 监控模块加载
-w /sbin/insmod -p x -k kernel-modules
-w /sbin/rmmod -p x -k kernel-modules
-w /sbin/modprobe -p x -k kernel-modules

加载规则:

sudo augenrules --load
sudo systemctl restart auditd

查询审计日志:

sudo ausearch -k identity
sudo ausearch -k sshd_config

2. 配置日志轮转

Debian 默认使用 logrotate,建议确认 /etc/logrotate.conf

参考配置片段:

weekly
rotate 8
create
compress
delaycompress
missingok
notifempty

十六、系统登录提示与信息隐藏

减少系统泄露信息,有助于降低攻击者收集指纹的便利性。

编辑 SSH 登录前提示:

sudo vim /etc/issue.net

示例:

Authorized access only. All activities may be monitored and reported.

在 SSH 配置中启用:

Banner /etc/issue.net

避免暴露过多版本信息:

sudo chmod 644 /etc/issue
sudo chmod 644 /etc/issue.net

如无业务需要,不建议在登录欢迎信息中显示系统版本、内核版本、业务名称等敏感信息。


十七、安装恶意软件与 Rootkit 检测工具

可以安装 rkhunterchkrootkit 进行基础检查。

sudo apt install -y rkhunter chkrootkit

更新数据库:

sudo rkhunter --update
sudo rkhunter --propupd

执行检查:

sudo rkhunter --check
sudo chkrootkit

需要注意的是,这类工具只能作为辅助检测手段,不能替代入侵检测系统、日志分析和基线审计。


十八、时间同步安全配置

准确的系统时间对于日志审计、证书验证、定时任务和故障排查非常重要。

安装 chrony:

sudo apt install -y chrony

启动并设置开机自启:

sudo systemctl enable --now chrony

查看同步状态:

chronyc tracking
chronyc sources -v

配置文件:

sudo vim /etc/chrony/chrony.conf

示例:

pool pool.ntp.org iburst
makestep 1.0 3
rtcsync

十九、AppArmor 强制访问控制

Debian 默认通常支持 AppArmor。确认状态:

sudo apt install -y apparmor apparmor-utils
sudo systemctl enable --now apparmor
sudo aa-status

将某些服务配置为强制模式:

sudo aa-enforce /etc/apparmor.d/*

如果某些业务服务被 AppArmor 拦截,需要结合日志进行策略调整:

sudo journalctl -xe | grep apparmor

AppArmor 的价值在于:即使某个应用被攻击者利用,也可以限制其访问系统敏感路径,降低横向移动和提权风险。


二十、限制编译器和危险工具

生产服务器上如果不需要编译环境,应避免安装 gcc、make 等工具。攻击者入侵后经常会利用编译器编译提权工具或恶意程序。

检查是否安装:

dpkg -l | grep -E 'gcc|make|g\+\+'

如无业务需要可卸载:

sudo apt remove --purge -y gcc g++ make
sudo apt autoremove --purge -y

对于 ncnmaptcpdump 等工具,应根据运维需求谨慎保留,并限制普通用户使用。


二十一、配置资源限制

通过 /etc/security/limits.conf 限制用户资源,避免单个用户或进程耗尽系统资源。

编辑:

sudo vim /etc/security/limits.conf

示例配置:

# /etc/security/limits.conf

* soft core 0
* hard core 0

* soft nofile 4096
* hard nofile 65535

* soft nproc 2048
* hard nproc 4096

root soft nofile 65535
root hard nofile 65535

同时可编辑 systemd 默认限制:

sudo vim /etc/systemd/system.conf

示例:

DefaultLimitNOFILE=65535
DefaultLimitNPROC=4096

重新加载:

sudo systemctl daemon-reexec

二十二、挂载参数加固

对于 /tmp/var/tmp/home 等目录,可以按需添加 nodevnosuidnoexec 参数,降低恶意脚本和提权风险。

查看分区:

lsblk
df -h

编辑 /etc/fstab 前请先备份:

sudo cp /etc/fstab /etc/fstab.bak

示例配置:

# /etc/fstab 示例,仅供参考
UUID=xxxx-xxxx /tmp ext4 defaults,nodev,nosuid,noexec 0 2
UUID=yyyy-yyyy /var/tmp ext4 defaults,nodev,nosuid,noexec 0 2
UUID=zzzz-zzzz /home ext4 defaults,nodev,nosuid 0 2

测试挂载配置:

sudo mount -a

注意:noexec 可能影响某些安装脚本、临时执行程序、数据库或应用服务,请结合业务测试。


二十三、Debian 安全加固检查清单

上线前可以根据以下清单逐项确认:

检查项 建议状态
系统已更新 已完成
安全源配置 已确认
root SSH 登录 已禁止
SSH 密码登录 推荐关闭
SSH 默认端口 推荐修改
SSH 登录用户 已限制
防火墙 已启用
仅开放必要端口 已完成
Fail2ban 已启用
sudo 权限 已最小化
密码复杂度策略 已配置
密码过期策略 已配置
自动安全更新 已启用
auditd 审计 已启用
AppArmor 已启用
不必要服务 已关闭
sysctl 安全参数 已配置
日志轮转 已确认
时间同步 已启用
关键文件权限 已检查
SUID/SGID 文件 已审计
fstab 挂载参数 已评估

二十四、一键加固脚本示例

下面提供一个基础加固脚本示例,用于快速完成部分通用配置。请根据实际情况修改 SSH 端口、管理员用户名、放行端口等参数。

#!/bin/bash
set -e

ADMIN_USER="adminuser"
SSH_PORT="22222"

echo "[1/8] 更新系统..."
apt update
apt upgrade -y
apt autoremove --purge -y

echo "[2/8] 安装安全组件..."
apt install -y sudo vim curl ufw fail2ban unattended-upgrades \
    auditd audispd-plugins apparmor apparmor-utils libpam-pwquality chrony

echo "[3/8] 配置 SSH..."
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F-%H%M%S)

cat > /etc/ssh/sshd_config < /etc/fail2ban/jail.local < /etc/sysctl.d/99-security.conf < /etc/apt/apt.conf.d/20auto-upgrades <

执行前赋予权限:

chmod +x debian-hardening.sh
sudo ./debian-hardening.sh

二十五、总结

Debian 的安全加固不是一次性操作,而是一套持续维护流程。上线前应完成系统更新、SSH 加固、防火墙策略、权限收敛和日志审计;上线后则需要持续关注安全公告、漏洞修复、异常登录、服务暴露和配置漂移。

对于普通服务器,本文提供的配置已经可以覆盖大部分基础安全需求;对于高安全等级场景,还应进一步结合堡垒机、多因素认证、集中日志平台、漏洞扫描、主机入侵检测、配置基线检查、备份恢复演练和零信任访问控制等方案。

最终目标不是“配置越多越安全”,而是在业务可用性、运维便利性和安全风险之间取得平衡。只有经过测试、记录、审计和持续维护的安全加固方案,才是真正可靠的生产级方案。

目录结构
全文