Debian 12 最小化安装完成后,系统只包含最核心的软件包,但这并不意味着它处于安全状态。默认设置往往面向通用兼容性,而非严格的安全基线。我们需要立即介入,构建一套主动防御体系。这套体系的核心思路是:缩减攻击面、强制访问控制、审计一切行为、限制横向移动。下面直接进入具体操作。

确认最小化安装的软件包集并清理残留

最小化安装通常只勾选了“标准系统工具”。登录后第一件事,是审计当前所有已安装的包。运行

dpkg -l | grep ^ii | awk '{print $2}'
查看列表。你会发现一些在服务器场景下完全多余的包,比如
wamerican
拼写词典、
man-db
的某些本地化内容、蓝牙相关库
libbluetooth3
等。这些包不仅占用磁盘,还可能引入不必要的库文件,增加潜在漏洞风险。执行
apt purge --auto-remove bluetooth bluez firmware-linux-free
清理非必要固件和硬件支持包。对于
exim4-base
这类默认安装的邮件传输代理,如果服务器不承担邮件收发角色,应果断移除:
apt purge --auto-remove exim4-*
。清理后运行
apt autoremove && apt autoclean
保持系统洁净。

构建最小权限的内核参数防线

内核参数是系统安全的第一道闸门。编辑

/etc/sysctl.d/99-hardening.conf
,不要直接修改
/etc/sysctl.conf
,便于版本管理和回滚。以下参数针对服务器场景进行了严格限制。首先是网络层防护,开启反向路径过滤,防止IP欺骗:
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.default.rp_filter=1
。禁止ICMP重定向接受和发送:
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.send_redirects=0
。对于IPv6,如果完全不用,直接在内核层面禁用比在服务层面禁用更彻底:
net.ipv6.conf.all.disable_ipv6=1
。针对TCP SYN洪水攻击,减小SYN_RECV状态队列和重试次数:
net.ipv4.tcp_max_syn_backlog=2048
net.ipv4.tcp_synack_retries=2
。核心转储可能泄露内存中的敏感信息,必须关闭:
fs.suid_dumpable=0
kernel.core_pattern=|/bin/false
。最后启用ASLR地址空间布局随机化的最高级别:
kernel.randomize_va_space=2
。保存后执行
sysctl -p /etc/sysctl.d/99-hardening.conf
使其立即生效。

SSH服务加固:摒弃密码认证

最小化安装默认启用了SSH服务,但允许密码登录是最大的风险敞口。不要仅仅改个端口,那只是障眼法。编辑

/etc/ssh/sshd_config
,进行以下硬核修改。第一,彻底禁止root密码登录,但保留密钥登录通道:
PermitRootLogin prohibit-password
。第二,关闭所有用户的密码认证,强制使用Ed25519或RSA 4096位密钥:
PasswordAuthentication no
ChallengeResponseAuthentication no
。第三,关闭不安全的SSH协议版本1和GSSAPI认证以减少攻击面:
Protocol 2
GSSAPIAuthentication no
。第四,限制允许登录的用户,创建一个专用的管理账户而非直接使用root:
AllowUsers adminuser
。第五,设置空闲超时断开连接,防止会话劫持:
ClientAliveInterval 300
ClientAliveCountMax 0
。在重启服务前,务必先用
ssh-keygen -t ed25519
生成密钥对,并用
ssh-copy-id adminuser@server_ip
将公钥部署到服务器,确认密钥登录无问题后再执行
systemctl restart sshd
。一旦失误,你将失去访问权限。

构建基于iptables-nft的主机防火墙

Debian 12默认使用nftables框架,但iptables-nft兼容层依然高效且易于管理。最小化安装后防火墙规则默认为空,即全部放行。我们需要建立白名单机制,只放行必要的服务端口。创建一个规则脚本

/etc/iptables/rules.v4
,设置默认策略为丢弃所有入站和转发流量,放行出站:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
。然后放行回环接口:
iptables -A INPUT -i lo -j ACCEPT
。放行已建立和相关联的连接:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
。最后只开放SSH端口,并限制新建连接的速率和并发数,有效抵御暴力破解:
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
。安装
iptables-persistent
包让规则在重启后自动加载。对于IPv6,如果未禁用,需在
/etc/iptables/rules.v6
中设置同等严格的规则。

配置时间同步与审计子系统

准确的时间是安全事件调查和TOTP双因素认证的基础。最小化安装通常已包含systemd-timesyncd,但需确认其配置。编辑

/etc/systemd/timesyncd.conf
,指定可信的NTP服务器,取消注释并修改为:
NTP=ntp.aliyun.com ntp.tencent.com
FallbackNTP=ntp.ntsc.ac.cn
。重启服务
systemctl restart systemd-timesyncd
并运行
timedatectl set-ntp true
。接下来部署auditd审计系统,这是入侵检测的关键。安装
apt install auditd -y
。重点监控敏感文件和系统调用。编辑
/etc/audit/rules.d/audit.rules
,添加规则监控账户文件修改:
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
。监控sudo配置和日志删除行为:
-w /etc/sudoers -p wa -k sudoers
-w /var/log/audit/ -p wa -k auditlog
。记录所有用户执行命令的syscall,使用
-a always,exit -F arch=b64 -S execve -k exec
。启用
auditd
服务并设为开机自启。日志会记录在
/var/log/audit/audit.log
,后续可用
ausearch
工具进行分析。

强制访问控制:AppArmor策略精调

Debian默认启用AppArmor,但最小化安装后许多配置文件处于“complain”抱怨模式,只记录不阻止。我们需要将所有策略强制为“enforce”模式。首先安装补充配置文件和工具:

apt install apparmor-profiles apparmor-utils -y
。查看当前所有配置文件的模式:
aa-status
。对于显示为complain的进程,如
/usr/sbin/named
/usr/sbin/mysqld
,使用
aa-enforce /path/to/bin
将其切换为强制模式。如果运行了自定义服务,需为其编写AppArmor配置文件。使用
aa-genprof /path/to/service
启动分析模式,在另一个终端模拟服务的所有正常操作,然后回到分析终端按S扫描日志,AppArmor会辅助生成基础规则集,最后按F完成。这能有效限制即使服务被攻破后恶意进程的文件读写、网络访问和进程执行能力。

用户权限与文件系统加固

最小化安装后,除了root,通常只有一个普通用户。检查

/etc/passwd
中是否存在无需登录的系统账户其shell设置为
/bin/bash
/bin/sh
,将其改为
/usr/sbin/nologin
。锁定这些账户:
passwd -l accountname
。对于文件系统挂载选项,编辑
/etc/fstab
为分区添加安全标志。对于
/tmp
分区,添加
nosuid,nodev,noexec
选项,防止攻击者在临时目录放置和执行恶意脚本。例如:
tmpfs /tmp tmpfs defaults,nosuid,nodev,noexec 0 0
。对于
/var
/home
分区,至少添加
nosuid
选项。如果服务器已上线运行,修改
fstab
后执行
mount -o remount /tmp
使其立即生效。设置全局文件创建掩码,编辑
/etc/profile
/etc/bash.bashrc
,添加
umask 027
,确保新建文件默认权限为750,目录为640,阻止其他用户随意读取。

日志管理与入侵检测联动

系统日志分散在

/var/log/
下,最小化安装后rsyslog已运行,但需要配置日志轮转防止磁盘爆满。编辑
/etc/logrotate.d/rsyslog
,将关键日志如
/var/log/auth.log
/var/log/syslog
的保留周期从默认的4周延长至12周,并启用压缩:
rotate 12
compress
delaycompress
。安装
aide
构建文件完整性检测数据库:
apt install aide -y
。初始化基准数据库:
aideinit
,并将生成的
/var/lib/aide/aide.db.new.gz
重命名为
/var/lib/aide/aide.db.gz
。配置cron定时任务,每天凌晨执行
aide --check
并将报告发送到指定邮箱或记录到日志。任何关键系统二进制文件(如
/bin/ls
/usr/sbin/sshd
)的篡改都会被aide检测到,这是发现rootkit的最有效手段之一。

自动化安全更新与无人值守升级

保持软件包最新是抵御已知漏洞最基础的工作。Debian提供了

unattended-upgrades
工具。安装并启用:
apt install unattended-upgrades apt-listchanges -y
。编辑
/etc/apt/apt.conf.d/50unattended-upgrades
,重点配置只自动安装安全更新,避免功能性更新引入不兼容问题。确保以下行取消注释:
"origin=Debian,codename=${distro_codename},label=Debian-Security";
。配置自动清理:
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-New-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "false";
。建议将自动重启设为false,改为手动重启内核相关服务或使用
needrestart
工具检查。最后启用定时任务:编辑
/etc/apt/apt.conf.d/20auto-upgrades
,设置
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
。系统将每天自动拉取安全源并静默安装补丁。

这套基线设计完成后,服务器在操作系统层面已具备抵御常见自动化攻击和内部提权的强健性。安全不是一次性的配置,后续所有运维操作都应在此基线上叠加,任何变更都需经过审计规则和文件完整性检查的验证。