Debian安全强化不是一个单一操作,而是从系统安装那一刻起就要贯穿始终的完整流程。最小化安装砍掉不必要的软件包、关闭多余服务、配置严格的内核参数、启用SELinux/AppArmor、做好网络层防护——每一步都在减少攻击面。这篇指南直接给你一套可落地的操作清单,从安装到内核调优,照着做就行。

一、最小化安装:安全的第一道防线

Debian在安装时选择"Standard System Utilities"或者手动选择软件包,只装核心组件。不要选桌面环境、不要选打印服务、不要选任何你用不到的东西。装得越少,漏洞越少。安装完成后,用以下命令查看当前安装的软件包数量:

dpkg --get-selections | grep -v deinstall | wc -l

如果数字超过500,说明你装了太多东西。用aptitude或apt手动卸载不需要的包。特别注意这些高危服务:exim4、apache2(不用就删)、samba、nfs-common、rpcbind。每一个不用的服务都是一个潜在入口。

二、用户与权限管理:别给root留后门

创建一个普通用户用于日常操作,禁止root直接SSH登录。编辑SSH配置文件:

sudo nano /etc/ssh/sshd_config

确保以下参数已设置:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 30

改完后重启SSH服务:sudo systemctl restart sshd。密码认证关掉,只允许密钥登录。同时配置sudo权限时,不要把用户加入wheel组就完事,编辑/etc/sudoers限制具体命令。用visudo命令编辑,别直接用vim,防止语法错误锁死系统。

三、防火墙与网络层加固

Debian默认不启用防火墙,必须手动配置。推荐用nftables(Debian 10+默认),比iptables更现代、语法更清晰。先安装:

sudo apt install nftables

创建基础规则文件/etc/nftables.conf

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        ct state established,related accept
        iif "lo" accept
        ip protocol icmp accept
        tcp dport 22 accept
        ct state invalid drop
    }
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

启用nftables:sudo systemctl enable nftables && sudo systemctl start nftables。策略是默认丢弃所有入站流量,只放行你明确需要的端口。SSH端口建议改成非22端口,降低被扫描的概率。同时在/etc/hosts.allow/etc/hosts.deny中做TCP Wrappers层面的访问控制,作为第二道关卡。

四、AppArmor与强制访问控制

Debian默认启用AppArmor,但很多人装完就不管了。检查状态:

sudo aa-status

确保关键服务都有profile加载。对于不需要的服务,直接设为complain模式甚至禁用。比如你不跑MySQL,就把MySQL的profile禁掉。AppArmor的核心价值在于:即使程序被攻破,它也只能在限定的文件和网络范围内活动,无法横向移动。建议对所有对外暴露的服务(nginx、postfix、dovecot等)都确认profile处于enforce状态。

五、内核参数调优:从sysctl开始

内核参数是安全加固的深水区。编辑/etc/sysctl.conf(或/etc/sysctl.d/99-security.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.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

# 启用SYN Cookie防SYN Flood
net.ipv4.tcp_syncookies = 1

# 禁用IP转发(除非你做路由器)
net.ipv4.ip_forward = 0
net.ipv6.conf.all.forwarding = 0

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

# 限制dmesg访问
kernel.dmesg_restrict = 1

# ASLR强化
kernel.randomize_va_space = 2

# 限制core dump
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P
fs.suid_dumpable = 0

执行sudo sysctl -p生效。这些参数不是随便堆的,每一条都有对应的攻击场景。rp_filter防IP伪造,syncookies防DDoS,dmesg_restrict防信息泄露,ASLR让内存布局随机化增加利用难度。如果是生产服务器,建议在测试环境先验证,避免影响正常业务。

六、内核模块与GRUB加固

检查当前加载的内核模块,禁用不需要的:

lsmod

/etc/modprobe.d/blacklist.conf黑名单掉危险模块,比如:

blacklist dccp
blacklist sctp
blacklist rds
blacklist tipc
blacklist cramfs
blacklist freevxfs
blacklist jffs2
blacklist hfs
blacklist hfsplus

GRUB引导也要加固。编辑/etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="quiet audit=1"
GRUB_CMDLINE_LINUX="slab_nomerge page_alloc.shuffle=1"

audit=1启用内核审计子系统,slab_nomergepage_alloc.shuffle=1进一步增加内核内存利用难度。更新GRUB:sudo update-grub。如果服务器是UEFI启动,确认Secure Boot已开启,防止引导链被篡改。

七、日志审计与入侵检测

光加固不监控等于裸奔。安装auditd和aide:

sudo apt install auditd aide
sudo aideinit

配置auditd规则监控关键文件:

-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/sudoers -p wa -k scope
-w /var/log/auth.log -p wa -k log_tamper

这些规则监控身份文件和权限文件的写入和属性变更,一旦被篡改立即告警。aide做文件完整性校验,每天跑一次cron对比基线。日志不要只存本地,用rsyslog转发到独立的日志服务器,防止攻击者删本地日志毁灭痕迹。

八、自动更新与漏洞管理

Debian的安全更新源是deb http://security.debian.org/debian-security bookworm-security main。确保/etc/apt/sources.list里有这一行。配置自动安全更新:

sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

选择"yes"启用自动安装安全更新。但要注意,自动更新可能导致兼容性问题,生产环境建议先在staging测试。同时定期用debsecan扫描已知漏洞:

sudo apt install debsecan
debsecan --suite bookworm --format detail

这会列出所有已知CVE和对应的修复状态,帮你快速定位还没打补丁的软件。

九、进阶:内核锁定与安全模块

如果你的安全等级要求很高,考虑启用内核锁定模式(Lockdown)。在GRUB中加入:

GRUB_CMDLINE_LINUX="lockdown=confidentiality"

这会限制内核模块加载、禁止kexec、禁止访问某些内核接口。适合高安全场景的服务器。另外可以考虑安装grsecurity补丁(虽然现在需要商业授权),或者使用Debian的hardened内核包linux-image-amd64-hardened,它默认启用更多安全特性。

十、总结:安全是持续过程不是一次性操作

Debian安全强化没有终点。最小化安装是起点,内核调优是纵深,日志审计是眼睛,自动更新是免疫系统。每一步都不复杂,但要全部做到位需要耐心和纪律。建议每季度做一次全面审计,用nmap从外部扫自己的端口,用lynis做本地安全扫描:

sudo apt install lynis
sudo lynis audit system

把这篇指南当 checklist 用,做完一项勾一项。服务器安全不靠运气,靠的是每一个细节都不放过。