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层面的访问控制,作为第二道关卡。
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让内存布局随机化增加利用难度。如果是生产服务器,建议在测试环境先验证,避免影响正常业务。
检查当前加载的内核模块,禁用不需要的:
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_nomerge和page_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 用,做完一项勾一项。服务器安全不靠运气,靠的是每一个细节都不放过。
